1
头图

个人背景介绍

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。

最后

欢迎关注公众号:前程有光,领取一线大厂Java面试题总结+各知识点学习思维导+一份300页pdf文档的Java核心知识点总结! 这些资料的内容都是面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。


前程有光
936 声望618 粉丝