美团面试-到店-Java后端一面
美团面试-到店-Java后端一面(凉)
真实时长:60min
一、面试官的介绍(5min)
面试官的部门介绍:具体是酒店订单等、团购等(餐厅、预订位置)、到店综合(订KTV等),这三块面试官说是比较核心的业务,虽然不如外卖,但利润强过外卖。
部门的服务:千万级商家的服务、平台化(通用业务下沉、为爆发业务单独做一些系统、下沉支持更多业务)、BP业务;网关、权限、商家等级划分、订单的JMV(不懂什么是JMV)
我问有什么问题?
二、正式面试 (55min)
个人介绍:项目、个人表现、我主要说了成绩、奖学金、辅修情况;最后说了面试的目的,是为了提升自己的软件开发水平。
项目:
面试官问了创训的项目;我详细介绍了自己的创训项目;哪个地方最有挑战? 哪里的技术是比较困难的?
这里我项目的算法设计已经忘得差不多了,所以举了一个类似CNN的例子,回答了面试的问题;
语言、你熟悉Python还是Java?(简历里有写):
1.String 为什么设计为final?
2.hashCode和equals的区别?(这里说的不太好)
3.hashCode用来做什么?
4.hashCode冲突怎么解决?我简要说了数据结构字典中对于hash冲突的解决方法:拉链法、开地址法,面试官问我还有吗?我就愣住了,随后就具体讲了讲hashMap的再散列过程+HashMap里的拉链法。
5.hashCode和equals什么时候重写?(没答好)
6.重载和重写(马的一时最瓢说错了,重写是对父类方法的重写,我扯到接口方法的实现了)
7.Java的异常分类(我只讲到了顶层的分类,具体的分支没有讲到,面试官想要知道更细化的分类,受检都有哪些)
8.Java容器的分类 Collection 和 Map 两大类 让我继续划分,没说出来;这里的类的结构很重要
9.用Map存储有序,保证插入顺序的意思?LinkedHash、TreeMap的具体应用需要了解一下,比如他们在什么场景;
10.HashMap的put过程
11.又具体问了,扫描每个桶链表的细节。我不知道他为啥问这个,我之前在put已经说过了,估计他没听。但这里说到了头插法,似乎让他很感兴趣。为什么不用尾插法?我说头插法,一是查找效率高,二是插入的快。这里他又给我辩论了很多,尾插***不会发生死锁,循环嵌套?我这里扯到同步队列去了,操,因为实在不知道单线程情况下尾插法为什么会出现死锁循环,而头插法不会出现死锁循环。
12.线程池的原理,我讲了大概设计的原理:
核心线程池、最大线程数量、工作队列、拒绝策略的四个方面。
13.线程池满,你是指什么?我这里的意思最大线程满了,所以会发生拒绝策略。而只有核心满了,对于满队列而不了队列的工作会再创建线程去处理,因为这时候整个线程池只有核心满了,还是可以创建的。
14.拒绝策略有哪些?(没答好)
15.线程状态,等待态和阻塞态的区别要注意下。
16.什么情况下线程会阻塞?(获取不到锁)
17.wait(10)会让线程进入什么状态?wait()究竟有什么用?我讲到进程间的通知等待模式
数据库:
1.索引的分类(搞清楚聚集索引、非聚集索引)
2.mysql的索引数据结构?innodb(哈哈我还真不会这个引擎,说了个b+树)
3.为什么用b+树,而不用二叉树呢?为什么不用b树?
4.你说你看过b、b+树的结构,那么删除、新增是如何变化?我不清楚b+树的增加删除操作,我讲了b树的增加和删除的流程。
5.事务有几种隔离级别(这方面看的少,就说了有四种,具体说出了两个)
6.可重复读解决了什么?我说了不可重读带来的问题
框架:
我直接说不了解了,她想问Spring
JavaIO:
我说没来及了解,异步IO
计算机网络:
1.TCP为什么能建立可靠的连接?我讲了三次握手的过程、三次握手解决的问题;
2.拒绝服务攻击,你了解吗?我说我不知道。他讲了三次握手可以防御这个,防御大量的伪造链接。然后我问说:这个跟DDOS是一样的吗?他表示赞同。
3.TCP除了三次握手、四次挥手,还有没有什么机制保证可靠传输?我讲了滑动窗口,控制流量这一方面的问题。(这里说的不好)
4.快重传(没答上来)
5.Http状态码,有哪些分类?每一类知道一两个可能比较好。
6.Http首部的构造,通常有什么字段?我就记住了我在季节兄弟说的content-length这一个非常重要的字段,不知道说错了没;(详细的字段没说好)
7.一个URL输入到地址发生了什么?
8.Http的缓存机制(没答上来,我说了缓存机制在1.0和1.1的不同,比如请求对象,他说行)
设计模式:
1.你知道哪些?
我说单例(饿汉、懒汉)、迭代器、适配器,我就知道这三个,详细说了下。但面试官想听到更多。
本来我想引导他让我写单例,但是他没那意思。
手撕代码(15min):
1.手撕之前,问我,一千万个数据,找前十个数据?堆排序,大根堆。(找最大的10个就维护一个大小为10的小根堆,否则反之)
然后面试官问,你说大根堆?为什么不用小根堆?我说大根堆最顶是最大的元素啊,因为要找前十个最大的。他又反复问我,我还是坚持了大根堆。这里我其实不太确定了,我觉得应该没错。
2.两个栈实现一个队列(很简单,他没让我做)
3.删除链表倒数第N个结点(原地翻转,删除第n个,再翻转)A了。
反问环节
面试官评价:你现在最大缺的就是项目,多去实习实习;多多实习没关系的。(我就是在等你给实习机会呀!笑了哈哈)
倒没说我基础不足啥的,虽然我确实基础不好,但他没说,却说了项目太少,有价值的项目。
总结
不管怎么样,继续学习吧。我非常想进大厂,身边有同学已经早早拿到了字节和美团的实习offer。经过一番抉择最终放弃了考研。这是人生的第一次大厂面试,还是菜,复盘才发现有很多问题没有讲清楚。再多复习复习,准备之后的秋招吧。
最后希望一面能通过
#实习##面经##美团##Java工程师#