美团-Java后端-平台技术部-一面凉经

暑期实习投递之旅差不多结束了,整理一下之前的面经,自己查漏补缺,也顺便分享一波,和牛油们互帮互助

算法

  • LC 2 两数相加——前一天第一次做,看题解挺顺畅以为还能秒,结果卡死了。大体思路可以,但 carry 进位位置一直放不对,含恨满半小时没 debug 成功,哎!太菜了也

30 min

MySQL

  • 什么是事务的隔离级别?区别是?——老八股了
  • 幻读是什么意思?——概念不清,乱解释自相矛盾了
  • 常用的存储引擎有哪些?区别是?——MyISAM 不了解,说不出东西,只能说 InnoDB 的特性
  • B 树和 B+树的区别?——答 B+树数据只存叶子结点,非叶子节点只存指针
    • 为什么要这么设计?——减少层数,IO 次数
    • 还有别的优势吗?——说了下叶子结点双向链表,方便范围查找
    • B+树什么时候分裂?——不会,勉强说结点的指针数量达到一个阈值后分裂;追问阈值多少,不会(查了下可能是页大小 16 kb)
  • 什么是悲观锁,什么是乐观锁?——麻绳专挑细处断,只能想起 Java 的定义了,MySQL 具体锁实现忘了,硬扯了共通定义
    • 举个例子(悲观锁)——愣了;什么样的 SQL 是悲观锁?——愣了,答 cud 都会加;不太满意的回答,继续问
    • 假设要同时修改一行 id=1 的数据,怎么加锁?——愣了,确实不知道,没学到位,哎(估计想问 select... for update/share 加 S 或者 X 锁,深了可能问间隙锁之类?猜测)
    • 那乐观锁呢?(概念)——按 Java 中的 CAS 概念勉强回答了
    • 举个例子(乐观锁)——愣了,不会,结束后看了下是在应用方面处理而不是 MySQL 自身有乐观锁,比如给数据库添加一列版本号字段用于乐观锁比较,能防 ABA;或者就跟原始值进行比较,简单不用动表结构,但是可能防不了 ABA 问题(或者加时间戳来避免 ABA?)
    • “那我指引你一下,比如说我们现在数据库里面……诶你会写 SQL 吗?”——扎心了,破防了,确实好久没写过了,从这开始感觉就凉了
  • “那我也不问你这个了;你知道数据库可能会出现死锁的情况吗?”——实话实说只能想起 Java 和 OS 方面的死锁,MySQL 死锁确实不熟

“那数据库咱们就问到这;嗯,你说你还会 Redis?”——“嗯,了解一些(硬着头皮答应,感觉又要被拷打)”

Redis

  • Redis 是单线程还是多线程?——都有,分情况
  • 那单线程好还是多线程好?——讲了讲为什么单线程为什么多线程,没有好坏,分情况使用
  • 分布式锁在 Redis 里面怎么做?——setnx
    • 怎么判断加没加上锁?——讲 setnx 机制
  • Redis 有哪些数据结构?——5 基本类型
    • 介绍一下 Hash——类似 Java HashMap,举例讲了应用存对象
  • 场景题,ABD 是资源,数字是城市 id,有这些数据;比如保存 A 资源这行信息时,要往 Redis 里面存缓存写数据,读取时要求查这个城市 id 下有哪些资源,应该 Redis 使用什么数据结构合适?
资源 城市 id
A 1,3,5
B 2,5
D 1,5,7

——没思路,乱猜:想了想只是判断有哪些资源,说可能set 合适一些

  • 那你讲讲 set 什么样的数据结构,key 和 value 是什么?——乱答,汗流浃背,不知道是紧张还是确实对 set 概念不清,不知道说什么
  • “你说你哪里不理解,我可以指引你的”——感动,但是我稀里糊涂都不知道现在卡在哪,脑子空白了已经
  • “是对 set 不了解吗”“应该是吧”(我也找不到理由只能顺着走,哎)
  • “那 String 结构你了解吗?”“您是说 SDS 吗”“不,我就是想知道你会不会用这个东西,还是说只是停留在背上”(麻了,心凉)
  • 那我让你用 String 解决这个问题,你怎么存?——我脑子已经不转了,面试官带着我指引告诉我怎么整,让我模仿填后面的,大概结构如下: 1 A_D 2 B 3 A 5 A_B_D 7 D 然后讲字符串需要分隔拼接拆开,set 不需要,瞬间好像就领悟 set 了,呜,但是晚了。面试官反问我理解 set 了吗,我稀里糊涂说了一堆,然后替我圆场说我应该是理解 set 的,但是不知道我思路卡在哪(感动,惭愧)
  • 加点难度,A 资源数据更新成 2,4,怎么存?——脑子又懵了,哎。卡半天继续被指引,最后面试官替我总结结论是拿到老数据 1,3,5,然后找对应 key,里面找 A,把 A 删掉。我只能嗯嗯,也没别的思路了。说没问题,接下来问问 Java(感觉还是有问题)

Java

  • volatile 关键字有用过吗?——凭印象讲概念,提到缓存但是具体说不上来;
    • 照你说的那 a = 1; a = 2; print(a); 结果是 1 吗?——愣了,确实自己有些对概念不清,只能答不是,印象中与多线程有关,但具体案例和原因忘了,哎,答得好烂(回头查了下,Volatile 是让每个线程不读自己的工作缓存,共享变量被修改实时会被其它线程感知到,或者说不存储其缓存每次拿最新的值,确保可见性和禁止指令重排)
  • 讲讲内存泄露和溢出?——说不上具体定义,硬扯 ThreadLocal 可能出现内存泄露,试图凭印象讲弱引用线程池等等蒙混过关,然后被拷打
    • 为什么没法被垃圾回收?或者说垃圾回收什么?——ThreadLocal 扯自己绕进去了,没看明白凭印象讲感觉自己逻辑都顺不通(现在整明白了,ThreadLocal 在线程池环境下,Thread 会复用,所以 ThreadLocalMap 会复用;ThreadLocal 作为 key不用了因为是弱引用可以被回收;但 Value 被 Map 强引用,key 没了也没法 remove() Value,Map 和 Thread 都复用就不会被回收,所以不主动 remove () 则 value 没法被回收从而内存泄漏!)
    • 什么是 OOM?——刚刚光说溢出了,能答上来的只是说新建对象堆内存分配内存不够会出现 OOM。听完感觉不是很满意就结束了(现在想了想前面问内存泄露,也可以说内存泄漏越来越多从而导致内存溢出,能说的点挺多的,可惜自己把握不住)

+1h = 1h24min

反问

  • “我这边准备的问题都问完了,你有什么想问我的吗?想要了解的,或者你想说什么都可以。”——太温柔了哥!真是想说一大堆想问一大堆但到嘴边只剩沉默,遗憾
  • 求建议——“你有参加过其他公司的面试吗?”,直接被看穿了呜。“你现在复习方向是靠背吗“,汗流浃背,然后给我提了很多建议和指导性的学习方法,感谢面试官!
  • 问业务——美团首页相关,讲了很多他们做的业务,还热心的讲了如果我能去他们组可以学到的东西,太心动了,人太好了,这时候还在安慰我,遗憾自己菜,错失良机!

1h35min 结束!

总结

2024-04-17

处女面是美团,面试官很好很善良,可惜自己菜没把握住。晚上没动静,第二天早上没动静,上午看挂了,晚上收到感谢信。 遗憾,但也认识到很多问题,学到很多,碰到这么好的面试官开局真的我感觉好幸福,起码让我对面试没那么恐惧了。

后记:0422 上午,用美团用最后一张要过期的券点完午饭,没一会来邮件了,复活了,还是同一部门,联系人不同,第二天晚上面。 复活了!说明我答那么烂面试官好人还没给我写差面评,甚至可能还不错所以第二周一开始就捞了,太感谢了!真是福气!

牛友们觉得有用的话,收藏同时顺便点点赞呗~谢谢!

#软件开发2024笔面经##美团#
Kiro面经 文章被收录于专栏

Java后端,自己的面经整理总结

全部评论
本篇面经讲解+学习资料指引:https://www.nowcoder.com/discuss/1306002
5 回复 分享
发布于 05-11 16:51 四川
我觉得 mysql中的快照读 是通过mvcc实现的 这就是乐观锁 当前度是加锁 这就是悲观锁
2 回复 分享
发布于 05-09 18:30 湖北
大佬🐮
1 回复 分享
发布于 05-11 17:33 广东
《……诶你会写 SQL 吗?》哈哈哈哈哈哈
1 回复 分享
发布于 05-13 08:47 福建
请问现在准备后端的面试还要背计网吗 感觉看了些面经问计网的不多了
点赞 回复 分享
发布于 05-10 15:30 日本
佬,复活的面试了嘛?怎么样?
点赞 回复 分享
发布于 05-10 21:46 辽宁
兄弟 算法是leetcode模式 还是acm模式
点赞 回复 分享
发布于 05-16 14:50 广东

相关推荐

不愿透露姓名的神秘牛友
10-31 14:18
已编辑
美团 后端开发 25k*15.5 硕士211
点赞 评论 收藏
分享
17 49 评论
分享
牛客网
牛客企业服务