阿里Java后端开发面经02
- 时间
- 2025-12
- 来源
- 牛客网
《面试题目》
- 抽象类和接口有什么区别?
- Error 和 Exception 有什么区别?常见的受检异常有哪些?
- 方法重载和重写有什么区别?
- ZooKeeper 如何保证一致性?什么是脑裂?
- 你了解哪些分布式算法?
- ArrayList 和 LinkedList 有什么区别?
- HashMap 的 put 流程是怎样的?它线程安全吗?
- ConcurrentHashMap 如何保证线程安全?
- CAS 的原理是什么?
- Java 如何实现多线程编程?
- 线程池有哪些核心参数?
- Java 中常用的阻塞队列有哪些?
- 常见的垃圾回收算法和垃圾回收器有哪些?
- synchronized 和 Lock 有什么区别?
- 读写锁适用于哪些场景?
- MySQL 有哪些索引类型?
- B 树和 B+ 树有什么区别?
- MySQL 如何解决幻读?
- Spring Boot Starter 的原理是什么?
- Spring 有哪些依赖注入方式?
- 秒杀系统如何承接突发流量?
- 秒杀系统如何避免超卖?有哪些实现方式?
- 秒杀系统如何防刷?
- 如何设计 GC 策略?
《参考解析》
1. HashMap put 流程:先计算扰动后的哈希值并定位桶,桶为空时直接插入;发生冲突时遍历链表或红黑树,更新相同 key 或追加节点。插入后超过阈值会扩容。HashMap 不保证并发安全,并发写应使用 ConcurrentHashMap 等方案。
2. CAS:CAS 比较内存中的当前值与期望值,相同才原子更新,否则失败重试。它适合竞争较轻的短临界区,但要关注自旋开销、ABA 问题和只能原子更新单个变量等限制。
3. Spring Boot Starter:Starter 聚合一组相关依赖,自动配置模块通过条件注解判断类路径、配置项和现有 Bean,再注册默认 Bean。用户自定义 Bean 或配置可以覆盖默认行为,从而实现开箱即用和按需装配。
4. 秒杀系统:入口通过验证码、资格校验和限流过滤无效流量,静态资源走 CDN,请求进入消息队列削峰。库存应在 Redis 中原子预扣,并以数据库唯一约束、条件更新和订单状态机兜住超卖与重复下单;异步链路需要补偿和对账。
5. 防刷设计:综合账号、设备、IP、行为节奏和活动资格做分层限制,令牌应短时有效且与用户和商品绑定。防刷不能只依赖单一阈值,还要给真实高频用户保留明确的反馈与恢复路径。