写点什么

美团四面 Java 岗,终获 offer,我是这么回答面试官的

作者:钟奕礼
  • 2022-12-09
    湖南
  • 本文字数:4004 字

    阅读完需:约 13 分钟

前言

经历了 10 月的疫情挣扎与 11 月失业的煎熬,终于来到了春末的 12 月,内心的压力也稍稍的松懈了一些,终于可以放心找个工作了,可是随着的等待面试的机会的越来越少,这份焦虑反而越来越大,也偶尔会想,是不是应该换一条出路。

当然,我还是想在坚持着试一试!!!

终于,我等到了一份美团的面试通知,满怀忐忑的我,经过了两天的准备,顺利约上了面试,对于还在失业且没有进过大厂的我来说,这谁一次不可多得的机会,我必须要好好把握!


美团我是在智联网上投的简历,之前也投过一次,简历都没通过删选,后来花钱请人帮着改了一次简历,重新投另一个部门,获得了面试机会。12 月 4 日中午 HR 打电话过来预约了下午 4 点半面试,说会在线写代码,让我准备好网络环境。结果 5 点半还没打电话过来,被放鸽子。与 hr 重新沟通过后,确定 5 号下午再面,可是跟 hr 沟通预约这一套貌似在美团并没有什么用。


美团技术一面 20 分钟

晚 7 点,因为想到第二天才面试,我刚准备出去吃个饭,面试官的电话就来了。开头就是各种抱歉,说开会拖延了。

1、自我介绍

说了很多遍了,很流畅捡重点介绍完。


2、问我数据结构算法好不好

挺好的(其实心还是有点虚,不过最近刷了很多题也只能壮着胆子充胖子了)


3、找到单链表的三等分点,如果单链表是有环的呢

用快慢指针,一个走一步,一个走三步。如果有环,先判断环在哪,找最后一个节点,然后用之前的无环的做法


4、讲一下项目的架构

我重点讲了 MVC


5、说一下你熟悉的设计模式

我重点讲了单例、工厂方法、代理


6、有没有配置过服务器啥啥啥

这个我真不知道,都没听过呢,只能诚实说没有,毕竟都没法扯。

一面挺匆忙的,我估计面试官刚开完会还没吃饭呢。他说让我等,可能再找一个同事面我,可能就直接告诉我结果了。从一面面试官的声音和口吻,我判断他一定是个部门老大,问的设计偏多,后面 hr 告诉我他就是我要去的部门的老大。哈哈。


美团技术二面 60 分钟,详细问答

一面刚完洗了个苹果正准备吃,刚才的电话又来了。(感觉今晚状态不错哈!)

二面:跟一面比起来,二面面试官的声音听起来就像是搞技术开发的,果不其然,一个小时的纯技术电话面试!面的特别全面!


面试官:有没有用过 Spring,Spring IOC、AOP 机制与实现,Spring MVC?

ps:其实我挺不想被问到 Spring 的细节的,框架这些我吃着苹果再加上没怎么复习都不太记得了。


1、 面试官:有没有用过 Spring,Spring IOC、AOP 机制与实现,Spring MVC?

所以我对面试官是这么说的:Spring 里面的一些比较重要的机制我理解的还不错,然后我用一个实际的例子把我对 IOC、AOP 理解讲了一下。

面试官听完:感觉你理解的还不错啊!(难得遇到一个边面试边能给反馈的面试官,好开心!)

Spring MVC 其实我用过,我就对面试官讲了我的项目中用到的 Servlet,jsp 和 javabean 实现的 MVC,以及 MVC 各个模块职责以及每个模块是怎么联系到一起的,最后我补充了一句我想 SpringMVC 的思想其实跟这个是一样的(他说对的,嘿嘿有反馈真好)


2、 面试官:那么多线程怎么实现线程安全,各个实现方法有什么区别,volatile 关键字的使用,可重入锁的理解,Synchronized 是不是可重入锁?

:重点描述了 Synchronized 关键字,还有并发包下面的一些锁,以及各自的优缺点和区别。

volatile 关键字我主要从可见性、原子性和禁止 JVM 指令重排序三个方面讲的,再讲了一下我在多线程的单例模式 double-check 中用到 volatile 关键字禁止 JVM 指令重排优化。


3、 面试官:HashMap 底层实现,该怎么实现 HashMap 线程安全呢?

:规范的讲解了 HashMap 底层是数组加单链表实现,Node 内部类,add 的过程,Hash 冲突解决办法,扩容,三种集合视图。HashMap 线程安全的实现方式主要讲了 HashTable、ConcurrentHashMap 以及 Collections 中的静态方法 SynchronizedMap 可以对 HashMap 进行封装。

以及这三种方式的区别,效率表现。


4、 面试官:JVM 内存管理,GC 算法,HotSpot 里面的垃圾回收器、类加载是什么样的?

:JVM 内存主要分为五个区,哪些是线程共享的,哪些是线程独享的,每个区存放什么。

GC 方面:怎么判断哪些对象需要被 GC,GC 的方法,Minor GC 与 Full GC。HotSpot GC 算法以及 7 种垃圾回收器,主要讲了 CMS 和 G1 收集器。

类加载:类加载的过程,Bootstrapclassloader-ExtClassloader-AppClassloader,父类委托机制。


5、 面试官:进程和线程的区别是什么?

:从调度、并发性、拥有的资源和系统开销这四个方面进行回答的。


6、 面试官:HTTP 有没有状态,我说无状态,怎么解决 HTTP 无状态

我:怎么解决 HTTP 无状态其实就是怎么进行会话跟踪,有四种方法:URL 重写、隐藏表单域、Cookie、Session!!!


7、 面试官:Java IO,NIO,Java 中有没有实现异步 IO?

:Java IO 实现的是同步阻塞,它是怎么实现同步阻塞的。我用了 read()方法举例来讲的。NIO 实现的是同步非阻塞,并详细讲了一下 Selector 中的 select()方法轮询说明它是如何实现多路复用 IO 的。然后对比了一下两者的效率。

面试官可能看我对这一块比较了解,又继续问;(我内心是崩溃的)


面试官:Java 中有没有实现异步 IO?

:感觉好像没有。

面试官:有,你在想想。

(其实这里我并不清楚啦),所以我就对面试官讲了一下我对 Unix 中异步 IO 模型的理解,然后说:至于 Java 里面有没有我真的不太清楚。

结果面试官竟然笑了,说:你理解是对的,Java 里面有没有不重要!哈哈...


8、 面试官:前端会不会,Ajax 是什么,Ajax 实现原理能解释下吗?

也比较坦诚:前端只是会用一些 js,用过 jquery 框架,Ajax 全称是异步的 js 和 xml。

Ajax 实现原理不太懂,我就只简单讲了一下它通过 XMLHttpRequest 对象进行异步查询,Ajax 引擎在客户端运行,减少了服务器工作量。


9、 面试官:请设计一个线程池

:因为我简历中有写到我对多线程、并发这一块理解比较好。所以他老问这方面的题。这个问题因为我之前看过 ThreadPoolExecutor 的源代码,所以我就仿照那个类的设计思路来想的,详细讲了一下核心池、创建线程可以用工厂方法模式来进行设计、线程池状态、阻塞队列、拒绝策略这几个方面。设计的还算比较周全。


10、 面试官:讲几个设计模式,哪些地方用到了,为什么要用?

: 单例模式,jdk 中的 getRuntime();工厂方法模式,ThreadPoolExcutor 用到 ThreadFactory;观察者模式:java.util 包下面的 Observable 和 Observer。

最后主要讲了一下工厂方法模式的使用场景。


11、 面试官:Mysql 优化、索引的实现

从数据库设计优化和查询优化两方面讲的:索引 B+树实现,InnoDB 和 MyISAM 主键索引的实现区别,一个聚集一个非聚集。


12、 面试官:事务的隔离级别

四种隔离级别,可能会出现哪些异常,mysql 中默认级别。


13、 面试官:有没有用过 Hibernate、mybatis、git?

;(这里就不多说了)简单讲一下就好,分别是干什么的就行!


14、 面试官:Linux

:这个大学本科时期学过,但是很久没用,命令忘光了。

他说没事,考你几个简单的:cd、ls、dir(真的是简单的,So easy)


15、 面试官:算法题

:1、从 10 万个数中找最小的 10 个,时间复杂度分析(最大堆,考虑内存)

2、从一个有正有负数组中找连续子数组的最大和,时间复杂度分析(动态规划)

3、满二叉树第 i 层有多少个节点,n 层的满二叉树共有多少个节点


终终终、终于到我提问环节了,哈哈!!!

:你们是什么部门

面试官:我们是核心部门,从事大数据研发这块!

:其实我对高并发和负载均衡挺有兴趣的,但是我平时接触的少,也没有太多环境让我在这方面有所体验,面试官你能建议建议我目前可以怎么学呢?

面试官:沉思了一下..... 这个确实不太好学,你只能先看些理论和别人的博客,在之后的工作中再去慢慢学习!

:好的,那请问中间件具体是做什么的,是解决高并发和负载均衡吗?

面试官:差不多是的,但是我们这个部门不是中间件,是大数据部门(我说:恩,我知道!),然后巴拉巴拉一通技术就完事了。

最后没啥问题了,并且让我保持电话畅通。

这一面面完,口干舌燥,我一度怀疑他在面试管理岗位。那我都给整蒙圈了!!!


美团技术三面 25 分钟(关键性的来了)

二面过后;面试官说是他是另外一个部门的,还需要进行一轮交叉面试!!!(内心苦涩)

总的来说就是以下几个知识点

1、MySql 优化

2、说下项目做了些什么,架构之类的

3、在 collabedit 上在线写代码,题目很简单是编程之美上的原题,一个有序的整数数组,输出两个数,使它们的和为某个给定的值。之前做过很快写好,然后给他讲思路。他继续问如果数组无序怎么办,先排序。

4、两个文件,每个文件中都有若干个 url,找出两个文件中相同的 url(用 HashMap)。

这一面还是挺简单的,只是增加之前面试没有过的在线写代码环节,collabedit 后来我才了解,像 facebook 一些互联网公司远程面试都会用这个在线编辑器写代码,就是文本文档写,没有提示,不能编译运行,跟白板写一样。平时练练手就好。

美团技术 HR 四面 30 分钟(激动人心的时刻到了!)

ps:三面面试官说他那就是终面,说我过了等 hr 联系我。万万没想到半小时后的 hr 面居然也是技术。


一:还是自我介绍,都四面了还自我介绍?(内心想法)

我还以为是单纯的 hr 面,所以介绍的都是我的性格和生活方面的,其实并不是!!!

二:问项目。

问的特别特别细,技术细节,还有遇到什么问题,怎么解决的,做项目有没有人带,怎么跟别人沟通等。

三:数据库优化

如果数据库一个表特别大怎么办 数据库优化我就讲了之前讲过很多遍的点,他问一个表特别大怎么办:大表分小表,怎么实现:使用分区表。

4、问了曾经的实战项目专题和相关的资料

项目还是刚开始工作时候做的,中间也间隔挺久了,一些技术细节上也没太总结,所以问细了我只能连想带编, 哈哈。资料内容方面倒还好,手机里保存了不少,一些算法的实现和改进、对比都还记得比较清楚,回答的挺流畅的,可能这真的就是技术型的 hr 面吧。


最后,本次面试分享就到此结束了,小编在这里还给大家准备了后续全套的笔试、面试真题!

资料已整理成文档,免费获取,需要的小伙伴可以+ VX: mxk6072

企业分类





技术分类





各位程序员朋友们,这些文件已经整理好了,免费获取,需要的小伙伴可以+ VX: mxk6072


用户头像

钟奕礼

关注

还未添加个人签名 2021-03-24 加入

还未添加个人简介

评论

发布
暂无评论
美团四面Java岗,终获offer,我是这么回答面试官的_Java_钟奕礼_InfoQ写作社区