MT
美团(成都)Java研发工程师一面面经
作者:玄奇子
链接:https://www.nowcoder.com/discuss/712956
来源:牛客网
8.19 18:45 一面(65min)
有两三题没答出来。。按照今年成都的内卷程度感觉寄了
项目
实习的项目重构主要是按照什么标准?
基础
操作系统
进程和线程的区别?
什么是临界区?
进程间通信的方法?
进程有哪些调度算法?
什么是死锁?死锁的条件?
计算机网络HTTP属于哪一层?
TCP和UDP处于哪一层?
TCP和UDP有什么运用场景?有哪些区别?
TCP为什么需要三次握手和四次挥手?
浏览器输入网址之后发生了什么?
Cookie和Session的区别?
追问:分布式Session如何实现?
Java基础Java的异常体系?
遇见过什么Error?
答:OOM
追问:OOM你是怎么排查的?遇到过NoSuchMethodException吗?
有见过,但是没啥印象是什么场景了。。Integer类有缓存吗?为什么需要缓存?
我可以自己实现一个包名和类名都一样的Integer类吗?
JVMJVM的类加载机制
有几种类加载器?为什么要有双亲委派模型?
打破双亲委派模型的例子
Java的锁升级机制?
追问:锁升级机制怎么实现的?可以从对象头来说Java有哪些GC算法?
了解过G1收集器吗?
追问:四个步骤中哪些步骤会STW?Java的内存区域
Java数据结构HashMap底层实现
HashMap扩容时发生死循环是什么情况?
ConcurrentHashMap底层
追问:ConcurrentHashMap扩容机制LinkedHashMap了解过吗?用于解决什么问题?
ArrayList和LinkedList的区别?
逻辑题
40亿个不重复、未排序的unsigned int,给一个x,有2G内存,如果判断x是否在这40亿个数之中?
算法题
LeetCode 88 合并两个有序数组
二面 8.23 15:30 (50min)
项目
主要问的实习项目的整体作用,以及过程中遇到的难点
基础
Java并发
ConcurrentHashMap和HashMap的区别?
ConcurrentHashMap锁的粒度?
Java与并发相关的关键字?
谈了一下synchronized,主要说了一下锁升级。同步方法和同步代码块?
追问:一般更推荐用哪种?
计算机网络得到网页的IP地址之后是如何建立连接的?
MySQL索引设计的原则
追问:给一个简单的SQL,问如何设计索引。
追问:两个用=判断的可以变换顺序吗?脏读、幻读是如何解决的?
追问:next-key lock的上锁区间是如何确定的?
这块问的比较细,追问了挺多关于锁的细节的,具体有点记不起了。
RedisRedis是单线程还是多线程?单线程为什么依然快?
Redis的多路复用是如何保证读写的顺序正确?
Redis实现分布式锁
计组从磁盘I/O的大致过程?
算法
LeetCode 2 两数相加
逻辑题
要吃一颗A药一颗B药,两种药看起来一样,现在手上有一粒A两粒B,怎样吃才能不浪费?
1000瓶液体,1瓶有毒,一小时毒发,需要多少只老鼠才能一小时试出哪瓶有毒?
美团成都,后端,java开发,一二面面经
作者:Jann
链接:https://www.nowcoder.com/discuss/714054?source_id=discuss_experience_nctrack&channel=-1
来源:牛客网
一面
聊实习项目和rpc 为什么用zookeeper做注册中心,zookeeper做注册中心存在什么问题(我讲了可用性不好,他意思还有别的问题,我不清楚了) 如果用redis做注册中心怎么做 zookeeper是AP还是CP型(我讲了顺序一致和线性一致) 讲一致性哈希的实现方式,一致性哈希扩容怎么做 讲 1.7 版本的 JVM 结构。。。 讲垃圾收集,CMS为什么不整理内存,G1为什么要整理内存 讲java的锁(讲了一下synchronized的锁升级过程) java线程池参数 MySQL索引,索引优化,索引失效,explain MySQL的ACID,原子性怎么实现的,隔离级别
二面
rpc的网络协议可以用哪些(http,tcp,udp) 用tcp和用http有些什么区别(只考虑到带宽占用,读写数据多少不同的性能差别,他说安全性,我觉得http和tcp没差) http的3xx状态码,https握手过程 golang里面协程间通信的方式 redis数据结构,redis的哈希表有什么独特的(渐进式rehash,为什么要用渐进式rehash),redis的跳表原理和效率 缓存击穿,一般是怎么造成的缓存击穿,一般怎么解决。怎么解决缓存数据和db数据不一致的问题 top 命令,有个 load average,三个数字是什么意思?(不知道),cpu负载的百分数 是什么意思?(答错了) 进程和线程,线程通信方式 fd的默认上限是多少?(不知道), io的本质(socket文件读写) 同步异步io,select和epoll 红黑树和AVL数的差别,应用场景 事务的隔离级别,MVCC原理,InnoDB索引,是不是所有场景都B+树适用 索引和锁的关系?(我讲了可重复读索引的行要加锁,他问行锁怎么加的,加到哪儿,不懂) 实习项目 算法题:二叉树层序遍历
效率很高,都是面完当天反馈,昨天面了一面,然后很快就约今天二面了,今天刚面完二面,又约hr了,开始许愿~
美团+java开发+秋招
作者:blingbling的小狮子
链接:https://www.nowcoder.com/discuss/713085?source_id=discuss_experience_nctrack&channel=-1
来源:牛客网
一面(90mins)2021/8/19
自我介绍 mysql四大隔离级别 脏读,幻读,不可重复读 MVCC底层原理 当前读和快照读及使用场景 mvcc线程安全吗? 对于 读读, 读写, 写写,mvcc会发生线程不安全问题? Myisam 和innodb, memory区别 mysql中行锁,表锁,及使用情况 举例innodb中行锁,表锁的使用情场景(面试官:where索引主键:行锁,where索引列:表锁,无where索引:表锁,EXPLAIN中的type字段:七大访问级别) mq消息中间件 mybatis redis 的应用场景 jvm模型及其各部分的作用 jvm 1.7和1.8的区别 concurrent包中都有什么? CAS原理,ABA问题如何解决 经典线程池有哪些?每个的底层原理是什么? 线程池的七大参数,及其工作过程 线程池四大拒绝策略 7大阻塞队列及其应用场景 为什么有survivor区?survivor的作用是什么?(面试官:防止碎片化) survivor区为什么分为to区和form区?为什么不分为三个区或四个区? hashmap 1.7和1.8的区别? hashmap 1.8删除节点,红黑树会不会退化为链表? ConcurrentHashmap底层原理和hashmap的区别 ConcurrentHashmap的层的vector,和lock的原理 hashmap和hashtable的区别 lock和sychronice的区别 AQS和lock的比较 Tcp三次握手,四次挥手,过程及原因 tcp,udp位于OSI哪一层? tcp和udp的区别 spring AOP底层原理 AOP 代理常用的都有哪些 手撕:链表的就地逆置问题 手撕:寻找链表的循环节点 反问
美团提前批面经(已OC)一面+二面+三面+hr面
作者:0xCAFEBABE_
链接:https://www.nowcoder.com/discuss/711968?source_id=discuss_experience_nctrack&channel=-1
来源:牛客网
一面 7.28 60min
基本上就是项目介绍+Java基础
自我介绍 项目中遇到的比较困难的事情如何解决的? 谈一下Java面向对象,什么是多态? final关键字。(答了对类、方法、变量的修饰)又问final修饰的对象和引用之类的。提到了static final 是常量,编译时确定,所以顺便又答了static关键字。 abstract关键字,啥是抽象类。和interface区别?你认为为什么要有抽象类?等等。 重载和重写的区别。后又聊到多态,方法签名。 Java中集合类的架构(答了一下Collection下面List、set之类的继承关系) ArrayList与LinkedList的区别,实现、操作、扩容等。 Java中为什么要有封装类?比如有int为什么要有Integer?(谈到在集合类中的使用,比如昨晚键值,面向对象的统一性,都继承自Object) Object有哪些方法,谈谈都有什么用?谈谈HashCode方法。 equals和==, 什么是反射?反射能获取private属性的嘛?哪里地方用到了反射? Java创建线程的方法有哪些?谈谈Callble。 Java Swing的事件机制是怎样的?答了怎么做,实现action匿名内部类方法。。但是面试官想问底层怎么实现的 线程进程?什么是线程安全?Java中保证线程安全有什么办法?(答了Synchronized、Lock、AQS、CAS之类的) Synchronized和Lock的区别? OSI七层模型,每层有哪些协议? HTTPS如何保证安全的?具体加密过程?(两次HTTP传输、对称非对称加密、8步) 算法,二分查找。在此基础上的旋转数组的二分查找。 反问。介绍了部门和组做的事情
二面 8.4 70min
二面面试官感觉是个领导,很友好和善,面试中卡壳的地方会说:没关系,我们继续。所以整个面试节奏很快、容量很大。
自我介绍 介绍一下项目。并谈谈项目中遇到的问题,在这样的情景下,进行怎样的改善的几个点。 如果叫你重新做这个项目,你有怎样的心得体会?有哪些经验教训? 你认为客户端开发步骤流程怎样的?开发中需要关注哪些点? 为什么要设计抽象方法、抽象类、接口?(一面问过,答得就不好,下去也没看呜呜呜) Java中的权限关键字,protected的含义 String abc = new String("abc"); 创建了几个对象? StringBuilder和StirngBuffer的区别。 线程和进程的区别?死锁。线程切换为什么比进程快? 线程状态 Java运行时内存区域划分。还问了几个很细的问题 synchronized关键字 谈谈CAS,哪些地方用到了CAS? 谈谈AQS。公平锁和非公平锁? volatile关键字。追问了能保证线程安全嘛?为什么有重排序? GC(算法、各种垃圾回收器)工作、回收线程并发、STW。如何判断是否应该回收?哪些部分可以作为GCRoots?(此时) 如果一个对象太大,或者说创建了很多大对象,会造成什么情况?(OOM)除此之外还有哪些情况会造成OOM? 用过Linux吗?问了一些命令:创建一个文件夹并在其里面创建文件、查看文件、修改权限(命令含义)、统计行数,grep使用方法,管道用法? 数据库熟悉吗?谈谈什么是第一第二第三范式。 写一个SQL,连表查询。有几种连表方式 谈谈知道的设计模式。(乌拉乌拉说了一堆) 代理模式怎么实现的?反射是什么,具体实现?能不能通过反射修改变量值?那能不能修改方法的内容呢? 原型模式中的深拷贝怎么实现?(答的序列化) 你在项目中使用了反射通过方法名调用了方法,有没有其他更好的办法呢? 设计模式中,简单工厂、工厂方法模式、抽象工厂之间有什么区别? 有哪些排序?稳定性是什么,哪些稳定? 自己遇到困难、压力特别大(比如任务完不成、难题突破不了)时会怎么做?有过这种情况嘛? 有什么业余爱好吗?(面试官:我们这可以打乒乓球😂~) 写一个插入排序、一个堆排序 反问
整体而言比较基础,但有些也挖挺深的。
三面 8.6 40min
三面感觉是leader的leader,感觉大都问的问题挺深的,,开局两个就没答上来
自我介绍 Java中多态的实现机制(答了是什么,然后依稀记得一些动态链接、虚方法什么的。。唉基础不牢啊) Java中泛型的实现机制 线程安全的单例模式,并解释两个if和volatile JMM模型 Java中的四种与引用(强软弱虚),软引用应用。 谈谈内存管理方式?虚拟内存是什么 算法:买卖股票问题 反问
面完当场以为挂了,因为好几个问题没答上来,算法题也有点小问题。。感觉都凉凉了,结果周五面完,周一(8.9)晚上接到了约hr面的电话。
hr面 8.12 25min
我看面经hr面都挺轻松愉悦的,为啥到我这hr面感觉比技术面还严肃 😂 😂
自我介绍 个人经历(由于跨专业考,多问了一些) 项目经历、遇到困难、如何解决的 人生经历中觉得最成长的一件事 觉得自己性格做事如何,有哪些有待加强的地方? 职业规划(具体是对客户端几大方向) 反问
面完内心:完了,那么严肃,问的问题又那么标准,还没有问意向工作地,估计凉凉了
面试复盘|美团-优选
作者:李爱乐
链接:https://www.nowcoder.com/discuss/711452?source_id=discuss_experience_nctrack&channel=-1
来源:牛客网
一面-816-1h左右
1.自我介绍。
2. Concurrent包用过没?用过哪些?说下ConcurrentHashMap的构造,为啥可以保证多线程安全?加锁加的是哪,扩容时怎扩容?
这里其实知识点特别多,建议大家从HashMap1.8开始看到ConcurrentHashMap,比如为啥HashMap1.8后结构的变化(桶数组),链表,红黑树。为啥必须是2的次方的初始化,为啥初始是16,链表是8(即注释里面那一大块数字表示的其实是概率),扩容的方式和触发条件,为啥用尾插。然后ConcurrentHashMap的volatile体现在哪,锁加载哪,那后扩容是哪个线程负责的?扩容在什么情况下会两个线程进行。
3.网络TCP和UDP的区别?使用场景?UDP一定不可信吗?为什么三次握手,为什么四次挥手?面向场景可以具体一点吗
4.操作系统:内存页面换出算法
我答了LRU和LFU,还有先进先出,问还有吗?我忘了。这个还有要别的吗
5.问问LRU和LFU的具体实习?
我说了LRU的两种实现,LinkedHashMap的实现、还有HashMap中套双向链表的实现。然后就问我LRU,尴尬的地方来了。
LFU这里确实记不清了,只记得是双HashMap实现,但是我记得双HashMap实现时间复杂度都是O(1)啊,面试官非说不可能O(1),一定是log(n),要是O(1)能引起业界的变革。下来查了一下,确实是O(1),尴尬。具体实现方式大家看下LeetCode,双HashMap确实是O(1)啊。
6.为啥用线程池?多线程和多进程切换的区别?
我回答线程的创建和销毁有代价,频繁创建不合算,所以用池化的思想。然后问我除了这个以外呢。我答无法控制线程数量吧。
多线程和多进程这里从单个进程的多个线程进行回答即可。
7.问Redis的过期?和内存淘汰策略(就LRU和LFU在Redis中的具体实现)。zset的实现。
跳表,跳表的实现。过期A开题和V开头检查范围的不同。
8.问我MySQL几种隔离级别?然后问我分别解决了啥?让我举例子不可重复读,问不可重复读和脏读的区别?这里其实我忘了细节了,尴尬,一般问的是幻读和不可重复读的区别,我想了半天忘了。
其实下来一查,脏读是A一个事务没提交B事务就读到了,不可重复读是B事务过程中,A事务调交前和A事务提交后读取同一列的值得到的结果不一样。主要就是看A提交与否。
9.然后问幻读咋解决?
其实这里有很大的歧义,从理论上讲InnoDB的不可重复读模式解决了一部分幻读,即快照读的幻读。但未解决当前读的幻读。上次京东面试官问我,我说不可重复读就解决了幻读,他说没有,不可重复读并未解决,要在业务上做保证。其实不就是加GAP锁和行锁变为next key锁么。即加for update等字段。因为我这样回答,京东以为我这里的知识点是混乱的,没给我解释的机会,自己在那给我说没解决,要在业务上做保证,就换下一个问题了。
我这里受京东影响说没解决,美团后面说其实算解决了,很尴尬。虽然存在当前读的问题。
但是我这次吸取上传的教训,咔咔咔提前把为啥没解决说了,面试官说他知道我明白。
其实这个问题大家一定要小心,我实习面美团的时候,知道这个,但是我当时对当前读和快照读的概念没有严格定义,从undolog的实现上解释了这个问题(其实是丁奇老师MySQL36讲里这里的内容),其实是正确的,但是面试官说和这个无关。(再次尴尬)。
追问我MVVC到底是用来弄啥的?我说一个乐观锁的实现,空间换时间,保证隔离级别的同时,还能提高并发程度。
10.撕题,最近公共父节点。
11.问你现在是否有offer。
12.反问。
美团优选,Java技术栈,to B。
供应链中招商家,对商家进行评级等各个模块。
美团的整体面试喜欢刨根问底,会反问你为啥,你答一部分会问你另一部分。但总体体验还行,没出现太大问题。
二面-818-45min左右
总体没问多少技术,一直问一些管理上的问题,包括技术踩坑。
1.自我介绍。
2.问我为啥技术栈有些多?我说项目原因以及甲方要求使得我不得不上手这些。
3.项目过程中沟通问题?最不能忍受同伴的编程问题?
4.如何和甲方沟通?
5.项目中为什么会出现跨域?说一下具体场景?
6.同伴沟通的新的。
撕题:
1.跳台阶。2.合并区间。
反问技术栈:SpringBoot做了些封装。
HR面-818-30min
效率快得和网上传闻的字节一样(而我字节很慢)。
1.自我介绍
2.职业规划
3.意向城市
4.本科专业和学校
5.已有offer
6.家庭情况
7.对美团的看法
8.工作环境和节奏的要求
反问我问了工作地点,朝阳区望京附近。然后问多长时间能出结果?3-5天。