携程Java开发一面面经
《面试题目》
- 自我介绍
- 项目介绍及上线情况
- 本地缓存加令牌桶限流的具体实现
- 令牌桶的生产机制及高并发下的性能优化
- 消息服务的高可用部署
- 限流算法改造思路
- RateLimiter组件底层原理
- AT模式与死信队列的关系
- MySQL处理超卖问题的可行性
- RabbitMQ消费写库失败的保障机制
- AI工具在开发中的应用
- Java基础:Object公共父类、equals与hashCode重写原则及原因
手撕算法:
- 快速排序
- 海量数据求Top 10
- 统计长整型二进制中1的个数
- 2的31次方个整数查重(BitMap方案及边界处理)
《参考解析》
- 令牌桶算法:基于定时任务或延迟计算生成令牌,Guava的RateLimiter使用预占位机制解决高并发下平滑突发请求问题。
- RabbitMQ写库失败:应采用补偿机制,如本地消息表配合定时任务轮询,或确保幂等性后进行重试,必要时存入死信队列由人工介入。
- equals与hashCode重写:若只重写equals,会导致相同对象在HashMap中可能被判定为不同Key(hashCode不同),导致无法正确检索,需保证二者一致性。
- 海量数据查重:使用位图(BitMap),2^31个整数需约256MB内存(1 bit/数);若有负数,可整体偏移映射到正数区间,BitMap空间利用率极高。