以下是面试过程:
第一轮: 面试官:请你简述一下 Java 的基本数据类型有哪些? 王铁牛:有 byte、short、int、long、float、double、char、boolean 这八种。 面试官:很好,那你说说这些数据类型的默认值分别是什么? 王铁牛:byte 的默认值是 0,short 的默认值是 0,int 的默认值是 0,long 的默认值是 0L,float 的默认值是 0.0f,double 的默认值是 0.0d,char 的默认值是 '\u0000',boolean 的默认值是 false。 面试官:不错,那再说说 Java 中的面向对象三大特性是什么? 王铁牛:封装、继承、多态。 面试官:很准确,回答得很好,继续加油。
第二轮: 面试官:请解释一下 JUC 中的常用并发工具类有哪些? 王铁牛:有 CountDownLatch、CyclicBarrier、Semaphore 等。 面试官:那你能说说 CountDownLatch 的用法吗? 王铁牛:CountDownLatch 主要用于等待一组线程完成任务后,再进行后续操作。例如,有多个线程去下载文件,当所有文件都下载完成后,再进行合并操作。可以通过调用 countDown 方法来减少计数,当计数减为 0 时,等待的线程会被唤醒。 面试官:嗯,理解得还不错,那 CyclicBarrier 又有什么特点呢? 王铁牛:CyclicBarrier 可以让一组线程到达一个屏障点后被阻塞,直到所有线程都到达屏障点才会继续执行。它可以循环使用,而不像 CountDownLatch 只能使用一次。 面试官:很好,对这些并发工具类的理解比较到位。
第三轮: 面试官:谈谈你对 JVM 的内存模型的理解? 王铁牛:JVM 的内存模型主要分为堆、栈、方法区等几个部分。堆用于存储对象实例,栈用于存储局部变量、方法参数等,方法区用于存储类信息、常量等。 面试官:那堆内存又分为哪几种? 王铁牛:堆内存分为新生代和老年代。新生代又分为 Eden 区、From Survivor 区和 To Survivor 区。对象首先在 Eden 区分配,经过几次垃圾回收后,如果还存活,就会被移动到年老代。 面试官:不错,那你知道垃圾回收器有哪些吗? 王铁牛:常见的垃圾回收器有 Serial 回收器、ParNew 回收器、Parallel Scavenge 回收器、Serial Old 回收器、Parallel Old 回收器、CMS 回收器等。不同的回收器有不同的特点和适用场景。 面试官:很好,今天的面试就到这里,你回家等通知吧。
答案总结:
- Java 的基本数据类型有 byte、short、int、long、float、double、char、boolean 八种,默认值分别为 0、0、0、0L、0.0f、0.0d、'\u0000'、false。
- JUC 中的常用并发工具类有 CountDownLatch、CyclicBarrier、Semaphore 等。CountDownLatch 用于等待一组线程完成任务后再进行后续操作,通过 countDown 方法减少计数,计数为 0 时唤醒等待线程;CyclicBarrier 可让一组线程到达屏障点后被阻塞,直到所有线程都到达才继续执行,可循环使用。
- JVM 的内存模型分为堆、栈、方法区等部分,堆分为新生代和老年代,新生代又分为 Eden 区、From Survivor 区和 To Survivor 区,对象先在 Eden 区分配,多次垃圾回收后存活的会移到老年代。常见的垃圾回收器有 Serial 回收器、ParNew 回收器、Parallel Scavenge 回收器、Serial Old 回收器、Parallel Old 回收器、CMS 回收器等,不同回收器有不同特点和适用场景。