八股文-01
1. 什么是多态?
关键词
- 同一接口
- 多种实现
- 重写 Override
- 动态绑定
回答
多态是指同一个方法调用,在不同对象上表现出不同实现。实现条件是继承、重写、父类引用指向子类对象。
2. 多态实现原理
关键词
- Runtime
- objc_msgSend
- isa
- 动态绑定
- Method Cache
回答
OC通过Runtime实现多态,方法调用最终转换为objc_msgSend,通过isa找到真实Class并执行对应IMP。
3. 重载是多态吗?
关键词
- 编译时多态
- Overload
- Override
回答
重载属于编译时多态;面试中通常说的多态指运行时多态,即重写。
4. static和private支持多态吗?
关键词
- static不能
- private不能
- 静态绑定
回答
static属于类,private不能被重写,因此都不支持运行时多态。
5. Java static关键字作用
关键词
- 静态变量
- 静态方法
- 静态代码块
- 静态内部类
回答
static修饰类级别成员,所有对象共享,无需实例化即可访问。
6. 堆和栈区别
关键词
- 栈:局部变量
- 堆:对象实例
- 栈线程私有
- 堆线程共享
回答
栈存储局部变量和方法调用;堆存储对象实例,由GC管理。
7. GC如何管理堆和栈?
关键词
- 栈不归GC管理
- 堆归GC管理
回答
栈帧随方法结束自动释放;堆中对象通过GC回收。
8. 什么对象可以作为GC Root?
关键词
- 栈引用
- 静态变量
- 常量
- JNI引用
回答
GC从GC Root开始搜索,可达对象不会被回收。
9. 可达性分析
关键词
- GC Root
- 引用链
- Reachability Analysis
回答
从GC Root向下遍历引用链,无法到达的对象会被GC回收。
10. 为什么不用引用计数?
关键词
- 循环引用
- 可达性分析
回答
引用计数无法解决循环引用问题,可达性分析可以。
11. Python为什么使用引用计数?
关键词
- 实时回收
- 引用计数
- 分代GC
回答
CPython采用引用计数实现快速回收,再结合分代GC解决循环引用。
12. 强引用、软引用、弱引用、虚引用
回答
- 强引用:GC不回收
- 软引用:内存不足回收
- 弱引用:GC即回收
- 虚引用:跟踪回收过程
13. 类加载过程
关键词
- 加载
- 验证
- 准备
- 解析
- 初始化
回答
加载Class文件后完成校验、内存分配、解析引用并执行static代码。
14. 为什么需要打破双亲委派?
关键词
- SPI
- JDBC
- Tomcat
- OSGi
回答
用于类隔离、SPI扩展和热部署。
15. Java传参机制
关键词
- 值传递
回答
Java永远是值传递,对象传递的是引用副本。
16. TCP和UDP区别
关键词
- TCP可靠
- UDP高性能
回答
TCP面向连接、可靠传输;UDP无连接、效率高。
17. QUIC为什么基于UDP?
关键词
- UDP
- TLS1.3
- 0-RTT
回答
QUIC在UDP上实现可靠传输,并集成TLS1.3降低握手延迟。
18. TLS握手过程
关键词
- Client Hello
- Server Hello
- 证书验证
- 密钥协商
回答
通过证书认证和密钥协商生成会话密钥,实现安全通信。
19. TCP拥塞控制
关键词
- 慢启动
- 拥塞避免
- 快重传
- 快恢复
回答
动态调整拥塞窗口,防止网络过载。
20. TCP滑动窗口
关键词
- 流量控制
- ACK
- Window Size
回答
允许连续发送多个数据包,提高传输效率。
21. TCP粘包拆包
关键词
- 面向字节流
- 无消息边界
- Length+Body
回答
TCP不保证消息边界,需要应用层协议解决。
22. 幂等性
关键词
- 防重复提交
- 唯一ID
- Redis
回答
同一请求执行多次结果一致。
23. 如何监控幂等?
关键词
- 请求ID
- 命中率
- Prometheus
回答
统计重复请求和幂等命中情况进行告警。
24. MySQL索引
关键词
- B+Tree
- 聚簇索引
- 联合索引
回答
索引是提高查询效率的数据结构。
25. 联合索引
关键词
- 最左前缀原则
回答
多个字段组成索引,遵循最左匹配。
26. B+Tree为什么优于红黑树?
关键词
- 树更矮
- IO更少
- 范围查询快
回答
数据库关注磁盘IO,因此选择B+Tree。
27. Sentinel
关键词
- 限流
- 熔断
- 降级
回答
用于流量治理和微服务保护。
28. 熔断后如何恢复?
关键词
- Closed
- Open
- Half-Open
回答
通过半开状态探测请求恢复服务。
29. Two Sum(两数之和)
关键词
- HashMap
- O(n)
核心代码
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(target-nums[i]))
return;
map.put(nums[i],i);
}