双非渣本后端三个月逆袭字节
个人背景介绍
2017年毕业于一所不知名双非本科大学,毕业时就有着一颗想进大厂的心,但又想留在成都,不愿意去北上广,现在其实相当后悔。当年在成都的大厂少之又少,再加上校招时非常努力地玩耍,导致投的几个大厂面试都全部挂掉。也错失了进大厂最好的机会,所以我奉劝大三的同学如果对自己的职业有追求,有进大厂的梦想,在大三的时候一定要好好准备,在校招的时候拿offer。
最后我在成都一家本地科技公司做了Java开发,中间也跳过一次槽,也是做的Java。但这几年时间里总感觉公司能给的成长太慢,虽然自己也在学习,还是免不了焦虑,特别是像自己这种学历和公司背景都一般的程序员,要保证自己以后不被淘汰,必须得做点什么。所以在听到一个前同事被公司裁掉,最后进入大厂这个事情之后,彻底点燃了我心中想进大厂的那把火,我也准备内推试试字节跳动。
因为疫情原因,很多企业生存困难。我也保持了理智,没有辞职进行面试。而是给自己制定了学习计划,不得不说,在职的情况下复习确实很难,因为可能加班打乱计划。于是我把所有能利用的个人时间全部利用了起来,比如早上十点上班,我六点钟就会起床,刷两个小时LeetCode,八点钟洗漱之后去上班。晚上如果有时间就会把早上刷过的题拿出来继续复习,花了两个月的时间,一边复习(预习)数据结构,一边做题,LeetCode上面的高频题基本都过了一遍。花了那么多时间刷题,都是因为自己算法太菜,以前没有进行专门的练习。题做得差不多之后,就开始复习专业知识了,具体内容我都会总结出来。前前后后准备了三个月,我才敢进行内推,经历了八次面试之后,面试时间又持续三个月,皇天不负有心人,终于在这个月等到了oc。
下面是面试内容,时间太久了,可能记得不太全,但基本上包含了所有问题,白天上班,我都是选择晚上进行面试,哈哈
一面A部门
- 讲项目,串起来讲,可能遇到的问题,怎么解决,怎么实现,讲了发送客服消息
- Spring里面的bean怎么回事
- HashMap和ConcurrentHashMap,HashMap中的红黑树,两者rehash的区别
- Mysql的一致性是什么,数据库redolog,undo log,MySQL的索引结构,为什么二级索引叶子节点不能直接存储行数据的指针,这样可以不回表,怎么考虑的?
- redis里面的zset,跳表怎么实现,怎么增删,
- redis是怎么rehash的
- 算法,二叉树转双向链表
二面A部门
- 自我介绍
- 再一次聊项目,功能,架构,角色,量级
- Spring里面有哪些设计模式
- SpringMVC和SpringBoot有什么区别
- SpringBoot的自动配置是怎么实现的
- 刚刚你说了线程池,你线程池是用的什么,参数有哪些,为什么这么设置
- 线程池核心线程满了怎么办,里面的阻塞队列是干什么的
- 说说ThreadLocal是什么
- CAP理论知道吗,为什么不能同时满足
- Redis里面的数据结构有什么场景
- Redis怎么实现锁(redis锁的所有坑都说了一遍)
- 分布式事务知道吗,有哪些方案(说了2PC,3PC,TCC,MQ)
- 算法题,树的直径
- 有什么要问我的
三面A部门
- 介绍项目
- 场景题,设计一个朋友圈,读QPS 1000w,写QPS 10w
- 算法题LFU
- 你有什么问题
这个面试官是个leader,比较强势,很多细节回答的不是很好,所以脸色一直不好,给人压力较大,面完就觉得凉了。果然面完之后和前两次不一样,HR那里就没有任何通知了,到这里还是很失落,准备了那么久,因为最后一面没表现好导致挂掉。之后等了一个月,这一个月没有任何消息,一个月过后又接到字节HR的电话,说我之前两面面评都不错,让我试试他们部门,我就同意了。
一面B部门
- 介绍项目,细节
- 怎么做服务拆分,边界怎么划分的
- 分布式之后会遇到什么问题,CAP的各个情况介绍一下
- dubbo调用过程是怎样的,PB知道吗
- thrift了解过吗
- zk介绍一下,有哪些节点类型,特点
- 怎么知道项目中接口的重要性,怎么做监控,你说的自动化测试是怎么做到的(这个问题回答完,他笑了。。。)
- 你所理解的SLA是什么,要达到什么等级
- 说说你理解的k8s
- nginx的upstream是干什么的
- nginx有哪些负载均衡策略
- 算法题:岛屿数量
- 你有什么问题要问我
二面B部门
- 介绍项目,细节
- 锁有哪些实现方式
- 分布式锁的实现方式
- JVM的内存模型,垃圾回收算法
- MySQL的事务介绍,ACID的实现原理是什么(想问MySQL的日志)
- HashMap的原理,其他线程安全的Map
- Redis的高可用,有哪些持久化方式
- Redis的数据结构,线程模型
- 用过什么消息队列,有什么特点
- 怎么保证消息幂等消费
- docker的网络模式
- 算法题:比较版本号
- 提问
三面B部门(交叉面)
- 介绍项目,细节
- Linux的内存管理
- 浏览器打开一个网站的过程中会经历哪些网络处理,DNS的具体过程是啥
- zk是什么分布式模型(想问的CAP定理),主从怎么做选举
- zk只有一个主节点,写性能不高,zk怎么解决的
- etcd或consul知道吗
- 多个服务中如何快速排查问题
- Redis中的淘汰方式有哪些,Redis性能高的原因是啥
- docker的实现原理
- 算法题:相交链表
四面B部门 (leader面)
- 介绍项目,细节
- 项目量级多大,QPS最高的接口是怎么做的
- rpc怎么实现服务发现
- zk中的watch机制是怎么实现的
- 分布式锁有哪些实现,MySQL,zk,Redis都说了一遍,并且分析了各自的优缺点,这个问题问的频率太高了
- 怎么提高数据库读写性能
- k8s了解吗
- servicemesh有做过吗
五面B部门(HR面)
- 离职原因
- 职业规划
- 期望薪资
基础知识
- 常用集合、数据结构(数据增删改查操作的原理具体实现、各参数的含义,以及如何组合使用)
- Java的语法,OO的思想要熟悉,常用设计模式要知道场景
- JVM内存模型,垃圾回收算法,垃圾收集器的区别,GC调优
- 线程模型
- IO模型(包括操作系统底层IO模型和常见BIO、NIO、AIO、IO多路复用的原理)
- Redis(数据结构的内部实现、淘汰原理策略、持久化、集群、扩容、数据同步、以及一些常见缓存问题的解决方案)
- MySQL(索引原理,查询优化,三大日志)
- 消息队列(内部原理,常见消息问题解决方案)
- 分布式原理、算法、rpc原理(paxos、raft、zookeeper的原理)
- 分布式场景题(高可用,高性能相关)
其他知识
- 位运算
- 大数据量操作(在有限时间内完成、在有限空间内完成)
- 设计题(看一些常见的分布式ID、分布式计数服务等等)
算法
- 数组
- 链表
- 位运算
- 二叉树(dfs,bfs,相当重要,只要会了二叉树,回溯那些算法也会了)
- 设计题
- LRU/LFU
- 排序
- 查找
总结
我给大家的建议就是慢慢来,不管是社招还是校招,制定自己的计划,一定要有自己的知识体系,针对自己薄弱的地方进行强化复习,不放过任何一个细节。
简历上写的东西一定要会,一般都是针对简历来提问的。如果在预习的过程中感到困难或者吃力,那就对了,等你熬过去了,就是胜利。祝福大家都能拿到满意的offer。