和一面间隔了一个星期,下午面了两个面试官。基本上全程问我秒杀项目的问题。
PART 1
- 秒杀项目的架构
- 限流组件,限流算法,滑动窗口,然后让写滑动窗口的伪代码
- 基于多线程改造上述代码
- ConcurrentHashMap的原理
- volatile 原理
- 如何防止超卖
- 可以用分布式锁锁住库存。
- 或者是在redis里面预减库存,成功后再往MQ里发。
- redis怎么减库存,redis的分布式锁的原理?
- zookeeper的分布式锁,具体原理(这个问得很细)
- 分布式锁采用curator,然后说了下curator是如何实现分布式锁的。
- zookeeper的临时顺序节点时怎么保持有序的?
- zookeeper集群中的只有一个leader是负责数据的写入,所有创建临时顺序节点都是在leader节点上操作,创建时的取当前目录下临时顺序节点的最大序号,然后在次基础上加1,如果创建失败则获取最大的节点序号,再重新创建。
- 服务挂掉了,锁怎么释放?
- zookeeper客户端和服务端有会话保持,heartbeat机制与服务端保持有效的会话,会话有超时时间,只有在规定时间内重新连接上集群中的服务器,会话才能继续保持。
- kafa的模型
- producer、consumer、broker、partition、replica等等
- broker和broker之间的怎么通信?
- broker之间的地址和端口是存储在zookeeper上的,zookeeper充当注册中心的角色。比如partition有多个副本,一个leader和多个follower,leader和follower进行通信就需要从zookeeper中获取地址和端口。
- Kakfa怎么保证同一个topic的消费的顺序?
- producer写的时候指定一个key,相同key的数据会分发到同一partition中去,而且这个partition中的数据一定是有顺序的。
- consumer从partition中取出数据的时候,也一定是有顺序的。
- consumer中多个线程来并发处理消息,因为单线程太难了,多线程又不能保证顺序消费。
- 写 N 个内存 queue,具有相同 key 的数据都到同一个内存 queue;然后对于 N 个线程,每个线程分别消费一个内存 queue 即可,这样就能保证顺序性。
- producer生产的速度大于consumer消费的速度,会发生什么,怎么解决
- 扩展partition,或者增加consumer
- 设计一个分配有序的分布式ID的模型
- 面试官举的是论坛的例子,论坛底下是一层一层的,每一条留言对应一个ID,有序且唯一
- 回答采用雪花算法(1bit + 41bit-时间戳 + 10bit-工作机器Id + 12bit序列号)
- 然后问雪花算法的原理,问是否还有其他的吗,然后我回答还有美团的Leaf,但是原理还是不懂。我真是给自己挖坑的好手。
一个面试官问的大部分问题给忘记了,等想起来再补吧。上述大部分是第二个面试官问的。
PART 2
如下,*表示星星,可上、下、左、右、左上...等8个方向组成星座,如果两个星座的星星数量相同则为一个星系,计算有多少星系,最大的星系有多少星星。
5 7
......
..**..
.....
......
......两个链表找公共节点
不知道为什么连续收到字节两份感谢信,3号发来一份,5号又发一份。
全部评论
(6) 回帖