14号正好是周二,按照约定上午十点半去美团总部面试,公司位于望京,出了地铁口步行800多米就到了。来到总部大楼,映入眼帘的是《美团点评集团综合指挥部》,好吧,够霸气。
二楼签完到,接着去5楼签到,接待人员都很热情,签完到坐了7分钟左右,由人事MM过来通知我开始面试,把我领到类似于休息区的地方,这里有很多独立的小圆桌,后来又陆陆续续来了好多面试者,坐在不同的白色圆桌上等待着面试官的到来。
不一会,我的第一个面试官来了,好吧,看着很年轻,一张娃娃脸,感觉比我还小的样子,不过人不可貌相,起身问好,面试开始。
(问题不分先后,答案会稍后给出,因为是面试互相交谈,所以选取了一些突出的问题在这里列出,并且把我的一些简单回答附上)
第一轮面试问题:
1.a的n次方,伪代码实现,注重效率问题
2.jdk源码看过吗?把arraylist的实现写一下
3.mybatis只提供接口,那么在使用时,接口的实现在哪里?
通过代理实现。
4.为什么要自己实现消息通讯协议?怎么实现的?怎么收发消息?怎么做消息同步?
协议的实现重点考虑消息对象的序列化以及消息的收发模式、消息的同步等。
5.poll方法是同步还是异步?它与select方法有什么区别?
答:poll方法是同步。select方法可以实现一个线程同时监听多个channel,并处理相应事件。
6.Linux操作系统怎么进行jvm调优?都有哪些常用命令?调试线程栈的命令是什么?
7.如果一个远程服务器经常拒绝连接,请给出具体问题定位的步骤?
8.怎么实现的分库分表?
9.直接内存原理?请说明JavaNIO中直接内存的使用方法?你们项目中是怎么用的?
10.两个大文件各有1T,存储了字符串,快速查找两个文件的交集(重复字符串),内存限制1G,考虑实现效率。
第二轮面试问题:
1.kafka的原理是什么?可以用来做什么
2.说说同步/异步,阻塞/非阻塞的区别
3.说说java NIO原理
4.jvm内存模型?老年代使用哪种垃圾收集算法
5.消息中间件性能调优时,具体怎么做的调优?
6.都有哪些代理的实现框架,至少说出5种?spring底层是怎么实现代理的?
答:源代码层面:jdk动态代理
字节码层面:cglib、javassit、asm
编译器层面:AspectJ
7.说说怎么保证幂等性
8.io多路复用的优势在哪里?
9.jvm为什么要指令重排?jvm都有哪些性能优化措施?jit编译器的原理?
10.请说明TCP/IP的通信过程
答:三次握手、四次挥手
11.redis有哪些优点和缺点?和memeched有什么不同?
第三轮面试问题:
1.synchronized是怎么实现的?和lock的区别是什么?
2.流式计算框架storm的原理?你们系统选择他的原因是什么?为什么不用dubbo,dubbo也能实现消息通信,RPC调用
3.elasticSearch的原理是什么?是怎么实现的?是怎么实现快速模糊查询的?
4.数据库用的什么数据结构?底层存储怎么实现的?为什么要采用这种数据结构?tier树和B+树区别?
5.每个用户都有1000个订单,现在想快速从以前买过的订单里,查询“麻婆豆腐”,注意订单里有有“麻等等婆等豆腐”这样的菜单也需要查询出来
6.系统为什么用memcached做缓存,跟redis有什么区别
7.说说AIO的原理?说明AIO和NIO的区别。
操作系统底层IO一般分两步:第一步内核把数据准备好;第二步数据从内核空间拷贝到用户空间。
按照上述两个步骤进行阐述。
8.说说linux常用的io模式
9.说说rocketMQ的优点,为什么采用他?它与其他的消息队列有什么不同?
10.听说过倒排索引吗?原理?
11.有一个系统需要做负载均衡?请设计架构怎么去实现负载均衡,考虑易用性?
答:应用层:DNS负载均衡、http反向代理
ip层:NAT、ip tunnel
链路层:DR负载
12.LVS的原理是什么?能不能应用到反向代理比如nginx服务器上?
直接修改ip地址的源地址及目的地址,
13.请说明线程池都有哪些优化措施
14.为什么选择hessian,常用的通信框架有哪些?和google proto buffer有什么不同?
15.创建线程池都有哪些方法?请说明每种方法不同的应用场景
16.假如有一个线程池,下一个线程依赖上一个线程的计算结果,问题1 :怎么保证相互依赖的线程之间的执行顺序?问题2:如果中途一个线程异常中断,问怎么去定位这个异常的线程,并采取相应措施。
17.请说明hbase原理
答:底层用hdfs做文件系统存储,zookeeper做同步,regionserver等等。
17.从tcp双网里接收消息后,怎么保证消息不丢失?有没有采取事物?如果是多台服务器怎么做到消息一致?假如一台服务器挂掉,怎么快速恢复数据?并保证是最新的数据。
答:采取AOL预先写log方式。
18.请说明怎么保证网络数据的安全?
答:加密;
问:怎么加密?
答:双方约定加密算法,采用MD5或SHA计算签名
问:中途被窃取怎么办?
答:用userid+user密码的方式,或者token方式,做输入key,黑客即使知道加密算法,但是不能逆向解密。
19.oracle和mysql的数据库隔离级别有什么不同?怎么避免幻读?
20.为什么要考虑netty?原理是什么?
21.目前系统中jvm采用了哪种jvm收集器?命令是什么
22.volatile有什么用?使用场景有哪些?能否保证数据原子性?
23.怎么实现乐观锁和悲观所?都有哪些乐观锁?ReentrantLock是什么锁?CountDownLatch实现原理及应用场景?
24.一共有8台nginx服务器,4台提供服务,另外4台做双活备份?怎么实现这8台服务器的资源利用率最大?
25.你们系统是怎么实现双活的?都有哪些实现方式?
26.memcached是分布式吗?怎么实现memecached的分布式?
答:memcached是伪分布式。采用hash散列法在客户端业务层面实现分布式。
问:如果采取hash散列,增加服务器时,还需要再次散列,效率如何?
27.一致性哈希的原理
28.https的原理是什么?
http+ssl,CA认证等。
29.lucene原理是什么?使用了那些算法?
第四轮hr面试问题:
1.为什么现在离职?
2.自己想做什么方向的工作?
3.目前薪资?期望薪资?
4.从上一个公司学到了什么东西