以下是面试过程:
第一轮: 面试官:首先,说说 Java 的核心知识有哪些? 王铁牛:Java 的核心知识包括面向对象编程的概念,如封装、继承、多态等,还有基本数据类型、控制流程等。 面试官:不错,那你再说说 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。
第二轮: 面试官:接着,谈谈 JUC 中的常用类有哪些? 王铁牛:有 CountDownLatch、CyclicBarrier、Semaphore 等。 面试官:那你说说 CountDownLatch 的用法吧? 王铁牛:CountDownLatch 主要用于线程间的同步,通过一个计数器来控制线程的等待和释放。比如在某个任务完成前,需要等待其他多个任务都完成,就可以使用 CountDownLatch。 面试官:嗯,那 CyclicBarrier 呢?它和 CountDownLatch 有什么区别? 王铁牛:(挠挠头)这个……不太清楚。
第三轮: 面试官:再说说 JVM 的内存结构吧? 王铁牛:JVM 的内存结构主要有堆、栈、方法区等。 面试官:那堆又分为哪些部分呢? 王铁牛:堆分为新生代和老年代,新生代又分为 Eden 区、From Survivor 区和 To Survivor 区。 面试官:很好,那你说说新生代和老年代的主要作用分别是什么? 王铁牛:(思考片刻)新生代主要存放新创建的对象,经过几次垃圾回收后如果还存活的对象会被移到老年代。老年代主要存放经过多次垃圾回收后仍然存活的对象。
面试官:今天的面试就到这里,你回去等通知吧。
答案:
- 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。
- JUC 中的常用类及用法:
- CountDownLatch:用于线程间的同步,通过一个计数器来控制线程的等待和释放。比如在某个任务完成前,需要等待其他多个任务都完成,就可以使用 CountDownLatch。
- CyclicBarrier:也是用于线程间的同步,它可以让一组线程到达一个屏障点后被阻塞,直到所有线程都到达屏障点后才继续执行。与 CountDownLatch 的区别在于,CyclicBarrier 可以重复使用,而 CountDownLatch 只能使用一次。
- JVM 的内存结构及各部分作用:
- 堆:主要用于存放对象实例,是垃圾回收的主要区域。分为新生代和老年代,新生代又分为 Eden 区、From Survivor 区和 To Survivor 区。
- 栈:用于存储局部变量、方法参数、返回值等,线程私有,遵循先进后出的原则。
- 方法区:用于存储类信息、常量、静态变量、即时编译器编译后的代码等,线程共享。新生代主要存放新创建的对象,经过几次垃圾回收后如果还存活的对象会被移到老年代。老年代主要存放经过多次垃圾回收后仍然存活的对象。