字节教育后端二三面凉经

和一面间隔了一个星期,下午面了两个面试官。基本上全程问我秒杀项目的问题。

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号又发一份。

#内推##面经##秋招##字节跳动#
全部评论
这算法题...
点赞 回复 分享
发布于 2020-08-02 19:10
求问楼主像 hashset 这种底层的东西要去去准备的话看面经就足够了吗?还是说需要吃透书?求问
点赞 回复 分享
发布于 2020-08-03 07:28
楼主base哪
点赞 回复 分享
发布于 2020-08-03 16:49
不用broker之间如何通讯楼主是怎么回答的啊?
点赞 回复 分享
发布于 2020-08-04 20:26
看面经里做java投字节的基本都凉了
点赞 回复 分享
发布于 2020-08-17 10:39
 好难
点赞 回复 分享
发布于 2020-08-17 21:00

相关推荐

点赞 评论 收藏
分享
03-07 13:32
门头沟学院 C++
D0cC:你是本科生吗,太厉害了
点赞 评论 收藏
分享
评论
3
47
分享

创作者周榜

更多
牛客网
牛客企业服务