发布于2026-05-29 阅读(0)
扫一扫,手机访问
最近在准备 Ja va 后端面试,把一些高频八股题重新整理了一遍。

这篇文章主要偏“面试回答风格”,尽量用浅显易懂的方式讲清楚原理,适合:
int 是 Ja va 的基本数据类型,Integer 是 int 的包装类,本质是一个对象。
相比 int,Integer 的优势在哪里?
Integer a = null;
而 int 不行。
这一点在数据库字段映射、参数传递中非常常见。
Listlist = new ArrayList<>();
不能写:
Listlist = new ArrayList<>();
因为 Ja va 泛型底层采用的是“类型擦除”。
泛型编译后会被擦除成 Object 或者上界类型,int 不是对象,自然没法当成 Object 用。
比如:
Integer.parseInt() Integer.valueOf() Integer.compare()
Integer a = 10; // 自动装箱 int b = a; // 自动拆箱
底层本质:
Integer.valueOf(10) a.intValue()
例如:
Integer a = null; int b = a; // NullPointerException
自动装箱和拆箱本质上是 Ja va 编译器提供的“语法糖”。
Integer a = 10;
编译后:
Integer a = Integer.valueOf(10);
int b = a;
编译后:
int b = a.intValue();
Integer a = 100; Integer b = 100; System.out.println(a == b); // true
因为 Integer.valueOf() 默认缓存:
-128 ~ 127
范围内的整数对象。
接口更偏向于“行为规范”,抽象类更偏向于“模板复用”。
Ja va:
class A extends AbstractA class B implements X,Y
接口:
抽象类:
接口:
抽象类:
abstract class Animal{
protected String name;
}
abstract class Game{
public final void play(){
init();
start();
end();
}
abstract void init();
}
Ja va 泛型本质是“参数化类型”。
例如:
Listlist = new ArrayList<>();
这里的 String 就是类型参数。
没有泛型:
List list = new ArrayList();
list.add("abc");
list.add(123);
容易:
ClassCastException
有泛型后:
Listlist = new ArrayList<>();
编译阶段就会检查类型。
String s = list.get(0);
不需要再:
(String)
Ja va 泛型属于“伪泛型”。
编译后:
ListList
都会擦除成:
List
所以:
a.getClass() == b.getClass()
结果为:
true
ArrayList 底层是:
Object[]
动态数组。
new ArrayList()
不会立刻创建长度为 10 的数组。
第一次 add 时才初始化容量为 10。
ArrayList 扩容一般为原来的 1.5 倍:
newCapacity = oldCapacity + oldCapacity/2
底层通过:
Arrays.copyOf()
复制旧数组。
优点:
缺点:
@Autowired
来自 Spring:
org.springframework.beans.factory.annotation.Autowired
@Resource
来自 JSR-250:
ja vax.annotation.Resource
@Autowired
默认:
byType
按类型注入。
@Resource
默认:
byName -> byType
优先按名称。
Spring 现在更推荐:
构造器注入
例如:
@RequiredArgsConstructor
一般会从:
监控 -> 链路 -> SQL -> JVM -> 代码
逐层排查。
关注:
例如:
定位耗时点。
重点看:
EXPLAIN
观察:
查看:
事务具有 ACID 四大特性。
要么全部成功,要么全部失败。
通过:
Undo Log
实现。
事务执行前后,数据必须满足业务规则。
事务之间互不影响。
通过:
共同实现。
事务提交后永久保存。
通过:
Redo Log
实现。
可能出现:
脏读
解决脏读。
但可能:
不可重复读
解决不可重复读。
事务串行执行。
并发性能最低。
例如:
where date(create_time)=?
可能导致索引失效。
联合索引:
(a,b,c)
尽量从左开始匹配。
避免回表。
例如:
而不是:
减少页分裂。
特点:
用于:
文章搜索
用于:
GIS 地理数据
适合:
低基数字段
因为 B+Tree:
综合性能最好。
Ja va 后端面试里,很多题并不难。
真正拉开差距的,不是“会不会背”,而是:
建议准备面试时:
这样会比单纯背八股更容易通过面试。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8