知识点标签

内存管理面试题解析

内存管理相关面试题解析,按真实面经题目沉淀核心机制、易错点和面试官追问。

37 道题 7 个岗位 9 个公司

内存管理相关面试题

指针函数和函数指针的区别?

指针函数和函数指针的核心区别在于“谁是指针”。指针函数本质仍然是函数,只是返回值类型是指针;函数指针本质是指针变量,只是它保存的是某个函数的入口地址。区分它们时,重点看括号优先级、标识符先和谁结合,以及后续是被调用还是被赋值保存函数地址。

内存中的堆和栈有什么区别?

堆和栈的区别?这道腾讯牛客题的关键是围绕“内存堆与栈区别”讲清概念、机制、取舍和边界。内存中的栈主要保存函数调用帧、局部自动变量、返回地址和寄存器保存信息,生命周期随函数调用自动管理;堆用于动态分配对象,生命周期由 malloc/free、new/delete 或运行时 GC 管理。

内存中堆和栈有什么区别?

内存中堆和栈有什么区别?这道腾讯牛客题的关键是围绕“内存堆与栈区别”讲清概念、机制、取舍和边界。内存中的栈主要保存函数调用帧、局部自动变量、返回地址和寄存器保存信息,生命周期随函数调用自动管理;堆用于动态分配对象,生命周期由 malloc/free、new/delete 或运行时 GC 管理。

C和C++有什么区别?

C和C++有什么区别?这道腾讯牛客题的关键是围绕“C 与 C++ 差异”讲清概念、机制、取舍和边界。C 更偏过程式语言,核心是函数、结构体、指针和手动资源管理;C++ 在兼容大量 C 能力的基础上加入类、封装、继承、多态、模板、STL、异常、命名空间和 RAII,支持过程式、面向对象、泛型和资源管理抽象。

java内存泄露怎么排查?

java内存泄露怎么排查?这道腾讯牛客题的关键是围绕“Java 内存泄漏排查”讲清概念、机制、取舍和边界。Java 内存泄漏排查要先确认堆内存是否持续增长、Full GC 后是否无法回落,再用 heap dump 和对象引用链定位被意外持有的对象。重点不是 free 失败,而是对象仍被 GC Roots 间接引用。

JVM 堆内存分配如何保证线程安全?

JVM 堆内存分配如何保证线程安全?这道腾讯牛客题的关键是围绕“JVM 堆对象分配的线程安全”讲清概念、机制、取舍和边界。JVM 堆内存分配保证线程安全,常见方式是优先使用 TLAB 给每个线程分配一小块私有 Eden 区域,线程在自己的 TLAB 里用指针碰撞快速分配;TLAB 不够或不适用时,再走 CAS 加失败重试或加锁的慢路径。

JavaScript 数据类型有哪些?堆和栈在存储上有什么区别?

JavaScript 数据类型有哪些?堆和栈在存储上有什么区别?这道腾讯牛客题的关键是围绕“JavaScript 数据类型与堆栈存储”讲清概念、机制、取舍和边界。JavaScript 数据类型可以先分为原始类型和引用类型。原始类型包括 undefined、null、boolean、number、bigint、string、symbol;对象、数组、函数等属于引用类型。堆和栈的区别要从变量绑定和对象存储解释,而不是简单说某个类型绝对在栈上。

长上下文推理中 KV Cache 为什么可能被污染,如何做缓存隔离、清理和复用边界控制?

这题考的是大模型推理缓存的正确性与安全边界:KV Cache 本身是某个模型、某段 token、某套位置编码和注意力 mask 下的中间状态;一旦跨请求、跨会话、跨租户、跨模板版本或跨可变上下文错误复用,就可能产生答案串扰、隐私泄漏、事实陈旧或位置错乱。

Qwen 支持 128K 长上下文时,如何降低显存占用和注意力计算复杂度?

Qwen 这类支持 128K 长上下文的大模型,不能只靠把最大位置编码拉长来解决问题,核心挑战是注意力计算随序列长度接近平方增长、KV cache 随层数和上下文长度线性增长、训练激活和通信也会放大。常见工程组合包括 RoPE 外推或缩放、FlashAttention 类内存高效注意力、GQA/MQA 降低 KV cache、paged/quantized KV cache、chunked prefill、序列并行或 context parallel、激活重计算,以及在可接受的质量边界内使用滑窗、稀疏或分块注意力。回答时要区分降低显存峰值、降低 KV cache、降低真实计算复杂度三件事。

大模型训练显存如何估算,参数、梯度、优化器状态、激活和临时缓存各占哪些部分?

大模型训练显存可以先拆成 model states、activations、temporary buffers、通信缓存和碎片/框架开销。model states 包括参数、梯度和优化器状态;以 Adam 混合精度训练为例,常见粗估是参数 bf16/fp16 2P、梯度 2P、Adam 一阶和二阶矩 fp32 8P、可选 fp32 master weights 4P,总计约 12P 到 16P bytes。除此之外,activation 随 batch、sequence length、hidden size 和层数增长,长上下文 attention 还可能带来平方项;临时缓存包括 attention workspace、GEMM workspace、logits、通信 bucket、all-gather buffer 和内存碎片。估算时要同时考虑并行策略、ZeRO 分片、activation checkpointing、精度和 micro-batch。

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

为什么 CPU 通常需要多级 Cache,而 GPU 更强调 shared memory、coalescing 和高带宽并行访存?

这题考 CPU/GPU 架构差异和访存优化思路。好答案要说明 CPU 面向低延迟、强控制流、少量复杂线程,依赖多级 Cache、分支预测和乱序执行降低单线程访存延迟;GPU 面向高吞吐、大量线程并行,用 warp 调度隐藏延迟,更强调 coalesced global memory access、shared memory 显式复用、高带宽和 occupancy。不能简单说 GPU 没有 Cache,而要说明 GPU 也有 L1/L2/纹理等缓存,只是优化重点从自动低延迟缓存转向显式数据布局和并行带宽利用。

DeepSpeed ZeRO 中哪些训练状态会占用 GPU 显存,为什么 activation 通常用 checkpoint/recompute 而不是像参数或优化器状态一样分页?

这道题考察大模型训练显存构成和 ZeRO 的边界。回答要先把 GPU 显存里的主要训练状态拆清楚:参数、梯度、优化器状态、激活、通信/临时 buffer 和碎片;再说明 ZeRO 主要分片的是模型状态,Stage 1/2/3 分别处理优化器状态、梯度和参数;最后解释 activation 为什么通常用 checkpoint/recompute:它是 batch/sequence 相关的短生命周期中间结果,反向依赖层级顺序,分页到 CPU/NVMe 会引入高带宽低延迟瓶颈,而重计算能用额外 FLOPs 换显存,通常更可控。