Java面试题
分享实战面试题,详细解答
DNCS高级工程师
真正的神秘人
展开
-
java9之后,String为何从char类型数组转成byte类型数组
1节省jvm的内存空间,因为之前是一个char类型的数组,我们无论储存什么,都会要占用一个字节,那么如果使用byte的数组,如果我们使用汉字,那么就是3-4byte,那么对于空间来说,减少了浪费2更方便io的操作...原创 2022-02-26 17:22:56 · 532 阅读 · 0 评论 -
mybatis自增主键回填
1、通用方式获取再添加SQL之前添加代码,使用select @@identity2、mybatis自带的获取自增的值直接写到添加的语句上方3、还有就是我们一般人考虑的话,因为新添加一个数据的时候,那么可以不可以以上两种方法我都不用,我先添加数据,添加完毕之后,我们在查出最大的那个id,同样也可以获取那个id,这个是不行的,因为我们在我们自己电脑上添加的时候,是一条一条数据添加的,没有外部因素干预,但在实际开发中,我们一定要注意并发问题,只要是并发,这种情况就造成信息 不准确。......原创 2021-12-24 15:49:43 · 806 阅读 · 0 评论 -
什么是同步和异步?
同步:同步调用请求发送后,调用者将一直等待被调用者返回消息,若无响应则一直等待无法进行后续操作,直至有消息返回异步:异步调用请求发送后,调用者无需等待消息返回便可进行其他操作,消息会以通知的方式告知调用者...原创 2021-08-23 13:24:42 · 191 阅读 · 0 评论 -
JUC主要包含哪些功能?
Executor:线程池Atomic:原子操作类Lock:锁Tools:信号量工具类并发集合:提供了线程安全的集合类。原创 2021-08-21 15:49:56 · 208 阅读 · 0 评论 -
线程的生命周期
线程的生命周期包含5种状态:新建状态、就绪状态、运行状态、阻塞状态、死亡状态那什么是生命周期呢?就那人来说,人的生命周期有:出生、幼年期、少年期、青年期、中年期、老年期,直到死亡,这就是人的生命周期;线程新建的时候,调用start()方法让线程处于就绪状态,这个时候,线程就会抢夺cpu的执行权,如果抢到了,就会运行下去,如果没抢到则一直处于就绪状态运行状态下,我们可以使用一些方法让线程暂时处于阻塞的状态,除了线程阻塞外,还有就是直接失去cpu的执行权,或者说是让出cpu执行权交给其他线程运行,而本来原创 2021-08-21 15:10:47 · 60 阅读 · 0 评论 -
CopyOnWriteArraySet
CopyOnWriteArraySet则是通过"动态数组(CopyOnWriteArrayList)"实现的两者都是使用了相同的Java装饰模式,底层是相同的,但在效果上有所不同,CopyOnWriteArrayList是使用动态数组,而CopyOnWriteArraySet是在动态数组的基础上实现的集合...原创 2021-08-20 09:52:12 · 112 阅读 · 0 评论 -
wait()和sleep()区别(常见面试题)
1.所属类不同wait() 是Object中方法sleep()是Thread的方法。2.唤醒机制不同。wait() 没有设置最大时间情况下,必须等待notify() | notifyAll()。sleep是到指定时间自动唤醒。3.锁机制不同。wait()释放锁sleep()只是让线程休眠,不会释放锁。4.使用位置不同。wait()必须持有对象锁sleep()可以使用在任意地方。5.方法类型不同。wait()是实例方法sleep()是静态方法。...原创 2021-08-18 09:57:02 · 408 阅读 · 0 评论 -
Java程序员简历模板,内含个人专业技能和项目经验介绍
此内容仅供参考,严禁直接空手套白狼另外这里面的内容也仅仅是想帮助你们写自己的简历,如果直接照搬的话,后果自负这里写目录标题简历模板(一)简历模板(二)简历模板(三)简历模板(一)简历模板(二)简历模板(三)......原创 2021-08-17 21:01:47 · 2977 阅读 · 0 评论 -
Map使用put进行数据的添加,对哈希表的三步添加的步骤
计算key的哈希码,和value无关;特别注意:第一步计算哈希码时,不仅调用了key的hashCode(),还进行了更复杂处理,目的是尽量保证不同的key尽量得到不同的哈希码第二步根据哈希码计算存储位置时,使用了位运算提高效率。同时也要求主数组长度必须是2的幂)第三步添加Entry时添加到链表的第一个位置,而不是链表末尾第三步添加Entry是发现了相同的key已经存在,就使用新的value替代旧的value,并且返回旧的value...原创 2021-08-09 23:27:01 · 419 阅读 · 0 评论 -
Map集合类型总结,常见Map集合有哪些?他们的优缺点分别是什么?
首先,先讲一下什么是Map:Map它属于一种独特的集合结构,他储存的时候有一对的键值对,键值对相互映射,可以根据key键(唯一)可以找到value值那我们之前学习过的数组、集合等,他们最多也是通过内容或者下标来获取相应的值,但是Map可以通过我们指定的内容获取其他内容,比如,我们输入我们的身份证号,然后就可以通过这一串身份证号码调取我们的个人信息;或者输入我们的学号 ,可以通过这个学号,查到我们是哪个班级的;比如:代码演示:/*** map测试** */public class Ma原创 2021-08-09 20:20:10 · 1748 阅读 · 0 评论 -
接口与抽象类的相同点和不同点
相同:1 都可以有抽象方法,都要求子类/实现类重写,都是对子类/实现类的要求2 都不可以被实例化不同:1 抽象类是被普通类继承,接口是被普通类实现,只有接口能继承接口2 一个子类只能继承一个抽象类,一个实现类可以同时实现多个接口3 抽象类中可以定义普通的成员变量,接口中只能定义共有的静态常量4 抽象类中可以有非抽象方法,接口中只能是抽象方法(JDK1.7)(在JDK1.8之后,接口中可以定义非抽象方法)5 抽象类中可以有构造方法,接口中没有构造方法的...原创 2021-08-07 08:49:38 · 1518 阅读 · 0 评论 -
什么是排序?
排序(sorting)的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。排序又分为内排序和外排序:一类是整个排序过程在内存储器中进行,称为内部排序;另一类是由于待排序元素数量太大,以至于内存储器无法容纳全部数据,排序需要借助外部存储设备才能完成,这类排序称为外部排序。本章介绍的排序方法都属于内部排序内排序又分为比较排序和非比较排序大部分排序都是需要通过比较首先来判断大小,作为排序的依据的。但是也有例外的,比如计数排序、基数排序,不需要进行比较。效率可以做到更高,但是会有一些限原创 2021-08-05 19:56:16 · 1001 阅读 · 0 评论 -
Java使用冒泡排序对数据进行排序,带注释
public class Test { //创建主方法 public static void main(String[] args) { //创建变量,用来暂时接收数组内的数字 int num = 0; //创建数组 int[] arr={12,99,23,45,11,8,58,89}; //写出程序需要从头到尾需要运行几趟 for (int i = 0; i <arr.length-1;原创 2021-08-05 09:47:49 · 447 阅读 · 0 评论 -
Java中变量的初始化以及变量的初始化顺序,已经加入个人的简单理解
本文章转载于博客园,作者:乐派chy,原文链接:点击跳转原文一、变量与构造器的初始化顺序我们知道一个类中具有类变量、类方法和构造器,当我们初始化创建一个类对象时,其初始化的顺序为:先初始化类变量,再执行构造器方法。代码验证:public class Demo01 { public int a1 = 1; public String a2 = "initiaied!"; public Demo01() { System.out.println(a1); .转载 2021-08-04 19:10:23 · 286 阅读 · 0 评论 -
Integer的自动装箱底层缓存原理
Integer的父类是Number类;底层就是封装了一个int类型的value常量,可以通过构造方法、intValue()等赋值取值public static java.lang.Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)];原创 2021-08-03 19:40:30 · 229 阅读 · 0 评论 -
什么是重载?重载的定义是什么?如何判断方法是否重载?最详细解答博文
一、什么是重载:方法的重载是为了提高代码的可读性以及可复写性,我们可以通过填写不同的参数调用不同的方法。二、重载的定义:必须在同一个类中方法名必须相同参数列表必须不同(就是方法内小括号里面的参数)参数列表不同点:参数的个数不同参数的数据类型不同多个不同的数据类型不同(比如第一个参数和第二个都是int类型,那这个时候就无法进行判断)以上不同,都代表方法重载了同时需要注意的地方:方法的重载和修饰符无关(只管判断方法名和参数列表是否相同就可以了)方法的重载和有无返回值无关(只原创 2021-08-02 00:41:24 · 10278 阅读 · 1 评论 -
面向对象的超级面试题,涉及封装多态继承等多方面考核,异常烧脑,90%的面试官必问题目,不会这个的,只是会搬砖的码农
虽然总是我先头也不回说走就走,但有时候也会觉得,自己才是每段已经结束的关系里,被放弃的那个人。废话少说上代码:public class Test1 { static class A{ public String run(D obj) { return ("A & D"); } public String run(A obj){ return ("A & A"); .原创 2021-07-30 20:32:20 · 202 阅读 · 0 评论 -
Java面试题,成员变量以及成员方法的调用,类和对象的关系,程序详细流程,类和对象栈堆的详细解答
一共有两个类,一个是Test类,主要是声明成员变量的属性和创建成员方法的第二个是TestA,主要是用来调取成员变量,并为变量进行赋值,以及方法的调用,同时也会详细讲解类和变量的栈堆内存的流程图首先看两个类/*** 创建一个类,创建一个成员变量和成员方法** */public class Test { //创建成员变量属性 String name; String type; int age; //创建成员方法 public void.原创 2021-07-26 20:01:23 · 142 阅读 · 0 评论 -
Java的成员变量(全局变量)和局部变量以及构造方法的使用以及详解
首先市面上有很多人把成员变量叫做全局变量,虽然全局变量名字听起来好记,但是在真正的编程 世界中,根本就没有全局变量,我们要统一叫成员变量成员变量在类中定义,而局部变量在方法中定义为什么要使用构造方法?为了使项目具有一定的安全性,所以在创建变量时,会使用私有的修饰,但这个就可能会导致我们使用普通的对象调取不到我们的属性值构造方法的作用,就是为了初始化赋值的操作那么构造方法时有两个要求,1、构造方法名必须与类名一摸一样2、创造构造方法之后,使用new方法进行调用然后还有其他需要注意的地方:.原创 2021-07-26 16:16:57 · 535 阅读 · 0 评论