岗位索引

算法工程师面试题库第 2 页

算法工程师面试题解析,覆盖机器学习、大模型、推荐、意图识别和模型评估。

546 道题 29 个公司 130 个知识点

算法相关面试题第 2 页

DPO 训练中的梯度爆炸问题如何解决?

DPO 训练中的梯度爆炸通常不是单一超参数问题,而是由偏好对 reward margin 过大、beta 设置不合适、学习率过高、混合精度溢出、reference model 使用不稳定、数据噪声和长序列 log probability 累积共同触发。回答时要先从 DPO 损失和梯度来源讲清机制,再给出从数值稳定、训练超参、数据治理、模型约束到监控排查的系统解决方案。

CAN降低的是计算复杂度还是存储复杂度?

这里的 CAN 按推荐和 CTR 建模语境理解为 Co-Action Network。它的核心不是把线上推理的所有计算量都变少,而是把显式二阶或高阶交叉带来的参数量、存储量和稀疏组合记忆压力降下来。它通过让一个特征参与生成或选择作用于另一个特征的交互权重,用参数共享和动态交互替代海量离散交叉参数,因此主要回答应落在存储复杂度、参数复杂度和长尾稀疏性上,同时承认会引入一定运行时计算。

推荐系统的召回、排序和重排链路如何理解?

这道题考察候选人是否能从工程链路而不是单点模型理解推荐系统:召回负责从海量候选中高覆盖地捞出可能感兴趣的内容,排序负责用特征和模型估计用户行为价值,重排负责在最终曝光前加入多样性、新鲜度、去重、业务规则和体验约束,同时还要兼顾在线延迟、离线评估和 A/B 实验闭环。

同题还出现在 1 个公司岗位

StringBuffer的底层数据结构?

StringBuffer 的底层核心是一个可变的连续缓冲区,而不是每次修改都创建新的 String。常见实现中,真正负责存储、长度、容量和扩容的是 AbstractStringBuilder;早期实现可理解为 char[],JDK 9+ 常见实现为了紧凑字符串改为 byte[] 加 coder 标记,但对外仍表现为可变字符序列。StringBuffer 的特点是在这套可变缓冲区能力之上,用 synchronized 保护关键操作,因此适合多个线程共享同一个实例时使用;单线程场景通常优先 StringBuilder。

对哪些分类算法有研究?

这道题考察的不是背诵分类算法列表,而是候选人能否把分类问题的建模假设、算法家族、适用场景、优缺点、评估方法和工程选择讲清楚。高质量回答应围绕线性模型、树模型与集成方法、核方法、概率模型、神经分类器、文本/NLP分类器以及评估和选型逻辑展开,并能结合特征稀疏性、样本规模、类别不均衡、可解释性、线上延迟等因素说明取舍。

机器学习模型训练和评估的基本流程是什么?

机器学习模型训练和评估的基本流程,本质是在业务目标约束下,把原始数据转化为可泛化模型,并通过离线验证、线上实验和持续监控判断模型是否真正有效。回答时不能只背训练步骤,还要说明数据质量、切分方式、指标选择、过拟合与数据泄漏控制,以及上线后的反馈闭环。

同题还出现在 2 个公司岗位

Prompt 优化模块的 A/B 测试方案如何设计?

Prompt 优化模块的 A/B 测试考察的不是简单会不会分流,而是能否把生成式能力放到真实业务链路中评估。高质量回答需要同时讲清实验目标、用户随机化、指标体系、统计检验、版本控制、冷启动影响、离线评测和线上实验的衔接,以及异常情况下的灰度和回滚机制。

同题还出现在 1 个公司岗位

什么场景下会使用分布式缓存?

分布式缓存通常用于高并发、低延迟、读多写少、计算或访问代价高、数据库容易成为瓶颈的场景。面试回答要强调它不是简单替代数据库,而是在业务系统、数据库和外部依赖之间增加一层高速共享存储,用来降低响应时间、削峰、复用热点数据,并配合一致性、过期、降级和容灾策略控制风险。

进程如何保证并发?

进程保证并发,本质上不是某个进程自己保证,而是操作系统通过调度、上下文切换、多核执行、地址空间隔离、进程间通信、同步原语和资源管理共同实现。面试回答要把能同时推进和安全地同时推进区分开:前者靠调度器和 CPU 时间片,后者靠隔离边界、受控共享、锁与信号量、死锁预防以及内核对资源的统一仲裁。

图数据库是否对 BFS、DFS、找节点之间最短路等有支持?

图数据库通常会直接或间接支持 BFS、DFS、节点间最短路等图遍历能力,支持形式既包括查询语言中的可变长度路径匹配,也包括数据库内置过程、图算法库和离线图计算框架。回答要区分在线图查询和大规模图算法计算,并讲清邻接存储、索引、复杂度、事务一致性以及和关系型数据库递归 join 的差异。

非聚簇索引二次查找的过程?

非聚簇索引二次查找,本质是 InnoDB 使用二级索引先定位满足条件的索引记录,再通过索引叶子节点里保存的主键值到聚簇索引中查找完整行记录。这个过程常被称为回表。面试回答要说明二级索引和聚簇索引的结构差异、为什么叶子节点存主键而不是整行、什么时候必须回表、覆盖索引如何避免回表,以及 ICP、联合索引、范围扫描和优化器成本估算对实际执行路径的影响。

索引都用在什么情况下?

索引适合用在能够显著减少扫描行数、避免额外排序、加速表连接、减少回表或保障数据唯一性的场景,但它不是越多越好。回答要同时讲清楚收益与代价:索引能提升读查询效率,也会占用空间、增加写入维护成本,并且低选择性字段、小表、频繁更新字段往往不适合盲目建索引。

HashMap过程讲一下?

HashMap 的核心是“数组定位桶,桶内解决冲突”。JDK 8 及以后主流实现是 Node 数组加链表加红黑树:先用 hash 扰动把 key 的 hashCode 高位混入低位,再用数组长度减一与 hash 做位与定位桶;put 在桶为空时直接插入,桶非空时按 hash 和 equals 查找同 key,存在则覆盖值,不存在则挂到链表或树中;get 走同样的定位和匹配过程。扩容由容量、负载因子和阈值控制,默认负载因子 0.75,超过阈值后容量通常翻倍。单桶冲突达到树化阈值且数组容量足够时会转红黑树,节点减少到退化阈值附近会退回链表。HashMap 不保证顺序,也不是线程安全容器。

AQS 的核心原理是什么?

AQS 是 Java 并发包中很多同步器的基础框架,它用一个 volatile 的 state 表示同步状态,用 CAS 保证状态修改的原子性,并通过一个变体 CLH 双向等待队列管理竞争失败的线程。面试回答时要把它讲成“状态管理 + 队列排队 + 阻塞唤醒 + 模板方法扩展”的组合,而不是只背 ReentrantLock 底层用了 AQS。

如果用attention的话,q和k分别是什么?

在 attention 里,Q 表示当前位置发出的“查询需求”,K 表示所有候选位置提供的“匹配索引”,二者通过点积计算相关性;相关性经过缩放和 softmax 变成权重,再用这些权重对 V 做加权求和,得到当前位置的上下文表示。Q/K 不是数据库里的固定字段,而是由输入向量经过不同线性变换投影出来的语义子空间表示。

为什么要用RLHF而不用SFT?

RLHF 通常不是用来替代 SFT,而是在 SFT 之后进一步把模型从“会模仿答案”推向“更符合人类偏好和使用场景”。SFT 依赖人工示范数据,让模型学习在给定指令下应该怎么回答;RLHF 通过偏好比较训练奖励模型,再用 PPO 等强化学习方法,或用 DPO 等直接偏好优化方法,让模型针对人类偏好、对齐目标和整体回答质量进行优化。

SFT 数据清洗的具体流程是什么?

SFT 数据清洗的核心目标,是把来自标注、业务日志、开源语料、专家撰写和模型生成改写的数据,整理成可训练、可评估、可追责的指令响应样本。流程不只是删脏数据,而是围绕来源可信、格式统一、语义一致、质量可控、安全合规、覆盖均衡和评估闭环,持续筛掉会让模型学坏、学偏或学乱的样本,同时保留有训练价值的复杂样本。

多轮对话中 Attention 为什么可能导致历史信息衰减?

多轮对话中历史信息衰减,不是 Attention 单一机制的错误,而是注意力权重竞争、上下文窗口容量、位置距离、长文本噪声、摘要压缩、KV cache 截断等因素叠加后的结果。核心现象是:随着新轮次不断加入,早期信息虽然可能仍在上下文中,但在模型计算当前 token 时获得的有效影响力下降,甚至被截断、压缩或检索失败,从而表现为遗忘、答非所问或前后不一致。

同题还出现在 1 个公司岗位

RAG 的 chunk 优化策略有哪些?

RAG 的 chunk 优化本质是在“可召回、可理解、少噪声、低成本”之间做工程权衡。好的 chunk 既不能太小导致语义不完整、召回碎片化,也不能太大导致 embedding 表达被稀释、上下文噪声增加。面试回答应覆盖 chunk size、overlap、语义切分、结构化文档处理、metadata 增强、层级召回、重排与评估闭环,并说明不同文档类型和业务目标下策略会动态调整。

GraphRAG 底层是如何去构建出实体以及实体之间的关系的?

GraphRAG 构建实体和关系,本质上是把非结构化文档经过切分、抽取、消歧、归一、证据绑定和图谱建模,转成可查询的知识图。它不是简单把文本丢给大模型,而是通过分块、实体识别、关系抽取、共指消解、置信度校验、图存储、社区摘要和检索融合,形成既能做语义召回又能做结构化推理的检索增强系统。

Attention 机制的本质是什么?

Attention 机制的本质,是让模型在处理某个当前位置或某个查询时,动态地从一组候选信息中判断“哪些内容更相关”,并按相关性分配权重后做加权汇总。它不是简单的固定窗口、固定规则或人工指定特征选择,而是一种可学习的内容寻址机制:通过 Q/K/V 表示、相似度打分、softmax 归一化和加权求和,把上下文信息按当前需求重新组织起来。

保证Map线程安全?

Map 本身只是键值存储抽象,是否线程安全取决于具体实现和访问方式。普通 HashMap 在并发读写下不安全,可能出现数据丢失、结构破坏、读到不一致状态等问题。保证线程安全通常有几类方案:用外部锁保护所有访问、使用 Collections.synchronizedMap 包装、使用 ConcurrentHashMap、在读多写少场景使用不可变快照或 CopyOnWrite 思路。实际回答时要结合读写比例、是否需要复合操作原子性、是否需要强一致迭代、性能和内存成本来选型。

线程调度和进程调度的区别?

进程是资源分配和地址空间隔离的基本单位,线程是 CPU 执行流和调度的基本单位。在现代 Linux 中,内核调度器实际调度的是 task_struct 表示的可调度实体,因此二者的关键差异不在于两套完全不同的调度器,而在于切换时涉及的资源上下文、地址空间、共享关系和开销不同。

操作系统: 操作系统都有哪些内容?

这道题看似在问操作系统包含什么,实际考察候选人是否能把零散知识组织成一张系统地图:从进程线程、调度、同步互斥,到虚拟内存、文件系统、I/O、网络、系统调用、安全隔离、死锁和性能诊断。优秀回答不应只罗列名词,而要说明操作系统作为硬件与应用之间的管理层,如何抽象资源、分配资源、保护资源,并在并发、高性能和可靠性之间做权衡。

操作系统如何进行内存管理?

操作系统的内存管理核心是把有限且碎片化的物理内存,抽象成每个进程独立、连续、受保护的虚拟地址空间,并通过页表、MMU、TLB、缺页异常、页面置换、交换空间、写时复制和权限控制等机制,在性能、隔离、安全、内存利用率和编程便利性之间做平衡。

select、poll 和 epoll 有什么区别?

这道题考察 Linux I/O 多路复用的核心差异:它们都解决单线程或少量线程同时管理多个文件描述符的问题,但在内核接口、数据结构、事件通知方式、拷贝成本、遍历成本和高并发可扩展性上差异很大。面试回答不能只背“epoll 更快”,还要说明为什么在大量连接、少量活跃的典型网络服务场景下 epoll 更合适,以及为什么在连接数很少或跨平台场景下 select、poll 仍然可能足够。

数组和链表、队列和栈有什么区别?

数组和链表是两种底层线性存储结构,差异主要体现在内存布局、随机访问、插入删除、缓存局部性和扩容成本。队列和栈是两种抽象数据类型,差异主要体现在访问顺序和操作约束:队列先进先出,栈后进先出。高质量回答要把这两层概念分开:数组和链表是实现材料,队列和栈是使用规则,队列和栈都可以用数组或链表实现。

图像特征处理用什么网络?

图像特征处理没有单一固定网络,核心是根据任务目标、数据规模、实时性和部署环境选择特征提取骨干网络、任务头和训练策略。传统通用选择是 CNN 骨干,如 ResNet、EfficientNet、MobileNet;如果数据规模较大、需要全局建模或与文本对齐,可以选择 ViT、Swin Transformer 或 CLIP 类多模态编码器;如果是检测、分割、OCR 等结构化任务,还需要 FPN、YOLO、Faster R-CNN、Mask R-CNN、OCR encoder-decoder 等任务头。

如何确保cookie不重复?

确保 cookie 不重复,不能只理解为 cookie 名字不要重复。浏览器实际以 name、Domain、Path 作为主要唯一键;同一组键再次 Set-Cookie 会覆盖旧值,但同名 cookie 如果 Domain 或 Path 不同,可以同时存在,并在请求时一起进入 Cookie 请求头。面试中应回答:统一 cookie 的 name、Domain、Path,更新时使用相同属性覆盖;清理历史重复项时按旧 Domain/Path 组合逐个过期;服务端用高熵随机值和存储层唯一约束保证 sessionId/token 唯一。

常见 HTTP 状态码有哪些?

HTTP 状态码是服务端对一次请求处理结果的标准化表达,面试中不能只背 200、404、500,而要按 1xx、2xx、3xx、4xx、5xx 五大类理解语义,再结合协议升级、缓存协商、重定向差异、REST 创建与删除语义、限流和网关故障来回答。真正高质量的答案应能说明状态码由谁返回、客户端应如何处理、是否影响缓存、是否改变请求方法,以及在排查线上问题时如何从状态码判断责任边界。

计算机网络: HTTP为什么说是无状态的?

HTTP 被称为无状态协议,核心含义是协议本身不会在服务端自动保存两次请求之间的业务上下文。每个请求都应携带足够的信息,让服务端独立理解并处理它。登录态、购物车、个性化配置等连续业务能力并不是 HTTP 天生具备的,而是通过 Cookie、Session、JWT、数据库或缓存等应用层机制补上的。

TCP 四次挥手的流程是什么?

TCP 四次挥手本质上是连接两端分别关闭各自发送方向的过程。由于 TCP 是全双工协议,一端发出 FIN 只表示自己不再发送数据,但仍能接收对端数据;对端确认后,也可能还要继续发送剩余数据,等发送完成再发自己的 FIN。因此面试回答要讲清 FIN 和 ACK 的含义、半关闭边界、双方状态迁移,以及 TIME_WAIT、CLOSE_WAIT、FIN_WAIT、LAST_ACK 等状态背后的工程意义。

卷积神经网络原理?

卷积神经网络的核心思想,是利用局部感受野和权重共享,从图像或网格数据中逐层提取特征。卷积核在空间上滑动,对局部区域做加权求和,生成特征图;不同卷积核学习不同模式,浅层常捕捉边缘、纹理和颜色变化,深层逐渐组合成部件、形状和语义概念。CNN 并不是简单记住像素,而是学习从局部到整体的层次化表示。

大模型微调方法有哪些?

大模型微调可以从“训练目标”和“参数更新方式”两条线回答:训练目标包括继续预训练、监督微调、偏好对齐和任务适配;参数更新方式包括全参数微调和参数高效微调。面试中要说清每类方法解决什么问题、用什么数据、优化什么损失,以及成本和风险。

同题还出现在 1 个公司岗位