秋招面经-快手-Java开发工程师
1、自我介绍
2、项目一拷打(10min)
3、Java中线程池任务提交的流程是怎样的?
4、线程池的拒绝策略有哪些?
5、提交到任务队列的任务,它的消费策略是怎样的?
6、如果是无界队列,还需要非核心线程吗?
7、无界队列存在什么问题?一般在什么场景下使用无界队列?
8、谈谈 Java 里面锁消除和锁升级
9、synchronized 可重入吗?能保证可见性吗?
10、某个服务 CPU 利用率到 100% 了,如何排查?
11、如果是 OOM 了怎么排查?
12、自己有用过 jmap 和一些工具去排查过错误吗?
13、MySQL 有几种事务隔离级别?从低到高说
14、什么是幻读?
15、MySQL 是怎么去解决幻读问题的?
16、谈谈 Kafka
17、为什么项目中技术选型用的是 RabbitMQ?
18、RabbitMQ 的数据持久化是怎么做的?
19、线程和进程的区别?
20、线程的安全怎么保证?
21、进程通信的方式有哪些?
22、进程间通信,它的数据传输大概是怎样的流程?怎么能让数据从一个进程传递到另一个进程去?
23、Redis 常用的数据结构有哪些?
24、谈谈 ZSet 的具体实现?为什么数据规模大的时候采用跳表而不是压缩列表?
25、查一个有序集合里面元素的个数,复杂度是多少?命令是什么?
26、取有序集合某个元素的分数,命令是什么?复杂度是多少?
27、做题:给你一个有序的且含有重复元素的数组,找出某个元素出现的次数。例如 nums = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4],再给定一个 target,如果目标值为 1,则返回 1,因为 1 只出现了 1 次;如果目标值为 2,则返回 2,因为 2 出现了 2 次;以此类推。(利用有序的条件,通过二分查找去找 target 值的左右边界,然后右边界减去左边界的值即可)
28、反问