前言
我是懿,一个正在被打击却努力前进的码农。这就是我面试美团的一些经验,希望各位能加快自己的脚步,补充自己的知识,早日进入大厂,完成自己的目标!面试官最后对我说,其实很多东西底层都是相通的,这些东西有时候你会用,但是你不知道他到底是怎么实现的,这就有很大的问题了,因为你不知道他怎么实现,所以当它出现问题的时候,你根本不知道怎么去处理,所以你现在欠缺的是把如何用变成为什么用?这句话让我醍醐灌顶呀,确实,现在太多的东西都知道怎么用,但是为什么用,这么用有什么好处却真的不知道。
第一面 -- 30分钟
1、自我介绍: 我巴拉巴拉,一堆,感觉还是讲得不好,应该多夸夸自己的,多讲讲自己知识的广度,让面试官知道自己学过很多东西然后重点提自己擅长的地方的,让他一会问自己擅长的,在以后的面试要好好改改。
2、项目: 我大二的时候跟着网上视频做了一个校园订餐系统,让我讲这个,因为面试一点都没有准备,跟他说了是简单的项目,他简单问了一下我登录模块的实现。我觉得自己答得不太条理,应该把功能重登录到二次登录完全讲一遍的。这里按自己以前怎么做,怎么说就可以了。
3、知不知道负载均衡: 这里我只简单用过nginx的负载均衡,就简单讲了一下我是怎么用nginx做负载均衡的,nginx多个服务端地址,设置权重,nginx接收前端请求然后分发到不同的服务端去做业务,降低单个服务端的压力。因为没学原理,就没深讲了。
4、Java中String、StringBuilder、StringBuffer区别: 常规问题,我从是否可变,使用场景、线程安全上回答了,应该差不多了
5、MySQL乐观锁悲观锁: 我觉得这里是我答得最不好的地方了,因为我当时这个没有分点答;我先讲了什么是乐观锁和悲观锁,然后讲了多版本并发控制(应该讲一下成功怎么样,失败怎么样),行锁(共享锁,排他锁)、意向锁(共享和排他锁,这里我忘记强调是表锁了);因为先说所有强调乐观锁的具体实现主要就是多版本并发控制,悲观锁的加锁后一个事务的流程。
6、如何优化一个慢查询SQL: 索引+SQL质量。(有必要自己亲自去做一做慢查询优化)
7、如何添加索引去优化,添加索引有什么注意事项: 我感觉不难,高性能MySQL里面都有讲。。。
8、表内有三个字段,id,name,version,如何在高并发下安全修改name: 我这里也没有答好,(一开始我就像多版本并发控制不就能解决了吗,为什么还要自己再加一个version)我的回答是1、加锁(我感觉加锁是最简单粗暴的,悲观锁直接锁住行记录)2、因为我看有个version,肯定是有不加锁的解决方案的,我就说每次修改的时候先获取一次version,修改的时候判断获取的version与数据库里面的version一致才能修改,不一致就修改失败,而且修改的时候会让version增加。
9、线程池的拒绝策略有哪些: 忘记了,就说了有一个是直接丢掉不处理。(太久没用了)
10、面试结束,我有没有什么想问的: 我问了我如果过了去哪个部门:他说是去订单派分发部门,这个部门应该算是美团的核心部门之一了,毕竟美团的业务主要也是平台接单,派单给快递小哥。如果美团过了,还是核心部门转正几率还高的话,那就美团实习了,希望我实习前能收到后续面试吧。
第二面 -- 50多分钟
1.聊聊sychronized关键字,用法,底层实现,偏向锁,轻量级锁,自旋锁。 2.聊聊偏向锁,轻量级锁的原理和过程。 3.除了sychronized,还有啥,聊聊ReentrantLock,底层一个继承了AQS的实现类。 4.聊聊AQS,volatile修饰的state,加锁过程,公平锁和非公平锁的实现。 5.TCP和UDP的区别。 6.三次握手和四次挥手的过程,为什么这样。 7.聊聊ThreadLocal,为什么要用threadLocal,ThreadLocalMap中,key和value分别哪个是强引用,哪个是弱引用,我迷之坚持value是强引用。。。 8.线程的状态以及状态变化过程。 9.CMS和G1的区别。 10.聊聊Spring中的动态代理,实现了接口的用JDK动态代理,未实现接口的通过CGlib动态代理,动态代理和静态代理的区别。 11.常用设计模式,策略模式的原理和应用之后的话就是聊项目,做了哪些,遇到了哪些问题代码题:两个链表代表的大数进行相加,我用两个栈分别保存链表,然后出栈的时候用头插法生成新链表,感觉时间复杂度没有最优,但是也过了面试官介绍部门和业务的时候很热情也很详细,然后说等HR通知~总的来讲,比起字节跳动,美团的面试稍微简单一丢丢,因为不会问的太底层,太发散,然后两家公司的面试官都很赞,很有耐心也很热情!
第三面 -- 40多分钟左右的样子
第二面面完之后,我当时很庆幸,和面试官聊得还行,于是,有了第三次的邀约面试,这次面试感觉就不如之前的面试了,总体面试体验不是很好,因为是第三面了,结果最终倒在了这一轮,成功的被美团拒之门外,这次面试可能确实是一个坎,我给大家说一下都有哪些问题。
-
如何排查线上出现的 JVM 的问题。
-
给你一个接口,你如何处理重复的请求。
-
TCP/IP 协议,三次握手和四次挥手到底是怎么回事。
-
分布式的 Session 如何处理。
目前我好像记住的就是这个四个问题了,这四个问题,自我感觉,这四个问题,面试官好像是一点都不满意,结果不用想,其他的回答上来的问题,记得不太清楚了,其中有何第二轮面试相似的题目,而我,成功的倒在了第三轮面试中。
其实说真的,我没抱希望能够进美团,毕竟人家是大厂,问的东西确实很给力,最后的这几个问题,面试官还给我做了解答,虽然没有通过面试,但是面试官给我的一些建议我还挺高兴的。
总结
其实通过这次面试,我也总结出大厂对社招人员的一些要求:
- 性能优化,数据结构和算法(非常重要)。
- 高并发,怎么处理这类的事情。
- 数据库的分库分表,底层实现,索引优化。
- 基础(HashMap,JVM,Mybatis,Http,TCP/IP)。
最近针对互联网公司面试问到的知识点,总结出了Java程序员面试涉及到的绝大部分面试题及答案分享给大家,希望能帮助到你面试前的复习且找到一个好的工作,也节省你在网上搜索资料的时间来学习。完整版Java面试题地址:JAVA后端面试题整合
内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等技术栈。