一年工作经验跳槽字节跳动社招经历分享

虽然已经临近年末,但是还是萌生要看新机会的想法,主要的原因是觉得在目前的岗位上技术增长遇到的瓶颈,因此想去做一些更有挑战的工作。因为仍然准备继续在深圳工作,因此选定了三家公司,腾讯、字节跳动和 shopee,考虑的岗位方向仍然是后台开发(其他岗位也面不上呀,伤心)。虽然年底跳拿不到年终奖了,但是我觉得和自己个人整个职业生涯的发展比起来算不了什么,最好的时机永远是当下。

准备

敲定了方向和目标后就开始系统准备,主要分为以下几个方面来准备。

算法题

事先已经看过别人的社招面经知道头条每轮技术面都有算法题,而这一块平时练习的比较少,校招时刷的题也忘记了很多。因此系统复习的时候算法题还是花了比较多时间的。先是快速刷完了剑指 offer,这个校招时已经刷过两边了,因此现在刷起来会相对快一些。然后就是啃 LeetCode 的题了,LeetCode 的题比较多,想在短短几周内刷完基本是不可能的,因此我主要按照类型去刷,每个类型刷几道就会比较有感觉了。比如链表的题优先考虑递归和双指针来解决,栈和队列的题优先考虑用两个栈或队列来解决,树的题基本都是递归等。不过数组和字符串的题一般比较灵活,这种题只能尽量多刷了。平时要上班刷题也不方便,我采用的方法就是看题,用手机打开 LeetCode 的网站,看完题目后直接想解决方案,脑子里大概捋一下代码怎么写,能想到的就过,想不出的就看看别人的解法,用这个方法刷起来就很快。用这种方法你可能会担心面试时题写不完整,其实不用太担心,因为面试的时候面试官看你写的核心思路是正确的,边界处理是对的基本就过了,面试时间比较有限。

理论基础

基础这一块主要以快速复习为主,主要是语言(我主要用C++,所以复习C++)、操作系统和网络编程。校招这一块会问题的比较多,社招这一块问的比较少,但是如果这一块打不上来就比较尴尬了。语言就不说了,这一块大家应该都知道会考些什么,校招的时候毕竟都疯狂准备过。操作系统就看内存管理、进程管理和文件系统,一般虚拟内存问的多。网络编程这块就包括 TCP/IP 协议,HTTP协议,网络安全三个方面。TCP/IP主要就是三次握手,四次挥手,TIME_WAIT 的作用等这些常考的题了。HTTP 协议考察 HTTP 协议的返回码、HTTP 的方法等。需要特别指出的是 HTTPS 加密的详细过程要非常透彻,不然容易产生一种感觉好像都清楚了,但是一问就有点说不清楚。最后就是网络安全,主要考察也是 WEB 安全,包括XSS,CSRF,SQL注入等。

后端技术

这里的后端技术主要指工作中要用到的一些基础组件,一些常见的后端架构设计。主要准备了MySQL、Redis、消息队列、zookeeper、分布式系统架构设计和docker。MySQL 主要看了极客时间的 《MySQL 45讲》,关于事务、索引、锁以及 binlog 和 redolog 都讲的非常好,也是面试最爱考的,除此之外对数据库的读写分离、分库分表也要掌握。没有任何利益相关,决不是打广告。Redis 主要看了《Redis 的设计与实现》,然后自己再总结了一下 Redis 的使用场景,以及 Redis 实现分布式锁基本 Redis 就没有问题了。消息队列的开源软件比较多,我主要选择 Kafka 来学习,主要看官网文档,极客时间的《Kafka 核心技术与实战》,和一些技术文章等。不过极客时间的《Kafka 核心技术与实战》,我觉得讲的比较一般,不是很建议。分布式系统的就准备CAP理论、BASE理论、限流、熔断、一致性***算法、主从架构、集群架构、异地多活、负载均衡、分层架构、微服务等。

深挖项目

没有参与开源项目的经验,工作中做的项目也很一般,项目这块我实在没什么太多拿的出手的,不过还是要挖掘一下,毕竟这一块是逃不掉。我说几个我思考的点吧:

  1. 找项目中相对而言具有亮点的地方。比如我用 redis 实现了一个延时队列,然后对这个延时队列我通过分片来解决瓶颈,通过分发来加快处理速度。可以看我的《基于REDIS实现延时任务》一文。这个虽然不是什么复杂技术,但是可以将其考虑全面可以展示出自己具有一定的架构能力。
  2. 找项目中复杂的地方。如果你做的项目中有复杂的地方,即使不是你做的,也可以拿来说,前提是你要搞得非常清楚来。
  3. 量化指标。一个接口原来有性能问题,比如你做了一个小的优化,将其 TP99 的耗时从原来的 500ms 优化至多少 200ms。
  4. 赋能整个团队。在开发业务的过程中肯定会遇到一些重复的工作,或者可以复用的服务。你可以开发了某个工具或者服务化了某个功能推广到了全组使用,给公司创造了价值。

Shopee

一面

  • mysql 有那些存储引擎,有哪些区别
  • mysql 索引在什么情况下会失效
  • innodb 与myisam 的区别?
  • mysql 的索引模型
  • mysql 主从同步怎么搞的?分哪几个过程?如果有一台新机器要加到从机里,怎么个过程。
  • 乐观锁与悲观锁的区别?
  • binlog 日志是 master 推的还是 salve 来拉的?
  • redis 持久化有哪几种方式,怎么选?
  • redis 主从同步是怎样的过程?
  • redis 的 zset 怎么实现的?
  • redis key 的过期策略
  • hashmap 是怎样实现的?
  • tcp 的握手与挥手
  • select 和 epoll的区别
  • http与https的区别,加密怎么加的?
  • raft算法和zk选主算法
  • Kafka 选主怎么做的?
  • kafka 与 rabbitmq区别
  • kafka 分区怎么同步的
  • kafka 怎么保证不丢消息的
  • kafka 为什么可以扛住这么高的qps
  • http各种返回码,401和406啥区别?
  • redis 哨兵和集群
  • kafka partition broker consumer consumer group topic 等都是啥关系?
  • 两个单向链表,返回求和后的链表结构,例如2->3->1->5,和3->6,结果返回2->3->5->1

二面

二面没什么好说的,和面试聊人生去了,我以为是要凉的节奏,但是却拿到了offer。

三面

HR 面

腾讯

腾讯面试提前1天和提前一个小时都会发短信提示。去的腾讯滨海大厦面试,大楼的现代化程度很高,不过需要提醒一下的是,腾讯的滨海大厦分为南塔和北塔。我去的时候就上错楼了,需要下到4楼重新换成电梯。

一面

笔试

  • 微服务的特点,如何实现服务发现和负载均衡
  • c++内存管理
  • time_wait在哪一端产生,作用是什么
  • 程序crash如何定位
  • 服务性能问题如何定位
  • 两个排序数组找中位数
  • 就数字n的平方根
  • 设计一个算法,抽奖次数越多中奖概率就越高
  • MySQL 如何分析一条语句的执行过程。delete from t1 limit 3和delete from t1的区别?

面试

  • 问项目
  • 跳台阶
  • 数组中奇数个元素
  • 一栋楼有n层,不知道鸡蛋从第几层扔下去会碎,用最少的次数找出刚好会碎的楼层
  • 动态规划与贪心有什么区别
  • redis数据结构的底层实现
  • redis如何实现高可用
  • 负载均衡算法有哪些
  • 服务发现是怎么实现的
  • 熔断是怎么实现的
  • id生成器怎么实现的,如何实现全局递增
  • 协程和线程的区别
  • 进程间通讯方法
  • 平时逛哪些论坛,研究哪些算法
  • paxos算法,这个算法我说不清楚,然后说了raft算法
  • gdb怎么切换线程
  • 如何判断一个图是否有环
  • 介绍一下缓存
  • 查看 CPU 的命令和磁盘 IO 的命令

二面

  • 项目的系统架构画一下
  • 如果用户量上涨怎么优化
  • 负载均衡的加权轮询算法怎么实现
  • 背包问题
  • 贝叶斯的概率学原理
  • 分词算法
  • 连续整数求和(leetcode 第 829 题),要求时间复杂度小于O(N)

总结

腾讯二面面完我就知道凉了。动态规划非要写出递推公式,因为我一直都是用动态规划表的思路来解题,所以这个地方没有答好。后面又问贝叶斯和分词算法,一点都不会(我的内心:我是来面后台的,又不是面算法的)。最后一道算法题只能想出 O(N) 复杂度的,面试官一定要小于 O(N) 的,答不上来。这道题是 leetcode hard 级别的难度,所以没有刷。不过后面去看可能也没有那么难,只是这种通过数学公式的特点来解题往往容易被忽略了。总之,腾讯的一面算是中规中矩,二面确实让我有点手足无措。之前看网上的说法是腾讯算法题考的比较少,可能还是要分部门吧,我这次面试的是腾讯视频,二面基本上全是考算法。还有大部分面经都说,算法题很少考 leetcode hard 级别,这个我也要表示怀疑了,因为腾讯和后面的头条都考了 hard 级别的。所以刷题时不能完全跳过 hard 级别的题。那有什么题不会考呢?我认为是描述起来很复杂的题面试时不会考,因为面试时间比较紧,如果光时把题看懂都要解释半天的,这种是不太会考的,比如那个 LeetCode 上买股票的题。

字节跳动

一面

  • 问项目
  • 任务系统怎么保证任务完成后发奖一定成功
  • 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的实现可以好好看看源码怎么实现,这样说的时候有更多东西可以说,不是说一个跳跃表就完事了。还有一点就是遇到不会的逻辑题或者算法题不要放弃,问问面试官可不可以提示一下。如果能在面试官的慢慢提示下能完成这道题,也是会被认可的。

--------------------------

不断有同学对于后端的面试问题给我私信,私信一般很难及时回复,因此我打算建一个微信群,一起和大家交流技术和面试相关的东西。群里既有我字节跳动的同事,还有京东、腾讯等公司的大神,在群里就算你不说话光看消息也能获得不少收益。当然还可以提供字节跳动的内推,对于内推的同学我会提供面试相关的帮助,帮助大家面试成功。请加我个人微信 oscarwin666,或者扫描下面的二维码,备注牛客网。


#Shopee##字节跳动##腾讯##面经##社招##内推#
全部评论
很棒,想知道社招什么价
4 回复 分享
发布于 2019-11-06 23:37
谢谢老哥!哈哈,看着感觉也有学习的方向了23333
1 回复 分享
发布于 2019-11-07 00:53
>  有 N 枚棋子,每个人一次可以拿1到 M 个,谁拿完后棋子的数量为0谁就获胜。现在有1000颗棋子,每次最多拿8个,A 先拿,那么 A 有必胜的拿法吗?第一个人拿完后剩余棋子的数量是8的倍数就必胜,否则就必输。 这里应该要保证第一个人拿完之后,剩余棋子数量是9的倍数先手才会必胜
1 回复 分享
发布于 2020-02-05 17:03
大佬tql!加精了!欢迎去置顶帖社招面经活动回复一下链接,送100元京东卡!
点赞 回复 分享
发布于 2019-11-06 23:48
mark,感谢分享
点赞 回复 分享
发布于 2019-11-07 01:16
总结的真好,面试很考验智慧的
点赞 回复 分享
发布于 2019-11-07 03:38
原来在哪呀
点赞 回复 分享
发布于 2019-11-07 06:41
点赞 回复 分享
发布于 2019-11-07 07:37
感谢大佬
点赞 回复 分享
发布于 2019-11-07 09:09
mk
点赞 回复 分享
发布于 2019-11-07 09:57
想问一下前辈,社招的简历和校招的有什么区别啊?应该怎么写?
点赞 回复 分享
发布于 2019-11-07 10:19
感谢大佬分享!
点赞 回复 分享
发布于 2019-11-07 10:46
感谢分享面经!欢迎参加过社招的牛友分享面经,领取京东卡~~ -------------------- 活动:社招面经征集|参加过社招的牛友,来发面经吧,拿京东卡
点赞 回复 分享
发布于 2019-11-07 10:53
学长牛批!
点赞 回复 分享
发布于 2019-11-07 11:38
请假面试吗?平时上班没时间面啊😄
点赞 回复 分享
发布于 2019-11-07 13:53
您是京东哪个部门呀?我今年校招准备去商业提升事业部数据产品平台后台开发,您了解吗?
点赞 回复 分享
发布于 2019-11-07 13:55
是大佬哎!
点赞 回复 分享
发布于 2019-11-07 15:47
顺便打个广告 字节跳动深圳-Android/iOS开发工程师 火热招聘中!  https://www.nowcoder.com/discuss/337187
点赞 回复 分享
发布于 2019-11-07 16:54
tql
点赞 回复 分享
发布于 2019-11-07 16:55
一年工作经验也能跳么?太强了了吧,现在不少都要求两年以上的
点赞 回复 分享
发布于 2019-11-07 17:01

相关推荐

问题1:和我们介绍一下自己?这也算问题?是的,你和面试官的接触仅仅才刚刚开始,或者说有的面试官可能刚刚从HR手里拿过简历就跑来和你聊天。有的朋友说,我简历里都有写自我介绍了。没错,简历模板基本第一部分都是基本情况介绍。但是文字是死的,大活人在面前为何不讲几句?有的朋友可能会无心的说:”我的基本情况都在简历里面有写“,这样的回答基本上第一印象大打折扣。毕竟你面前的面试官肯定会有你未来的直接领导;有的朋友可能会照本宣科的说:”我是xxx,毕业于xx,专业xx,兴趣爱好xxx,优点xxx“,是的回答的没错,但是面试官最想通过介绍,快速了解你的过往经历,找到他的兴趣点。所以,如果你这么表达:”我是xx,毕业于xx,曾就职于xx,任xx岗位,负责xx功能“,这样和你有共同技术经历的人可能会被你的xx功能吸引,也许正巧缺少的就是会整个xx功能的人。另外,很多外企有时候会把开场自我介绍换成英文版,一来看你怎么评价自己,二来顺便检查了英文情况。问题2:你所有做过的项目中,你最满意的是哪一个?或者最不满意的是哪一个?这个是挖坑的题目。别看各个面试官一脸慈祥,其实就是为了后面的技术细节盘问寻找突破口。选择最不满意的:很容易把话题聊死。接下来肯定问你为啥不满意,你要是头脑一热劈里啪啦一顿说,难免占用太多面试宝贵时间。而且,更容易把这场面试变成你的吐槽大会。选择最满意的:这个才是面试官希望听到的,因为你为他们选择了一个下个阶段他们的具体问题发问方向!多半是让你说下满意的地方,然后下一句转折绝对是:”看了你的简历也提到了这个项目细节,那么咱们就聊聊这个你最满意项目的技术细节吧“!TIPS: 这里提醒各位面试者,我们完全可以借助这个挖坑动作,给各位面试官也挖个坑,让他们自己跳到我们预定的剧本中。比如,JD上有对具体工作职责的描述,你就找一个最贴合的项目,把这个项目你参与的各个技术细节好好复习一遍,包括代码,原理。就让面试官往这个项目里跳。问题3:(技术面试的重点)你这个满意的项目中,你负责了什么部分的开发? + 细节盘问!!!好了,各位面试已经顺利入了你挖的”剧本坑“,下一步可就是你自己的Show Time了。针对你写在简历上的技术细节和项目经历,一定要秉承:实事求是的原则。不一定做到对答如流,也不一定做到每个题目都会,但是要把确定了解的技术点讲明白即可。TIPS: 第一:这里提醒各位面试者,一定要提前做好准备,毕竟可能你准备的这个项目时间久远代码已经生疏。所以捡回来好好看看代码,回想一下细节是必要的。第二:写到简历的其他项目,虽然可能不是你的剧本坑,但是也要准备一下,提防有的面试官不买你的”剧本“。另外,关于准备什么技术点和技术细节,有的答主已经列举的非常细致和具体。再说每个人经历的项目不同,可能技术的侧重也有所不同。此处就请题主和朋友们根据个人的实际情况进行准备。这里,答主推荐一本自用过还不错,也能够有很大帮助的面试经验类图书。里面的常见技术问题,可以帮助你在准备面试的时候开阔一下视野,加深一下基础概念;同时介绍的一些面试技巧,也会对面试过程有很大的帮助。问题4:(针对社招)你为什么选择离职?说实话,关于离职原因这道题,不光HR想了解,你未来的技术主管也会非常有兴趣想知道答案的。说的直白一点,很多人跳槽大部分原因要么是薪酬福利没有到位,要么是职业生涯上升通道迟迟没有打开。毕竟,很多公司的人都知道一点:”外来的和尚好念经“。所以,回答这个问题,还是要稍微考虑一下听众的感受,即使你是为了高薪或者职位晋升或者轻松一点工作而来的。也要说的尽量委婉。要么是想扩展一下自己的技术范围,争取年轻多学习经验和技术;要么是因为家庭原因,想能够工作之余分配一些时间陪伴家人;要么是想进入更大的平台,开阔眼界。问题5:你对我们公司有什么想了解的么?很多人认为,这个问题是很多公司在面试结束之前,出于礼节一道题目。但是答主和几个要好的HR和猎头聊过之后,才发现其中并不一定那么简单。如果你连这么好深入了解公司的机会都不要,要么你是真不关心公司如何,要么就是你来面试也是走走过场长长见识。所以,准备一两个稍微深度一点的问题,会让面试官觉得你还是对这个公司这个岗位用了心思的,也能增加点印象分。嵌入式C++面经推荐大佬面经  链接在下边  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
评论
112
953
分享
牛客网
牛客企业服务