校招 未知部门 / 后端-C++ / 一面
[面试日期] 2026-03-06 [面试时长] 未知
[学校背景] 未知 | 未知 [学历背景] 未知
[发布人] 面试之星官方收录
<h2>拼多多 服务器端研发-C++ 一面</h2>
<p><em>来源为牛客付费专栏,以下仅收录公开可见内容,付费部分未收录。</em></p>
<h2>1. 请做一个简洁的自我介绍</h2>
<h2>2. 介绍一下你的“实时风控决策平台”项目背景与目标</h2>
<p>项目背景是交易与营销场景需要在毫秒级完成风险判定,保障安全与转化平衡。 系统目标: </p>
<ol>
<li>单机高并发处理能力; </li>
<li>多规则组合判定的低延迟; </li>
<li>高可用与可观测; </li>
<li>支持灰度发布和快速回滚。 </li>
</ol>
<p>核心链路:接入层 -> 特征聚合 -> 规则引擎 -> 策略执行 -> 结果回传。 高峰期通过“分级限流 + 本地缓存 + 异步降级”保证核心判定稳定。</p>
<h2>3. 本科成绩,为什么挂科了?</h2>
<h2>4. 实习是自己找的吗?你在实习里承担了什么核心职责?</h2>
<h2>5. 讲一个实习中最有挑战的问题,以及你怎么解决</h2>
<p>挑战:高峰流量时规则服务尾延迟抖动明显,导致上游超时。 处理路径: </p>
<ol>
<li>tracing 分析分段耗时,定位到特征查询和锁竞争; </li>
<li>热点特征本地缓存 + 批量查询; </li>
<li>读写锁改造与临界区缩小; </li>
<li>增加排队上限和过载保护。 结果:P99 明显下降,超时率降低,峰值期间稳定性提升。</li>
</ol>
<h2>6. 介绍一下 Linux 进程的虚拟地址空间</h2>
<p>答案: 典型 64 位进程虚拟地址空间包含:代码段、数据段、BSS、堆、共享库映射区、栈、内核映射等。 核心价值: </p>
<ul>
<li>进程隔离; </li>
<li>按需分页与内存保护; </li>
<li>通过页表将虚拟地址映射到物理页。 </li>
</ul>
<p>常见追问:堆向上增长、栈向下增长,mmap 区域由内核管理并可用于大块分配与文件映射。</p>
<h2>7. 你对 C++ 的学习路径和重点理解是什么?</h2>
<p>重点三层: </p>
<ol>
<li>语言层:对象模型、RAII、move 语义、模板; </li>
<li>并发层:线程、原子、内存序、锁模型; </li>
<li>工程层:异常安全、接口设计、性能分析、可测试性。 </li>
</ol>
<p>学习方式:源码阅读 + 小型组件手写 + 在线上问题中反推语言机制。</p>
<h2>8. 介绍一下智能指针,unique_ptr/shared_ptr/weak_ptr 如何选型?</h2>
<ul>
<li>unique_ptr:独占所有权,开销小,默认首选; </li>
<li>shared_ptr:共享所有权,适合多方持有但有原子计数成本; </li>
<li>weak_ptr:解决循环引用,不增加强引用计数。 </li>
</ul>
<p>选型原则:能独占就不用共享;需要共享生命周期才用 shared_ptr;观察者关系用 weak_ptr。</p>
<h2>9. shared_ptr` 循环引用如何出现?如何排查与修复?</h2>
<p>出现方式:A 持有 B 的 shared_ptr,B 同时持有 A 的 shared_ptr,导致引用计数无法归零。 排查:对象析构未触发、内存持续增长、借助 ASan/valgrind/日志计数。 修复:把其中一端改为 weak_ptr,或重构所有权边界。 </p>
<p>代码:</p>
<pre>#include <memory>
struct B;
struct A { std::shared_ptr<B> b; };
struct B { std::weak_ptr<A> a; }; // 关键:weak_ptr 打断环
</pre>
<h2>10. unique_ptr` 的最小实现思路</h2>
<p>核心要点: </p>
<ol>
<li>独占所有权,禁止拷贝; </li>
<li>支持移动构造/移动赋值; </li>
<li>析构自动释放; </li>
<li>提供 get/release/reset。 </li>
</ol>
<p>代码:</p>
<pre>template <class T>
class MyUniquePtr {
public:
explicit MyUniquePtr(T* p = nullptr) noexcept </pre>
AI 推荐面试题
