在互联网大厂的面试室里,面试官严肃地看着面前的求职者,而求职者王铁牛则有些紧张地坐在对面。
第一轮: 面试官:“首先,说说 Java 的核心知识有哪些?” 王铁牛:“嗯……有面向对象编程的概念,比如封装、继承、多态等。” 面试官:“很好,那你再说说 Java 中的基本数据类型有哪些?” 王铁牛:“有 byte、short、int、long、float、double、char、boolean 这些。” 面试官:“不错,那 Java 中的引用数据类型有哪些呢?” 王铁牛:“有类、接口、数组等。”
第二轮: 面试官:“接着,讲讲 JUC 中的常用类有哪些?” 王铁牛:“有 CountDownLatch、CyclicBarrier 等。” 面试官:“那你能说说它们的主要作用吗?” 王铁牛:“CountDownLatch 主要用于线程的同步,它可以让一个或多个线程等待其他线程完成某个操作后再继续执行;CyclicBarrier 则用于让一组线程到达某个屏障点后再一起继续执行。” 面试官:“非常好,那 JVM 中的垃圾回收机制是怎样的呢?” 王铁牛:“呃……这个……不太清楚。”
第三轮: 面试官:“那我们来谈谈多线程吧,多线程有哪些实现方式?” 王铁牛:“有继承 Thread 类和实现 Runnable 接口这两种方式。” 面试官:“那它们有什么区别呢?” 王铁牛:“继承 Thread 类比较简单,但是如果要继承多个类就不行了;实现 Runnable 接口则更加灵活,可以避免单继承的限制。” 面试官:“很好,那线程池有什么作用呢?” 王铁牛:“线程池可以提高线程的复用率,减少创建和销毁线程的开销,还可以控制线程的数量,避免线程过多导致系统性能下降。”
面试官:“今天的面试就到这里,你可以回去等通知了。”
答案:
- Java 的核心知识:面向对象编程的封装、继承、多态等概念,基本数据类型有 byte、short、int、long、float、double、char、boolean,引用数据类型有类、接口、数组等。
- JUC 中的常用类及作用:CountDownLatch 用于线程同步,让一个或多个线程等待其他线程完成操作后再继续执行;CyclicBarrier 用于让一组线程到达屏障点后一起继续执行。
- JVM 中的垃圾回收机制:JVM 会自动回收不再被引用的对象所占用的内存。垃圾回收器会定期扫描堆内存,找出可回收的对象,并将其回收。常见的垃圾回收算法有标记-清除算法、复制算法、标记-整理算法等。
- 多线程的实现方式及区别:继承 Thread 类比较简单,但不能继承多个类;实现 Runnable 接口更加灵活,可以避免单继承的限制。
- 线程池的作用:提高线程的复用率,减少创建和销毁线程的开销,控制线程数量,避免线程过多导致系统性能下降。线程池可以根据系统的负载情况自动调整线程数量,提高系统的吞吐量和响应速度。