首页 > 菜饼的秋招面筋(上)—腾讯字节快手
头像
菜饼同学
编辑于 2020-12-17 09:46
+ 关注

菜饼的秋招面筋(上)—腾讯字节快手

大家好,我是菜饼。偷懒了很久,终于写下这篇秋招面经,整体分两部分,本文只记录具体面试题,另一篇文章则分享更细致的经历。
下篇见:https://www.nowcoder.com/discuss/580338

楼主情况

  • 双非一本,JAVA选手(实习用的Go)
  • offer 情况:腾讯SP、字节转正SP、快手直通终面(挂了)

秋招经历

  • 5月初到字节实习,干到 8月份发现还没能转正,感觉不对劲,就准备了一阵子,开始投腾讯
  • 实习期间打了快手的辣鸡比赛,拿了个直通终面卡(事实上并没有直通终面)大家以后看到说奖励有说直通终面的还是小心点吧。
  • 后来拿到腾讯意向书后,就安心继续实习,等转正
  • 字节转正率确实挺高的,周围人都转正成功了(不过据我了解,还是有一些人转正失败的)

腾讯后台(C++岗)

(08-25)一面-电话面

体验还是很不错的,面试官并不只是纯粹的问问题,会跟你交流,适当解答疑惑。

  1. 常规自我介绍,然后项目中引出的问题:
  • protobuf具有压缩能力么?怎么理解?(面试官觉得使字节紧凑更加合适)

  • 缓存穿透(空缓存,追问有无其他方法,提示数据结构-bloom,然后讲布隆过滤器,存在不一定存在,不存在则一定不存在)

  • 分布式缓存一致性算法(Paxos、Raft算法)

  1. ConcurrentHashMap如何保证线程安全

  2. 提到 volatile,讲一下(线程可见,防止指令重排)

  3. JAVA做多线程开发,用过哪些常用的锁

  4. 读多写少和写多读少的场景分别适合用啥锁?(前者乐观锁,后者悲观锁)

  5. MySQL支持事务的引擎(InnoDB)

  6. 分布式事务实现方式

  7. 两阶段提交

  8. redis能做落地存储吗?(愣了半天,才搞清楚是想问持久化。RDB、AOF)

  9. RDB、AOF的优劣,然后场景举例让你选;

  10. Redis内存满了怎么解决(扩容、调整过期删除策略、淘汰策略)

代码:发了QQ doc,在上面写,提前问了,不能用IDE调

  1. 字符串排序:
输入:字符串由数字、小写字母、大写字母组成。
输出:排序好的字符串。
排序的标准:

1. 数字 > 小写字母 > 大写字母;
2. 同类字符间的相对顺序不变;
   要求:
3. 额外存储空间:O(1).
// Example 
input: "acbd4231BADC"
output: "4231acbdBADC"

// function proto, you can redefine it if you use another language
std::string stringSort(std::string& str);
  1. 在二叉排序树上找出第5大的节点。
输入:二叉排序树的根节点,该树确保左节点 <= 父节点 <= 右节点;
输出:第5大的节点
要求:
1. 不能把二叉树全量存储到另外的存储空间,比如存储到数组中,然后取出数组的第5个元素。

// node and function proto, you can redefine it if you use another language
struct TreeNode {
     int value;
     struct TreeNode *left, *right;
};
struct TreeNode* find5th(struct TreeNode* root);

(08-30)二面-电话面(1个小时)

  1. 常规自我介绍,项目中引出的问题:(项目讲了半小时)
  • 缓存穿透的问题,如何解决?
  • protobuf 如何压缩存储空间?
  • 分布式事务(两阶段提交、本地消息表)
  • 强一致性方案(去除缓存层)
  1. c++了解到什么程度?(学校讲的都会,深入的不会)

  2. volatile的作用(线程可见性、保证指令不重排),具体哪些指令不会重排(不记得了)

智力题:

  1. 100张扑克牌,两个人轮流取,每次只能取1或者2张牌,最后拿牌的赢,问先手还是后手有制胜策略?

先从最少的情况进行分析,剩1张,先手拿了就赢;剩2张,先手拿了就赢;剩3张,先手怎么拿都输;推广后就是想办法留下3的倍数张,100张先拿1张,就能必胜。对面拿1张,你就拿2张;对面拿2张,你就拿1张。

  1. (推广)n张牌,每次可以拿1-k张,问满足什么条件下先手赢,满足什么条件下后手赢?

n不等于(1+k)的倍数时,先手赢;n等于(1+k)的倍数时,后手赢。然后问先手应该拿多少张牌,用数学表达式(n%(1+k)

  1. 现在有一个随机发生器(可以视为一个函数),产生0的概率是p,产生1的概率是1-pp是确定的,但是不知道p是多少,问能否利用这个随机发生器,设计一个可以等概率生成0/1的发生器。

暴力法:用两个p随机发生器,根据结果01则返回0,结果为10则返回1,结果为00、11则丢弃重来;然后面试官问我,这种方法最终会需要重试,问我重试次数的期望是多少?(1/p(1-p))然后问p越大,整个期望是越大还是越小?(p/(1-p)

  1. 然后就是反问阶段,问了下部门情况。

9-14(三面-腾讯会议面[我开视频,面试官不开])(半小时)

总监面日常等半个月...

  1. 自我介绍

  2. 让我挑一个项目讲,实习的或者自己做的。

  3. 围绕着我说的问了一丢丢技术问题,难度不大

  4. 项目的架构实现,实习期间主要承担哪部分工作

  5. 然后对着简历问项目(自己做的demo项目也被问了)

  6. 消息系统的存储设计

  7. 继续问项目,然后反问阶段

总结:全程基本在聊项目吧,大多数时间都是我在说,基本没啥技术问题。

9-17(HR面-腾讯会议)(半小时)

整体来说HR面没啥难度,放宽心态,正常交流即可。

  1. 问腾讯字节怎么选

  2. 自我介绍

  3. 根据自我介绍问我的规划

快手(说好的直通终面呢?)

面试的时候确实就是抱着练手的心态,准备不是很充分。虽然说拿了 offer 大概率也不去,但是直通终面的承诺没兑现还是令人不爽的。牛客上看了其他拿了终面卡的小伙伴的面经也是类似,没看到一个是直接终面的。

(08-30)一面-视频面(1个小时)

  1. 常规自我介绍-项目介绍(具体省略了)

  2. 设计题,直播间,100w用户,发红包,3min后开始抢,(QPS可能达到1000w,具体怎么设计呢?)

  3. 增加条件:每个红包每个用户只能抢一次,每天不能超过5个;

  4. 详细讲一下HashMap的put过程

代码题:100w个单词,1<= 单词长度 <= 100,本质就是写一个Trie树。

class WordCollection {
    void load(List<String> words); // 加载 1000w 个单词
    boolean contains(String word); // 判断是否包含该单词
}

(9-09)二面-视频面(40分钟左右)

  1. 常规自我介绍-项目介绍(具体省略了),相关问题:

  2. 除了protobuf还了解哪些RPC序列化协议(thrift、其他就不知道了)

  3. 缓存穿透(解释一下啥意思,然后常用解决方法:缓存null、布隆过滤器)

  4. 消息队列,topic的数量由什么来决定?(不会,这题到现在都没搞懂想问啥,有知道的朋友能说下么?)

  5. Redis常用的数据结构(String、Map、Set、ZSet)、SetZSet的区别

  6. Redis来实现网站PV的统计,用String作为计数器,会有线程安全的问题吗?(Redis是单线程的,应该没有线程安全的问题)

  7. 设计题,注册接口(HTTP),设计限流方案,10000次/分钟。(令牌桶算法)

代码题:给一个有序数组和一个目标值,找第一个出现的目标值的下标,不存在则返回-1。(先写了个递归的,写完面试官说能不能改成迭代的,就稍微改改变成迭代的了,但是一个if判断写反了,卡了半天)

其实就是个二分法变种:

public int search(int[]arr, int value) {
  int l = 0;
  int r = arr.length;
  while(l < r) {
    int m = l + ((r - l) >> 1);
    if(value > arr[m]) {
      l = m + 1;
    } else {
      r = m;
    }
  }
  return arr[l] < value ? -1 : l;
}

字节转正

字节转正需要答辩,预先要写好PPT,挑选实习期间2-3个主要产出进行叙述。除了自己做的内容,最好还要把上下游链路,用到的一些工具的底层原理了解一下。建议大家平时实习的时候就做好总结,不要停留在干活的表面,该深入了解的深入了解,该梳理的梳理。在字节实习还是能学到很多东西的。

转正时是要向menterleaderHR、组内同事、其他组的同事汇报工作的,每个人也会向你问一些问题,所以最好自己能提前根据PPT内容,模拟一些问题,同时准备下解答,否则很容易被问懵的。

总结

其实复习到了后期,面试题的参考价值就仅仅在于查漏补缺了,常考的问题基本已经都会了,太偏太难的普适性又不高,更多的还是建议根据自己的简历来,简历上连Redis都没有,也跟风去复习一些 redis 底层原理、分布式等等的东西,完全就没有必要。

更多模拟面试

全部评论

(3) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐