字节跳动面经(完结)
字节跳动面经(完结)
字节跳动成立于 2012 年 3 月,公司使命为“Inspire Creativity, Enrich Life(激发创造,丰
富生活)”。公司业务覆盖 150 个国家和地区,拥有 11 万名员工。字节跳动在全球推出了
多款有影响力的产品,包括今日头条、抖音、西瓜视频、飞书等。截至 2021 年 6 月,字
节跳动旗下产品全球月活跃用户数超过 19 亿。
秋招薪资
25、24 届薪资一览表
同学 1(后端开发实习,附答案)
不知道是在哪里投递的,可能是在脉脉上一直有字节 HR 联系投递,就全点击了感兴趣,
之后简历过筛,约了 11 月 21 号一面。这也是自己第一次面试字节,之前投递了很多次
字节实习,简历都被筛了。
一面(11 月 21 号,1h 多)
自我介绍
项目
1. 介绍一下自己最熟悉的项目?
2. 项目使用的技术栈?项目的微服务是怎么划分的?
3. 项目的签到功能是怎么实现的?
4. 项目的搜索附近的人功能是怎么实现的?
Java 基础
1. final、finally、finalize 的区别?
2. 异常有哪些分类?
3. Error 和 Exception 都是谁的子类?
JUC
1. 线程和进程有什么区别?
2. 有多少种实现线程的方法?
3. ThreadLocal 是什么?
4. ThreadLocal 的实现原理?
5. 使用 ThreadLocal 有什么问题吗?如何解决?
JVM
1. 讲一下 JVM 内存结构?
2. 垃圾回收算法了解多少?
MySQL
1. MySQL 支持哪些存储引擎?
2. MyISAM 和 InnoDB 的区别有哪些?
3. 聚簇索引是什么?
4. 非聚簇索引是什么?
5. 使用非聚簇索引如何查找数据?
6. 建立联合索引(a,b,c),where c = 5 是否会用到索引?为什么?
7. where b =5 是否一定会命中索引?(索引失效场景)
8. 什么是数据库事务?事务的作用是什么?
9. 事务具有的四个特征?
10. MySQL 默认隔离级别?
Redis
1. 单线程的 Redis 的 QPS 是多少?
2. 单线程的 Redis 为什么这么快?
3. Redis 的持久化机制?
4. Redis 切片集群?数据和实例之间的如何进行映射?
5. Redis 扩容之后,哈希槽的位置是否发生变化?
6. Redis 缓存和数据库不一致解决方法?
设计模式
1. 了解哪些设计模式?
2. 单例模式有几种实现方式?
3. 单例模式最常用的实现方式是哪种?为什么?
数据结构
1. 讲一下冒泡排序和快速排序的区别,从平均时间,最好,最好,稳定性上来说?
算法
1. LeetCode 543. 二叉树的直径
反问
1. 部门的业务?
2. 部门的技术栈?后序的面试流程?(被告知一面是没有问题的,二面等后序通知)
附答案:传送门
二面(11 月 23 日,45min 左右)
详细答案:https://mp.weixin.qq.com/s/KDYJb_ZjErbH4OPfWSOASw
自我介绍
实习经历(20min)
1. 介绍一下实习期间做的项目?
2. 对实习项目做了提问。
Redis
1. 对 redis 的数据结构是否熟悉?
2. 讲一下 Sorted set 的底层数据结构实现?
3. 什么是缓存穿透?如何解决?
4. 什么是缓存击穿?如何解决?
5. 什么是缓存雪崩?如何解决?
6. 什么是缓存预热?如何解决?
7. Redis 如何实现分布式锁?
MySQL
1. 什么是回表?
2. 回表记录越多好吗?(回表的代价)
3. 性别字段要建立索引吗?为什么?
4. 什么是区分度?
5. MySQL 查看字段区分度的命令?
6. MySQL 主从复制流程和原理?
7. MySQL 如何查看查询是否用到了索引?
8. type 列的最好,最好级别?都代表了什么意思?
计网
1. 说说 OSI 七层模型?
答案
OSI(Open System Interconnection)七层参考模型是一个网络架构模型,由国际标准化
组织(ISO)提出,用于描述和标准化各种计算机网络的功能和过程。这七层从低到高分
别是:
应用层:最靠近用户的层,负责处理特定的应用程序细节。这一层提供了网络服务与用户
应用软件之间的接口。例如,Web 浏览器、FTP 客户端和服务器、电子邮件客户端等。
表示层:确保从一个系统发送的信息可以被另一个系统的应用层读取。它负责数据的转
换、压缩和加密。例如,确保数据从一种编码格式转换为另一种,如 ASCII 到 EBCDIC。
会话层:管理用户的会话,控制网络上两节点间的对话和数据交换的管理。它负责建立、
维护和终止会话。例如,建立一个会话令牌,以便在网络上的两个节点之间传递。
传输层:提供端到端的通信服务,保证数据的完整性和正确顺序。这一层包括 TCP 和
UDP 等。
网络层:负责在多个网络之间进行数据传输,确保数据能够在复杂的网络结构中找到从源
到目的地的最佳路径。这层使用的是 IP(Internet Protocol)协议。
数据链路层:在物理连接中提供可靠的传输,负责建立和维护两个相邻节点间的链路。包
括帧同步、MAC(媒体访问控制)。
物理层:负责在物理媒介上实现原始的数据传输,比如电缆、光纤和无线信号传输。涉及
的内容包括电压、接口、针脚、电缆的规格和传输速率等。
2. 用户输入网址到显示对应页面的全过程?
答案
从在浏览器地址栏输入 URL 到显示主页的过程包括多个步骤,涵盖了 DNS 解析、TCP 连
接、发送 HTTP 请求、服务器处理请求并返回 HTTP 响应、浏览器处理响应并渲染页面等
多个环节。
DNS 解析:浏览器发起一个 DNS 请求到 DNS 服务器,将域名解析为服务器的 IP 地址。
TCP 连接:浏览器通过解析得到的 IP 地址与服务器建立 TCP 连接(通常是通过 443 端口
进行 SSL 加密的 HTTPS 连接)。这一步涉及到 TCP 的三次握手过程,确保双方都准备好
进行数据传输。
发送 HTTP 请求:浏览器构建 HTTP 请求消息,包括请求行(如 GET / HTTP/1.1)、请求
头(包含用户代理、接受的内容类型等信息)和请求体(如果有);将请求发送到服务
器。
服务器处理请求:服务器接收到 HTTP 请求后,根据请求的资源路径,经过后端处理(可
能包括数据库查询等),生成 HTTP 响应消息;响应消息包括状态行(如 HTTP/1.1 200
OK)、响应头(内容类型、缓存控制等信息)和响应体(请求的资源内容)。
浏览器接收 HTTP 响应:浏览器接收到服务器返回的 HTTP 响应数据,开始解析响应体中
的 HTML 内容;然后构建 DOM 树、解析 CSS 和 JavaScript 文件等,最终渲染页面。
断开连接:TCP 四次挥手,连接结束
我们以输入 www.baidu.com 为例:
3. DNS 的解析过程?
答案
DNS 的全称是 Domain Name System,也就是域名解析系统,它可以将域名映射到对应的
IP 地址上,比如说我们访问 www.javabetter.cn,实际上访问的是我在阿里云上一台丐版
服务器,它的 IP 地址是 xxx.xxx.xxx.xxx。
当然了,也可以通过 IP 地址直接访问服务器,但不方便记忆,所以就有了域名系统。一
个好的域名可以卖好多好多钱,像 javabetter.cn 这个域名,一年需要 39 块钱。
域名到 IP 之间的映射,就需要 DNS 来完成。
我来说说 DNS 的解析过程吧:
假设我们在浏览器地址栏里键入了 :
浏览器会首先检查自己的缓存中是否有这个域名对应的 IP 地址,如果有,直接返回;如
果没有,进入下一步。
检查本地 DNS 缓存是否有该域名的记录。如果没有,向根域名服务器发送请求,根域名
服务器将请求指向更具体的服务,如 com 顶级域名服务器。
顶级域名服务器再将请求指向权限域名服务器,通常由域名注册机构直接管理,
paicoding.com 是在阿里云上注册的,所以阿里云会提供对应的 DNS 解析服务,将域名和
阿里云服务器绑定起来。
最终,浏览器使用获得的 IP 地址发起一个 HTTP 请求到目标服务器,然后该服务器返回
所请求的网页内容。
4. HTTP 有多少版本?
答案
HTTP1.0 默认短连接,HTTP 1.1 默认长连接,HTTP/2.0 基于 TCP 协议,而 HTTP/3.0 则
基于 QUIC 协议,Quick UDP Connections,直译为快速 UDP 网络连接。
5. HTTP/1.1 和 HTTP/2.0 的主要区别是什么?
答案
说下 HTTP1.1
持久连接:HTTP 1.1 引入了持久连接(也称为 HTTP keep-alive),默认情况下不会立即
关闭连接,可以在一个连接上发送多个请求和响应。极大减轻了 TCP 连接的开销。
流水线处理:HTTP 1.1 支持客户端在前一个请求的响应到达之前发送下一个请求,以提
高传输效率。
说下 HTTP2.0
二进制协议:HTTP 2.0 使用二进制而不是文本格式来传输数据,解析更加高效。
多路复用:一个 TCP 连接上可以同时进行多个 HTTP 请求/响应,解决了 HTTP 1.x 的队头
阻塞问题。
头部压缩:HTTP 协议不带状态,所以每次请求都必须附上所有信息。HTTP 2.0 引入了头
部压缩机制,可以使用 gzip 或 compress 压缩后再发送,减少了冗余头部信息的带宽消
耗。
服务端推送:服务器可以主动向客户端推送资源,而不需要客户端明确请求。
6. 目前使用最广泛的是哪个 HTTP 版本?
答案
应该是 HTTP/2,在 2022 年 1 月达到峰值,占所有网站的 46.9%。
统计网站:
7. 什么是幂等?幂等方法了解哪些?
答案
幂等(Idempotence)是一个数学概念,用于描述某些操作的特性,即无论操作执行多少
次,结果都是相同的。换句话说,幂等操作可以重复执行而不会改变系统状态。
如果一个操作是幂等的,那么对同一资源执行该操作一次和执行多次的效果相同。
在正确实现的条件下,GET、HEAD、PUT 和 DELETE 等方法都是幂等的,而 POST 方法
不是。
例如,GET /pageX HTTP/1.1 幂等的。连续调用多次,客户端接收到的结果都是一样
的:
</span></p><p id="uce5c1923" class="ne-p"><span class="ne-text">GET
/pageX HTTP/1.1</span></p><p id="u73008121" class="ne-p"><span class="ne-
text">GET /pageX HTTP/1.1</span></p><p id="ue80d72c2" class="ne-p"><span
class="ne-text">GET /pageX HTTP/1.1</span></p><p id="ud56876e3"
class="ne-p"><span class="ne-text">GET /pageX HTTP/1.1</span></p><p
id="ud3e982bd" class="ne-p"><span class="ne-text">
8. 除了 Get 方法之外还了解其他幂等方法吗?
答案
DELETE /idX/delete HTTP/1.1 是幂等的,即便是不同请求之间接收到的状态码不一
样:
</span></p><p id="uf7f59712" class="ne-p"><span class="ne-text">DELETE
/idX/delete HTTP/1.1 -> Returns 200 if idX exists</span></p><p
id="ua3cec33b" class="ne-p"><span class="ne-text">DELETE /idX/delete
HTTP/1.1 -> Returns 404 as it just got deleted</span></p><p
id="ue96fa422" class="ne-p"><span class="ne-text">DELETE /idX/delete
HTTP/1.1 -> Returns 404</span></p><p id="ufab2088a" class="ne-
p"><span class="ne-text">
9. 一个 TCP 连接可以发送多少次 HTTP 请求?
答案
一个 TCP 连接可以发送多少次 HTTP 请求,取决于 HTTP 协议的版本。
在 HTTP/1.0 中,每个 HTTP 请求-响应使用一个单独的 TCP 连接。这意味着每次发送
HTTP 请求都需要建立一个新的 TCP 连接。
HTTP/1.1 引入了持久连接(Persistent Connection),默认情况下允许在一个 TCP 连接
上发送多个 HTTP 请求。
通过使用 Connection: keep-alive 头部实现,保持连接打开状态,直到明确关闭为止。
这极大地提高了效率,因为无需为每个请求都建立新的连接。
此外,HTTP/1.1 支持请求管道化(Pipelining),允许客户端在收到前一个响应之前发送
多个请求。
HTTP/2 进一步优化了连接复用,允许在单个 TCP 连接上同时发送多个请求和响应,这些
请求和响应被分割成帧并通过流传输。HTTP/2 的多路复用(Multiplexing)机制显著提
高了并发性能和资源利用效率。
算法
1. LeetCode 15. 三数之和 (带输入输出)
反问
1. 是否要学习大数据相关知识?
2. 之后的面试流程?
HR 面(11 月 28 日,15min)
1. 觉得自己前面的 2 轮面试表现的怎么样?哪里发挥的好?哪里发挥的不好?
2. 未来想从事哪一行业?
3. 什么时候可以来实习?
4. 可以实习多长时间?
5. 平时都是怎么学习的?
6. 介绍一下实习期间主要做的项目?
7. 实习期间遇到的最大困难是什么?怎么解决的?
8. 实习给你带来了哪些成长?
9. 如果你可以来实习,你对自己有哪些规划吗?
10. 你有什么想问我的吗?
牛客链接:https://www.nowcoder.com/discuss/1098607
同学 13(商业化,主管面挂,附答案)
转到了商业化的另一个组 oc 的
一面 1.15 1 点 1h
1. 什么是死锁,死锁的产生条件,破坏死锁
2. 进程和线程区别,线程共享内存和进程共享内存的区别
3. 进程间如何通信
4. redis 和 mysql 的区别
5. redis 的 zset,什么是跳表,插入一个节点要构建几层索引
6. B+树,为什么 3 层容纳 2000W 条,为什么 2000w 条数据查的快
7. url 请求的全过程(要求详细)
8. (A,B,C) 联合索引 select * from tbn where a=? and b in (?,?) and c>? 会走索引吗
9. 力扣 79
10. 二叉搜索树转双向链表
详细回答:传送门
二面 1.16 5 点 1h
1. 什么是三大范式,为什么要有三大范式,什么场景下不用遵循三大范式,举一个场景
2. 什么是 SQL 注入,怎么避免,什么是参数化
3. mysql 怎么存 emoji,怎么编码
4. 什么是深分页,select * from tbl limit 1000000000 这个有什么问题,如果表大或者表
小分别什么问题
5. 一个表(name, sex,age,id),select age,id,name from tblname where
name=‘paicoding’;怎么建索引
6. http 和 https 的区别,https 是怎么建立连接,https 是对称还是非对称加密
7. http 的响应号有哪些
8. http 有哪些方法,http 的 get 方法可以实现写操作吗,https 传递 url 安全吗,为什么
数据在浏览器中,中间人攻击是什么
9. 针对用户输入的前缀字符串,统计输出的 top10 的热词
10. leetcode 47
11. int num[] ,k。对这个数组进行排序,数组中的每个元素距离他排序后的位置相差的距
离小于等于 k
二面面试官太压力了,得着我回答的一个点一直问,汗流浃背,许愿 oc
详细答案:传送门