📘 Java 核心门槛题册(15题)
🧠 第一部分:Java 值传递专项(10题)
1️⃣ 基本类型传递
public static void main(String[] args) {
int a = 10;
change(a);
System.out.println(a);
}
static void change(int a) {
a = 20;
}
输出?
A. 10 B. 20 C. 编译错误 D. 运行异常
2️⃣ 包装类型传递
public static void main(String[] args) {
Integer a = 10;
change(a);
System.out.println(a);
}
static void change(Integer a) {
a = 20;
}
输出?
A. 10 B. 20 C. null D. 编译错误
3️⃣ 修改对象属性
class User {
int age = 10;
}
public static void main(String[] args) {
User u = new User();
change(u);
System.out.println(u.age);
}
static void change(User u) {
u.age = 20;
}
输出?
A. 10 B. 20 C. null D. 编译错误
4️⃣ 修改引用指向
class User {
int age = 10;
}
public static void main(String[] args) {
User u = new User();
change(u);
System.out.println(u.age);
}
static void change(User u) {
u = new User();
u.age = 20;
}
输出?
A. 10 B. 20 C. null D. 编译错误
5️⃣ String 传递
public static void main(String[] args) {
String s = "abc";
change(s);
System.out.println(s);
}
static void change(String s) {
s = "def";
}
输出?
A. abc B. def C. null D. 编译错误
6️⃣ 数组修改元素
public static void main(String[] args) {
int[] arr = {1, 2, 3};
change(arr);
System.out.println(arr[0]);
}
static void change(int[] arr) {
arr[0] = 100;
}
输出?
A. 1 B. 100 C. null D. 编译错误
7️⃣ 数组重新赋值
public static void main(String[] args) {
int[] arr = {1, 2, 3};
change(arr);
System.out.println(arr[0]);
}
static void change(int[] arr) {
arr = new int[]{100, 200, 300};
}
输出?
A. 1 B. 100 C. 200 D. 编译错误
8️⃣ Integer 自增
public static void main(String[] args) {
Integer a = 128;
change(a);
System.out.println(a);
}
static void change(Integer a) {
a++;
}
输出?
A. 128 B. 129 C. null D. 编译错误
9️⃣ StringBuilder
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("abc");
change(sb);
System.out.println(sb.toString());
}
static void change(StringBuilder sb) {
sb.append("def");
}
输出?
A. abc B. abcdef C. def D. 编译错误
🔟 混合引用场景
class User {
String name = "A";
}
public static void main(String[] args) {
User u = new User();
change(u);
System.out.println(u.name);
}
static void change(User u) {
u.name = "B";
u = new User();
u.name = "C";
}
输出?
A. A B. B C. C D. 编译错误
🧨 第二部分:架构门槛题(5题)
1️⃣ HashMap 并发问题(JDK8)
JDK8 中多个线程同时 put 同一个 HashMap 可能发生什么?
A. 形成环导致死循环 B. 一定抛 ConcurrentModificationException C. 线程安全 D. 数据丢失或覆盖,但不会形成环
2️⃣ DCL 单例未加 volatile
双重检查锁未加 volatile 可能导致什么?
A. 没问题 B. 创建两个实例 C. 拿到未初始化完成的对象 D. 只是性能下降
3️⃣ ThreadLocal 泄漏原因
A. key 强引用 B. value 弱引用 C. key 弱引用 value 强引用 D. 不会泄漏
4️⃣ String 常量池
String a = "ab";
String b = "a" + "b";
String c = new String("ab");
System.out.
println(a ==b);
System.out.
println(a ==c);
System.out.
println(a ==c.intern());
输出?
A. true false true B. true false false C. false false true D. true true true
5️⃣ synchronized 锁升级顺序
A. 轻量级 → 偏向 → 重量级 B. 偏向 → 轻量级 → 重量级 C. 重量级 → 轻量级 → 偏向 D. 偏向 → 重量级 → 轻量级