昆山某公司 Java 后端面试:项目独立性、Redis 与泛型
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 两个项目是否由你独立完成,创意来自哪里?
- 项目设计与辅助编程工具分别承担了哪些工作?
- 你做过最出彩的事情是什么,完整技术实现过程怎样?
- 秒杀功能是否参考教程实现,有哪些独立完成的实践?
- HyperLogLog 用来解决什么问题,你从哪里了解到它,底层原理是什么?
- Redis 分布式锁怎样实现,需要配置哪些参数?
- 如何理解分布式锁的随机 TTL?
- Redis 的过期删除策略和内存淘汰策略分别有哪些?
- 你的数据结构与算法基础如何?
- AOP 是什么,有哪些通知类型,环绕通知怎样控制目标方法的执行?
- Java 泛型中的 T、通配符和 extends 分别表示什么?
- 常用 Docker 命令有哪些?
- 你有哪些问题想向面试官了解?
《参考解析》
项目追问需要拿出自己的决策
介绍秒杀项目时,可以沿一次请求说明库存在哪里扣、订单何时生成、重复请求怎样处理,再选一个自己改过的地方解释原因。参考教程与使用辅助编程工具都不能替代对代码的理解。没有独立做过的部分照实说明,重点讲清亲手验证过什么。
HyperLogLog 算的是近似数量
它适合统计独立访客这类基数问题:把输入哈希后,通过多个桶保存统计信息,再估算不同元素的数量。它不保存可供枚举的完整成员集合,也不能给出某个用户是否存在的精确判定。需要精确去重或逐项删除时,应选择别的数据结构。
锁过期和缓存过期是两件事
随机过期时间常用于分散大量缓存同时失效的压力,不能拿来证明分布式锁正确。基础锁需要互斥获取、唯一持有者标识、过期时间,以及校验持有者后再释放。SET key token NX PX milliseconds 可以把条件写入和过期设置合成一条命令,参数含义见 Redis SET 文档。业务运行超过租期时,还必须处理旧持有者继续执行的问题。
泛型从读写方向解释
T 是类型参数名;? extends Number 表示某个未知的 Number 子类型,读取可按 Number 处理,但不能随意放入 Integer 或 Double。? super Integer 可以接收 Integer,读取通常只能按 Object 处理。环绕通知则要说明 proceed() 何时调用、返回值如何传递、异常如何继续抛出。