397 设计一个限流器:接入服务器要限制每个 key 每秒访问次数上限(如每秒 100 次),超过直接拒绝,怎么处理?只是计数的话,每秒这个时间窗口怎么体现出来?跨窗口突发打破了限制,怎么解决?以 5 秒为一个时间窗口,来了一个请求,你怎么判断当前这个请求能不能放过?每个 key 都维护计数和 key 本身,key 量大、高并发时内存开销大,怎么减少内存开销?考察限流器设计,包括固定窗口、滑动窗口、令牌桶等算法,以及内存优化和高并发下的实现细节。 查看学习思路
401 通过 Spring IoC 的 getBean 获取对象时,希望对象交付前某个属性已被修改,结合 Bean 生命周期有哪些实现方式?考察候选人对 Spring Bean 生命周期扩展点的掌握程度,以及能否在正确阶段介入属性修改。 查看学习思路
402 使用 Redis 缓存并访问数据库时,如何保证数据一致性?如果再增加一层本地缓存,更新时怎样保证三者一致?考察候选人对缓存与数据库一致性方案的理解,以及多层缓存下更新顺序和失效策略的设计能力。 查看学习思路
403 请讲一下ArrayList和LinkedList的区别,以及在实际开发中你会如何选择?考察候选人对Java常用集合底层数据结构、随机访问与增删性能差异的理解,以及能否结合业务场景做技术选型。 查看学习思路
404 银行卡查询按卡号加日期查询非常慢,你会如何排查慢的原因?如果已对卡号和日期建索引,但用where交易日期小于当前日期查询,效率会怎样?考察候选人排查慢SQL的系统性思路,以及对联合索引、最左前缀、范围查询导致索引失效等数据库原理的掌握。 查看学习思路
406 为什么你这里要用 Lua 保证原子性,不能从 ZSet 取出删除同时把值返回吗?考察候选人对 Redis 原子操作、Lua 脚本以及 ZSet 命令组合的理解,判断其是否理解并发场景下原子性的必要性。 查看学习思路