快手日常实习面经
应该是支付相关方向,记录一下面经。
一面-0218
- 自我介绍
- 服务的注册发现流程
- 获取服务列表的并发安全问题
- 如果获取到servicelist后,某台服务不可用了,会怎么样?
- 随机负载均衡如何实现的?
- 熔断器如何实现的
- 限流器如何实现
- 固定窗口的限流算法实现;状态的记录、状态的变更滑动窗口的限流算法实现
- 优惠券的秒杀实现原理:
- 锁的key是什么
- 为什么用redis预先领取+MQ落库
- 如果一个用户同时发起多个请求,可以避免该用户超领吗
- 原子类如何实现的?
- 算法:
- 画出B+树结构
- 一些sql场景,会不会走索引。联合索引在 > 和 >= 的不同
- 岛屿数量
二面-0306
可能是leader面
- 自我介绍
- 拷打RPC项目
- 介绍 netty
- BIO NIO AIO 的区别
- 已经有 TCP 的心跳了,为什么还需要再自己写个心跳?
- 打开 本地 IDE 拷打代码
- Promise 是什么
- 多个线程调用 channel.writeAndFlush 会不会有线程安全问题
- 算法:一个双向链表的的 add removeAll 方法,一些细节没注意到
- 反问:能实习多久,项目的代码要搞懂
三面 0310
montor面,偏基础
- 自我介绍
- rpc项目
- 服务怎么基于注解自动注册
- 几种设计模式:模板方法、策略、动态代理
- 滑动窗口算法如何实现的
- 漏桶算法和令牌桶算法的区别
- 优惠券的领取功能如何实现
- 锁的类型:
- 乐观 悲观锁、共享 互斥锁、公平 非公平、重入 不可重入乐观 悲观的适用场景。
- 并发安全的类:
- atomicInteger,volatile关键字的作用
- mysql
- 间隙锁:共享导致的死锁问题
- 联合索引建立,select a from table where b > 10 and c != 1 and d = 1;
- https的安全保障
- 算法题:零钱兑换。
- 面对一致性的权衡:基本都是用户级别的锁,基本没有一把大锁的场景。