没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论














�
Java 面试基础知识
面向对象
封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,内部
细节对外部调用透明,外部调用无需修改或者关心内部实现
继承:继承基类的方法,并做出自己的改变和/或扩展,子类共性的方法或者属性直
接使用父类的,而不需要自己再定义,只需扩展自己个性化的
多态:基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同
�
JDK、JRE、JVM 之间的区别
JDK:Java Develpment Kit java 开发工具
JRE:Java Runtime Environment java 运行时环境
JVM:java Virtual Machine java 虚拟机
�
==和 equals 方法之前的区别
==:对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址
equals:object 中默认也是采用==比较,通常会重写
�
hashCode()与 equals()之间的关系
HashCode 介绍:hashCode() 的作用是获取哈希码,也称为散列码;它实际上是
返回一个 int 整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。

hashCode() 定义在 JDK 的 Object.java 中,Java 中的任何类都包含有 hashCode()
函数。
散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应
的“值”。这其中就利用到了散列码!(可以快速找到所需要的对象)
如果两个对象相等,则 hashcode 一定也是相同的
两个对象相等,对两个对象分别调用 equals 方法都返回 true
两个对象有相同的 hashcode 值,它们也不一定是相等的
因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖
hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),
则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)
�
final 关键字的作用是什么?
修饰类:表示类不可被继承
修饰方法:表示方法不可被子类覆盖,但是可以重载
修饰变量:表示变量一旦被赋值就不可以更改它的值。
�
修饰成员变量:
如果 final 修饰的是类变量,只能在静态初始化块中指定初始值或者声明该类变量时
指定初始值。
如果 final 修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执
行初始值。

修饰局部变量:系统不会为局部变量进行初始化,局部变量必须由程序员显示初始
化。因此使用 final 修饰局部变量时,即可以在定义时指定默认值(后面的代码不能
对变量再赋值),也可以不指定默认值,而在后面的代码中对 final 变量赋初值(仅
一次)
�
修饰基本类型数据和引用类型数据:
如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;
如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。但是
引用的值是可变的。
�
String、StringBuffer、StringBuilder 的区别
String 是不可变的,如果尝试去修改,会新生成一个字符串对象,StringBuffer 和
StringBuilder 是可变的
StringBuffer 是线程安全的,StringBuilder 是线程不安全的,所以在单线程环境下
StringBuilder 效率会更高
�
重载和重写的区别
重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,
方法返回值和访问修饰符可以不同,发生在编译时。
重写:发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,
抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问
修饰符为 private 则子类就不能重写该方法。

�
接口和抽象类的区别
抽象类可以存在普通成员函数,而接口中只能存在 public abstract 方法。
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static
final 类型的。
抽象类只能继承一个,接口可以实现多个。
�
List 和 Set 的区别
List:有序,按对象进入的顺序保存对象,可重复,允许多个 Null 元素对象,可以
使用 Iterator 取出所有元素,在逐一遍历,还可以使用 get(int index)获取指定下
标的元素
Set:无序,不可重复,最多允许有一个 Null 元素对象,取元素时只能用 Iterator
接口取得所有元素,在逐一遍历各个元素
�
ArrayList 和 LinkedList 区别
首先,他们的底层数据结构不同,ArrayList 底层是基于数组实现的,LinkedList 底
层是基于链表实现的
由于底层数据结构不同,他们所适用的场景也不同,ArrayList 更适合随机查找,
LinkedList 更适合删除和添加,查询、添加、删除的时间复杂度不同
另外 ArrayList 和 LinkedList 都实现了 List 接口,但是 LinkedList 还额外实现了
Deque 接口,所以 LinkedList 还可以当做队列来使用

�
HashMap 和 HashTable 有什么区别?其底层实现是什么?
�
区别 :
HashMap 方法没有 synchronized 修饰,线程非安全,HashTable 线程安全;
HashMap 允许 key 和 value 为 null,而 HashTable 不允许
�
底层实现
计算 key 的 hash 值,二次 hash 然后对数组长度取模,对应到数组下标
如果没有产生 hash 冲突(下标位置没有元素),则直接创建 Node 存入数组
如果产生 hash 冲突,先进行 equal 比较,相同则取代该元素,不同,则判断链表
高度插入链表,链表高度达到 8,并且数组长度到 64 则转变为红黑树,长度低于 6
则将红黑树转回链表
key 为 null,存在下标 0 的位置
�
谈谈 ConcurrentHashMap 的扩容机制
�
1.7 版本
1. 1.7 版本的 ConcurrentHashMap 是基于 Segment 分段实现的
2. 每个 Segment 相对于一个小型的 HashMap
3. 每个 Segment 内部会进行扩容,和 HashMap 的扩容逻辑类似
4. 先生成新的数组,然后转移元素到新数组中
剩余111页未读,继续阅读
资源评论

- 点墨楼2023-07-27喜欢这本宝典的排版,简洁明了,帮助我更快地找到需要的内容。
- 战神哥2023-07-27本宝典对Java面试流程进行了系统整理,是一本很好用的备考工具。
- 光与火花2023-07-27其他类似书籍相比,这本宝典的语言更朴实自然,让人感觉更亲切可信。
- 洪蛋蛋2023-07-27容详实,问题和答案都很全面,是一本不可多得的Java面试宝典。
- kdbshi2023-07-27本《2023Java面试题简答速记宝典》对于准备Java面试的人来说真是太实用了!

山海妖柳
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
