# 2023/4/4 电话面试 -- 35分钟 1. kafka消费乱序如何解决 2. kafka消费乱序的原因 3. kafka消息丢失问题 4. 如何保证消息不能丢失 5. 消息如何保证幂等性,全链路的幂等性 6. mysql和redis锁的优化,性能的提升 7. redis分布式锁的问题 -- 故障转移,锁的丢失 8. hashmap的get和put函数 9. put函数的细节 10. hashmap的数组长度为什么是16? --- 扩容方便,只有一半的节点需要移位 11. 链表什么时候为转换为红黑树 12. 链表为什么不直接转换为红黑树?为什么选择扩容就可以解决冲突? --- 不会 13. jvm判断对象是否死亡 14. 哪些对象可以作为 GC Roots 呢? 15. 年轻代回收和老年代回收的差异 16. 为什么年轻代使用标记复制算法 -- 不会 17. 如何理解微服务 -- 不会 18. mysql如何提升查询性能 19. 加入索引的讲究 --- 数据检索的条件字段,聚合函数的聚合字段,排序字段,防止回表,关键字段 20. 联合索引a,b的顺序 ## 2023/5/5 设置IP黑名单类 如果一个IP,3分钟之内访问超过5次加入黑名单 自动解锁,如果IP在黑名单里面超过5分钟没有再次访问,则移除黑名单 需求:高并发 ```java ConcurrentHashMap ips; HashSet blacks; boolean check(string ipaddr) { // 判断是否大于5 和 时间大小 } void add(string ipaddr) { synchronized(ipaddr.intern()) { // 加入IPS,这一步骤加锁 } // 判断是否超过5分钟 if (check(ipaddr)) { blacks.insert(i) } // 另外启动一个线程,执行remove } void remove(string ipaddr) { // 遍历每个blacks去除 } ```