以下是面试过程:
第一轮: 面试官:请你谈谈 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 相关的知识吧,你知道什么是线程安全吗? 王铁牛:线程安全就是多线程环境下,程序的执行结果是正确的、可预期的。 面试官:那你举例说明一下哪些操作是线程不安全的? 王铁牛:比如对共享变量的读写操作,如果不进行同步处理,就可能导致线程安全问题,像 i++ 操作就不是线程安全的。 面试官:那你知道有哪些线程同步的方法吗? 王铁牛:有 synchronized 关键字、Lock 接口及其实现类,比如 ReentrantLock 等。
第三轮: 面试官:再说说 JVM 方面的知识,你知道 JVM 的内存结构吗? 王铁牛:JVM 的内存结构主要包括堆、栈、方法区等。 面试官:那堆又分为哪几种呢? 王铁牛:堆分为新生代和老年代,新生代又分为 Eden 区、From Survivor 区和 To Survivor 区。 面试官:很好,那你说说新生代和老年代的主要区别是什么? 王铁牛:新生代主要存放新创建的对象,比较容易被回收;老年代主要存放经过多次垃圾回收后仍然存活的对象,比较难被回收。
面试官:今天的面试就到这里,你回去等通知吧。
答案总结:
- Java 核心知识:面向对象编程概念(封装、继承、多态等)、基本数据类型(byte、short、int、long、float、double、char、boolean 及默认值)。
- JUC:线程安全是多线程环境下程序执行结果正确可预期,如 i++操作非线程安全,线程同步方法有 synchronized 关键字、Lock 接口及其实现类(ReentrantLock 等)。
- JVM:内存结构包括堆、栈、方法区等,堆分为新生代(Eden 区、From Survivor 区、To Survivor 区)和老年代,新生代存放新创建对象易回收,老年代存放多次回收后仍存活对象难回收。