阿里后端开发面经05
- 时间
- 2025-04
- 来源
- 牛客网
《面试题目》
- 在浏览器地址栏输入 URL 后会发生什么?
- HTTP 常见状态码有哪些?
- Cookie 和 Session 有什么区别?
- 死锁的产生条件是什么?如何解决死锁?
- 操作系统有哪些内存管理方式?
- 什么是 Java 反射?通常在哪些场景使用?
- Java 堆分为哪些区域?对象如何在这些区域中流转?
- 常见的垃圾回收策略有哪些?
- JVM 调优常用哪些命令?
- 线上频繁发生 GC 时如何定位问题?
- Java 线程有哪些状态?
- 哪些场景适合使用线程池?为什么要使用线程池?
- MySQL 有哪些事务隔离级别?它们有什么区别?
- Redis 为什么快?
- 如何使用回溯算法完成组合总和问题(LeetCode 39)?
《参考解析》
1. URL 请求链路:浏览器先解析 URL,检查缓存并完成 DNS 查询,随后建立 TCP 连接;HTTPS 还需要进行 TLS 握手。请求经过代理或负载均衡到达应用,服务端返回响应后,浏览器解析 HTML、加载子资源并完成布局和绘制。
2. 死锁处理:死锁需要同时满足互斥、占有且等待、不可抢占和循环等待。工程上可通过固定加锁顺序、缩小锁范围、超时释放、一次性申请资源以及死锁检测来破坏其中一个条件。
3. 频繁 GC 排查:先用监控确认 Young GC、Full GC 的频率和停顿,再结合 jstat、GC 日志、堆转储和线程栈观察对象分配速率、晋升失败、大对象和内存泄漏。定位持有链后再决定优化对象生命周期、堆参数或收集器,不能只靠扩大堆掩盖问题。
4. MySQL 隔离级别:从低到高依次为读未提交、读已提交、可重复读和串行化。InnoDB 默认使用可重复读,通过 MVCC 与锁机制处理并发读取;隔离越强,通常并发成本越高。
5. 组合总和:先排序候选数组,使用深度优先搜索枚举组合。由于同一元素可以重复使用,递归时继续从当前下标搜索;当累加值达到目标时记录答案,超过目标时剪枝,同层跳过重复元素以避免重复组合。