滴滴内推研发岗面经
今天去面了滴滴研发岗,说是面经可能也算不上,把面试记下来的一些问题和大家分享一下:
一面
1. 集合中的各种List实现类有什么区别?各自的优势和不足
2. hashmap实现的的数据结构是什么样的?当hash冲突过多时会怎么处理?何时处理?
3. 在多线程中使用Lock需要注意哪些地方?
4. synchronized关键字相关的问题,一个类中有四个方法,两个加了synchronized,一个没加,一个加了static synchronized,当一个线程已经获取到第一个加了synchronized的方法的锁,第二个线程此时能访问到哪一个方法?
5. String s = new String("abc"); 这个语句执行时对应的堆、栈和其他存储区域的情况
6. int a=300; int b=300; Integer a=300; Integer b=300;Integer a = new Integer(300); Integer b = new Integer(300); 这三组ab分别执行a==b的判断结果是什么?
7. servlet处理请求的流程,有哪些方法?
8. Spring拦截器有哪些方法?多个拦截器执行时方法调用的顺序?
9. MySQL的联合索引什么情况下可以生效
10. Linux指令,答对了tail,grep等,查询端口占用情况没答出,应为netstat
11. 项目中是如何使用quartz的?
12. 说一下快排和归并排序的思路。
二面
1. 手写代码:合并两个已排序的数组,要求去重。
2. 处理问题:统计一日内打车次数top10的用户,现有的数据是一个巨大的log文件,文件内容是用户pid和单次打车的时间,内存只有4G,怎么处理?
3. 写一下建堆的代码,说一下用这个堆处理top k问题的复杂度。
4. 描述一下项目上线的流程,如何定位bug
5. socket编程了解吗,socket accept的过程? 都没答上来
6. Linux处理小量数据的top10问题,用哪些指令,能写个脚本出来吗? 没写出来
7. 多线程编程,如何控制锁的粒度?
三面
1. 画一下你实习的项目结构,讲一下项目的流程。
2. 写单例模式,如果一个线程进入双重校验锁里对instance进行new的操作,由于操作不是原子操作,instance的值已经不是null,但还没完成赋值另一个线程这时候也来获取instance的值,就会获取到错误的值,怎么避免这个问题?
3. Java里怎么应用信号量?
4. 你不是计算机专业的,说说你是怎么学习Java的
5. 项目中订单有哪些状态,它们之间如何进行转化?
6. 项目中缓存更新失败了怎么办?
7. 在实习公司的做这个项目你有哪些收货?总结两点
8. 如果要你设计一个线程池,需要设计哪些接口?写一下伪代码吧
9. 画一下tcp的三次握手四次挥手。 为什么要3次,两次不行吗?在socket编程中这些对应的是什么操作?(还有这种操作???)
10. 写一下Java快排的代码,讲一下思路,为什么要随机化处理。