标签题目
多线程相关面试题第 2 页
什么是线程安全?
线程安全指一段代码、对象或组件在多个线程同时访问时,仍然能够保持预期的正确性,不因为执行时序交错而产生脏数据、丢失更新、状态破坏或偶发异常。判断线程安全不能只看单次调用是否正确,而要看共享可变状态在并发读写下是否满足原子性、可见性和有序性,并通过不可变、线程封闭、同步、原子类或并发容器等手段建立可靠的并发语义。
单例模式如何实现,如何保证线程安全?
单例模式的核心目标是让一个类在进程内只暴露一个可访问实例,并控制实例创建时机。回答时应从构造器私有化、全局访问点、线程安全发布、延迟加载、反射和序列化破坏边界几个维度展开。常见实现包括饿汉式、同步懒汉式、双重检查锁、静态内部类和枚举单例,其中推荐优先说明静态内部类和枚举单例,再解释为什么双重检查锁必须配合 volatile。
内核多线程模块的线程调度是怎么实现的?
Linux 内核多线程模块的线程调度通常不是模块自己实现调度器,而是模块创建多个内核线程后交给 Linux 统一调度。每个内核线程都有 task_struct,进入某个调度类,挂到 CPU 运行队列上,由 CFS、实时调度类或其他调度类根据状态、优先级、vruntime、CPU 负载和亲和性决定何时运行、抢占、阻塞、唤醒和上下文切换。模块开发者更关注线程创建、等待唤醒、停止退出、锁边界和不可睡眠上下文。
如何创建子进程?
创建子进程的核心方式是调用 fork():内核复制当前进程的进程描述信息,创建一个几乎相同但 PID 不同的新进程;父进程得到子进程 PID,子进程得到返回值 0。典型工程模式是 fork 后,子进程按需执行 exec 系列函数加载新程序,父进程使用 wait 或 waitpid 回收子进程退出状态,避免僵尸进程。Linux 中 fork 并不会立即完整拷贝父进程全部内存,而是依赖写时复制降低成本。面试回答应同时说明资源继承、文件描述符共享语义、信号处理、孤儿和僵尸进程、vfork 与 posix_spawn 的使用边界,以及多线程服务中 fork 后的工程风险。
fork发生复制的时候子进程会复制什么?
fork 的本质不是把父进程的一切都物理复制一份,而是创建一个几乎相同的子进程执行上下文:内核为子进程建立新的进程描述符、PID、虚拟地址空间视图和资源引用关系;用户态内存通常通过写时复制延迟分裂;文件描述符表被复制但底层打开文件对象常被共享。因此面试回答要区分“逻辑复制”“引用共享”和“写时复制后才真正复制”。
进程与线程区别?
进程是操作系统进行资源分配、隔离和保护的基本单位,线程是进程内部的执行流,通常是 CPU 调度的基本单位。进程之间默认拥有独立虚拟地址空间和资源边界,隔离更强;同一进程内多个线程共享地址空间、堆、代码段、打开文件等资源,但各自拥有独立寄存器上下文、栈、线程局部存储和调度状态。
如何定位慢sql,怎么优化?
定位慢 SQL 的核心不是只看执行时间,而是建立从发现、归因、验证到优化的闭环:先通过监控、慢查询日志、数据库性能视图确认慢 SQL;再结合执行计划、索引、扫描行数、锁等待、事务、数据量和业务访问模式判断瓶颈;最后用索引、SQL 改写、分页优化、表结构调整、缓存或架构拆分降低扫描量、排序量、回表量和锁竞争。
并发怎么控制?
并发控制的核心不是简单加锁,而是在正确性、吞吐量、延迟和资源保护之间做取舍。高质量回答应先说明控制目标,再识别共享资源和一致性边界,最后按单机内存、线程调度、数据库、分布式协调、入口限流和异步削峰等层次选择手段。
死锁产生的条件和排查方式是什么?
死锁本质上是多个执行单元在持有部分资源的同时继续等待对方释放资源,导致所有相关线程都无法向前推进。面试回答要先讲清四个必要条件,再说明排查时如何从现象、线程状态、锁拥有关系、业务调用链和复现路径逐层定位,最后补充预防策略,例如统一加锁顺序、缩短锁范围、使用超时锁和减少共享可变状态。
进程、线程和协程有什么区别?
这道题本质是在考操作系统并发模型的分层理解:进程是资源隔离和资源分配的基本单位,线程是内核调度和 CPU 执行的基本单位,协程是用户态组织异步流程的轻量执行单元。面试时不能只背“进程重、线程轻、协程更轻”,要讲清地址空间、调度权、上下文切换成本、通信方式,以及在 I/O 密集、高并发服务中的取舍。
同题还出现在 1 个公司岗位
CPU 负载很高但利用率很低,可能是什么原因?
CPU 负载很高但利用率很低,核心原因通常是:load average 统计的是正在运行或等待运行的任务,以及处于不可中断睡眠状态的任务;而 CPU utilization 只反映 CPU 真正在执行用户态、内核态等计算工作的时间占比。因此,很多进程卡在 D 状态、IO wait、磁盘或网络阻塞、锁等待、容器 CPU 配额限制等场景下,系统会表现为 load average 很高,但 CPU 使用率并不高。
针对登录界面设计case?
登录界面测试用例设计不能只停留在用户名密码正确或错误。一个测试开发视角的完整答案,应从业务入口、账号体系、认证链路、安全风控、状态保持、跳转权限、兼容性、性能、可用性、可观测性和自动化回归等维度展开。核心目标是验证用户能正确、安全、稳定地完成登录,同时防止越权、撞库、会话泄露、验证码绕过、弱交互导致误操作,以及高并发下认证服务不可用等问题。
Thread.start() 和 run() 有什么区别?
Thread.start() 的本质是请求 JVM 创建并启动一个新的操作系统线程,使线程对象从 NEW 进入 RUNNABLE,就绪后由调度器安排执行,最终在新线程中回调 run()。run() 本身只是 Thread 类上的普通实例方法,直接调用不会创建新线程,不会改变线程生命周期,只会在当前调用线程里同步执行方法体。
synchronized锁,以及其和juc包中的锁有什么区别、差异?
synchronized锁,以及其和juc包中的锁有什么区别、差异?这道腾讯牛客题的关键是围绕“synchronized 与 JUC 锁差异”讲清概念、机制、取舍和边界。synchronized 是 JVM 内置监视器锁,围绕对象 monitor、进入/退出临界区和锁优化工作;JUC 中 ReentrantLock 等锁通常基于 AQS,用 state、CAS 和等待队列实现更丰富的锁语义。
实现消息队列(多生产者,多消费者)?
实现消息队列(多生产者,多消费者)?这道腾讯牛客题的关键是围绕“多生产者多消费者消息队列”讲清概念、机制、取舍和边界。实现多生产者多消费者队列,要先确定有界还是无界、阻塞还是非阻塞、是否需要关闭语义和背压。经典阻塞队列可用 mutex + condition variable 保护环形缓冲区或链表队列。
fair锁如何实现的?
fair锁如何实现的?这道腾讯牛客题的关键是围绕“公平锁实现机制”讲清概念、机制、取舍和边界。公平锁的核心是按等待顺序授予锁,通常通过同步队列维护排队线程。以 ReentrantLock 公平模式为例,线程获取锁前会检查队列中是否已有前驱节点,有前驱就不插队,获取失败后进入 AQS 队列等待唤醒。
进程线程区别?
进程线程区别?这道腾讯牛客题的关键是围绕“进程与线程区别及上下文切换”讲清概念、机制、取舍和边界。进程是资源拥有和隔离单位,线程是同一进程内的调度执行单位。同一进程的线程共享地址空间、堆、全局变量和文件描述符,但有独立栈、寄存器上下文、线程局部存储和调度状态。
Agent 多工具调度模块如何做冲突检测与解决?
这题考 Agent 多工具并发调度的工程治理,回答要说明冲突类型、预检查、执行中仲裁、补偿和审计闭环。
文档 AI 助手如何定义 MVP,并用上线指标指导迭代?
这题考文档 AI 助手的 MVP 定义和上线指标设计,回答要围绕文档场景、最小可用能力、用户采纳、质量评估和迭代闭环展开。
AI 智能创意功能如何为广告主生成文案和图片素材,并设计核心用户流程?
这题考广告主侧 AI 智能创意功能的产品流程设计,答案要覆盖需求输入、素材生成、编辑预览、合规审核、投放实验和效果反馈闭环。
Agent 项目选用 OpenAI Agents SDK 时,应如何和自研或开源框架做选型?
这题考 Agent 框架选型方法,回答重点是用任务复杂度、编排需求、工具集成、可观测性、评测、锁定风险、生态成熟度和迁移成本做理性比较。
AI 产品选型时,如何判断用自研模型、开源模型还是第三方 API,并说明选择理由?
这题考 AI 产品经理是否能把模型来源选择讲成业务目标、效果验证、数据风险、成本延迟、可控性和 fallback 的综合决策,而不是按热度报模型名字。
同题还出现在 1 个公司岗位
多 Agent 协作时,Agent 之间如何传递状态、消息和工具结果,并避免并发读写冲突?
这道题考察多 Agent 系统的状态建模、通信协议、工具结果传递和并发一致性设计。好答案不能停留在 Agent 之间互相发消息,而要区分临时对话消息、可持久化任务状态、不可变工具产物和需要事务保护的共享资源。回答边界应覆盖消息队列或事件总线、共享状态存储、编排器协调、版本号或乐观锁、文件和数据库写入隔离、幂等重试、冲突检测,以及如何用日志和压测证明没有丢消息、重复执行和覆盖写。
Agent 设计中为什么要区分自然语言对话状态和结构化执行状态,分别存什么?
这道题考察 Agent 状态管理的边界意识。高质量回答要把自然语言对话状态和结构化执行状态分开:前者服务于模型理解上下文、用户意图和交互语义;后者服务于工作流执行、工具调用、恢复、审计和一致性控制。两者相互映射但不能混成一大段聊天记录,否则系统会难以恢复、难以测试,也容易产生幻觉状态。
如何理解小爱同学这类 AI 助手产品的用户价值、核心场景和交互入口?
这题来自“小爱产品”的理解,且上下文提到手机端入口交互和终端展示,所以答案要围绕 AI 助手的产品本质:它不是单一 App,而是跨设备、跨系统能力的交互层。用户价值可以拆成三类:降低操作成本、连接多设备场景、提供个性化和主动辅助。核心场景包括手机系统任务、智能家居控制、信息查询与内容服务、车载/穿戴/音箱等多终端协同、无障碍和老人儿童场景。交互入口要按主动/被动、语音/触控、前台/后台分层:唤醒词、长按电源键或快捷键、桌面组件、锁屏、负一屏/搜索、耳机和音箱、车机、智能家居面板。终端展示不应只靠语音播报,而要有卡片、确认页、多轮澄清、执行反馈和可撤销机制。
如何通过数据分析量化美团单车潮汐效应,并为线下车辆调度提供更高效的策略建议?
这题考共享单车业务的数据建模和线下运营落地能力。好的回答要把潮汐效应量化成空间网格、时间窗口、OD 流向、车辆净流入净流出、供需缺口和可执行调度工单,而不是只描述早晚高峰现象。
OpenCL/GPU kernel 为什么要尽量减少分支,掩码写法如何影响 SIMT/SIMD 执行效率和有效吞吐?
这题考 GPU/OpenCL 高性能实现里的分支发散和掩码写法。高质量回答要说明 work-item 在 subgroup/warp/wavefront 内锁步执行,分支不一致会串行执行不同路径并屏蔽 inactive lane,从而降低有效吞吐。
AI 应用开发中的原子状态机是什么?如何用有限状态、原子转移和异常状态约束执行流程,避免状态错乱、重复执行和异常无法收敛?
这道题考察 AI 应用或 Agent runtime 的流程约束能力。原子状态机不是让大模型自由决定下一步,而是把执行拆成有限状态、受控事件和原子转移:每次转移都校验前置状态、写入持久状态、绑定幂等键或执行记录,再推进任务或恢复异常。它解决的是状态错乱、重复执行、异常恢复、并发竞争和流程无法收敛问题。好的回答要能讲出状态集合、转移表、异常状态、幂等、锁/CAS、step budget、可观测性和验证指标。
视频 AIGC 的多镜头与智能分镜调度能力,如何划分模型侧与产品侧交付边界,并设计可控参数、质量指标和异常兜底?
这题考视频 AIGC 产品经理能否划清模型能力、产品编排和用户控制之间的边界。好答案要讲清模型侧负责生成质量和多镜头一致性,产品侧负责工作流、参数控制、质量门禁和异常兜底,并用结构化分镜协议把两边衔接起来。
Agent 异步任务通过消息队列处理时,如何将处理结果与原请求关联,为什么不直接用数据库通信?
这题考 Agent 异步任务的工程链路。回答要讲 correlation id、状态表、幂等、回调、超时和消息队列与数据库的职责边界。
广告 Agent 中,主 Agent 下发投放或素材任务、子 Agent 执行并发现需要新增素材时,流程流转、状态管理和人工二次编辑应如何设计?
这题考广告 Agent 的产品流程设计。回答要讲主 Agent/子 Agent 分工、素材缺口发现、状态流转、人工二次编辑和 Agent 与 Workflow 的边界。
航旅排障智能体如何把航班、订单、改签和退款等诊断步骤编排成可回放工作流,并对高风险写操作做权限、确认和审计控制?
这题考场景化 Agent 系统设计。回答要讲航旅排障链路、Planner/Executor 通信、结果回传、权限确认、审计和误操作防护。
RTOS 相比裸机开发有什么优势?
这题考嵌入式系统架构取舍,回答要说出多任务、实时性、同步通信和维护性优势,同时承认资源开销。
驱动 probe 成功但设备仍异常,说明什么,如何排查?
这题考驱动 bring-up 排障思路,回答要说明 probe 成功只代表绑定和初始资源申请成功,不代表设备功能完全正确。
FreeRTOS 低功耗是怎么做的,进入低功耗模式后如何唤醒?
这题考实时系统低功耗设计,回答要讲清 tickless idle、进入睡眠前判断、外部唤醒源和唤醒后的 tick/外设恢复。
为什么要引入看门狗,程序卡死后如何结合寄存器或栈信息定位问题?
这题考看门狗设计和死机定位,回答要说明看门狗是故障恢复兜底,喂狗应由监督任务基于健康检查执行,并保存复位现场。
驱动里申请 GPIO 或中断一般调用哪些接口,为什么不能直接操作寄存器?
这题考内核资源管理意识,回答要说明 GPIO 和 IRQ 应通过 descriptor、设备树和 devm 接口申请,不能绕过 pinctrl/irqchip 直接写寄存器。
驱动中如何把内核内存拷贝到用户空间,需要注意什么?
这题考驱动用户拷贝安全,回答要说明必须使用 copy_to_user 等接口,检查长度和返回值,避免在原子上下文、持自旋锁或暴露未初始化数据。
Verilog 怎么写才能综合成 D 触发器?
这题考 RTL 时序模板,回答重点是用边沿触发 always 块、寄存器变量和非阻塞赋值描述 D 到 Q 的同步采样。
UVM 中有哪些 TLM 通信方法?
这题考验证组件之间的事务级通信,回答要区分点对点请求响应、阻塞/非阻塞传输和 analysis 广播。
IMU/GPS 等传感器使用时要注意哪些误差和同步问题?
这题考 IMU/GPS 使用经验,重点是 bias、噪声、漂移、多路径、遮挡、坐标系、时间同步和融合验证。