15:00 一面
自我介绍(5m)
项目介绍以及讨论(20m)
跟业务强相关的就不做介绍了,介绍一下八股文内容,这家公司问了很多很多八股文
这里直接摘抄钉钉AI听记内容,不口述了
Q1:线程池创建有哪些方式?核心参数有哪些?
A1:不推荐使用Executors.newFixedThreadPool,因其队列无界易OOM。推荐使用ThreadPoolExecutor创建,核心参数包括:核心线程数、阻塞队列、最大线程数、拒绝策略、空闲存活时间与单位。任务执行顺序为:核心线程→队列→非核心线程→拒绝。
Q2:如果下游依赖无超时机制,会有什么风险?
A2:会导致线程全部阻塞,无法释放,最终线程耗尽,服务雪崩。应设置熔断与超时保护。
Q3:Redis有哪些常用数据结构?String的底层实现是什么?
A3:String、Hash、List、Set、ZSet。String底层为SDS(简单动态字符串),包含长度、分配空间大小等元信息。若存储整数且小于44字节,使用Emb STR;否则使用Raw。
Q4:ZSet如何实现?
A4:基于跳表(Skip List),多层链表结构,新节点有25%概率晋升上层,支持高效范围查询。
Q5:Redis过期键删除策略是什么?
A5:惰性删除 + 定期删除相结合。
Q6:8G内存的Redis写满后新数据如何处理?
A6:触发淘汰策略,包括volatile-lru、allkeys-lru、random、ttl等八种算法。(这里没完全说明哪8种,只是说了有针对全部key的有针对随机的,有lru、有lfu,这个无所谓了,大概说出来就行了)
Q7:如何用Redis实现分布式锁?
A7:使用SET key value EX seconds NX保证原子性上锁。解锁时需通过Lua脚本校验value是否为自己持有,防止误删。
Q8:Redission做了哪些增强?
A8:有看门狗机制自动续期。但需注意:只有未显式设置过期时间时才会触发,默认30秒续一次。
Q9:tryLock方法有哪些参数?含义是什么?
A9:记不清具体参数名,但知道有等待时间、过期时间和时间单位三个要素。(这里没全部回答出来,还有是否等待)
Q10:Spring事务失效的场景有哪些?
A10:主要有两种:一是自调用问题(this.method()绕过代理);二是异常被捕获未抛出。(唯一没回答好得,太多了,一些特别冷门得,记不住)
Q11:如何解决自调用导致的事务失效?
A11:可通过注入自身Bean或提取方法到另一个类中,确保走代理。
Q12:A方法加事务注解,内部调用B方法(无注解),B方法会回滚吗?
A12:会生效,因为整个方法都在事务上下文中。
钉钉给我的打分是76分
