美团和滴滴面经(补充准备的问题及相关链接)

校招期间面的公司不多,美团和滴滴的面完写了面经,希望可以给大家做个参考


一、美团二面
总结:
1)面试全程没有引导,只抛问题,问题相对比较开放,应该是想让我多回答,但是很多问题就一句话带过了,而且很多都不懂,有些问题答错。
2)没有算法题;
3)开始的时候就问想做什么方向,回答没有重点,然后说他们做大数据离线处理,回答也可以做,最后告诉说认为我去的意愿不是很强烈;
4)最后说基础知识不扎实,尤其是java基础,让去别的公司试一下,难道不能校招了?面完怀疑自己还能不能找到工作
具体问题:
1. 自己为什么不留在新浪和网易
2. 具体想做的方向,java可以实现的工作
3. php和java的区别 php多线程
4. zookeeper启动要启动几个server
5. 跳表
6. java的concurrent包中看过的源码 concurrentHashMap atomicXXX threadPool等怎么实现
7. thrift和其他rpc的区别
8. 项目中遇到的难点(为啥项目中没有什么技术难点, 要归纳一下)
9. kill -9 和 kill -15的区别
10. 动态代理实现的两种方式 (1. 使用invacationhandler+proxy 2. 字节码)
11. 死锁必要条件
12. redis的数据类型, 如果使用序列化存在redis里和直接使用对象存到redis里的区别 序列化和反序列化占的时间
13. synchronized锁实现原理
14. 有没有看过github上别人的项目、有没有自己做的小项目、有没有自己的博客、自己的优势、
15. 红黑树和平衡搜索二叉树的区别
16. CAS底层实现
17. java8 和 java7 垃圾回收的区别
18, 关于搜索引擎的源码
二、滴滴三面
(1) 一面
自我介绍,面完之后给了一个建议说知识面应该放宽一点,要不以后发展受局限,还以为挂了,打车走了一半,发现发了二面通知。。
问的问题:1、A B两个线程并发执行,执行完成后C执行,如何设计程序 2. 生产者消费者问题 3. 出了一个题,文件*100万个数,都是大于零的数,随机生成一百个不在这个文件中的数(最后提示用bloom过滤器和map-reduce) 4. treemap和hashmap的内部实现 5、blockingqueue的内部实现, 怎么实现阻塞 6. 线程池的内部实现 7. 如何实现同时执行一万个线程,让其模仿压力测试 6. 发生死锁后应该怎么办 7. synchronized和lock的区别,lock阻塞时如何设置超时
(2) 二面
自我介绍、问看过那些技术博客和技术书籍,有没有跟过开源项目 (时间较长,一个多小时)
问的问题: 1. 四次挥手过程 2. 装饰器模式和适配器模式的区别 3. 跳表和b+树的区别(不知道啥意思) 4. 问了很多多线程同步的问题(一开始问题没答好,会有提示) 5. 出了一个题:文件中存了三列数据(startIP, endIP, area), 给一个ip,问如何确定area 6. valitile的作用和实现 7. CMS垃圾回收的过程,哪些过程会出现stop-the-world ,当cms时 8. 垃圾回收如何调优 9. linux命令 $?的含义 10. hashmap和concurrentHashMap的区别和底层实现
(3) 三面
自我介绍,有点像压力面,问自己深入研究过的东西,要求一直说,不能只说表面的东西,面的时间较短(半个小时差不多), 美团面完对这种面试已经有阴影了, 问我是哪儿的人。。觉得自己沟通能力怎么样。。。
问的问题: 1. synchronized和lock的底层实现原理
2. nginx的大概架构,哪个进程负责建立连接
3. 写了一个简单的二分查找

------------------------------------------------------分割线------------------------------------------------------------------
一些准备的问题及相关链接
0. 哈希一致性 解决分布式集群的平衡性、分散性、负载均衡性
1. hashmap实现源码
2. 锁类型 复杂,需要多看
3. synchronized实现机制 偏向锁、轻量锁和重量级锁都是用于synchronized的
4. 进程间通信的方式 管道(包括无名管道(只能用于父子进程通信)和命名管道)、系统ipc(消息队列、信号量、共享内存)、socket 进程通信和线程通信的关系
5.线程同步的方式 Event, Mutex, 信号量Semaphore, 临界区资源等
java中使用 synchronized、reentrantlock、atomicXXX(一个同步代码块只能使用一个该变量)
6. jvm shutdown hook
7. mysql 事务隔离级别 未提交读、已提交读、可重复读、可串行化
8. http长连接和短连接
9. 服务注册和发现基础框架
包括: 负载均衡方案、服务网关、服务容错
当前业界比较成熟的微服务框架有Netflix的Karyon/Ribbon,Spring的Spring Boot/Cloud,阿里的Dubbo等。
10. transient 修饰的变量,在对象序列化时不会被序列化进去
11. java中1L<<32等于4294967296,而1<<32等于1
对于int类型的整数移位a>>b,系统先用b对32求余,得到的结果才是真正移位的位数
对于long类型的整数移位,同上,不过是对64求余
12. volatile happen before
13. 单例模式 懒汉(四种线程安全模式)和饿汉
使用readResolve方法解决反序列化后非单例的问题, 或者使用enum(默认实现了readResolve)
14. c# 执行存储过程
15. keep-alive
16. 布隆过滤器 (位图+哈希)
美团和滴滴面经(补充准备的问题及相关链接)

17. BlockingQueue内部实现
阻塞同步使用lock锁的多条件(condition)阻塞控制
18. ExecutorService内部实现
19. 强引用 软应用 弱引用 虚引用
20. GenericObjectPool & GenericKeyedObjectPool
21. kill -9 危害
它没有给进程留下善后的机会:
1) 不能 关闭socket链接
2) 不能 清理临时文件
3) 不能 将自己将要被销毁的消息通知给子进程
4) 不能 重置自己的终止状态
22. assert 需要开启jvm的断言 在jvm参数中设置-ea开启
23. 多线程模拟瞬间高并发 (使用CountDownLatch类控制线程数,也可以使用CyclicBarrier)
24. AbstractQueuedSynchronizer (AQS)
25. fork join框架
26. sso
27. 观察者模式 一对多(发布/订阅模式, 二者有轻微差别:观察者模式是被观察者调度,发布/订阅模式是调度中心调度)
(2)http://www.cnblogs.com/lovesong/p/5272752.html (与发布订阅模式的区别)
(3)http://zhangjunhd.blog.51cto.com/113473/68949/ (java中的Observable和Observer)
28. nginx的特点
29. redis zset实现(跳表+哈希表)
30. zookeeper机群中实例的数量
31. java反射与动态代理