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

83 阅读3分钟

面试官:请简要介绍一下 Java 核心知识中面向对象的三大特性。

王铁牛:嗯……这个我知道,是封装、继承和多态。

面试官:不错,回答正确。那你能具体讲讲封装的作用吗?

王铁牛:封装就是把类的属性和方法隐藏起来,只对外提供公共的访问方式,这样可以提高代码的安全性和可维护性。

面试官:很好。接下来问你几个关于 JUC 的问题。在并发编程中,什么是 CAS?

王铁牛:呃……CAS 就是比较并交换,通过比较内存值和预期值是否相等,相等则更新为新值。

面试官:那 CAS 有什么缺点呢?

王铁牛:嗯……这个我不太清楚,好像是会出现 ABA 问题吧。

面试官:好,进入第二轮。说说 JVM 的内存结构。

王铁牛:JVM 内存结构包括堆、栈、方法区……还有本地方法栈和程序计数器。

面试官:那堆内存又分为哪几个区域?

王铁牛:分为新生代、老年代和永久代。

面试官:永久代现在还存在吗?

王铁牛:呃……好像在 Java 8 之后改成元空间了。

面试官:进入第三轮。多线程中,如何实现线程间的通信?

王铁牛:可以使用 wait()、notify() 和 notifyAll() 方法。

面试官:那这些方法在哪个对象上调用?

王铁牛:在锁对象上调用。

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

答案

  • 面向对象三大特性
    • 封装:将类的属性和方法隐藏起来,通过公共方法对外提供访问,提高代码安全性和可维护性。比如一个类中有一些敏感数据,通过封装可以防止外部随意访问和修改。
    • 继承:子类继承父类的属性和方法,实现代码复用。例如一个父类有一些通用的方法,子类可以直接继承使用,避免重复编写。
    • 多态:同一行为具有多种表现形式。比如定义一个父类类型的变量,可以指向其子类的对象,调用方法时会根据实际对象类型执行相应的方法。
  • JUC 中的 CAS
    • 比较并交换:通过比较内存值和预期值是否相等,相等则更新为新值。它是实现原子操作的一种方式。
    • 缺点:会出现 ABA 问题。比如一个值从 A 变成 B 又变回 A,CAS 操作可能会认为没有变化,但实际上数据已经被修改过了。
  • JVM 内存结构
    • 包括堆、栈、方法区、本地方法栈和程序计数器。
    • 堆内存
      • 分为新生代、老年代和永久代(Java 8 之后为元空间)。
      • 新生代又分为 Eden 区和两个 Survivor 区。对象创建时一般在 Eden 区,经过几次垃圾回收后如果还存活就会进入 Survivor 区,多次后进入老年代。
  • 多线程通信
    • 使用 wait()、notify() 和 notifyAll() 方法。
    • 这些方法在锁对象上调用。比如有一个共享资源,多个线程通过获取同一个锁对象,在该锁对象上调用 wait() 方法使线程等待,调用 notify() 或 notifyAll() 方法唤醒等待的线程。