拼多多 服务器研发-C++ 二面

1. 请做一个 1 分钟自我介绍

2. 有联合索引 index_abc(a,b,c),以下 SQL 是否用到索引?语句 3 与 4 性能有何差异?

select * from user where a = "";
select * from user where a = "" and b = "";
select * from user where a = "" and c = "";
select * from user where a = "" and d = "";

都可能“使用到”索引,但使用深度不同(最左前缀原则):

  1. a=?:用到 a;
  2. a=? and b=?:用到 a,b;
  3. a=? and c=?:通常只能稳定用到 a(c不能跨过b直接形成连续前缀);
  4. a=? and d=?:d不在索引里,通常用到 a 后回表再过滤 d。

语句 3 vs 4:

  • 二者都可能先走 a;
  • 若语句 3 满足覆盖索引或 ICP(索引条件下推)等条件,可能比语句 4 更优;
  • 实际以 EXPLAIN 为准,核心看 rows/filtered/Extra。

3. InnoDB 二级索引叶子节点到底存什么?为什么会“回表”?

InnoDB 主键索引(聚簇索引)叶子节点存整行记录; 二级索引叶子节点存:二级索引键 + 主键值。 所以查二级索引但要取非索引列时,需要拿主键再去聚簇索引查整行,这就是回表。

代码:

-- 仅查询二级索引覆盖列,可能避免回表
EXPLAIN SELECT a,b,c FROM user WHERE a='x' AND b='y';

-- 查询额外列,通常需要回表
EXPLAIN SELECT a,b,c,d FROM user WHERE a='x' AND b='y';

4.什么是覆盖索引与索引下推(ICP)?如何判断是否生效?

  • 覆盖索引:查询列都在同一索引中,避免回表;
  • ICP:把部分 where 条件在存储引擎层提前过滤,减少回表次数。

EXPLAIN 常见信号:

  • 覆盖索引:Extra 出现 Using index;
  • ICP:Extra 出现 Using index condition。 注意:select * 常常破坏覆盖索引收益。

5. 手撕:Tom 与 Jack 击球模拟(随机数 %13==0 失败),打印对局记录和结果

思路:循环轮转玩家,计数击球次数;每次随机生成 1~100,若 %13==0 当前玩家失败,对方获胜并结束。

代码(C++):

#include <iostream>
#include <string>
#include <random>
using namespace std;

int main() {
    string p1 = "Tom", p2 = "Jack";
    bool tomTurn = true;
    int hitCount = 0;

    random_device rd;
    mt19937 gen(rd());
    uniform_int_distribution<int> dist(1, 100);

    while (true) {
        string cur = tomTurn ? p1 : p2;
        string opp = tomTurn ? p2 : p1;
   

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

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

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

全部评论

相关推荐

实习&nbsp;1、展开讲一讲实习里的项目经历。你觉得哪个项目印象最深,就讲哪个&amp;gt;&nbsp;拷打:包括消息队列异步消费、数据丢失和恢复、吞吐与线程池设计、&nbsp;补偿与幂等详细可以看:https://yb0os1.github.io/2026/03/12/%E6%9A%91%E6%9C%9F%E5%AE%9E%E4%B9%A0%E8%AE%B0%E5%BD%95八股1、线程间共享与可见性:1.&nbsp;多线程之间如果要共享数据,一般有什么手段?2.&nbsp;如果线程&nbsp;A&nbsp;修改了一个共享变量,线程&nbsp;B&nbsp;怎么看到最新值?3.&nbsp;`volatile`&nbsp;有什么限制?是不是只要用了它就一定能保证线程可见性?4.&nbsp;除了&nbsp;`volatile`,还有其他方式能保证线程之间的可见性吗?5.&nbsp;为什么加锁也能保证可见性?2、线程私有数据1.&nbsp;线程里有没有自己独有的内存数据?2.&nbsp;除了栈这些线程私有的数据,还有别的吗?(这里面试官想要我回答ThreadLocal)3、ThreadLocal1.&nbsp;你听过&nbsp;`ThreadLocal`&nbsp;吗?2.&nbsp;`ThreadLocal`&nbsp;为什么也算线程独享?3.&nbsp;`ThreadLocal`&nbsp;是怎么做到线程隔离的?4.&nbsp;`ThreadLocal`&nbsp;平时一般怎么用?5.&nbsp;使用&nbsp;`ThreadLocal`&nbsp;的时候,有什么需要注意的地方?4、源码阅读情况1.&nbsp;你平时看过哪些框架源码吗?或者你看过哪些写得比较好的开源代码?&nbsp;(说没有&nbsp;但是后面问了问hashmap)5、HashMap1.&nbsp;你看过&nbsp;`HashMap`&nbsp;的实现代码吗?2.&nbsp;你知道为什么&nbsp;`HashMap`&nbsp;不是线程安全的吗?3.&nbsp;`HashMap`&nbsp;的线程安全问题一般会在什么环节触发?算法1、记不太清了,一个dfs的题目,没写出来2、多线程顺序打印1-100,线程数量和每个线程打印的个数&nbsp;作为参数,还是没写出来,编码掌握的不怎么好感觉g了
查看17道真题和解析
点赞 评论 收藏
分享
评论
1
5
分享

创作者周榜

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