硬核java八股文专栏

在 Java 面试中,八股文是每个面试官都会关注的点,尤其是基础语法、集合框架、并发机制、JVM 原理等。今天,我就给大家整理一篇 硬核 Java 八股文专栏,帮你从零到精通,让你面试时胸有成竹。

全网最全面的java八股文:https://www.nowcoder.com/creation/manager/columnDetail/0n9XOd

一、基础语法与核心概念

1️⃣ 数据类型与包装类

  • Java 基本类型:intlongfloatdoublebooleanchar
  • 包装类:IntegerLongDouble 等,注意 自动装箱与拆箱 的性能问题。
  • 小技巧:Integer 缓存 -128~127,超出范围每次 new 对象。
Integer a = 100, b = 100;
System.out.println(a == b); // true
Integer x = 200, y = 200;
System.out.println(x == y); // false

2️⃣ 字符串与字符串池

  • String 不可变,底层用 char[] 保存。
  • StringBuilder / StringBuffer 可变,性能更高。
  • 字符串池:intern() 方法可以手动加入池中。
String s1 = "hello";
String s2 = new String("hello").intern();
System.out.println(s1 == s2); // true

3️⃣ 面向对象基础

  • 继承:单继承,多层父子关系。
  • 多态:编译时看引用类型,运行时看实际对象。
  • 接口:Java 8 之后支持默认方法。
  • 抽象类 vs 接口:抽象类有构造函数,可有成员变量,接口更灵活。

二、集合框架

1️⃣ List、Set、Map

  • ArrayList:数组实现,查询快,增删慢。
  • LinkedList:链表实现,增删快,查询慢。
  • HashSet:基于 HashMap,无序、不重复。
  • TreeSet:红黑树,自动排序。
  • HashMap vs ConcurrentHashMap:线程安全差异。

2️⃣ HashMap 原理

  • 数组 + 链表(Java8 之后链表长度到 8 会转红黑树)。
  • hash 值 + 桶索引。
  • 扩容:容量达到 loadFactor 时,数组扩容 2 倍。
Map<String, String> map = new HashMap<>();
map.put("a", "apple");
map.put("b", "banana");

3️⃣ 面试考点

  • HashMap key 可以为 null,但 Hashtable 不行。
  • ConcurrentHashMap 分段锁,线程安全,性能高。
  • LinkedHashMap 保留插入顺序或访问顺序。

三、并发编程

1️⃣ 线程基础

  • Thread 类与 Runnable 接口。
  • Callable + Future 可获取返回值。
  • 线程池Executors 提供 FixedThreadPoolCachedThreadPoolScheduledThreadPool

2️⃣ 锁机制

  • synchronized:对象锁/类锁,阻塞。
  • ReentrantLock:可重入,可尝试锁。
  • ReadWriteLock:读写分离,提高并发效率。

3️⃣ volatile、CAS、原子类

  • volatile 保证可见性,不保证原子性。
  • AtomicIntegerAtomicLong 基于 CAS。
  • CountDownLatchCyclicBarrierSemaphore 用于线程协作。

四、JVM 与内存管理

1️⃣ JVM 内存结构

  • 方法区:存储类信息、常量。
  • :存储对象,分年轻代、老年代。
  • :方法调用,存局部变量。
  • PC 寄存器:线程指令执行位置。
  • 本地方法栈:Native 方法使用。

2️⃣ 垃圾回收

  • GC 分代收集:Minor GC、Full GC。
  • 常用算法:标记-清除复制算法标记-整理
  • JVM 参数:-Xmx 最大堆-Xms 初始堆-XX:+UseG1GC 启用 G1 收集器

五、面试真题精选

  1. 为什么 HashMap 可以存储 null key?
  2. volatile 和 synchronized 的区别?
  3. HashMap 扩容时线程不安全的原因?
  4. Java 中 String 为什么是不可变的?
  5. Thread 和 Runnable 的区别?

六、总结

Java 八股文看似枯燥,但掌握它等于掌握了面试的 “底层密码”。通过系统梳理基础语法、集合、并发、JVM,你就能在面试中胸有成竹。

💡 小建议

  • 每个知识点配合代码实践。
  • 理论结合面试常问问题,能用自己的语言解释原理。
  • 看源码理解细节,例如 HashMapConcurrentHashMapArrayList 等。

全部评论
欢迎讨论
点赞 回复 分享
发布于 09-06 08:20 江西

相关推荐

白金之星世界:javase,mysql,redis,juc,jvm八股一般都需要背吧,前四个我觉得比较重要,jvm可能你选一些重点背就行了
点赞 评论 收藏
分享
评论
3
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务