硬核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 等。

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

相关推荐

bg&nbsp;9本硕,某团暑期实习。记录一下80分钟:5分钟1.&nbsp;自我介绍35分钟2.&nbsp;了解实习经历3.&nbsp;针对实习项目,问数据层次怎么分层4.&nbsp;数据分层的作用5.&nbsp;针对具体实习项目,说明业务逻辑6.&nbsp;说明实习项目的“订单量”这个指标从源头到产出的ETL过程7.&nbsp;针对实习项目,复盘后最大的难点是什么8.&nbsp;复盘之后有什么收获9.&nbsp;你刚才说复盘收获是处理小文件,那么spark怎么处理小文件的?10.&nbsp;处理小文件有哪些方法,举例子11.&nbsp;hive冷热分离的方法12.&nbsp;你刚才提到了组里有做ec存储,你了解ec存储吗13.&nbsp;暑期实习有什么感受,转正了吗15分钟14.&nbsp;了解spark的semi&nbsp;join吗,他是干嘛的15.&nbsp;了解spark的AQE,这是什么16.&nbsp;你刚才讲AQE提到了广播机制,这个在spark中很重要,讲讲广播过程呢17.&nbsp;了解网络吗?讲讲三次握手和四次握手区别。18.&nbsp;了解数据结构吗?讲讲O(nlog&nbsp;n)的不稳定排序算法。20分钟两个编程题:Q1.求开方:给定num=5.79,error=1e-8,求x使得abs(x^2-num)&lt;error19.&nbsp;先讲讲思路吧,有什么思路:二分O(log&nbsp;n)20.&nbsp;刚开始没做出来,面试官提示了下细节21.&nbsp;后面二分法做出来了,面试官说那如果num小于1有什么变化呢22.&nbsp;面试官问还有什么方法吗:牛顿下山法23.&nbsp;公式写上去,但是面试官不关心公式,关心原理:会无限逼近24.&nbsp;如果是三次方四次方,牛顿下山怎么用呢,公式会变的Q2.1TB的int类型数据怎么在512MB的虚拟机中求中位数25.&nbsp;已经70分钟了,没时间了,没要求写代码,只要讲思路:外部排序,归并思想26.&nbsp;面试官问还有什么方法吗:没想到了,但是后面搜了下有分布式排序,mapreduce排序等,估计想让我回答spark相关的,但是真不知道。5分钟反问27.&nbsp;反问业务、作息、感受:都是套话28.&nbsp;反问可以提升的点、我的不足:涉及到应聘者的评价,不能说。29.&nbsp;谢谢面试官勒,吃饭去咯。
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
评论
3
3
分享

创作者周榜

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