仅一年工作经验成功跳槽字节跳动,腾讯并拿到字节的offer,全靠这份面经!
前言
前几天由于工作的原因一直没怎么看私信,昨天在整理私信的时候看到了一个粉丝给我疯狂私信想要我帮忙整理一份大厂面经,说自己工作也有几年了想跳槽冲刺一下,但是不知道该怎么做好前期准备。我看到这个粉丝也是挺执着的,一直在给我私信,也是花了两天时间把之前几个朋友的跳槽面试经历和经验整理了一下,具体干货都给大家放在下面了!
准备
敲定了方向和目标后就开始系统准备,主要分为以下几个方面来准备。
算法题
事先已经看过别人的社招面经知道头条每轮技术面都有算法题,而这一块平时练习的比较少,校招时刷的题也忘记了很多。因此系统复习的时候算法题还是花了比较多时间的。先是快速刷完了剑指 offer,这个校招时已经刷过两边了,因此现在刷起来会相对快一些。然后就是啃 LeetCode 的题了,LeetCode 的题比较多,想在短短几周内刷完基本是不可能的,因此我主要按照类型去刷,每个类型刷几道就会比较有感觉了。比如链表的题优先考虑递归和双指针来解决,栈和队列的题优先考虑用两个栈或队列来解决,树的题基本都是递归等。不过数组和字符串的题一般比较灵活,这种题只能尽量多刷了。平时要上班刷题也不方便,我采用的方法就是看题,用手机打开 LeetCode 的网站,看完题目后直接想解决方案,脑子里大概捋一下代码怎么写,能想到的就过,想不出的就看看别人的解法,用这个方法刷起来就很快。用这种方法你可能会担心面试时题写不完整,其实不用太担心,因为面试的时候面试官看你写的核心思路是正确的,边界处理是对的基本就过了,面试时间比较有限。
理论基础
基础这一块主要以快速复习为主,主要是语言、操作系统和网络编程。校招这一块会问题的比较多,社招这一块问的比较少,但是如果这一块打不上来就比较尴尬了。语言就不说了,这一块大家应该都知道会考些什么,校招的时候毕竟都疯狂准备过。操作系统就看内存管理、进程管理和文件系统,一般虚拟内存问的多。网络编程这块就包括 TCP/IP 协议,HTTP协议,网络安全三个方面。TCP/IP主要就是三次握手,四次挥手,TIME_WAIT 的作用等这些常考的题了。HTTP 协议考察 HTTP 协议的返回码、HTTP 的方法等。需要特别指出的是 HTTPS 加密的详细过程要非常透彻,不然容易产生一种感觉好像都清楚了,但是一问就有点说不清楚。最后就是网络安全,主要考察也是 WEB 安全,包括XSS,CSRF,SQL注入等。
后端技术
这里的后端技术主要指工作中要用到的一些基础组件,一些常见的后端架构设计。主要准备了MySQL、Redis、消息队列、zookeeper、分布式系统架构设计和docker。Redis 主要自己总结了一下 Redis 的使用场景,以及 Redis 实现分布式锁基本 Redis 就没有问题了。消息队列的开源软件比较多,我主要选择网上学习技术和一些技术文章等。分布式系统的就准备CAP理论、BASE理论、限流、熔断、一致性***算法、主从架构、集群架构、异地多活、负载均衡、分层架构、微服务等。
深挖项目
没有参与开源项目的经验,工作中做的项目也很一般,项目这块我实在没什么太多拿的出手的,不过还是要挖掘一下,毕竟这一块是逃不掉。我说几个我思考的点吧:
- 找项目中相对而言具有亮点的地方。比如我用 redis 实现了一个延时队列,然后对这个延时队列我通过分片来解决瓶颈,通过分发来加快处理速度。这个虽然不是什么复杂技术,但是可以将其考虑全面可以展示出自己具有一定的架构能力。
- 找项目中复杂的地方。如果你做的项目中有复杂的地方,即使不是你做的,也可以拿来说,前提是你要搞得非常清楚来。
- 量化指标。一个接口原来有性能问题,比如你做了一个小的优化,将其 TP99 的耗时从原来的 500ms 优化至多少 200ms。
- 赋能整个团队。在开发业务的过程中肯定会遇到一些重复的工作,或者可以复用的服务。你可以开发了某个工具或者服务化了某个功能推广到了全组使用,给公司创造了价值。
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的实现可以好好看看源码怎么实现,这样说的时候有更多东西可以说,不是说一个跳跃表就完事了。还有一点就是遇到不会的逻辑题或者算法题不要放弃,问问面试官可不可以提示一下。如果能在面试官的慢慢提示下能完成这道题,也是会被认可的。
最后
欢迎大家关注我的公众号:前程有光,金三银四跳槽面试季,整理了1000多道将近500多页pdf文档的Java面试题资料,文章都会在里面更新,整理的资料也会放在里面。
仅一年工作经验成功跳槽字节跳动,腾讯并拿到字节的offer,全靠这份面经!的更多相关文章
- 朋友的一年工作经验跳槽字节跳动社招经历分享(已拿offer)
虽然已经临近年末,但是还是萌生要看新机会的想法,主要的原因是觉得在目前的岗位上技术增长遇到的瓶颈,因此想去做一些更有挑战的工作.因为仍然准备继续在深圳工作,因此选定了三家公司,腾讯.字节跳动和 sho ...
- 一年iOS工作经验,如何一举拿下百度、美团、快手等Offer面经(附面试题)
前言: 先简单说说我最近的面试经历吧.面试的公司很多,大部分最后都能得到令人满意的结果,我将这些体会记录下来,面了这么多公司,如果不留下什么,那岂不是太浪费了.对于我来说,这也是一次自我检查,在这次面 ...
- 字节跳动实习面经分享(已拿offer附攻略)
大家好,我是bigsai,今天给大家分享自己字节跳动面试经验分享. enum我面得岗位是后台实习开发,具体部门是懂车帝,总体感觉就是字节的流程真的好快,只要安排面试,那流程接着很快. 大概是上上周投递 ...
- 一份热乎的字节跳动客户端面经,已拿Offer
字节面试过程: 4月4号进行内推,7天的简历评估,11号接到电话面试,尽管猝不及防回答仓促,但好在前期准备充分,通过.14号现场面试,次日收到通知,通过,二面.三面都很顺利.20号进行HR面,26号收 ...
- 去了字节跳动,才知道年薪40W的测试有这么多?
最近脉脉职言区有一条讨论火了: 哪家互联网公司薪资最'厉害'? 下面的评论多为字节跳动,还炸出了很多年薪40W的测试工程师 我只想问一句,现在的测试都这么有钱了吗? 前几天还有朋友说,从腾讯跳槽去 ...
- 最新 字节跳动java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.字节跳动等10家互联网公司的校招Offer,因为某些自身原因最终选择了字节跳动.6.7月主要是做系统复习.项目复盘.Leet ...
- 工作三年终于社招进字节跳动!字节跳动,阿里,腾讯Java岗面试经验汇总
前言 我大概我是从去年12月份开始看书学习,到今年的6月份,一直学到看大家的面经基本上百分之90以上都会,我就在5月份开始投简历,边面试边补充基础知识等.也是有些辛苦.终于是在前不久拿到了字节跳动的o ...
- 一位10年Java工作经验的架构师聊Java和工作经验
从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师.对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式.国内开源软件推动者之一, ...
- 转:一位10年Java工作经验的架构师聊Java和工作经验
黄勇( 博客),从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师.对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式.国内开源 ...
随机推荐
- MySQL关于月份日期的操作
#获取当前日期 SELECT CURDATE(); #获取本月最后一天 SELECT LAST_DAY(CURDATE()); #获取本月的第一天 SELECT DATE_ADD(CURDATE(), ...
- git删除缓存区中文件
删除缓冲区中的文件 git rm --cached "文件路径",不删除物理文件,仅将该文件从缓存中删除: git rm --f "文件路径",不仅将该文件从缓 ...
- 创建Sqlite数据库(二)
先创建一个数据库表,然后在主activity中执行删除更新操作 public class MainActivity extends AppCompatActivity { @Override prot ...
- 【tensorflow】VMware Ubuntu+Tensorflow配置和使用
本文主要是记录配置tf环境和虚拟机时遇到的问题和方法,方便日后再查找(补前三年欠下的技术债) 宿主机环境:win10 64位 宿主机python: anaconda+python3.6 宿主机tens ...
- 框架-SPI四种模式+通用设备驱动实现
目录 前言 笔录草稿 SPI介绍 SPI四种模式 ** SPI 驱动框架 ** 框架 前言 SPI 介绍为搜集百度资料+个人理解 其余为原创(有误请指正) 集四种模式于一身 笔录草稿 SPI介绍 SP ...
- java中常见的六种线程池详解
之前我们介绍了线程池的四种拒绝策略,了解了线程池参数的含义,那么今天我们来聊聊Java 中常见的几种线程池,以及在jdk7 加入的 ForkJoin 新型线程池 首先我们列出Java 中的六种线程池如 ...
- debian 安裝SSH 增加新用戶 并使用sudo
1 新建新用戶user 2 3 adduser user 4 5 passwd 123654 6 7 exit 刚安装好的Debian默认还没有sudo功能. 1.安装sudo # apt-get i ...
- Jmeter 用户定义的变量的使用
第一步: 打开Jmeter软件,新建一个线程组,添加 > 配置元素 > 用户定义的变量 第二步: 设置值,如下图所示: 第三步,使用设置的名称 :
- eyou去版权
公司老板要求做一个自己门户网站,苦于公司自己又没有开发相应的cms内容管理系统,找了一个星期,综合各方面的考虑,决定选择eyoucms来搭建,经过快速安装,来到了简单干净的后台. 现将使用体会记录如下 ...
- ERP的财务凭证的操作与设计--开源软件诞生23
赤龙ERP财务凭证讲解--第23篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...