一面
- 自我介绍
- 项目和业务
- redis分布式锁实现细节
主要用到的命令
需要注意点
怎么保证别人释放锁,不把我的key delete掉(通过判断value值),且怎么保证线程安全 (lua脚本保证原子性) - redis ttl 返回值 >0 ,-1 ,-2都是代表什么
- redis 过期策略 和 定期删除、惰性删除
- zk 分布式锁 和 redis分布式锁区别
- CAP理论相关, 为什么C和A不能兼容
- 怎么实现可用性
- 对比rabbit MQ 、rocketMQ 、 Kafka
- Kafka的分区备份有几个最好
- 异常体系
- 分别举例 error,运行时异常,受检异常
- HashMap key是一个类,需要注意什么 (重写hashCode和equals)
- HashMap 并发为什么会成环
- HashTable 和 ConcurrentHashMap
- 多线程相关
- 算法题:m个大小为n的有序数组合成一个 (采用归并算法 + 小顶堆)
二面
- 项目和业务
- 整个开发部署运维和线上诊断问题的流程
- 服务出现假死怎么办
- 排查线上问题
- 怎么找出大量full gc的原因
- 线程池核心参数
- 有序高并发用户状态更新
(userId, status)
后端需要实时更新用户状态,且要保证状态更新的顺序性,怎么用线程池做?
可以用多个线程池,通过一些算法把userid映射到具体的线程池去执行任务
怎么保证更新的顺序性,怎么自定义拒绝策略? - 各排序算法时间复杂度
- 归并排序
- 二分查找
int binarySerach(int[] array, int startInclusive, int endInclusive, int value);
[1, 2, 3, 4, 4 ,5]
输入:
0, 5, 4
输出:
3
输入:
0, 5, 8
输出:
-1
int maxBinarySearch(int[] array, int value)
输入:
[1, 2, 3, 4, 4, 5]
输出:
4
- String add(String a, String b)
a, b >= 0, 十进制, 非空,合法输入
“123” + “456” = “579”
“1” + “99999” = “100000”
(由于 整型相加容易溢出,实现String相加)
三面
- 面试官简单的自我介绍
面试官是负责两个大团队的大佬=-= - 前面面试的感受
面试官专业、耐心、态度好 - 为什么考虑换工作
- 挑一个熟悉的中间件讲下
redis 、zookeeper - redis为什么单线程还快,为啥不用多线程
- redis单线程可能会出现的问题
这个没答上来
会出现什么问题呢? - redis sortedse t底层数据结构 及查找时间复杂度,按key或score分别是多少
- 算法题:
比较简单,没给我扔一道二叉树、图、动态规划的题,已经很好了=-=
主要考察String 相关API
一个数据文件是csv格式的,即逗号分隔,字段用单引号包起来,但是现在拿到一个文件不规范,
例如: 1001,’Jack’,jack@xxx.com
希望其写一个程序将其规范化为:’1001′,’Jack’,’jack@xxx.com‘这样的标准格式
再比如
‘1002’,Mc\’Grady,mc@xxx.com
hr面
- 实习经历
- 实习和工作经历对你的帮助
- 业务和项目
- 介绍最近做的一个项目
- 遇到什么困难,怎么解决
- 业务和技术上的提升
- 为什么离职
- 职业规划
- 目前薪资
- 期望薪资
- 兴趣爱好
- 优缺点