腾讯云智 C++ 一面凉经
Elasticsearch 的作用
Elasticsearch 是一个分布式搜索与分析引擎,核心价值是把文本和结构化数据建立索引后,支持高性能检索与聚合统计。它适合做查询层,比如消息搜索、日志检索、复杂条件过滤和运营分析,不适合作为强事务主库。
用户A给用户B发消息,如何做到消息转发
标准做法是先持久化再投递。A 发消息到接入层后,服务端先完成鉴权、生成消息 ID、写入存储或消息日志,再根据 B 的在线状态做路由。在线就通过长连接实时推送,离线就写离线队列,等 B 上线拉取。B 收到后回 ACK,服务端更新投递状态;如果超时未 ACK,就走重试或补偿。这样才能同时保证可靠性和可追踪性。
HTTP 做业务请求、WebSocket 做实时通信,为什么分离
HTTP 天然适合请求-响应类接口,例如登录、拉历史、改资料;WebSocket 天然适合实时双向通信,例如即时消息推送和状态通知。把两者分离后,系统可以把控制面和实时数据面独立扩容,协议治理更清晰,故障也更容易隔离,整体延迟和资源利用率更稳定。
消息量大如何保证不丢数据不重复
工程上一般采用“至少一次投递 + 消费端幂等”。不丢依赖先落盘、ACK、失败重试和多副本;不重复依赖全局唯一消息 ID 与幂等校验。即使网络抖动导致重发,只要消费侧按消息 ID 去重,就不会产生业务重复。配合死信队列和离线补拉机制,可以覆盖异常场景下的恢复。
ThreadCache 如何实现无锁申请(整体思路)
ThreadCache 的核心是“线程本地化”。每个线程维护自己的小对象空闲链表,申请时优先从本地取,这条路径不需要全局锁;只有本地不足时才批量向中央缓存申请,本地过多时再批量归还。高频分配走无锁本地路径,低频路径才触发共享结构同步,因此能显著降低锁竞争和上下文切换开销。
除了 tcmalloc,还了解哪些 malloc 方案
常见方案包括 jemalloc、ptmalloc、mimalloc。jemalloc 在并发场景和碎片控制上表现较好;ptmalloc 是 glibc 默认实现,兼容性强;mimalloc 强调低延迟和小对象性能。面试里给出方案名并说明适用场景就够了,重点是“按吞吐、尾延迟、碎片率、可观测性”做选型。
为什么用 C++ 做分布式系统开发
C++ 的主要优势是性能上限高、资源控制精细、延迟可控,适合高并发和低延迟系统。它允许开发者精确管理内存布局和对象生命周期,在网络与存储密集场景里更容易把成本压低。代价是开发复杂度更高,对工程规范、代码审查和工具链要求更严格。
set/map、unordered_set/map 的实现机制与优缺点
set/map 底层通常是红黑树,特点是有序、时间复杂度稳定在 O(log n),适合范围查询和有序遍历。unordered_set/map 底层是哈希表,平均查找是 O(1),点查性能好,但无序,且在哈希冲突严重时会退化。实际选型时,如果你需要顺序语义或区间操作,用树;如果核心是高频点查,用哈希。
算法题:括号表达式合法性({} > [] > (),高可嵌低,反之不行)
这题用栈处理最直接。扫描字符串时,遇到左括号先检查优先级约束:当前要入栈的左括号优先级不能高于栈顶左括号,否则说明出现“低优先级包高优先级”,直接非法。遇到右括号则检查是否与栈顶类型匹配,匹配才出栈。遍历结束后栈为空才合法。
#include <string>
#include <vector>
using namespace std;
int priorityOf(char c) {
if (c == '{') return 3;
if (c == '[') return 2;
if (c == '(') return 1;
return 0;
}
bool isPair(char l, char r) {
return (l == '(' && r == ')') ||
(l == '[' && r == ']') ||
(l == '{' && r == '}');
}
bool isValidBracketExpr(const string& s) {
vector<char> st;
for (char c : s) {
if (c == '(' || c == '[' || c == '{') {
if (!st.empty() && priorityOf(st.back()) < priorityOf(c)) {
return false;
}
st.push_back(c);
} else if (c == ')' || c == ']' || c == '}') {
if (st.empty() || !isPair(st.back(), c)) return false;
st.pop_back();
} else {
return false;
}
}
return st.empty();
}
本专栏系统梳理C++面试高频考点,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力。