我相信各位小伙伴们或多或少都对 Java 的相关岗位的面试都有一定的了解,知道面试官一定会对某个知识点进行一系列的穷追猛打,直到你默默不语…… 当然这是个基本套路,考校是你对 Java 理解的深度,而这也往往代表着 Java 语言的水平。 力求帮助读者从更高的地方去理解和学习知识。
下面笔者会从浅入深,从 Java 基础模块到项目架构,从整体到部分进行一个浅尝而止的讲诉。希望读者能在阅读文章结束后能够对 Java 的整体知识体系,对面试官提问思路有一个整体性的了解。
概念篇
概念是把所感知的事物的共同本质特点抽象出来,加以概括。我们学习知识时一定少不了对概念,对理论的学习,而这些往往都是一个知识体系中最重要,最基础的部分。
这里同学们可以回忆一下,Java 语言的基础性知识概念,或者说是对 Java 直观的认知有哪些呢?是 Write once, run anywhere?
是面向对象语言? Or other?
是的。提到 Java,这些都是 Java 语言的特点。但需要了解的不仅仅是这些,说及 Java 时,我们脑海中浮现以 Java 为根点,向下无限分出更多。
面试官的提问可能会花样百出,但只要我们心中有数,方能以不变应万变。
经典答案:
Java 是一种面向对象的语言,有两个显著的特性,一是“书写一次,到处运行”(Write once, run anywhere),能够便捷地跨平台工作;二是垃圾收集(GC,Garbage Collection),Java 将内存的分配和回收的工作交给了垃圾收集器(Garbage Collector),大部分情况下,程序员不需要自己去处理。
Java 平台:
JDK(Java Development Kit
)包含 JRE(Java Runtime Environment
)包含 JVM 和 Java 类库, JVM 可以理解 Java 程序运行的容器。
执行过程:
Java 的源代码 --> Javac 编译为字节码(bytecode) --> 加载到 Java 虚拟机 (JVM) --> JVM 内嵌的解释器将字节码转换成为最终的机器码
Oracle JDK 提供的 Hotspot JVM
,都提供了 JIT(Just-In-Time
)编译器,也就是通常所说的动态编译器,JIT 能够在运行时将热点代码编译成机器码,这是 JVM 的一种优化方式,可以提高程序的运行速度。
拓展相关知识:
- Java 面向对象封装,继承,多态等概念
- 泛型、Lambda 等语言特性
- Java 基本类库
- JVM 的基础概念和机制
集合篇
集合框架在 Java 中的重要不用多说。
首先需要明白集合是用来管理和操作数据的,我们在编程时会用到各种各样的数据结构,因此理解并熟悉运用一个语言的集合框架会给我们带来很大的帮助。
Java 集合框架的学习不仅要从浅到深,更要从整体到具体:
- Java 提供的容器(集合和 Map)类型,了解或掌握对应的数据结构、算法,了解源码作者技术选型的巧妙之处。
- 结合性能、并发等领域进行思考。
- 了解集合框架的版本迭代,发展历史等。
数据结构和算法是基本功,有时候面试官往往喜欢提问这方面。以典型排序算法,你至少理解:
- 内部排序,至少掌握基础算法如归并排序、交换排序(冒泡、快排)、选择排序、插入排序等。
- 外部排序,掌握利用内存和外部存储处理超大数据集,至少要理解过程和思路。
考察算法不仅仅是如何简单实现,面试官往往会刨根问底,比如哪些是排序是不稳定的呢(快排、堆排),或者思考稳定意味着什么;对不同数据集,各种排序的最好或最差情况;从某个角度如何进一步优化(比如空间占用,假设业务场景需要最小辅助空间,这个角度堆排序就比归并优异)等,从简单的了解,到进一步的思考,面试官通常还会观察面试者处理问题和沟通时的思路。
实例面试题
面:说说你对 HashMap 的理解吧?(简单而又直接,你自由发挥,我听着)