《互联网大厂Java面试:核心知识大考验》

36 阅读4分钟

面试官:请简要介绍一下 Java 核心知识中最关键的几个点。

王铁牛:嗯……Java 核心知识啊,像面向对象、多态、继承这些吧。

面试官:不错,回答得挺简洁。那说说多线程在实际业务场景中的一个应用。

王铁牛:比如说电商秒杀系统,多线程可以同时处理多个用户的请求,提高系统的并发处理能力。

面试官:很好,理解得挺到位。接下来问你几个关于 JUC 的问题,什么是 CAS?

王铁牛:这个……就是比较并交换嘛,好像是用来实现原子操作的。

面试官:嗯,大概意思对了。那说说 AQS 框架的原理。

王铁牛:这个……不太清楚,我就知道它是个同步器框架。

面试官:行吧,那再问你几个 JVM 的问题。类加载的过程分为哪几个阶段?

王铁牛:加载、验证、准备、解析、初始化。

面试官:回答正确。那说说 JVM 内存模型中堆的结构。

王铁牛:有新生代、老年代,新生代又分为 Eden 区、From Survivor 区和 To Survivor 区。

面试官:不错。最后一个问题,垃圾回收算法有哪些?

王铁牛:什么复制算法、标记清除算法、标记整理算法。

面试官:好,第一轮面试就到这里,回去等通知吧。

答案

  • Java 核心知识:Java 核心知识包含面向对象、多态、继承等。面向对象是一种编程范式,将数据和操作数据的方法封装在一起,提高代码的可维护性和可扩展性。多态是指同一个行为具有多个不同表现形式或形态的能力,通过方法重写和接口实现来达成。继承则是子类继承父类的属性和方法,实现代码复用。
  • 多线程在电商秒杀系统中的应用:电商秒杀系统中,多线程可同时处理多个用户请求,提高并发处理能力。当大量用户同时发起秒杀请求时,单线程处理会导致请求堆积,响应缓慢。多线程能让多个请求并行处理,快速响应用户,提升用户体验,同时保证系统的稳定性和可靠性。
  • CAS(比较并交换):CAS 是一种无锁的原子操作,包含三个操作数:内存值 V、预期值 A 和新值 B。当且仅当预期值 A 和内存值 V 相等时,将内存值 V 修改为新值 B,否则不做任何操作。它是实现原子操作的重要基础,常用于实现锁和并发控制。
  • 类加载的过程:类加载分为加载、验证、准备、解析、初始化五个阶段。加载是将类的字节码文件读入内存,并创建一个 Class 对象。验证阶段对字节码进行合法性校验。准备阶段为类的静态变量分配内存并设置初始值。解析阶段将符号引用转换为直接引用。初始化阶段执行类的静态代码块,为静态变量赋值。
  • JVM 内存模型中堆的结构:堆分为新生代、老年代。新生代又分为 Eden 区、From Survivor 区和 To Survivor 区。新创建的对象首先存放在 Eden 区,当 Eden 区满时,触发 Minor GC,存活的对象被复制到 From Survivor 区。From Survivor 区满后,再次触发 Minor GC,存活对象被复制到 To Survivor 区或晋升到老年代。老年代存放生命周期较长的对象。
  • 垃圾回收算法
    • 复制算法:将内存分为两块相等的区域,每次只使用其中一块,当这块区域满了,就将存活对象复制到另一块区域,然后清空原来的区域。优点是实现简单,运行效率高;缺点是浪费一半内存空间。适用于新生代。
    • 标记清除算法:先标记出所有需要回收的对象,然后统一回收掉这些对象所占用的空间。缺点是会产生大量不连续的内存碎片。
    • 标记整理算法:先标记出存活对象,然后将存活对象向一端移动,最后清理掉边界以外的内存。解决了标记清除算法产生内存碎片的问题,适用于老年代。