写点什么

凡尔赛一波:美团面试就这?,java 工程师面试突击第二季分布式

用户头像
极客good
关注
发布于: 刚刚

其实我挺不想被问到 Spring 的细节的,框架这些我都没有复习不太记得了。所以我对面试官说 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 收集器。类加载:类加载的过程,Bootstrap?


classloader-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(真的是简单的)


15、算法题


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


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


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


终于到我提问环节了


=========


1、你们是什么部门(他说是核心部门,大数据研发)


2、我对高并发和负载均衡挺有兴趣的,但是我平时在学校也没有这个环境让我在这方面有所体验,那你建议我目前可以怎么学呢(他说这确实是不太好学,只能看些理论和别人的博客,以后工作中才能慢慢学)


3、中间件具体是做什么的,是解决高并发和负载均衡吗(他说差不多是的,然后他说我们这个部门不是中间件,是大数据部门啊,我说恩我知道)


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


这一面面完,口干舌燥,我一度怀疑他可能不知道我是在应聘实习生的岗位。有太多要总结的了,放在总结的地方一起讲吧。


美团技术三面 25 分钟


==========


面试官说是他是另外一个部门的,需要进行交叉面试。


1、MySql 优化


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


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


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


美团技术 HR 四面 30 分钟


============


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


1、自我介绍,都四面了还自我介绍?!我还以为是单纯的 hr 面,所以介绍的都是我的性格和生活方面的,结果并不是。


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


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


4、问研究生的科研题目,为什么选这个题,看了一些什么论文(细到问我那些论文是发表在什么期刊上的,作者是哪所学校的),为什么要选这个算法,怎么优化的,实验结果怎么跟别人作对比的,为什么比别人的算法好(一个个问题不断砸过来,我猜我说的那些专业名词他应该不太懂,只是判断一下是不是我做的而已。。)


5、确定实习时间 这一面确实让我感到有压迫感,项目是本科做的,挺久了,一些技术细节上也没太总结,所以问细了我只能连想带编,嘿嘿。科研方面倒还好,上个学期都在弄这个,一些算法的实现和改进、对比都还记得比较清楚,回答的挺流畅的,可能这真的就是技术型的 hr 面吧。


以上就是他的面试经历了,他事后也找我聊过,总的来说,他表达的意思大概是:在进行过系统学习后一定要多刷面试题!!!


但其实在我看来,基础知识是比较重要,但是并不会重要到对面试起决定性作用,因为对于企业来说,并不需要你能够记住多少知识,哪怕你一点都记不住,但是能够实现产品的需求,并能够说明其中的来龙去脉,说白了就是看你的动手操作能力和业务能力。如果你是一个死记硬背,记下来一大堆理论知识,但是到实际操作的时候,那些理论知识往往只是纸上谈兵,不过在面试前刷刷题还是有必要的。(有必要但不绝对)当然应届生还是要多刷题的,因为应届生在面试之前,大部分都有笔试,刷题还是很有必要的。


前段时间我闲下来也整理过一些面试题,现在把它分享出来,希望能对各位读者老哥有些许的帮助。


需要资料的小伙伴,点赞加收藏,关注我之后添加小助理 vx:bjmsb6666 即可获取免费下载方式


数据库


===


  • 请简洁描述 MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?

  • TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 数据类型上做什么?

  • MySQL 中有哪几种锁?

  • Redis 是什么?两句话做一下概括

  • Redis 实现原理或机制

  • 什么是 MongoDB

  • MongoDB 的功能与适用场景

  • Redis、memcache、MongoDB 对比



开源框架


====


  • Spring IOC 如何实现

  • 说说 Spring AOP

  • Spring 的单例实现原理

  • Spring MVC 运行流程

  • 说说业务中,Netty 的使用场景

  • Netty 线程模型

  • 说说 Netty 的零拷贝


![面经分享:美团面试也太难了!4 面美团终成 Offer](https://img-blog.csdnimg.cn/img_convert/df899d


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


0a37318622188d3be969538ddf.png)


微服务


===


  • 前后端分离是如何做的

  • 微服务哪些框架

  • 说说 RPC 的实现原理

  • 说说 Dubbo 的实现原理

  • 说说 CAP 定理、 BASE 理论

  • 如何应对微服务的链式调用异常

  • 如何拆分服务



消息中间件


=====


  • activemq 的几种通信方式

  • activemq 如果数据提交不成功怎么办(消息丢失)

  • activeMQ 发送消息的方式有哪些?

  • 为什么不应该对所有的 message 都使用持久化机制?

  • 向不存在的 exchange 发 publish 消息会发生什么?向不存在的 queue 执行 consume 动作会发生什么?

  • RabbitMQ 中的 broker 是指什么?cluster 又是指什么?



乐观锁与悲观锁


=======


  • 何谓悲观锁与乐观锁

  • 两种锁的使用场景

  • 乐观锁常见的两种实现方式

  • 乐观锁的缺点

  • CAS 与 synchronized 的使用情景



设计模式

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
凡尔赛一波:美团面试就这?,java工程师面试突击第二季分布式