【面经】8月30日 美团/到家/二面/1h20min
自我介绍
博客主要是做自己学习做总结是吧?
Java:
sycrhonized 和 reentrantlock 区别
公平与非公平是如何实现的?(理解不深,猜的,底层有优先队列)
举一个例子去说明,非公平锁是如何工作的?
AQS 是什么?数据结构除了 state 还有什么?
单向链表和双向链表是什么区别?
为什么有了双向链表还要有单向链表?二者的使用场景?
threadlocalmap 中,有强引用、弱引用。为什么要设计弱引用?解决什么问题?
什么时候会用到线程池?(要提高效率)
从使用层面讲讲线程池的注意事项。
核心线程数、最大线程数的区别?
如果一个项目用到了线程池,发现其中的数据一直在被丢弃。定位思路是什么?
你在阿里期间有没有遇到过类似的问题,有没有快速解决的方案?不需要排查代码的?
阿里内部有没有对线程池做一些公司级别的组件封装?
trace 了解吗?
实习
系统设计:
如何理解接口幂等性?从读和写两个角度去说明如何保障这一点?(读:默认幂等。写:唯一 id、数据库唯一键。)
如果是并发场景,唯一 id 不一定有用。怎么办?(分布式锁)
在写的过程中,如何用乐观锁的方式保证数据强一致性?(表里加一个版本号)
通过消息执行扣款操作,消息可能丢失导致最终扣款不成功。如何保证最终一致性?(重试;重试失败时写 mysql、通过同步组件去消费)
如果你有 1000w 数据都要去消费。如何保证最终这 1000w 单都是成功的?这个其实是各个公司都会遇到的问题。(不太清楚)
如果我现在是一个处理流程分 3 步,中间一步失败了。我如何保证最终 3 步的一致性?这个也很常见,比如网络超时、服务挂了。(记录失败操作,通过日志恢复)
接口请求量突然增高,有哪些保护措施?(nginx、接口限流、同步转异步、redis、消息队列、mysql 优化)
如果一个接口性能突然变差了,如何排查这个问题?(服务器 cpu、内存;机器变少了)
操作层面上,一二三步应该怎么做?说的大概的就行。(不太熟,说着说着还是说到细节了。。。大概就是 ① 先定位服务范围,② 查看机器 cpu、内存占用情况,③ 查看日志 ④ 借助一些平台查看各个中间件的使用情况、包括报警信息)
如果短期定位不到问题怎么办?如果能定位到问题又怎么办?(不管是哪种,都要进行回滚。如果定位到了,拉上运营、开发等人员快速分析原因)
如果我有 700 台机器,回滚成本很高,怎么办?(代码里做灰度开关,快速服务降级)
设计题:
如果我现在有 60w 骑手,对它们进行保险公司的投保,如何保证在 1 个小时内完成,并且不能重复、不能遗漏?(说的比较乱。。。多机器处理、线程池保证时效性;通过 redis 存 id 保证不重复;失败异步线程重试)
如何保证投保数据最终能写成功?(redis 做持久化)
数据库一般分为哪些部署模式?(只知道个主从复制)
一般都是主从复制的,主库写、存库读。如果同步数据比较慢,导致数据不一致。如何把主从延迟控制在可接收的范围内?(写速度 > 读速度,尽可能减少主库的请求频次)
这个投保的需求,我要求你 10min 执行完,能不能不修改代码实现这个功能?(把一些控制任务并行出发的数量配置到配置中心)有不有什么现有的工具能做到这一点?(配置中心,面试官说限流器 。其实这里我理解的是不管多少任务,都能在指定时间内完成,也就是不限制流量的情况下尽可能保证效率,所以就说通过配置数量实现。但是面试官的意思是,同一批任务,我去控制它完成的时间,也就是不保证效率,而是控制请求频次,避免下游服务被打挂了。)
反问:
运营组的主要工作?(履约、定价结算、平台治理,尽可能避免三方在交易过程中出现的纠纷问题。)
需求方是谁?(C 端、B 端,不同业务线、不同的管控诉求,站在整个平台的视角去治理)
主要和算法团队合作是吧?(是)
主要的核心工作和难点是什么?(各种差异化业务,如何抽象出一套逻辑,用一套通用的平台去应对)
反反问:
其他城市可以考虑吗?
对你期望的工作岗位,有什么要求吗?
技术氛围:① 我们团队每周五会有技术分享 ② 研发基本功,代码 CR、单侧、代码规范都是从我们团队产出的
基架、业务、数开、侧开,你倾向于哪一种?
#秋招##美团##面经#2025届实习&秋招面经