字节面试案例

字节跳动
一面
问项目
任务系统怎么保证任务完成后发奖一定成功
zset 延时队列怎么实现的
redis 数据结构有哪些?分别怎么实现的?
redis 的持久化
mysql 的索引
一个无序数组找其子序列构成的和最大,要求子序列中的元素在原数组中两两都不相邻
二面
Redis 的 ZSET 怎么实现的? 尽量介绍的全一点,跳跃表加哈希表以及压缩链表
Redis 的 ZSET 做排行榜时,如果要实现分数相同时按时间顺序排序怎么实现? 说了一个将 score 拆成高 32 位和低 32 位,高 32 位存分数,低 32 位存时间的方法。问还有没有其他方法,想不出了
MySQL 事务的四个隔离级别? 先说了四个级别的区别,然后说了每个级别可能产生的问题
binlog 日志和 redolog 日志清楚吗? 说了两个日志的作用以及两阶段提交
C++ 的动态多态怎么实现的?
C++ 的构造函数可以是虚函数吗?
缺失的第一个正数(leetcode第41题)
linux 系统里,一个被打开的文件可以被另一个进程删除吗?
一个 10M 大小的 buffer 里存满了数据,现在要把这个 buffer 里的数据尽量发出去,可以允许部分丢包,问是用TCP好还是UDP好?为什么?
一个完整的 HTTP 请求会涉及到哪些协议?
三面
问项目
redis 的 ZSET 是怎么实现的?
让你设计一个限流的系统怎么做? 令牌桶
让你设计一个延时任务系统怎么做 说了两个方案,一个是使用 redis 的 ZSET 来实现,考虑分片来抗高并发,使用 redis 的持久化来实现落地,使用 redis 的哨兵实现故障转移。 一个是使用时间轮的方法。
现有一个随机数生成器可以生成0到4的数,现在要让你用这个随机数生成器生成0到6的随机数,要保证生成的数概率均匀。
有 N 枚棋子,每个人一次可以拿1到 M 个,谁拿完后棋子的数量为0谁就获胜。现在有1000颗棋子,每次最多拿8个,A 先拿,那么 A 有必胜的拿法吗?第一个人拿完后剩余棋子的数量是8的倍数就必胜,否则就必输。
给出一棵二叉树的根节点,现在有这个二叉树的部分节点,要求这些节点最近的公共祖先。
四面
HR 面

总结
头条4轮面试都是视频面的,视频面试体验其实还是挺好的,坐在家里面试我会更加放松一些,这样脑子也灵活一些。人一紧张脑子就转不动了。头条的3轮技术面都问了zset的实现,ZSET的实现可以好好看看源码怎么实现,这样说的时候有更多东西可以说,不是说一个跳跃表就完事了。还有一点就是遇到不会的逻辑题或者算法题不要放弃,问问面试官可不可以提示一下。如果能在面试官的慢慢提示下能完成这道题,也是会被认可的。

上一篇:Redis基本数据结构总结之SET、ZSET和HASH


下一篇:redis 5种数据类型应用场景