美团面试-到店-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工程师#
全部评论
大根堆那么堆里是一千万个元素,然后10次取堆顶,占用内存大。用小根堆堆里就10个元素,第11个元素进入后调整堆,弹出堆顶的那个最小元素,那么就可以保证堆里的元素就是最大的那10个,省内存。
5 回复 分享
发布于 2021-05-17 00:56
确实是要用小根堆的
3 回复 分享
发布于 2021-05-16 22:16
HashMap多线程下,jdk1. 7是头插法导致死循环,1. 8是尾插法造成数据覆盖。
3 回复 分享
发布于 2021-05-17 10:52
是小根堆
1 回复 分享
发布于 2021-05-16 23:05
想问下楼主什么时候面试的
点赞 回复 分享
发布于 2021-05-16 21:58
我感觉一个小时内答那么多还加手撕代码很紧凑啊
点赞 回复 分享
发布于 2021-05-17 03:29
😂楼主紧张了吧
点赞 回复 分享
发布于 2021-05-17 06:25
老哥,简历是写了什么项目
点赞 回复 分享
发布于 2021-05-17 13:31
同22届,加油加油
点赞 回复 分享
发布于 2021-05-17 18:56
估计这个部门比较核心所以面试问得比较深入🤣
点赞 回复 分享
发布于 2021-05-17 21:45
堆排序手撕了吗
点赞 回复 分享
发布于 2021-05-20 12:07
同,面试答得还挺好,凉
点赞 回复 分享
发布于 2021-09-03 15:12

相关推荐

11-26 00:10
门头沟学院 Java
chenxinxu:现在招聘的都学精了,你光学点数据库和中间件做个应用型项目人家看不上,你得有点可以“吹水”的高谈阔论的“高大上”的玩意,比如写点什么“基于分布式 Raft 共识性算法的XXX”balabala 的,然后做了什么详尽的 benchmark 怎么优化的吞吐率性能之类的,看起来就是科研论文研究领域。现在人不都这样吗,他知道的知识都是白菜,他不知道的领域都是高端,找点让大部分人看起来高端的玩意写
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
22
178
分享
牛客网
牛客企业服务