公司岗位题库

阿里巴巴 算法面经

79 道题 38 个标签 79 条出现记录

算法工程师相关题目

DSIN 中特征是如何做交叉的?

DSIN 的特征交叉不是一句“把稠密特征和稀疏特征拼接后送 DNN”就能解释清楚的。它的核心是先把用户历史行为按会话切分,在会话内用自注意力抽取局部兴趣,在会话间建模兴趣演化,再用目标物品对各个会话兴趣做激活。稠密特征通常经过归一化、分桶或线性投影后与稀疏 embedding 融合,交叉既包括注意力中的目标相关交互,也包括 DNN、乘积、差分、CrossNet 等可选显式交叉。

一个先单调递增再单调递减的数组,给一个目标值,判断目标值是否在数组中?

这道题本质是 bitonic array search:数组先升后降,不能直接用一次普通二分,因为整体不单调;也不应该线性扫描,因为会浪费可二分的结构。标准做法是先用二分找到峰值位置,再分别在左侧递增段和右侧递减段做二分查找。若数组满足严格先增后减,整体时间复杂度为 O(log n),空间复杂度为 O(1)。

哪些可能发生OOM的区域?

JVM 里可能发生 OOM 的位置不只有 Java 堆,还包括虚拟机栈、本地方法栈、元空间或方法区、直接内存、线程创建所需 native memory,以及容器总内存限制触发的进程终止。完整回答应按内存区域、典型异常、常见原因和诊断证据展开。

Lora的原理能简单讲讲吗?

LoRA 是一种参数高效微调方法:不直接改动大模型原有权重,而是在关键线性层旁边增加一个低秩增量分支,用少量可训练参数学习任务差异。它的核心假设是:下游任务需要的权重变化 ΔW 往往不需要满秩矩阵表达,可以用两个小矩阵 B 和 A 的乘积近似,即 ΔW = BA。训练时冻结基座模型,只训练 A、B;推理时可以把 ΔW 合并回原权重,几乎不增加推理结构复杂度。

RDMA 连接和性能调优通常关注哪些参数?

RDMA 参数题通常不是让背某一个结构体字段,而是考察能否把关键配置维度讲清楚:资源对象参数、连接寻址参数、传输可靠性参数、内存注册参数、网络层参数以及性能调优参数。完整答案应覆盖 QP、CQ、PD、MR、LID/GID、QPN/PSN、MTU、SL 或 traffic class、RoCE v2 的 IP/UDP/VLAN/PFC/ECN,以及 inline、队列深度、CQ moderation、retry、RNR timeout 等影响吞吐和延迟的参数。

A* 相比 Dijkstra 优化了什么问题?

A* 主要优化的是 Dijkstra 在单源到单目标最短路径场景中的均匀扩展问题。Dijkstra 只按当前已知代价 g(n) 从近到远扩展,不利用终点方向信息,因此会探索大量与目标无关但距离起点较近的节点。A* 在 g(n) 基础上加入启发式估计 h(n),用 f(n)=g(n)+h(n) 同时衡量已经走了多远和预计还要走多远,从而优先扩展更可能通向目标的节点。

图分割是什么?以 Normalized Cut 为例如何介绍?

图分割的核心是把像素、超像素或区域划分成语义或视觉一致的子区域,使同一区域内部相似度高、不同区域之间差异大。面试中不要只罗列算法名,最好选择一种方法深入讲清楚:输入如何建模、相似度如何定义、优化目标是什么、怎么求解、效果如何评估、适用边界在哪里。以 Normalized Cut 为例,它把图像表示成加权无向图,把分割转化为图划分问题,通过最小化归一化割代价,避免普通最小割偏向切出很小孤立区域的问题。

什么是on policy,什么是off policy?

on-policy 和 off-policy 的核心区别不在于算法是否探索,而在于用来学习的数据是由谁产生的。on-policy 用当前正在优化的策略采样,并用这些数据更新同一个策略;off-policy 允许用另一个行为策略、历史日志或经验回放产生的数据,去学习目标策略。回答时要把行为策略、目标策略、数据分布偏差、代表算法和工程取舍讲清楚。

冲突域里面是什么发生了冲突?

冲突域里发生冲突的不是主机、IP 地址或业务请求,而是同一共享二层介质上同时发送的以太网信号或帧发生碰撞。典型场景是半双工共享以太网中,多个节点同时往同一介质发送数据,信号叠加导致接收端无法正确还原比特,需要通过 CSMA/CD 检测、退避并重传。

页式存储和段式存储分别应用在什么场景下?

页式存储更适合以固定大小块管理内存,重点解决虚拟内存、按需调页、页面置换和外部碎片问题;段式存储更适合按程序逻辑模块组织地址空间,重点服务于保护、共享、动态链接和模块化。现代系统通常以分页作为底层内存管理基础,并用虚拟内存区域、权限位和映射区间保留分段思想;段页式则把逻辑分段和物理分页结合起来。

ChatGPT为什么不用Reward-Model的数据直接fine-tune,而用RL?

Reward Model 的数据本质上是偏好判断或打分信号,它告诉模型哪些回答更符合人类偏好,但通常不直接提供一条完美答案。SFT 学的是给定输入后模仿标准输出,目标是最大化示范答案的似然;RLHF、PPO 或偏好优化学的是在很多可能回答中提高被奖励函数偏好的概率,目标是优化行为策略。ChatGPT 不直接用 Reward Model 的数据 fine-tune,核心原因是两类数据和两类目标不同:偏好数据适合训练评价器或优化策略,不等价于监督学习所需的高质量目标答案。

推荐系统里除了位置偏置,还有哪些常见偏置?

推荐系统中的偏置不只来自排序位置,还来自曝光机制、用户选择、物料流行度、展示样式、来源信任、样本构造、反馈回路、时间变化、用户活跃度和反馈标注方式。面试回答要把偏置讲成数据如何被观察到、反馈如何被产生、模型如何被训练和评估的系统性问题,并进一步说明可用随机化实验、因果估计、逆倾向加权、重采样、多目标约束和更谨慎的在线评估来缓解。

冲突域和广播域的定义和区别?

冲突域关注的是二层或物理层以太网中谁和谁会争用同一发送介质、同时发送会不会发生碰撞;广播域关注的是一个二层广播帧会被扩散到哪些接口。集线器会把所有端口放在同一个冲突域和同一个广播域;交换机默认每个端口一个冲突域,但所有同 VLAN 端口仍属于同一个广播域;路由器、三层接口、不同 VLAN 之间的边界会隔离广播域。

图分割,针对一种图分割方法进行具体介绍?

图分割是把图结构里的顶点划分为若干子集,使子集内部连接尽量强、子集之间连接尽量弱。一个代表性方法是 Normalized Cut,也常与谱聚类一起讲。它的核心思想不是简单最小化跨分区边权,而是同时考虑每个分区与整体图的连接规模,避免把孤立点或很小的点集切出去形成退化结果。

FLUX系列的整体框架是怎样的?

FLUX 系列可以概括为在潜空间里工作的 Flow Matching 图像生成 Transformer。它不是传统以 U-Net 为主体的扩散架构,而是把噪声潜变量、文本条件、时间步、位置编码和可选引导信息统一送入多模态 Diffusion Transformer,由模型预测从噪声走向图像潜变量的速度场,再通过多步采样积分得到干净潜变量,最后由自编码器解码成图像。回答时要抓住潜空间生成、文本条件编码、多模态 Transformer 主干、Flow Matching 采样过程这四条主线。

JVM 线程栈大小参数 -Xss 如何设置?

这道题考察的是 JVM 运行时栈内存模型和线程栈参数。核心结论:每个 Java 线程都有独立的 Java 虚拟机栈,方法调用会不断压入栈帧;递归过深或调用链过深通常会触发 StackOverflowError;线程创建过多、每个线程栈过大或系统/容器可用内存不足时,可能触发 OutOfMemoryError: unable to create new native thread。JVM 中常用 -Xss 设置单个线程的栈大小。

StringBuffer的append和String的+=区别?

StringBuffer 的 append 是在同一个可变字符缓冲区上追加内容;String 的 += 表面像修改字符串,实质通常是生成新的字符串结果。核心区别在于 String 不可变,+= 的优化依赖编译器和上下文,循环拼接容易产生大量临时对象;StringBuffer 维护可变缓冲区,append 多次追加时复用内部数组,并通过同步方法提供线程安全,但也带来锁开销。

MMDiT 如何处理双流、单流输入并融合文本和图像模态?

MMDiT 的核心不是把文本和图像粗暴拼成一种特征,而是先保留两种模态各自的处理路径,再在注意力层里做联合交互。文本 token 和图像 latent patch token 通常有各自的投影、归一化、调制和前馈网络;进入注意力时分别生成 Q/K/V,再拼接到同一个注意力计算中,让文本与图像能够双向通信。部分架构还会在前面的双流阶段之后进入单流阶段,用统一 Transformer block 继续处理拼接后的 token,但仍通过位置、类型、掩码或前后处理保留模态身份。

有没有了解过交换机和集线器的区别?

集线器是物理层设备,收到比特流后向所有端口无脑转发;交换机是数据链路层设备,会学习源 MAC 地址形成 MAC 地址表,并根据目的 MAC 地址决定转发、过滤或泛洪。核心区别在于:集线器让所有主机共享同一个冲突域和带宽,通常只能半双工并依赖 CSMA/CD;交换机把每个端口隔离成独立冲突域,支持全双工,显著提升吞吐、稳定性和安全性。

开放性问题,菜鸟无人仓机器人从A到B,需要多个机器人到达,怎么样效率最高?

这道题考察的是无人仓机器人路径规划与多机器人调度能力,核心不是单个机器人走最短路,而是在有限通道、有限交汇点、有限充电与装卸资源下,让多个仓储机器人安全、有序、稳定地从A到B完成任务。高质量回答应先定义效率目标,再建立仓库图模型,接着讨论多智能体路径规划、冲突避免、任务分配、在线重规划和仿真评估。

推荐或检索系统里的低频过滤如何实现?

低频过滤不是简单按次数删除,而是在明确业务目标和统计口径后,对样本、特征、query、item、用户行为或候选实体中频次过低、统计不稳定、噪声占比高的部分进行降权、合并、兜底或过滤。高质量回答要覆盖目标、口径、阈值、离线与在线实现、滑动窗口、长尾保护、冷启动、指标评估和工程风险。

稠密特征是如何加入DSIN架构中的?

稠密特征加入 DSIN 的核心思路是:不要破坏 DSIN 对用户行为序列按 session 建模的主干,而是把数值型特征经过规范化、分桶或小型 MLP 投影后,作为用户侧、商品侧、上下文侧、行为侧或 session 侧的补充表示,在最终 CTR 预估网络中与目标商品表示、用户画像表示、上下文表示、session interest 表示进行拼接和交叉。DSIN 负责从历史行为 session 中抽取兴趣、建模兴趣演化并对目标 item 做激活;稠密特征负责补充连续强信号。

如何验证XML文件的正确性?

验证 XML 文件的正确性不能只理解为“能被解析器打开”。完整答案应分层判断:先检查 XML 是否满足 well-formed 语法约束,再根据 DTD、XSD 或其他 schema 验证结构和数据类型,随后确认编码、命名空间、业务规则和安全解析策略,最后通过覆盖性测试样例和明确的错误定位机制保证问题可复现、可修复。

RPC框架是怎么样的?

RPC 框架让调用远程服务像调用本地方法一样自然,但它本质上解决的是跨进程、跨机器调用中的寻址、编解码、网络通信、故障处理和治理问题。高质量回答要讲清动态代理、序列化、协议、服务发现、负载均衡、超时重试、熔断限流、链路追踪和幂等。

基本数据类型以及包装类,区别?

Java 基本数据类型是直接表达值的类型,包括 byte、short、int、long、float、double、char、boolean;包装类是对应的引用类型,包括 Byte、Short、Integer、Long、Float、Double、Character、Boolean。核心区别在于:基本类型没有对象身份、不能为 null、不能用于泛型;包装类有对象语义、可以为 null、能进入集合和泛型体系,但会带来装箱拆箱、缓存池、对象开销、NPE 和比较语义等问题。

Kontext的位置编码,在处理ref和noise_latent的时候,有什么区别对待吗?

原则上,ref 图像 token 和 noise_latent token 在联合注意力里需要使用兼容的位置坐标,否则模型很难判断参考内容和待生成区域的空间对应关系。但是否区别对待取决于具体实现:常见做法是二者使用同一类二维位置编码或 RoPE 坐标体系,同时通过空间坐标范围、序列拼接位置、offset、segment/modality 标识、mask 或额外条件嵌入来区分 ref 与 noise_latent。关键不是断言某个实现一定怎样,而是说明位置编码要保证可对齐,又要避免 ref token 和 target token 在联合序列中语义混淆。

多场景和多任务有什么区别?

多场景和多任务都属于推荐系统中共享信息、提升泛化的建模范式,但二者解决的问题维度不同:多场景关注流量入口、业务域、用户行为分布或物料分布不同带来的数据分布差异;多任务关注同一批或相关样本上存在多个预测目标,例如点击、收藏、加购、转化、停留时长等。回答时要先用一句话区分场景和任务,再结合共享底座、MMoE、PLE、场景塔、任务塔、负迁移、指标体系说明工程落地。

ArrayList 是怎么扩容的?

ArrayList 的扩容本质是底层 Object[] 容量不足时创建更大的数组并复制旧元素。常见 OpenJDK 实现中,空参构造会延迟分配默认容量,首次添加时通常扩到 10;后续容量不够时按约 1.5 倍增长。面试回答要同时讲清 add 触发路径、复制成本、均摊复杂度、极限容量和与数组、LinkedList 的差异。

重要度采样是什么?

重要度采样是一种用容易采样的分布 q 来估计目标分布 p 下期望的蒙特卡洛方法。核心思想是:如果想计算 E_p[f(X)],但很难直接从 p(x) 采样,可以改从 q(x) 采样,并给每个样本乘上重要性权重 w(x)=p(x)/q(x),从而修正采样分布带来的偏差。它广泛用于概率统计、机器学习、强化学习离策略评估、贝叶斯推断和稀有事件估计。

图归一化的方式有哪些?

图归一化的核心目的是让图上的信息传播在数值上稳定、在结构上公平、在训练上可优化。常见做法包括对邻接矩阵做度归一化、对称归一化或随机游走归一化,加入自环以保留节点自身信息,对节点特征和边权做尺度处理,以及在多层 GNN 中使用 BatchNorm、LayerNorm、GraphNorm 等缓解训练不稳定、过平滑和不同图规模带来的分布差异。回答时应把归一化什么、为什么归一化、适合什么模型和场景讲清楚。

在MMDIT里,联合注意力计算完之后,数据会流经哪些层?

MMDiT 中的联合注意力并不是整个 block 的终点。它完成的是跨模态 token 的信息交换:图像 latent token、文本 token 或其他条件 token 在同一个注意力空间里互相读取信息。注意力结果通常会先经过输出投影,再按模态拆回各自 stream,结合门控调制与残差连接写回原特征;随后进入归一化或自适应归一化、MLP/Feed-Forward、再次门控、再次残差,最后把更新后的各模态特征交给下一个 MMDiT block 或后续输出层。

序列标注时数据量太少的时候怎么做?

序列标注数据量太少时,核心不是单纯多标一点,而是先确认任务边界和标注质量,再用预训练迁移降低样本需求,用规则、词典、弱监督和半监督扩大可用监督信号,用数据增强和主动学习提高样本效率,最后通过 CRF、约束解码和一致性评估减少不合法输出。一个成熟回答应覆盖数据、模型、标注、推理约束和评估闭环,而不是只说换成 BERT 或做数据增强。

多机器人从 A 到 B,如何规划路径和调度才能效率最高?

这类问题本质不是单个机器人从起点到终点的最短路,而是多机器人路径规划与调度问题。高效方案应先明确优化目标,再把仓库抽象成栅格图或有向图,在时间维度上处理多个机器人之间的点冲突、边冲突、通道容量、死锁和动态障碍。工程上通常不会追求全局最优,而是在安全避碰的前提下,用 A* 或 Dijkstra 生成单体路径,再结合优先级规划、CBS、时间扩展图、预约表、滚动重规划等方法,在最优性、实时性和系统吞吐之间取平衡。

为什么要使用旋转位置编码?

旋转位置编码(RoPE)的核心价值,是把位置信息以“旋转”的方式注入到注意力机制的 Query 和 Key 中,使模型在计算注意力分数时自然感知 token 之间的相对距离。相比直接相加的绝对位置编码,RoPE 更贴合 Transformer 的点积注意力结构,既能保留顺序信息,又能让相对位置关系在 QK 点积中显式出现。

图采样方法有哪些?

图采样是在大规模图上用较小、可计算的节点、边、路径或子图近似原图结构与学习目标的方法。它常用于图挖掘和图神经网络训练,核心矛盾是采样越小,计算越快、显存越省,但估计偏差、方差、结构断裂和度分布偏移可能越严重。常见方法包括节点采样、边采样、随机游走采样、邻居采样、层采样、子图或簇采样、重要性采样,以及用于链路预测和对比学习的负采样。

特征交叉和 One Epoch 现象之间有什么联系?

这道题的核心不是问“特征交叉是什么”,而是问候选人能否把一次工程观察解释成可验证的推荐系统规律。可以把 One Epoch 现象理解为:某些交叉特征在训练早期或首轮曝光中贡献了主要收益,后续继续训练的边际增益快速下降。它通常暗示交叉特征捕捉了强相关但稀疏的记忆型模式,需要用消融、频次分桶、时效性、泄漏排查和泛化验证来证明联系。

分词算法有哪些?

分词算法解决的是把连续文本切成有意义的词或子词单位。中文没有天然空格,因此分词既要处理词典匹配,也要处理歧义、未登录词、新词、专名、领域词和下游任务适配。常见算法包括基于词典的正向/逆向/双向最大匹配、DAG 加动态规划、HMM/CRF 序列标注、统计语言模型、深度学习序列标注,以及 BPE、WordPiece、SentencePiece 等子词切分方法。

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

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

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

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

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

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

StringBuffer的底层数据结构?

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

对哪些分类算法有研究?

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

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

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

进程如何保证并发?

进程保证并发,本质上不是某个进程自己保证,而是操作系统通过调度、上下文切换、多核执行、地址空间隔离、进程间通信、同步原语和资源管理共同实现。面试回答要把能同时推进和安全地同时推进区分开:前者靠调度器和 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 时获得的有效影响力下降,甚至被截断、压缩或检索失败,从而表现为遗忘、答非所问或前后不一致。

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 并不是简单记住像素,而是学习从局部到整体的层次化表示。