美团暑期后端一面

常规八股就不说了,印象深刻的几个问题:

(hmdp)分布式锁超时释放导致误删的情况,说明同一时刻有不止一个线程去执行同一段代码,锁并没有锁住,这种情况怎么考虑

缓存和数据库操作一个成功一个失败怎么办(我说加事务,又问使用事务可能会导致较长的等待和性能开销怎么解决)

为什么java能实现反射机制,别的语言不行?

联合索引最左匹配原则这样设计的意义在哪?

请大佬帮忙解答一下

3.21:已挂,但是很奇怪的是两个月之前投的一个日常给我捞起来了
全部评论
第二题的话其实就是在考你的业务敏感度。 不是所有的业务对一致性要求都这么高。因此这个是需要分类讨论的。 如果就是要求强一致性,那就开事务。 但是大多数加缓存的场景其实对于数据一致性的要求是没有这么高的。在这种情况下我们更加倾向于数据库变更之后投递消息到mq,由mq进行写缓存的操作,并且开启重试机制,最多重试三次(避免消费堆积)。当三次消费失败之后,要么抛异常发告警让对应的后端人员自己手动往缓存中补偿一下,要么投递到死信队列,晚上或者服务低谷的时候统一进行重试。最后开一个BCP业务校验系统来确保mysql和缓存的最终一致性。
4 回复 分享
发布于 03-21 02:45 陕西
为什么java能实现反射机制,别的语言不行? 主要还是因为java会先编译为字节码这个原因吧, 这样反射才能从字节码中反读取类元素信息.
3 回复 分享
发布于 03-21 09:28 福建
最后一题感觉可以从B+树中的联合索引存储来思考 比如(a,b,c)a在B+树中是全局有序的,b和c只能是在某一个a中局部有序,而全局是无序的,所以没有使用a的话b或c就无法依照顺序性快速定位到某个区间,只能进行全表扫描,所以原则上是使用时要有a的
3 回复 分享
发布于 03-21 00:25 辽宁
第二个数据库和缓存这个,为了保证同时成功或者失败的这个,我觉得可以先更新数据库,然后再用mq发消息让消费者去做这个缓存的更新,因为mq有失败重试的机制,可以多次重试的去构建缓存
3 回复 分享
发布于 03-20 22:50 天津
第一题:假设有一个线程插入数据库阻塞了,锁到达了指定的时间7s。锁被自动释放了,第二个线程过来了可以获取锁,但是这时候突然第一个线程醒了,他就把第二个线程的锁给释放了。解决方案就是在value结构加一个线程id。
1 回复 分享
发布于 03-20 22:56 广东
老哥hmdp这个问题该怎么答啊
1 回复 分享
发布于 03-20 18:09 重庆
蹲后续Orz
点赞 回复 分享
发布于 04-20 15:17 天津

相关推荐

05-19 21:28
门头沟学院 Java
部门:核心本地商业-业务研发平台,好像主要是做搜推的。流程:4.25 投递5.10 笔试5.14 一面5.16 二面一面:主要是结合项目来问,每个项目都挑着问了一些点,我只有第一个项目是java项目,所以聊得相对多一点。1.简单介绍一下项目,要求突出工作2.手撕:删除排序链表中的重复元素II3.结合第一个项目拷打:    为什么不用RabbitMQ不用HTTP(降低耦合+异步)    为什么用消息队列不用数据库传输文件?数据库有什么缺点吗?    不太了解SSE,问了一下是什么    客户端是指什么?用户界面是你们设计的吗?(我说sse是实现服务端给客户端的推送,所以问了这个)4.第二个项目拷打,主要是cv相关的,具体的就不放了5.第三个项目拷打,主要是三维重建相关6.项目中用到什么语言?7.这些项目的代码量大吗?8.SpringBoot的lOC和AOP二面:更没有问项目了,只问了20分钟不到,主要在问一些项目收获、大模型、AI相关的问题。1.自我介绍2.在项目中的角色/承担的任务3.在项目中除了开发以外,最大的收获是什么?4.在项目中有没有提出一些个人比较创新性/优秀的想法并实践?5.项目里提到用了opensora,使用体验感怎么样?经过一年多迭代了,有没有尝试更新版本?6.回望项目,AI/大模型技术还可以用在里面做些什么?7.平时有没有用大模型相关的一些产品?尝试落地了吗?8.探索新工具的时候觉得最有意思/能激起学习兴趣的是什么?9.闲聊、反问实习时间等面完正好是周五下午了,到目前为止还没有最新的消息。希望团子给一次做团孝女的机会我等我等我等!
不想搬砖怎么办:
点赞 评论 收藏
分享
评论
8
109
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务