得物 Java 一面(10.17)
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- String a = “s”、String b = “s”、String c = new String(“s”) 创建了几个对象?
- 线程池 core=5、max=10、queue=10 时,提交 4、9、14、25 个任务分别会怎样?
- 线程池有哪些拒绝策略?
- Spring 用了哪些设计模式?
- 最长连续子序列的思路是什么?
- 十万人抢十个商品,系统怎么设计?
- 如何保证一个人只能抢一个商品?
- 羊毛党怎么排除?
- 十万 QPS 下 Redis 也扛不住怎么办?
- 你平时 AI 用得怎么样?
《参考解析》
字符串题要区分常量池和堆对象:字面量 “s” 会复用常量池对象,new String(“s”) 至少创建一个堆对象,还可能因常量池初始化再创建一个。回答时先声明 JDK 版本和是否首次加载,避免绝对化。
线程池题要按“核心线程、队列、最大线程、拒绝策略”的顺序推演。core=5、queue=10 时,前 5 个建核心线程,接着 10 个入队,超过 15 个才扩到 max=10,再到 25 个触发拒绝。不同 JDK 和队列实现细节略有差异,但主线是这样。
秒杀系统要分层:静态资源 CDN、网关限流、Redis 原子预扣、数据库唯一约束防重、消息队列异步下单。一人一单可以用用户 ID + 商品 ID 唯一键;羊毛党靠设备指纹、账号画像、风控规则和事后审计组合,不能只靠一个阈值。Redis 扛不住时要做分片、本地缓存、请求合并和降级,而不是无限加机器。