1. 经典算法题:多条件排序
问题描述: 有一个学生类 Student(包含分数 score 和学号 id),如何实现:先按分数排序(假设从高到低),分数相同的再按学号排序(从小到大)?
面试回答思路: 这道题考的是你对 Java 比较器 (Comparator) 的使用,特别是 Java 8 的链式写法。
-
方法一:传统写法 (匿名内部类)
-
实现
Comparator接口。 -
在
compare方法里写if-else逻辑:先比分数,分数不一样直接返回结果;分数一样,再比学号。
-
-
方法二:Java 8 链式写法 (面试加分项)
-
利用
Comparator.comparing()和thenComparing()。 -
代码极简,逻辑清晰。
-
代码示例 (背诵这个):
// 假设 list 是 List<Student>
list.sort(Comparator.comparing(Student::getScore).reversed() // 第一规则:按分数倒序 (高到低)
.thenComparing(Student::getId)); // 第二规则:按学号正序 (小到大)2. Native 方法是什么?
问题描述: 解释一下 Java 中的 native 关键字。
核心考点:
-
定义:
native修饰的方法是一个本地方法。意思是:这个方法的方法体不是用 Java 写的,而是用 C 或 C++ 写的。 -
机制: 它依赖于 JNI (Java Native Interface) 机制。Java 调用这个方法时,底层会去调用 DLL (Windows) 或 .so (Linux) 动态链接库中的 C/C++ 代码。
-
为什么要有它?
-
操作硬件/系统底层: Java 是运行在虚拟机上的,离操作系统隔了一层,有些底层的活(比如驱动硬件、管理内存、精确的系统调用)Java 干不了,必须找 C/C++ 帮忙。
-
性能: 对于极度追求效率的计算密集型任务,C++ 可能比 Java 快。
-
-
常见例子:
-
Object.getClass() -
Object.hashCode() -
System.arraycopy() -
Thread.start0()(启动线程的底层实现)
-