1在C语言中执行 int a=5; int b=a++ + ++a; 后,b的值是
- A. 11
- B. 12
- C. 13
- D. 10
2在Git中,想把本地已提交但尚未推送的最近一次提交与工作区修改合并进上一次提交,应使用
- A. git commit --amend
- B. git revert HEAD
- C. git reset --soft HEAD~1
- D. git cherry-pick HEAD
3在 C 语言中,执行语句 int a = 5; printf("%d", a++ + ++a); 后输出的结果是
- A. 12
- B. 11
- C. 10
- D. 13
4对数组 [3,1,4,1,5] 执行一趟冒泡排序(从头到尾比较相邻元素并交换逆序对)后,数组变为
- A. 1,3,1,4,5
- B. 1,1,3,4,5
- C. 3,1,4,1,5
- D. 1,3,4,1,5
5关于 HTTP/1.1 的持久连接与 HTTP/2 的多路复用,下列描述正确的是
- A. HTTP/2 可在同一连接上并行交错多个请求响应
- B. HTTP/1.1 持久连接也支持请求响应交错发送
- C. HTTP/2 多路复用要求每个请求单独建立 TCP 连接
- D. HTTP/1.1 默认关闭持久连接
6在 C 语言中,执行 int a[5]; int *p = a; 后,表达式 *(p+3) 与下列哪一项等价?
- A. a[3]
- B. a[4]
- C. *(a+4)
- D. p[4]
7在后端接口设计中,为防止 SQL 注入,下列哪种做法最有效?
- A. 使用参数化查询并绑定用户输入
- B. 对用户输入中的单引号做删除处理
- C. 将 SQL 语句拼接后统一转义再执行
- D. 限制数据库账号为只读权限后直接拼接
8某服务上线后出现内存持续增长,日志显示缓存对象只增不减,下列排查与处置中最恰当的是哪一项?
- A. 检查缓存是否设置过期或淘汰策略,并补充容量上限与过期时间
- B. 立即重启服务并观察,确认不再增长后关闭监控告警
- C. 将缓存容量调大以避免频繁淘汰,再观察内存曲线
- D. 把缓存改为每次请求全量重建,避免复用旧对象
9在 MySQL 中,对已建表 users 增加一个允许为空且无默认值的列 age,应使用的语句是
- A. ALTER TABLE users ADD COLUMN age INT NULL
- B. ALTER TABLE users MODIFY age INT NULL
- C. UPDATE TABLE users ADD age INT NULL
- D. ALTER TABLE users INSERT age INT NULL
10TCP 三次握手中,客户端收到服务器返回的 SYN+ACK 后应发送的报文是
- A. ACK
- B. SYN
- C. FIN
- D. RST
11在 MySQL 中,对已有数据的表执行 ALTER TABLE 添加一个 NOT NULL 且无默认值的列,若表中已有记录,通常结果是
- A. 自动为旧记录填 0 或空串
- B. 旧记录该列被置为 NULL
- C. 语句报错或需先给默认值
- D. 旧记录被删除后重建表
12在 Git 中,已提交但尚未推送的最近一次提交信息写错,最合适的修正命令是
- A. git commit --amend
- B. git reset --hard HEAD~1
- C. git revert HEAD
- D. git checkout HEAD~1
13HTTP 状态码 301 与 302 在重定向语义上的关键差异是
- A. 301 表示永久重定向,302 表示临时重定向
- B. 301 表示临时重定向,302 表示永久重定向
- C. 301 用于 HTTPS,302 用于 HTTP
- D. 301 用于 GET,302 用于 POST
14某后端服务在高峰期频繁出现数据库连接池耗尽,日志显示大量请求阻塞在获取连接阶段。此时最应优先排查的环节是
- A. 连接是否在使用后正确归还以及是否存在长事务占用
- B. 服务器 CPU 主频是否低于同型号平均水平
- C. 前端页面是否启用了浏览器缓存
- D. 数据库表的字段命名是否使用下划线风格
15在 Python 中,表达式 [x * 2 for x in range(3) if x % 2 == 0] 的求值结果是
- A. [0, 4]
- B. [0, 2]
- C. [2, 4]
- D. [0, 2, 4]
16在 Git 中,若本地分支 feature 已提交若干次,此时执行 git rebase main 后,feature 分支上原有提交的哈希值通常会
- A. 保持不变且历史线性
- B. 发生改变并生成新提交
- C. 被自动合并为一次提交
- D. 被移动到 main 分支之前
17关于 JavaScript 中 let 与 var 声明变量的差异,下列描述正确的有(多选)
- A. let 声明的变量存在块级作用域,var 声明的变量属于函数作用域
- B. 在同一个块中 let 不允许重复声明同名变量,var 允许重复声明
- C. let 声明的变量在声明前访问会抛出 ReferenceError,var 声明前访问得到 undefined
- D. let 声明的变量会被提升到所在函数顶部并初始化为 undefined
- E. var 声明的变量在全局作用域下不会成为 window 对象的属性
18C 语言中,对于数组 int a[5],表达式 *(a+2) 与下列哪个写法等价
- A. a[2]
- B. a[1]
- C. a[3]
- D. &a[2]
19在关系型数据库中,能保证一个事务的修改在提交前对其他事务不可见的特性是
- A. 隔离性
- B. 原子性
- C. 一致性
- D. 持久性
20程序运行中抛出空指针异常,日志显示调用链最深处为对象方法调用,优先排查的方向是
- A. 调用该方法前对象引用是否已被赋值
- B. 该方法的返回类型是否声明错误
- C. 方法的访问修饰符是否为 public
- D. 方法参数是否使用了可变参数
21关于冒泡排序的稳定性,下列判断正确的是
- A. 当相邻元素相等时不交换,冒泡排序是稳定的
- B. 冒泡排序一定不稳定,因为会交换相邻元素
- C. 冒泡排序的稳定性取决于数组初始顺序
- D. 冒泡排序稳定,但前提是每轮必须交换相等元素
22在 Git 中,若想把本地分支 feature 的提交整理后合并到 main 并保持线性历史,较合适的操作是
- A. 切到 main 后执行 git rebase feature 再快进合并
- B. 切到 main 后执行 git merge --no-ff feature
- C. 切到 feature 后执行 git merge main
- D. 在 main 上执行 git cherry-pick feature 的全部提交
23某后端接口偶发返回旧数据,排查发现读请求走了从库而写请求走主库,最可能的原因是
- A. 主从复制存在延迟,读请求读到了尚未同步的从库
- B. 从库磁盘比主库慢导致读超时
- C. 写请求没有加事务导致数据丢失
- D. 接口没有设置缓存导致读到旧数据
24关于进程与线程的区别,下列说法正确的是
- A. 同一进程内多个线程共享该进程的地址空间
- B. 线程拥有独立的地址空间而进程共享地址空间
- C. 进程切换开销一定小于线程切换开销
- D. 一个进程只能包含一个线程
25在 Python 中执行 d = {}; d[(1,2)] = 'a'; d[[1,2]] = 'b' 会得到什么结果
- A. 两次赋值都成功,字典有两个键
- B. 第一次成功,第二次抛出 TypeError
- C. 第一次抛出 KeyError,第二次成功
- D. 两次都抛出 TypeError,字典为空
26给定递归函数 f(n) = f(n-1) + f(n-2),f(0)=0,f(1)=1,直接递归计算 f(6) 的过程中,f(3) 被重复计算的次数是多少
- A. 2 次
- B. 3 次
- C. 4 次
- D. 5 次
27某后端接口在压测中出现响应时间随并发升高而急剧上升、CPU 使用率却不高,最可能的原因是
- A. 线程池核心线程数设置过小导致任务排队等待
- B. 数据库连接池被占满导致请求阻塞在获取连接
- C. JVM 堆内存不足频繁触发 Full GC
- D. 网络带宽达到上限导致数据包丢失重传
28在 Python 中执行表达式 3 * 1 ** 2 后,结果是多少
- A. 9
- B. 6
- C. 3
- D. 1
29关系数据库中,若表 R 已满足第三范式,则它一定满足的是
- A. 第二范式
- B. BCNF
- C. 第四范式
- D. 第五范式
30在面向对象设计中,子类重写父类方法时把访问权限由public改为private,这主要违反了哪一原则
- A. 单一职责原则
- B. 里氏替换原则
- C. 依赖倒置原则
- D. 接口隔离原则
31HTTP/1.1中启用持久连接后,若客户端发送的请求未带Connection头,服务器默认采取的行为是
- A. 关闭连接并等待下次请求
- B. 保持连接直到超时或显式关闭
- C. 立即升级为HTTP/2
- D. 每条请求重新建立TCP连接
32关于TCP三次握手,客户端收到服务器的SYN+ACK后发送的ACK报文,其序列号应设置为
- A. 客户端初始序列号加1
- B. 服务器序列号加1
- C. 客户端初始序列号
- D. 服务器序列号
33某后端接口在压测时响应时间随并发数上升先平稳后急剧增大,且CPU利用率接近饱和、GC日志频繁出现Full GC,最应优先排查的方向是
- A. 数据库连接池最大连接数是否过小
- B. 应用堆内存与对象创建速率是否合理
- C. 前端静态资源是否启用CDN
- D. HTTP响应头是否缺少缓存字段
34某后端服务用 Java 编写,方法内先声明了局部变量 List<String> buf 并赋值为 new ArrayList<>(),随后在 try 块中向 buf 添加元素、在 catch 块中打印日志,若要在 catch 块中安全读取 buf 中已添加的元素并保证方法任何异常路径下 buf 都非 null,下列做法中正确的有?(多选)
- A. 把 buf 的声明与 new ArrayList<>() 赋值放在 try 块之前,catch 块直接遍历 buf
- B. 在 try 块内声明并初始化 buf,catch 块中通过重新 new ArrayList<>() 后遍历
- C. 把 buf 声明为方法参数传入并初始化为 new ArrayList<>(),catch 块直接遍历
- D. 在 try 块内声明 buf 但不初始化,catch 块中判断 buf 是否为 null 后再遍历
35对栈执行依次入栈1、2、3、4后,允许在任意时刻出栈,下列不可能得到的出栈序列是
- A. 4,3,2,1
- B. 1,2,3,4
- C. 3,2,4,1
- D. 3,1,2,4
36在编写递归函数时,下列哪些做法有助于避免栈溢出(多选)
- A. 确保每次递归调用都向基准情形靠近
- B. 将可尾递归的结构改写为尾递归或迭代
- C. 为递归函数增加全局变量缓存中间结果
- D. 把递归深度上限调大以容纳更多层调用
- E. 在递归前先复制一份完整调用栈
37git中已修改文件但尚未git add,此时执行git commit -m "x" 的结果是
- A. 修改被提交,工作区变干净
- B. 没有内容被提交,提示无变更
- C. 修改被自动加入暂存区并提交
- D. 提交成功但只包含上次暂存内容
38在Java中,以下关于String、StringBuilder和StringBuffer的说法,正确的是
- A. String对象的字符内容可被修改方法直接改变
- B. StringBuilder的方法均为线程安全同步方法
- C. StringBuffer的方法均为线程安全同步方法
- D. 三者都可直接用作HashMap的键并保证内容相等
39某后端接口在压测时发现响应时间随并发上升急剧增加,CPU使用率却不高,最可能的原因是
- A. 线程池核心线程数设置过小导致任务排队
- B. 数据库连接池被占满导致请求阻塞等待
- C. JVM堆内存过小频繁触发Full GC
- D. 网络带宽不足导致数据包丢失重传
40在 Java 中,接口里定义的成员变量默认具有的修饰符组合是
- A. public static final
- B. private static final
- C. protected final
- D. public transient
41在 Git 中,需要把已经提交到本地仓库但尚未推送的最后一次提交撤销并保留改动到工作区,应使用的命令是
- A. git reset --soft HEAD~1
- B. git reset --hard HEAD~1
- C. git checkout HEAD~1
- D. git revert HEAD
42在 Python 中,若函数参数使用可变对象作为默认值,例如 def f(x=[]),可能引发的问题是
- A. 多次调用共享同一个默认列表
- B. 每次调用自动复制默认列表
- C. 默认参数无法被修改
- D. 函数定义时立即报语法错误
43关于数据库事务的ACID特性,其中保证事务提交后修改永久保存的是
- A. 原子性
- B. 一致性
- C. 隔离性
- D. 持久性
44用二分查找在含1024个有序元素的数组中查找某元素,最多需要比较的次数是
- A. 10
- B. 11
- C. 12
- D. 32
45Java 中 String s = "a" + "b" + "c"; 与使用 StringBuilder 拼接相比,前者的编译期优化结果是
- A. 每次拼接都创建新的 String 对象
- B. 编译期直接合并为一个字符串常量
- C. 运行时调用 String.concat 三次
- D. 运行时创建三个临时 StringBuffer
46某前端页面在移动端点击按钮后出现 300ms 延迟,最合理的优化方案是
- A. 在 viewport 中设置 width=device-width
- B. 把点击事件改为 mouseover 事件
- C. 给按钮增加 CSS 的 transition 动画
- D. 使用 setTimeout 包裹点击回调
47C语言中,表达式 sizeof(char) 与 sizeof('a') 在多数实现下的结果分别是
- A. 1 和 1
- B. 1 和 4
- C. 4 和 1
- D. 4 和 4
48在Git中,已修改文件但尚未执行 git add,此时执行 git commit -m "fix" 的结果是
- A. 提交该文件的所有修改
- B. 提交为空或提示无暂存内容
- C. 自动暂存并提交该文件
- D. 丢弃该文件的修改
49在 Git 中,执行 git reset --hard HEAD~1 后,工作区与暂存区会
- A. 保留最近一次提交的改动
- B. 回退到上一次提交并丢弃当前改动
- C. 仅取消暂存但保留工作区改动
- D. 创建一个新的合并提交
50在编写涉及共享变量的多线程程序时,下列哪些做法有助于避免数据竞争(多选)
- A. 对共享数据的读写使用同一把互斥锁保护
- B. 使用原子操作对共享计数器做自增
- C. 用局部变量缓存共享数据后再写回且不加同步
- D. 使用线程安全的无锁队列传递数据
- E. 为每个线程分配独立的只读数据副本
51用链表实现栈时,若规定只能在链表头部进行插入和删除,则入栈和出栈操作的时间复杂度分别是
- A. O(1) 和 O(1)
- B. O(1) 和 O(n)
- C. O(n) 和 O(1)
- D. O(n) 和 O(n)
52在JavaScript中,使用 var 声明的变量与使用 let 声明的变量在作用域上的关键区别是
- A. var 声明的变量属于函数作用域,let 声明的变量属于块作用域
- B. var 声明的变量不能重新赋值,let 声明的变量可以重新赋值
- C. var 声明的变量会被提升到全局,let 声明的变量不会被提升
- D. var 声明的变量只能在严格模式下使用,let 声明的变量无此限制
53在二叉搜索树中依次插入 5、3、8、1、4 后,中序遍历得到的序列是
- A. 5 3 8 1 4
- B. 1 3 4 5 8
- C. 1 3 5 4 8
- D. 5 3 1 4 8
54下列关于进程与线程的说法,正确的有(多选)
- A. 同一进程内的线程共享该进程的地址空间
- B. 线程切换通常比进程切换开销小
- C. 进程之间通信必须通过操作系统提供的机制
- D. 每个线程拥有独立的堆内存区域
- E. 多线程程序一定比单线程程序执行更快
55前端开发中,CSS选择器 div p 与 div > p 的主要区别是
- A. 前者选所有后代p,后者只选直接子元素p
- B. 前者只选直接子元素p,后者选所有后代p
- C. 前者选同级相邻p,后者选所有后代p
- D. 前者选div自身,后者选div内所有p
56在快速排序中,若每次选取的基准元素都是当前子序列的最大值,则递归树退化的形态是
- A. 完全二叉树
- B. 单支链
- C. 平衡二叉树
- D. 满二叉树
57关于进程与线程,以下说法正确的有(多选)
- A. 同一进程内线程共享进程的地址空间
- B. 线程切换通常比进程切换开销小
- C. 进程之间通信必须通过操作系统提供的机制
- D. 一个线程崩溃一定会导致同进程其他线程正常继续
- E. 每个线程拥有独立的文件描述符表
58下列排序算法中,对包含大量重复元素的数组通常表现较好且平均时间复杂度为 O(n log n) 的是
- A. 三路快速排序
- B. 冒泡排序
- C. 直接插入排序
- D. 选择排序
59某后端接口在高并发下出现数据库连接池耗尽,日志显示大量请求等待连接,最优先的处置是
- A. 检查慢查询与连接泄漏并设置合理超时
- B. 直接把连接池最大连接数调到最大
- C. 重启数据库释放所有连接
- D. 把接口改为同步阻塞调用
60对单链表进行头插法建表时,若头指针为 head,新结点为 p,正确的操作顺序是
- A. p->next=head; head=p;
- B. head=p; p->next=head;
- C. p->next=head->next; head->next=p;
- D. head->next=p; p->next=head;
61在C语言中,表达式 5 / 2 * 2.0 的运算结果类型和值分别是
- A. double 类型,值为 4.0
- B. int 类型,值为 4
- C. double 类型,值为 5.0
- D. int 类型,值为 5
62前端页面在移动端出现横向滚动条,最可能的原因是
- A. 某个元素宽度超出视口或存在固定宽度
- B. 图片未设置 alt 属性
- C. CSS 选择器优先级过低
- D. JavaScript 未使用严格模式
63关于 HTTP 状态码 302 与 301 的区别,描述正确的是
- A. 301 表示永久重定向,302 表示临时重定向
- B. 301 表示临时重定向,302 表示永久重定向
- C. 301 表示请求成功,302 表示资源未找到
- D. 301 表示服务器错误,302 表示客户端错误
64Java 中 String s = "a"; s = s + "b"; 执行后关于对象的说法正确的是
- A. 原对象被修改为 "ab"
- B. 创建了新对象,s 指向新对象
- C. 字符串常量池中的 "a" 被替换
- D. 编译报错,String 不可拼接
65哈希表在负载因子过高时通常采取的措施是
- A. 扩大桶数组并重新散列
- B. 直接删除冲突元素
- C. 改用线性查找逐个比对
- D. 冻结插入操作直到有空位
66HTML中要让一个块级元素在父容器内水平居中且自身宽度为父容器的一半,较合适的是
- A. 设置 width:50%; margin:0 auto;
- B. 设置 width:50%; float:left;
- C. 设置 width:50%; position:absolute; left:0;
- D. 设置 width:50%; display:inline;
67函数f定义如下:int f(int n){ return n<=1?1:n*f(n-1);} 调用f(5)的返回值是
- A. 120
- B. 24
- C. 60
- D. 720
68关于程序调试,下列做法中有助于定位偶发缺陷的有(多选)
- A. 在关键分支增加带时间戳的日志记录
- B. 用版本控制对比引入缺陷前后的代码差异
- C. 复现时记录输入数据、环境版本和操作步骤
- D. 把疑似出错语句注释掉后直接发布上线
- E. 将异常捕获后统一忽略以避免程序中断
69在SQL中,若要对查询结果按某列分组并只保留组内记录数大于3的组,应使用
- A. ORDER BY ... HAVING
- B. GROUP BY ... HAVING
- C. GROUP BY ... WHERE
- D. ORDER BY ... WHERE
70Java 中父类引用指向子类对象后调用被重写的方法,实际执行的是
- A. 父类中定义的方法
- B. 子类中重写的方法
- C. 编译时随机决定
- D. 子类中新增的普通方法
71HTML中要让一个块级元素在父容器内水平居中且父容器宽度固定,下列CSS写法正确的是
- A. margin: 0 auto;
- B. text-align: center;
- C. float: left;
- D. position: absolute;
72下列排序算法中,若要求排序稳定且时间复杂度为O(nlogn),应选择
- A. 归并排序
- B. 快速排序
- C. 堆排序
- D. 希尔排序
73在Git中已提交了敏感文件config.env,现在想从后续提交中移除但保留本地文件,应使用
- A. git rm config.env
- B. git rm --cached config.env
- C. git delete config.env
- D. git reset config.env
74在 Python 中执行表达式 3 * 1 ** 2 的结果是
- A. 9
- B. 6
- C. 3
- D. 1
75前后端分离项目中,浏览器发起跨域请求被拦截,服务端已设置 Access-Control-Allow-Origin 为具体域名,但携带 Cookie 的请求仍失败,最可能缺少的响应头是
- A. Access-Control-Allow-Credentials: true
- B. Access-Control-Allow-Methods: GET
- C. Content-Type: application/json
- D. Cache-Control: no-cache
76在 SQL 中,对分组结果进行筛选应使用的子句是
- A. HAVING
- B. WHERE
- C. ORDER BY
- D. GROUP BY
77在 Git 中,执行 git reset --soft HEAD~1 后工作区与暂存区的变化是
- A. 撤销最近一次提交,改动保留在暂存区
- B. 撤销最近一次提交,改动保留在工作区
- C. 撤销最近一次提交并丢弃所有改动
- D. 只撤销暂存区内容,不改变提交历史
78Java 中 String 与 StringBuilder 都能拼接字符串,循环内大量拼接时应优先选用 StringBuilder,主要原因是?
- A. StringBuilder 拼接结果更准确
- B. String 是不可变对象,每次拼接产生新对象
- C. StringBuilder 支持更多字符编码
- D. String 无法在循环中使用
79在关系型数据库中,某查询语句在 WHERE 条件中对索引列使用函数,如 WHERE DATE(create_time)='2024-01-01',导致查询变慢,主要原因是?
- A. 函数使索引无法被有效利用
- B. DATE 函数本身执行很慢
- C. create_time 字段类型错误
- D. WHERE 子句不支持函数
80对有序数组使用二分查找时,循环条件写成 while (low < high) 且更新为 low = mid + 1、high = mid,这种写法对区间含义的约定是
- A. 左闭右闭区间
- B. 左闭右开区间
- C. 左开右闭区间
- D. 双开区间
81某函数需要返回多个值,在Go语言中较符合惯例的做法是
- A. 返回一个包含所有值的切片
- B. 返回多个具名返回值
- C. 通过全局变量传出
- D. 返回格式化后的字符串
82TCP三次握手中,客户端收到服务器SYN+ACK后发送的报文段其ACK标志与序号含义是
- A. 确认服务器SYN,序号为客户端初始序号加1
- B. 确认服务器SYN,序号为服务器初始序号加1
- C. 请求建立连接,序号为服务器初始序号
- D. 请求建立连接,序号为客户端初始序号
83对数组 [3, 1, 4, 1, 5] 执行一次冒泡排序(按升序,从前往后比较交换)后的结果是
- A. [1, 3, 1, 4, 5]
- B. [1, 1, 3, 4, 5]
- C. [3, 1, 4, 1, 5]
- D. [1, 3, 4, 1, 5]
84TCP 三次握手中,客户端收到服务器对 SYN 的确认后发送的报文段中,ACK 标志与序号的关系是
- A. ACK 置 1,确认号为服务器初始序号加 1
- B. ACK 置 0,序号为客户端初始序号加 1
- C. ACK 置 1,确认号为客户端初始序号加 1
- D. ACK 置 1,序号为服务器初始序号加 1
85Java中 String s = "a"; s = s + "b"; 执行后关于字符串对象数量的说法,正确的是
- A. 只创建了1个String对象
- B. 创建了2个String对象,s指向新的那个
- C. 创建了2个String对象,s仍指向最初那个
- D. 创建了3个String对象,其中1个被回收
86对链表和数组在头部插入元素的效率进行比较,通常更优的是
- A. 数组,因为支持随机访问
- B. 链表,因为只需修改指针
- C. 数组,因为内存连续
- D. 链表,因为需要遍历到尾部
87关于HTTP状态码,客户端请求的资源需要身份认证且未提供凭证时,服务器应返回
- A. 301
- B. 401
- C. 403
- D. 404
88在 SQL 中,若要查询 employees 表中每个部门人数且只显示人数大于 5 的部门,正确写法是
- A. SELECT dept, COUNT(*) FROM employees WHERE COUNT(*) > 5 GROUP BY dept
- B. SELECT dept, COUNT(*) FROM employees GROUP BY dept HAVING COUNT(*) > 5
- C. SELECT dept, COUNT(*) FROM employees GROUP BY dept WHERE COUNT(*) > 5
- D. SELECT dept, COUNT(*) FROM employees HAVING COUNT(*) > 5 GROUP BY dept
89在多线程环境中对共享计数器 count 执行 count++ 出现丢失更新,最合适的修复方式是
- A. 把 count 声明为 volatile
- B. 用 synchronized 或原子类保护自增
- C. 把 count 改为 long 类型
- D. 在自增前后各加一次 Thread.yield
90在HTTP协议中,状态码401与403的区别是
- A. 401表示未认证,403表示已认证但无权限
- B. 401表示无权限,403表示未认证
- C. 401表示服务器错误,403表示客户端错误
- D. 401表示资源不存在,403表示请求方法不允许
91在关系数据库中,若要保证一个事务的修改在提交前不被其他事务看到,应设置的隔离级别是
- A. 读已提交
- B. 读未提交
- C. 可重复读
- D. 串行化
92在编写健壮的后端接口时,下列做法中能有效提升异常可观测性的有(多选)
- A. 记录异常堆栈并附带请求标识
- B. 对可预期业务异常返回统一错误码
- C. 捕获异常后仅打印“出错了”
- D. 用空catch块忽略异常
- E. 将异常信息直接透传给前端
93以下关于TCP与UDP的描述中,正确的有(多选)
- A. TCP提供面向连接的可靠传输
- B. UDP头部开销比TCP小
- C. TCP通过三次握手建立连接
- D. UDP在传输层提供拥塞控制
- E. TCP不保证数据顺序
94在关系数据库中,若表R有外键引用表S的主键,则向R插入元组时数据库通常
- A. 不检查S中是否存在对应值
- B. 检查S中是否存在被引用的值
- C. 自动删除S中的对应行
- D. 自动把R的主键改为外键值
95下列排序算法中,平均时间复杂度为 O(n log n) 且稳定的是
- A. 快速排序
- B. 堆排序
- C. 归并排序
- D. 选择排序
96某后端服务上线后出现 CPU 持续接近 100% 且接口响应变慢,日志显示同一查询被高频重复执行,作为程序员首先应排查的环节是
- A. 数据库连接池最大连接数是否设置过小
- B. 该查询是否缺少缓存或存在循环内查询
- C. 前端是否开启了浏览器缓存
- D. 服务器磁盘剩余空间是否不足
97在一个已按升序排好序的数组中用二分查找定位目标值,当中间元素小于目标值时,下一步应如何调整查找区间
- A. 把左边界移到中间位置加一
- B. 把右边界移到中间位置减一
- C. 把左右边界都移到中间位置
- D. 把左边界移到中间位置减一
98在一个电商下单接口中,若扣减库存成功但创建订单记录时抛异常,为保证数据一致,正确的处置步骤是哪一项
- A. 捕获异常后回滚库存并向上返回失败
- B. 忽略异常让库存保持扣减状态
- C. 先返回成功再异步补建订单记录
- D. 重新扣减一次库存以覆盖异常
99用快速排序对含大量重复元素的数组排序时,若分区函数始终以最左元素为基准且把等于基准的元素全部分到一侧,最可能导致的结果是
- A. 递归深度接近 n,时间复杂度退化为 O(n²)
- B. 每次分区后两侧规模严格相等,复杂度保持 O(n log n)
- C. 重复元素被自动去重,排序结果元素个数减少
- D. 基准元素被交换到末尾,后续不再参与分区
100在编写涉及共享可变状态的并发程序时,下列做法中能降低数据竞争风险的有(多选)
- A. 对共享变量的读改写使用原子操作或加锁保护
- B. 把共享状态改为线程内局部变量后再汇总
- C. 使用不可变对象在多个线程间传递数据
- D. 依靠调整线程优先级来避免同时访问
- E. 在循环中反复读写共享变量以减少锁次数