字节笔试考前复习练手(题目均由AI生成)
当你的浏览器第一次访问一个网页时,服务器会返回完整的网页数据,并附带一个状态码200 OK。为了加快以后的加载速度,浏览器会把这些数据“偷偷”存到本地缓存里,并记住这个文件的“版本号”(比如ETag或时间)。当浏览器再次请求同一个页面时,它的工作流程是这样的:浏览器向服务器发问:“我本地有一份这个网页的缓存,版本号是 X,请问你那边有更新吗?”(通过请求头发送)服务器检查后发现文件并没有修改。服务
选择题(15道,精选+改编)
1.在 TCP/IP 协议栈中,负责端到端可靠传输的是哪一层?
A. 网络接口层 B. 网络层 C. 传输层 D. 应用层
-
网络接口层(A):负责物理网卡和设备之间的基础数据收发。
-
网络层(B):核心是 IP 协议,负责在复杂的网络中为数据包“指路”(路由),把它从一个网络送到另一个网络,但它只管尽力送,不保证一定能安全送达。
-
应用层(D):离用户最近,负责具体的软件应用服务,比如我们看网页用的 HTTP 协议
2.下列哪种数据结构在平均情况下查找、插入、删除操作的时间复杂度均为 O(1)?
A. 二叉搜索树 B. 哈希表 C. 跳表 D. 红黑树
其他都是O(log n)
3.页面大小为 1KB,映射到 64 个物理块,物理地址需要多少位二进制表示?
A. 14 位 B. 16 位 C. 15 位 D. 18 位
解析:1KB = 2¹⁰,用 10 位表示页内偏移;64 = 2⁶ 个物理块,用 6 位表示块号;总地址位数 = 10 + 6 = 16 位。
4.对于一个二维数组 A[0…4][0…3],每个元素占 2 个存储单元,A[0][0] 地址为 100,求 A[3][2] 的地址(按行优先存储)。
A. 124 B. 128 C. 132 D. 126
💡 解析:该数组有 5 行(0-4),每行 4 列(0-3),每元素 2 个单元。
A[i][j] 的地址 = 基地址 + (i × 列数 + j) × 元素大小
A[3][2] 的地址 = 100 + (3 × 4 + 2) × 2 = 100 + 28 = 128。
5.浏览器缓存之前请求过的页面时,返回的状态码是?
A. 200 B. 301 C. 302(或 304) D. 404
(注:这道题的选项设置其实有一点瑕疵。真正代表“使用缓存”的状态码是 304,而 302 是“临时重定向”。但既然它们被放在了同一个选项里,C 无疑是唯一指向缓存机制的正确选择。)
为什么是 304?(304 Not Modified)
当你的浏览器第一次访问一个网页时,服务器会返回完整的网页数据,并附带一个状态码 200 OK。为了加快以后的加载速度,浏览器会把这些数据“偷偷”存到本地缓存里,并记住这个文件的“版本号”(比如
ETag或Last-Modified时间)。当浏览器再次请求同一个页面时,它的工作流程是这样的:
浏览器向服务器发问:“我本地有一份这个网页的缓存,版本号是 X,请问你那边有更新吗?”(通过请求头发送)
服务器检查后发现文件并没有修改。
服务器为了节省带宽,不再发送完整的网页数据,而是简单地回复一个 304 Not Modified 的状态码,意思是:“没变过,你直接用你本地的缓存吧!”
2xx:成功门派(客户端请求成功被接收、理解和接受)
状态码 英文短语 通俗解释 常见场景 200 OK 完美搞定! 最常见的成功状态。你请求网页、请求数据,服务器正常把内容交给你。 201 Created 创建成功! 你向服务器提交了数据(比如注册新账号、发布一篇新文章),服务器成功在数据库里新建了这条记录。 204 No Content 处理成功,但没话跟你说。 服务器成功处理了请求,但不需要返回任何实体内容(比如你点击了一个“删除”按钮,只要删成功就行,不需要返回新页面)。 3xx:重定向门派(需要客户端采取进一步的操作才能完成请求)
4xx:客户端错误门派(你(前端/用户)的问题,服务器无法处理)
状态码 英文短语 通俗解释 常见场景 301 Moved Permanently 永久搬家了。 旧网址作废,以后请永远用新网址。搜索引擎也会把旧地址的权重转移到新地址。(比如网站从 http 升级到 https) 302 Found 临时出门了。 这个网址的内容暂时借住在别的地方,你先去新地址找,但以后还会回来的。 304 Not Modified 东西没变,用你自己的吧。 (协商缓存)服务器告诉你文件没更新,请直接使用你浏览器本地的缓存。
状态码 英文短语 通俗解释 常见场景 400 Bad Request 你发的东西我看不懂! 前端发送的请求参数格式错了、少了必填项,或者 JSON 语法不对。 401 Unauthorized 你谁啊?先去登录! 你试图访问一个需要身份验证的接口,但你没有提供 Token 或者登录状态失效了。 403 Forbidden 我知道你是谁,但你没权限! 你已经登录了,但你只是个普通用户,却试图去访问“超级管理员”才能看的页面。 404 Not Found 查无此人/此页面。 网址拼写错误,或者该页面已经被站长删除了。 405 Method Not Allowed 方法用错了! 比如一个接口只允许用 POST方法提交数据,你却用浏览器地址栏直接访问(GET方法),就会报错。5xx:服务端错误门派(我(后端/服务器)的问题,客户端请稍后再试)
状态码 英文短语 通俗解释 常见场景 500 Internal Server Error 服务器内部崩溃了! 后端代码抛出了异常(比如空指针、数据库连不上、代码写飞了)。这是后端程序员最怕看到的代码。 502 Bad Gateway 网关/代理罢工了。 通常是 Nginx 等反向代理服务器作为中间人,发现后面的真实业务服务器死机或没响应时,返回给用户的错误。 503 Service Unavailable 服务器正忙/维护中。 服务器没有崩溃,但因为流量太大(比如双十一秒杀)或者正在停机更新,暂时无法接客。 504 Gateway Timeout 网关等得花儿都谢了。 请求已经转交给了后面的业务服务器,但业务服务器处理得太慢了,超过了代理服务器设定的最大等待时间。
6.RESTful 请求资源列表时,使用哪个 HTTP 请求方法?
A. POST B. GET C. PUT D. DELETE
这道题考察的是 RESTful API 设计规范中最核心的理念:将 HTTP 方法与资源的 CRUD(增删改查)操作一一对应。
正确答案是 B. GET。
在 RESTful 架构中,请求(读取)资源列表或单个资源的信息,标准做法就是使用
GET方法。GET被设计为一种安全且幂等的操作,这意味着无论你发起多少次GET请求,都只是在“看”数据,绝不会改变服务器上的数据状态。为了让你在实际的 Spring Boot 或前端开发中更直观地运用它们,我们可以把这四个选项直接套入一个实际的业务场景中。假设我们正在设计一个危险化学品监管平台的后台接口,针对“企业(enterprises)”这个资源,标准的 RESTful 路由设计会是这样的:
B. GET(查 - Read): 用于获取数据。
获取 121 家化企的完整列表:
GET /api/enterprises获取 ID 为 1 的特定企业详情:
GET /api/enterprises/1A. POST(增 - Create): 用于新建资源。
提交一段包含身份核验等信息的 JSON,注册一家新企业:
POST /api/enterprisesC. PUT(改 - Update): 用于更新资源(通常是全量替换)。
修改 ID 为 1 的企业信息:
PUT /api/enterprises/1D. DELETE(删 - Delete): 用于删除资源。
在系统中注销 ID 为 1 的企业:
DELETE /api/enterprises/1
7.以下哪种排序算法的平均时间复杂度为 O(n log n) 且不稳定?
A. 冒泡排序 B. 归并排序 C. 快速排序 D. 插入排序
首先我们要理解什么是“稳定性”:如果数组中有两个相同的元素(比如两个大小一样的数字 5,我们记作 5a 和 5b,且 5a 原本排在 5b 前面),如果排序后 5a 依然排在 5b 前面,这个算法就是稳定的;如果它们的相对位置被打乱了,就是不稳定的。
我们来看看这四个选项的具体表现:
| 排序算法 | 平均时间复杂度 | 最坏时间复杂度 | 稳定性 | 核心思路简述 |
| A. 冒泡排序 | $O(n^2)$ | $O(n^2)$ | 稳定 | 两两比较,大的往后冒泡,效率较低。 |
| B. 归并排序 | $O(n \log n)$ | $O(n \log n)$ | 稳定 | 先拆分再合并,性能好且稳定,但需要额外空间。 |
| C. 快速排序 | $O(n \log n)$ | $O(n^2)$ | 不稳定 | 找基准值分区,速度极快,但交换过程会打乱相同元素的相对位置。 |
| D. 插入排序 | $O(n^2)$ | $O(n^2)$ | 稳定 |
8.深度学习中,下列哪个是常用的激活函数?
A. 线性函数 B. 阶跃函数 C. Sigmoid 函数 D. 恒等函数
9.在 Linux 内核中,进程从用户态切换到内核态的触发方式不包括:
A. 系统调用 B. 中断 C. 异常 D. 线程 yield
10.MySQL InnoDB 在可重复读隔离级别下,主要通过哪种机制解决幻读?
A. 行锁 B. 表锁 C. 间隙锁 + Next-Key Lock D. 意向锁
11.关于 HTTP/2 的描述,错误的是:
A. 支持头部压缩 B. 基于文本协议 C. 支持多路复用 D. 支持服务器推送
💡 解析:HTTP/2 是基于二进制帧的协议,而非像 HTTP/1.x 那样的文本协议。其余三项均为 HTTP/2 的核心特性。
12.Python 中,下列哪种数据类型是不可变的?
A. 列表 B. 字典 C. 元组 D. 集合
13.数据库事务的 ACID 特性不包括以下哪一项?
A. 原子性 (Atomicity) B. 一致性 (Consistency) C. 隔离性 (Isolation) D. 持久性 (Durability)
⚠️ 注意:此题考察的是"不包括",而 ACID 四特性实际上是 Atomicity、Consistency、Isolation、Durability,四项全包。实际考试中可能将其中一个替换成错误选项,请根据现场选项判断。
14.进程间通信方式不包括以下哪种?
A. 管道 B. 消息队列 C. 共享内存 D. 全局变量
💡 解析:进程拥有独立的内存空间,无法通过全局变量直接通信。管道、消息队列、共享内存、信号量、Socket 等才是标准的进程间通信(IPC)方式。
15.下列哪种操作可能引发死锁?
A. 使用线程池 B. 多线程以不同顺序获取多个互斥锁 C. 单线程执行 I/O D. 使用读写锁
💡 解析:死锁的四个必要条件之一就是"循环等待",当两个线程以相反顺序请求相同的两个锁时,极容易形成循环等待而导致死锁。
编程题一:数组元素变成相等的最少操作次数(改编自真题)
题目描述:给定两个长度为 n 的整数数组 A 和 B。每次操作可以选择数组 A 中的一个元素和数组 B 中的一个元素(可以是任意位置,包括相同位置),将它们各自加 1。求最少需要多少次操作,才能使数组 A 和数组 B 完全相等(即对所有 i 有 A[i] = B[i])。如果无法使两个数组相等,则输出 -1。
📌 真题溯源:来自 2025 年工程训练营笔试
import sys
n = int(sys.stdin.readline())
arr1 = list(map(int, sys.stdin.readline().split()))
arr2 = list(map(int, sys.stdin.readline().split()))
arr1.sort()
arr2.sort()
cnt1 = 0
cnt2 = 0
for i in range(n):
if arr1[i] > arr2[i]:
cnt2 += arr1[i] - arr2[i]
else:
cnt1 += arr2[i] - arr1[i]
if cnt1 == cnt2:
print(cnt2)
else:
print(-1)
编程题二:求 k 位数中各位数字之和等于 m 的个数
题目描述:求 k 位数中各位数字之和等于 m 的数的个数。k 位数范围是从 10^(k-1) 到 10^k - 1,且首位不能为 0。例如,当 k=2,m=3 时,符合条件的数有 12、21、30,共 3 个。
📌 真题溯源:来自 2025 年工程训练营笔试
输入格式:
-
第一行:一个整数 t(1 ≤ t ≤ 100),表示测试用例数量
-
接下来 t 行:每行两个整数 k 和 m(1 ≤ k ≤ 100,1 ≤ m ≤ 900)
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)