写点什么

历经 4 轮 2 小时,终于斩下美团 offer!

  • 2022 年 4 月 21 日
  • 本文字数:1920 字

    阅读完需:约 6 分钟

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


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


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


  • 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 这个我不知道,就没乱扯,直接说不知道


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



[](()美团技术二面 60 分钟,详细问答




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


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


  • 其实我挺不想被问到 Spring 的细节的,框架这些我都没有复习不太记得了。所以我对面试官说 Spring 里面的一些比较重要的机制我理解的还不错,然后我用一个实际的例子把我对 IOC、AOP 理解讲了一下,他听了说对,理解的不错(难得遇到一个边面试边能给反馈的面试官,好开心)


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


  • 这里我就主要讲了 Synchronized 关键字,还有并发包下面的一些锁,以及各自的优缺点和区别。volatile 关键字我主要从可见性、原子性和禁止 JVM 指令重排序三个方面讲的,再讲了一下我在多线程的单例模式 double-check 中用到 volatile 关键字禁止 JVM 指令重排优化。


3、集合:HashMap 底层实现,怎么实现 HashMap 线程安全


4、JVM 内存管理,GC 算法,HotSpot 里面的垃圾回收器、类加载


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 全称是啥,我猜是异步的 Java 开源项目【ali1024.coding.net/public/P7/Java/git】 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(真的是简单的)


15、算法题


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

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

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


终于到我提问环节了

总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视 JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。


最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。



用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
历经4轮2小时,终于斩下美团offer!_Java_爱好编程进阶_InfoQ写作社区