面灵AI

昆山某公司 Java 后端面试:项目独立性、Redis 与泛型

时间
2026-09
来源
牛客网

《面试题目》

  1. 两个项目是否由你独立完成,创意来自哪里?
  2. 项目设计与辅助编程工具分别承担了哪些工作?
  3. 你做过最出彩的事情是什么,完整技术实现过程怎样?
  4. 秒杀功能是否参考教程实现,有哪些独立完成的实践?
  5. HyperLogLog 用来解决什么问题,你从哪里了解到它,底层原理是什么?
  6. Redis 分布式锁怎样实现,需要配置哪些参数?
  7. 如何理解分布式锁的随机 TTL?
  8. Redis 的过期删除策略和内存淘汰策略分别有哪些?
  9. 你的数据结构与算法基础如何?
  10. AOP 是什么,有哪些通知类型,环绕通知怎样控制目标方法的执行?
  11. Java 泛型中的 T、通配符和 extends 分别表示什么?
  12. 常用 Docker 命令有哪些?
  13. 你有哪些问题想向面试官了解?

《参考解析》

项目追问需要拿出自己的决策

介绍秒杀项目时,可以沿一次请求说明库存在哪里扣、订单何时生成、重复请求怎样处理,再选一个自己改过的地方解释原因。参考教程与使用辅助编程工具都不能替代对代码的理解。没有独立做过的部分照实说明,重点讲清亲手验证过什么。

HyperLogLog 算的是近似数量

它适合统计独立访客这类基数问题:把输入哈希后,通过多个桶保存统计信息,再估算不同元素的数量。它不保存可供枚举的完整成员集合,也不能给出某个用户是否存在的精确判定。需要精确去重或逐项删除时,应选择别的数据结构。

锁过期和缓存过期是两件事

随机过期时间常用于分散大量缓存同时失效的压力,不能拿来证明分布式锁正确。基础锁需要互斥获取、唯一持有者标识、过期时间,以及校验持有者后再释放。SET key token NX PX milliseconds 可以把条件写入和过期设置合成一条命令,参数含义见 Redis SET 文档。业务运行超过租期时,还必须处理旧持有者继续执行的问题。

泛型从读写方向解释

T 是类型参数名;? extends Number 表示某个未知的 Number 子类型,读取可按 Number 处理,但不能随意放入 Integer 或 Double。? super Integer 可以接收 Integer,读取通常只能按 Object 处理。环绕通知则要说明 proceed() 何时调用、返回值如何传递、异常如何继续抛出。