Java八股文

光影博客收录的Java八股文高频题与参考解析,搜索时也会写成Java面试题、Java八股、JVM面试。下面是站内已有题目,可继续在面试题里按这个词刷。

在面试题中打开共 14 道,本页展示 12 道

  1. JVM 内存模型与垃圾回收机制?

    Java · 中等

    堆分为年轻代(Eden + S0/S1)和老年代,方法区/元空间存类信息。GC 算法:标记清除、标记整理、复制。G1/ZGC 降低停顿时间。

  2. HashMap 的底层实现原理?

    Java · 中等

    JDK8 用数组+链表+红黑树,容量为 2 的幂次,负载因子 0.75 触发扩容。hash 高16位异或低16位减少冲突,链表长度 > 8 且容量 >= 64 转红黑树。

  3. synchronized 与 Lock 有什么区别?

    Java · 中等

    synchronized 是 JVM 内置锁(偏向锁→轻量级→重量级升级),不可中断。Lock(ReentrantLock)支持可中断、超时、公平锁、多 Condition。

  4. Spring IOC 与 AOP 原理?

    Java · 中等

    IOC 通过容器管理对象生命周期和依赖注入(构造器/Setter/字段注入),解耦组件。AOP 基于动态代理(JDK/CGLIB),实现日志、事务、权限等横切关注点。

  5. Java 中的多态是什么?

    Java · 简单

    多态分为编译时(方法重载)和运行时(方法重写 + 向上转型)。父类引用指向子类对象,运行时根据实际类型调用对应方法(虚方法表)。

  6. Comparable和Comparator接口是干什么的?列出它们的区别。

    Java · 简单

    Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明已经存在的对象小于,等于,大于输入对象。 Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入…

  7. ArrayList和LinkedList有什么区别?

    Java · 简单

    ArrayList和LinkedList都实现了List接口,他们有以下的不同点: ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。 相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添…

  8. HashMap和Hashtable有什么区别?

    Java · 简单

    HashMap和Hashtable都实现了Map接口,因此很多特性非常相似。但是,他们有以下不同点: HashMap允许键和值是null,而Hashtable不允许键或者值是null。 Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。 HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(…

  9. Java中的HashMap的工作原理是什么?

    Java · 简单

    Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。HashMap的一些重要的特性是它的容量(capacity),负载因子(load factor…

  10. 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?

    Java · 简单

    一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的结构进行了修改(增加、删除),则会抛出Concurrent Modification Exception。 原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果结构发生变化,就会改变modCount的值。每当迭代器使用hashNext()/next()遍历下一个元素之前,都会检测modC…

  11. Java集合类框架的最佳实践有哪些?

    Java · 简单

    根据应用的需要正确选择要使用的集合的类型对性能非常重要,比如:假如元素的数量是固定的,而且能事先知道,我们就应该用Array而不是ArrayList。 有些集合类允许指定初始容量。因此,如果我们能估计出存储的元素的数目,我们可以设置初始容量来避免重新计算hash值或者是扩容。 为了类型安全,可读性和健壮性的原因总是要使用泛型。同时,使用泛型还可以避免运行时的ClassCastException。 使用JDK提供的不变类(immutabl…

  12. 如何权衡是使用无序的数组还是有序的数组?

    Java · 简单

    有序数组最大的好处在于查找的时间复杂度是O(log n),而无序数组是O(n)。有序数组的缺点是插入操作的时间复杂度是O(n),因为值大的元素需要往后移动来给新元素腾位置。相反,无序数组的插入时间复杂度是常量O(1)。 纠错 收藏

主页
分类
资源
合作
关于