拼多多 服务器端研发-C++ 一面

1. 请做一个简洁的自我介绍

2. 介绍一下你的“实时风控决策平台”项目背景与目标

项目背景是交易与营销场景需要在毫秒级完成风险判定,保障安全与转化平衡。 系统目标:

  1. 单机高并发处理能力;
  2. 多规则组合判定的低延迟;
  3. 高可用与可观测;
  4. 支持灰度发布和快速回滚。

核心链路:接入层 -> 特征聚合 -> 规则引擎 -> 策略执行 -> 结果回传。 高峰期通过“分级限流 + 本地缓存 + 异步降级”保证核心判定稳定。

3. 本科成绩,为什么挂科了?

4. 实习是自己找的吗?你在实习里承担了什么核心职责?

5. 讲一个实习中最有挑战的问题,以及你怎么解决

挑战:高峰流量时规则服务尾延迟抖动明显,导致上游超时。 处理路径:

  1. tracing 分析分段耗时,定位到特征查询和锁竞争;
  2. 热点特征本地缓存 + 批量查询;
  3. 读写锁改造与临界区缩小;
  4. 增加排队上限和过载保护。 结果:P99 明显下降,超时率降低,峰值期间稳定性提升。

6. 介绍一下 Linux 进程的虚拟地址空间

答案: 典型 64 位进程虚拟地址空间包含:代码段、数据段、BSS、堆、共享库映射区、栈、内核映射等。 核心价值:

  • 进程隔离;
  • 按需分页与内存保护;
  • 通过页表将虚拟地址映射到物理页。

常见追问:堆向上增长、栈向下增长,mmap 区域由内核管理并可用于大块分配与文件映射。

7. 你对 C++ 的学习路径和重点理解是什么?

重点三层:

  1. 语言层:对象模型、RAII、move 语义、模板;
  2. 并发层:线程、原子、内存序、锁模型;
  3. 工程层:异常安全、接口设计、性能分析、可测试性。

学习方式:源码阅读 + 小型组件手写 + 在线上问题中反推语言机制。

8. 介绍一下智能指针,unique_ptr/shared_ptr/weak_ptr 如何选型?

  • unique_ptr:独占所有权,开销小,默认首选;
  • shared_ptr:共享所有权,适合多方持有但有原子计数成本;
  • weak_ptr:解决循环引用,不增加强引用计数。

选型原则:能独占就不用共享;需要共享生命周期才用 shared_ptr;观察者关系用 weak_ptr。

9. shared_ptr` 循环引用如何出现?如何排查与修复?

出现方式:A 持有 B 的 shared_ptr,B 同时持有 A 的 shared_ptr,导致引用计数无法归零。 排查:对象析构未触发、内存持续增长、借助 ASan/valgrind/日志计数。 修复:把其中一端改为 weak_ptr,或重构所有权边界。

代码:

#include <memory>
struct B;
struct A { std::shared_ptr<B> b; };
struct B { std::weak_ptr<A> a; }; // 关键:weak_ptr 打断环

10. unique_ptr` 的最小实现思路

核心要点:

  1. 独占所有权,禁止拷贝;
  2. 支持移动构造/移动赋值;
  3. 析构自动释放;
  4. 提供 get/release/reset。

代码:

template <class T>
class MyUniquePtr {
public:
    explicit MyUniquePtr(T* p = nullptr) noexcept 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务