选择题(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。为了加快以后的加载速度,浏览器会把这些数据“偷偷”存到本地缓存里,并记住这个文件的“版本号”(比如 ETagLast-Modified 时间)。

当浏览器再次请求同一个页面时,它的工作流程是这样的:

  1. 浏览器向服务器发问:“我本地有一份这个网页的缓存,版本号是 X,请问你那边有更新吗?”(通过请求头发送)

  2. 服务器检查后发现文件并没有修改。

  3. 服务器为了节省带宽,不再发送完整的网页数据,而是简单地回复一个 304 Not Modified 的状态码,意思是:“没变过,你直接用你本地的缓存吧!”

    2xx:成功门派(客户端请求成功被接收、理解和接受)

    状态码 英文短语 通俗解释 常见场景
    200 OK 完美搞定! 最常见的成功状态。你请求网页、请求数据,服务器正常把内容交给你。
    201 Created 创建成功! 你向服务器提交了数据(比如注册新账号、发布一篇新文章),服务器成功在数据库里新建了这条记录。
    204 No Content 处理成功,但没话跟你说。 服务器成功处理了请求,但不需要返回任何实体内容(比如你点击了一个“删除”按钮,只要删成功就行,不需要返回新页面)。

    3xx:重定向门派(需要客户端采取进一步的操作才能完成请求)

    状态码 英文短语 通俗解释 常见场景
    301 Moved Permanently 永久搬家了。 旧网址作废,以后请永远用新网址。搜索引擎也会把旧地址的权重转移到新地址。(比如网站从 http 升级到 https)
    302 Found 临时出门了。 这个网址的内容暂时借住在别的地方,你先去新地址找,但以后还会回来的。
    304 Not Modified 东西没变,用你自己的吧。 (协商缓存)服务器告诉你文件没更新,请直接使用你浏览器本地的缓存。
    4xx:客户端错误门派(你(前端/用户)的问题,服务器无法处理)
    状态码 英文短语 通俗解释 常见场景
    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/1

  • A. POST(增 - Create): 用于新建资源。

    • 提交一段包含身份核验等信息的 JSON,注册一家新企业:POST /api/enterprises

  • C. PUT(改 - Update): 用于更新资源(通常是全量替换)。

    • 修改 ID 为 1 的企业信息:PUT /api/enterprises/1

  • D. DELETE(删 - Delete): 用于删除资源。

    • 在系统中注销 ID 为 1 的企业:DELETE /api/enterprises/1

7.以下哪种排序算法的平均时间复杂度为 O(n log n) 且不稳定?
A. 冒泡排序  B. 归并排序  C. 快速排序  D. 插入排序

首先我们要理解什么是“稳定性”:如果数组中有两个相同的元素(比如两个大小一样的数字 5,我们记作 5a5b,且 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)

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐