(转)美团面试题整理

背景:最近美团在招聘,打算好好准备准备简历,然后投递一波。


美团点评 社招 一面(3.6中午)结果通过 美女面试官

1 HashMap的put怎么实现,如何解决hash冲突。
调用putval,计算相应hash码,然后初始化(默认64的capacity)或调用resize函数调整大小,判断bucket是否有值,若没有在数组初始化改值。若有则以拉链法(链表的形式)解决hash冲突,这里和ThreadLocalMap不一样,ThreadLocalMap使用的是线性探测法,接着将相应节点加入链表头部。如果超过8个元素会进化为RBtree,防止hash攻击。
RBtree是怎样的数据结构,有什么性质?
二叉树,有序的,四种性质。从而推得路径最长2n,最短n。复杂度为log2N.(此处省略n多话,感兴趣的同学请自行Google)
RBtree什么时候会变色?
旋转时,共有四种旋转方式。一般是为了保持平衡,如左边太长,右边太短这样。(打哈哈过去,具体记不清了)
hashmap什么时候会调整大小?
根据负载因子来搞事,默认为0.75。
什么是负载因子?
根据capacity来,举个例子,当capacity为100时,如果HashMap的ele的数量到了75就会resize,resize后的大小为原来的2倍,这样可以直接使用位运算得到原来的元素新的hash值。
扩容存在什么问题?
(楞了一会,发现应该是说多线程的情况)然后说了多线程会有死循环问题。如果要解决可以使用concurrentHashMap。
为什么有死循环?
扯了半天,发现不画图,只通过电话根本扯不清。然后说就是因为1.7扩容后链表会逆序,1.8不会,所以1.8没这个问题,1.7就是两个线程同时扩容,一个扩到一半,到另一个了开始并完成扩容,之前那个再继续,就会出现。(然后说小姐姐,有机会我当面画给你看,开个玩笑)
  8.你刚才提到concurrentHashMap,你知道怎么实现吗?
     1.7使用分段锁,分为16个,每个segment可以视为一个hashtable,然后一次一个线程只锁一个segment,减小了锁的粒度,提高了并发。1.7使用的是Lock的实现类,可重入锁来同步的。1.8使用的是CAS和synchronized。如果已有元素,需要解决hash冲突,会使用synchronized锁住相应的bucket,然后再添加,同样元素在八个以上会转化为RBtree。
  9.你提到Lock,知道哪些相应的锁?
   读写锁,可重入锁
10.知道AQS吗,他的实现是怎样的?AQS可重入吗?
知道,读写锁,可重入锁都是通过AQS实现的,AQS维护一个链表,并主要提供tryacquire和tryrelease方法。默认为非公平锁,此时当一个线程需要请求锁时...

11.AQS如何实现可重入

维护一个int类型的status作为计数器,同一个线程acquire就加1,release就减1.到0就释放锁。读写说则是将status分为两部分使用。内部维护一个shift变量做位运算的变化。。。(AQS可以看占小狼的blog或者并发编程的艺术)

12.这个计数器的修饰符是什么
volatile

13.volatile什么作用
指令重排序,内存可见性
14、指令重排序指什么?指令重排序的好处是什么?如何防止指令重排序。
编译器重排序,cpu重排序,内存重排序。好处是流水线技术,提高并发性能等。通过禁止编译器优化,以及汇编使用Lock信号,java中的cpp加入volatile等防止。
15.内存可见性具体指什么?volatile通过什么机制防止

讲了下JMM,以及计组原理中的三级cache,buffer,缓存行等。

顺便扯了下c语言的volatile只保证防止编译器优化以及内存可见性的语义,而不能保证顺序性。然后是C11的acquire,release语义 接着回归java,扯了下内存屏障的实现与作用。(并发编程的艺术)然后扯了下#LOCK信号,包括总线锁,mesi的缓存一致性等。最后是先行发生的语义(语无伦次,不过基本点都讲到了)

16.synchronized内部分为几种锁,他们的使用场景是什么
偏向锁,轻量级锁,重量级锁(又有自旋锁等),然后详细讲了实现和使用场景(周志明的书和并发编程的艺术都有讲,此处省略)。

 17.nio用过没有

没有,讲了下自己准备学习netty,然后谈了下c语言的nio,包括Nginx和redis的多路复用,然后讲了下select和epoll的区别。以及epoll的优点和实现。然后设想java里的nio应该也是映射到epoll里面。

18. 操作系统调度进程有哪些算法?

优先级,时间片,FIFO,最近deadline什么的。

19.Redis有几种持久化方式?

四种,2种被废弃,比如磁盘交换。目前主要使用rdb,aof。rdb属于物理备份,aof属于逻辑日志(逐行追加)。然后又讲了aof重写。rdb和aof的配置。以及aof的rewrite机制。

18.Redis分布式的实现方式

(此处省略,Redis的设计与实现有详解)

19。 数据库特性
ACID,顺便分别提了下实现原理

20.具体讲下隔离性。
四种隔离级别和实现方式

21.如何理解一致性?

说了下单个事务的一致性,以及分布式一致性。

22 一致性的三种级别
强,弱,最终一致性

23,持久性的实现方式

redo,同时使用insert buffer等方式。

24. 问了下希望base在成都还是北京

25. 结束,有什么问题吗?

java开发3轮技术面+hr面 面经

java开发3轮技术面+hr面 面经

技术一面:
一面基本上面的还算基础 没有过多的刁难 不过问题量特别大
1、自我介绍
巴拉巴拉,大致说了下实习和自己平时自己喜欢做的事情
2、我们先聊聊java基础知识吧,说出Object类的常用方法?

toString(),clone(),线程的三个方法:wait()notify()notifyAll(),hashcode(),finallize(),equals()
1
大致讲了上面这些个方法 并说了下各个方法的作用。。。。
3、刚刚说到object的常用方法,这些方法你应该都很熟悉吧,那你说说你对equal和hashcode这两个方法的认识?
主要谈了下两个的作用 以及 当重写equal方法时候一定要记得重写hashcode方法,然后面试官就问了为什么,然后就继续巴拉巴拉。。。
然后面试官紧接着问 两个对象如果equals那么这两个对象的hashcode一定相等么 回答是! 那如果两个对象的hashcode相等那么这两个对象是否一定equals?回答 不一定!理由其实 就是 关于 讲重写这两个方法的情况。。。。
4、多线程用过吧?写过一些demo,那你说说多线程之间的通信,回答用wait sleep notify notifyAll配合使用 然后就问 wait和sleep一样吗?回答不一样,然后巴拉巴拉谈了下,关于对象锁的释放,是否需要唤醒。。。
5、嗯,刚刚谈到了锁,一下面试官就扯出了锁,看你简历上ssh mybatis都熟悉,那你知道悲观锁和乐观锁吧?答知道,然后讲了下两个的区别以及应用场景
6、你平时数据库一般用的什么 mysql 那你说说在工作中一般用的什么数据库引擎 答 mysql默认的是InnoDB存储引擎 敢情面试官想给我使绊子来着,接着就让说InnoDB和MyISAM之间使用场景问题了,然后就就着这两种存储引擎的区别 以及 优缺点巴拉巴拉说了一通
7、平时是怎么处理事务的,讲下对事务的了解
巴拉巴拉。。。。
8、看你简历上讲了分库分表 谈谈两个的使用 以及 在工作中 怎么去设计
这里主要是结合自己实习的项目来说的
9、mybatis缓存 以及谈谈你们项目为什么用spring mvc+mybatis 而不用Hibernate?
主要是说说一级缓存 二级缓存 然后 讲讲mybatis相对于Hibernate来说的优点好处之类
10、项目里用到了redis 为什么用它?
巴拉巴拉讲了一通业务需要 缓存数据 实现会话缓存的机制之类
11、.java如何实现多态
讲了下重载和重写
12、谈谈java的垃圾回收机制
从java提供垃圾回收机制说起,谈到了回收时机 何时回收 以及几个常用的垃圾回收算法,然后面试官问了解G1吗,听过但没具体了解了,实话实说,就没再继续了。。
13、谈谈网页登录模块里记住我这个功能?
从session一直到cookie,巴拉巴拉说了下各自的实现原理 以及缓存机制。。。
14、谈谈三次握手四次挥手 以及为什么是三次 为什么是四次 一定要是四次吗?
巴拉巴拉 结合网络中 那两个图来就行了,肯定不一定是四次 具体原因 大家知道。。。
15、如果让你设计一个大型网站,你觉得哪些东西是需要考虑的 为什么?
巴拉巴拉 谈了负载 谈了缓存 谈了框架 然后面试官继续问 就这些吗 然后继续扯 服务器 接着扯 。。。。
16、数据结构学的怎么样 算法这块?
还行吧,一直有刷题(其实是最近才刷 想哭)
好吧 问的差不多了 今天到这里吧,这两天手机保持通畅,然后问我有什么问题要问的,然后我就问了团队,问了面试情况,问了招聘最后会考虑学校吗 实在没底 因为看小哥聊得挺好 所以才敢问的。。。。

技术二面;
1、三次握手四次挥手
(其实没搞明白为毛mt这么喜欢问这个问题 之前看面经好的童鞋提到了这个问题 还有就是没让自我介绍 我以为是要走过场了)
2、sql注入了解么
谈了下 注入的原理 以及登录功能模块中 sql注入的 实现
3、集合框架肯定经常用吧?
于是自觉的从Collection聊到list arrayList vector LinkedList set map HashMap hashtable都通通扯了一遍,语速太快 感觉就跟背书一样 面试官笑逗了,就说 小伙子背的不错吗,面试宝典没少看吧 我无语!!接着就继续说,你刚刚说的那些都是比较浅的东西,我问个比较基础的吧,你知道HashMap的数据结构和实现原理吧? 数组和链表的结合体 顺便谈了下底层数组Entry 实现原理这块 主要是说了下 hashing、put和get的实现过程,以及当遇到空值以及当两个键有相同hashcode值的处理。。。然后问我知道ConcurrentHashMap不 于是又讲了下这个和synchronizedMap的区别 以及 效率问题。。。
4、谈谈volatile
。。。。然后又问知道ThreadLoca不。。。。。
5、写代码:解决生产者消费者问题
用了Semaphore手写的代码 大概花了一些时间 跟面试官讲了下实现。。。
6、问设计模式,百问不爽的答单例模式 让说了四种单例模式的实现办法?饿汉式 饱汉式 枚举 然而我只说了这三种(好像还有一种最佳实践 用内部类来实现)。。。
7、问了下java内存模型 讲了下垃圾回收算法
又是一通巴拉巴拉 比较了各个算法的优劣和问题之类的。。。再问G1,幸亏一面后来去看了下,于是说了下大概的认知。。。
8、Java内存泄露的问题
大致又扯了下垃圾回收 然而好像不是面试官要的答案 尴尬。。。。
9、谈redis和memcached
。。。。
10、用过NIO么,没用过(我是讲真话没用过 不敢说用过)跳过
11、聊get post,http状态码,http header
巴拉巴拉说了下自己了解的,不是很满意感觉。。。
12、讲ssh搭建
。。。。
13、谈spring mvc
。。。。
这讲框架的两个问题 就跟聊天一样 你一句我一句的。。。。
14、谈spring的事物管理
。。。。
15、谈线程池
。。。。。
16、你有师兄之类的在mt么 为什么想来mt
巴拉巴拉。。。。
最后没让问问题 没说下一面任何事情(以为挂了)

技术三面:
1、自我介绍+项目
。。。
2、怼项目,死怼,谈业务需求,谈遇到的问题
。。。。
3、还是项目,你在项目中做了以图搜图,你是怎么实现的,谈谈你的处理过程?
谈了下图像检索的认识 聊了下自己用的sparse coding算法 谈了下降维算法 说了一大通 不知道面试官挺懂没。。。。
4、讲下数据库优化
主要说了索引、数据库结构优化,然后牵扯出红黑树,让手撕红黑树,然而写不出来,讲了下大概实现。。。数据库结构优化主要讲了下在项目中做到的表拆分和分区。。。
5、谈谈tomcat服务器
巴拉巴拉。。。。
6、讲下sql的left join、right join、inner join
这个简单。。。。
7、谈spring的过滤
大致讲了下登录过滤的实现。。。
8、继续谈spring mvc的分层 以及问了些常用的注解
。。。
9、谈谈IOC
。。。。(又一送菜题)
10、连表查询:笛卡尔积通过什么连接得到sql
巴拉巴拉 谈笛卡尔积的实现。。。。
11、对‘a’,‘b’,‘c’,‘d’排序,排成指定的顺序
这个我不会。。。
12、算n个数内的质数的和
这个简单,用一个数组保存所有质数 然后计算数组的sum即可。。。
13、一个圆环上有n个点 a从任意一个点出发 到达下一个点都需要Ag能量,每一个点都有cg能量补给,假设a最初有Bg能量,问a最初Ag能量为多少能保证a绕圆环一周。。。
最后一个问题大致是这样的。。。。。
14、谈谈自己的学校
第一次遇到这样的问题,还是技术面里。。。。。。。

hr面:
1、why投mt
。。。。。
2、why投外卖配送bu
。。。。
3、自己最想从事什么行业
。。。。。
4、为什么打算在上海工作,打算长期发展吗?
。。。。。
5、三个词语概括自己的性格
。。。。。
6、为什么读研?
。。。。。
(又一次遇到这个问题 第二次了 因为是工作的时候考研的)
7、换我来问问题了。。。。

大概想起来的就上面那些 技术面的比较深刻 就大概记录下吧 很多问题 回答起来估计要很多时间,大家参考参考就行 祝大家早日收到offer。。。。

美团内推(一面+二面+三面)面试题目

美团一面(电话)

  1.  自我介绍
  2.  项目介绍
  3.  Redis介绍
  4.  了解redis源码么
  5.  了解redis集群么
  6.  Hashmap的原理,增删的情况后端数据结构如何位移
  7.  hashmap容量为什么是2的幂次
  8.  hashset的源码
  9.  object类你知道的方法
  10.  hashcode和equals
  11.  你重写过hashcode和equals么,要注意什么
  12.  假设现在一个学生类,有学号和姓名,我现在hashcode方法重写的时候,只将学号参与计算,会出现什么情况?
  13.  往set里面put一个学生对象,然后将这个学生对象的学号改了,再put进去,可以放进set么?并讲出为什么
  14.  Redis的持久化?有哪些方式,原理是什么?
  15.  讲一下稳定的排序算法和不稳定的排序算法
  16.  讲一下快速排序的思想

美团二面(现场)

  1.  自我介绍
  2.  讲一下数据的acid
  3.  什么是一致性
  4.  什么是隔离性
  5.  Mysql的隔离级别
  6.  每个隔离级别是如何解决
  7.  Mysql要加上nextkey锁,语句该怎么写
  8.  Java的内存模型,垃圾回收
  9.  线程池的参数
  10.  每个参数解释一遍
  11.  然后面试官设置了每个参数,给了是个线程,让描述出完整的线程池执行的流程
  12.  Nio和IO有什么区别
  13.  Nio和aio的区别
  14.  Spring的aop怎么实现
  15.  Spring的aop有哪些实现方式
  16.  动态代理的实现方式和区别
  17.  Linux了解么
  18.  怎么查看系统负载
  19.  Cpu load的参数如果为4,描述一下现在系统处于什么情况
  20.  Linux,查找磁盘上最大的文件的命令
  21.  Linux,如何查看系统日志文件
  22.  手撕算法:leeetcode原题 22,Generate Parentheses,给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。

美团三面(现场)

  1.  三面没怎么问技术,问了很多技术管理方面的问题
  2.  自我介绍
  3.  项目介绍
  4.  怎么管理项目成员
  5.  当意见不一致时,如何沟通并说服开发成员,并举个例子
  6.  怎么保证项目的进度
  7.  数据库的索引原理
  8.  非聚簇索引和聚簇索引
  9.  索引的使用注意事项
  10.  联合索引
  11.  从底层解释最左匹配原则
  12.  Mysql对联合索引有优化么?会自动调整顺序么?哪个版本开始优化?
  13.  Redis的应用
  14.  Redis的持久化的方式和原理
  15.  技术选型,一个新技术和一个稳定的旧技术,你会怎么选择,选择的考虑有哪些
  16.  说你印象最深的美团点评技术团队的三篇博客
  17.  最近在学什么新技术
  18.  你是怎么去接触一门新技术的
  19.  会看哪些书
  20.  怎么选择要看的书

 

 

 

猜你喜欢

转载自www.cnblogs.com/lixuwu/p/10836372.html