博雷顿科技股份公司 C++ 二面复盘
1. 自我介绍
我其实跟一面介绍的差不多 , 之前公司的实习,主要参与 C++ 后端开发工作。 实习期间负责消息处理和服务端模块开发,涉及功能迭代、线上问题排查和性能优化。 技术栈以 C/C++ 为主,熟悉 STL、Linux 多线程和 TCP/IP 网络编程,了解 MySQL、Redis。 整体偏工程实践,关注代码质量、系统稳定性和性能优化,希望继续在 C++ 后端方向深入发展。
2. 项目介绍
二面比一面问得更深入,围绕项目追问了很多实际场景问题,不只是做了什么,更关注为什么这么做、怎么验证、出了问题怎么兜底
大概的追问方向如下:
- 高并发下延迟抖动时,如何快速判断是锁竞争、I/O 瓶颈还是下游阻塞
- 无锁队列在生产环境如何保证稳定性,出现积压和背压时如何处理
- 状态同步短暂不一致时如何保证业务可用性,是否有回滚或补偿方案
- 内存泄漏和内存碎片如何监控,如何从现象定位到具体代码
- 性能优化后如何证明有效,压测指标和线上指标如何对齐
整体感受:二面更看重真实工程能力和场景化问题处理能力。
3. 智能指针底层实现
- unique_ptr:独占所有权,不能拷贝、可以移动
- shared_ptr:共享所有权,底层通过控制块维护引用计数
- weak_ptr:弱引用,不增加强引用计数,用于解决循环引用
补充:对象在强引用计数归零时析构;控制块在弱引用计数归零后释放。
4. C++11 多线程
常见知识点:
- std::thread(线程创建与管理)
- std::mutex、std::lock_guard、std::unique_lock(互斥与加锁)
- std::condition_variable(线程等待与唤醒)
- std::atomic(无锁原子操作)
实践中通常结合线程池 + 条件变量进行任务分发,使用原子变量做轻量同步。
5. 引用计数存放位置
shared_ptr 的引用计数存放在控制块中,不在对象本体里。 控制块通常位于堆上,包含强引用计数、弱引用计数、删除器等信息。
6. 代码题:实现 Trie
Trie或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。
请你实现 Trie 类:
- Trie() 初始化前缀树对象。
- void insert(String word) 向前缀树中插入字符串 word 。
- boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。
- boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false 。
class Trie {
private:
struct Node {
Node* child[26];
bool isEnd;
Node() : isEnd(false) {
for (int i = 0; i < 26; ++i) child[i] = nullptr;
}
};
Node* root;
public:
Trie() {
root = new Node();
}
void insert(const string& word) {
Node* cur = root;
for (char c : word) {
int idx = c - 'a';
if (cur->child[idx] == nullptr) {
cur->child[idx] = new Node();
}
cur = cur->child[idx];
}
cur->isEnd = true;
}
bool search(const string& word) {
Node* cur = root;
for (char c : word) {
int idx = c - 'a';
if (cur->child[idx] == nullptr) return false;
cur = cur->child[idx];
}
return cur->isEnd;
}
bool startsWith(const string& prefix) {
Node* cur = root;
for (char c : prefix) {
int idx = c - 'a';
if (cur->child[idx] == nullptr) return false;
cur = cur->child[idx];
}
return true;
}
};
7.反问
之后的评估重点更偏向编码能力、系统设计还是业务理解
如果入职,前两个月会优先承担哪类任务
团队技术方案评审最看重哪些维度
C++面试总结 文章被收录于专栏
本专栏系统梳理C++面试高频考点,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力。
