拼多多 客户端开发-C++ 一面

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

2. 请举例说明在 C++ 多线程开发中,如何安全地管理共享资源**

核心原则是:

  • 优先减少共享(消息传递/线程本地存储)
  • 必须共享时明确同步原语(mutex/rwlock/atomic)
  • 使用 RAII 管理锁,避免异常路径泄漏
  • 控制锁粒度,规避死锁(固定加锁顺序)

典型例子:多线程写日志队列,生产者并发入队,消费者单线程落盘。

代码:

#include <queue>
#include <mutex>
#include <condition_variable>
#include <thread>
#include <atomic>
#include <string>

class SafeQueue {
public:
    void push(std::string msg) {
        {
            std::lock_guard<std::mutex> lk(mtx_);
            q_.push(std::move(msg));
        }
        cv_.notify_one();
    }

    bool pop(std::string& out) {
        std::unique_lock<std::mutex> lk(mtx_);
        cv_.wait(lk, [&]{ return stop_ || !q_.empty(); });
        if (q_.empty()) return false;
        out = std::move(q_.front());
        q_.pop();
        return true;
    }

    void stop() {
        stop_ = true;
        cv_.notify_all();
    }

private:
    std::queue<std::string> q_;
    std::mutex mtx_;
    std::condition_variable cv_;
    std::atomic<bool> stop_{false};
};

3. 请介绍一个你做过的“跨平台日志与崩溃收集系统”项目的设计思路

这个就是单纯的项目拷打, 每个人根据自己的情况而定

4. Linux 下进程与线程的核心区别是什么?与 Android 下实现机制有哪些差异?

  • Linux 中:进程资源隔离(地址空间、fd 表等),线程共享进程资源但有独立栈和调度实体。
  • Android 基于 Linux 内核,但用户态生态不同: libc 是 Bionic(非 glibc) 大量 IPC 依赖 Binder 进程启动常见 Zygote 派生模式 SELinux 策略更严格,对权限和可访问资源限制更强

5. 你做过跨平台移植项目吗?常见兼容性问题有哪些?你一般如何定位和解决?

常见问题:

  • 编译器差异(MSVC/GCC/Clang)
  • 标准库行为差异、ABI 不兼容
  • 路径编码(UTF-8/UTF-16)
  • socket、文件锁、时间 API 差异
  • 大小端/对齐/未定义行为触发差异

定位流程:

  1. 先做最小复现
  2. 打开高等级编译告警 + sanitizer
  3. 比对同用例在不同平台日志
  4. 二分回退到具体提交
  5. 修复后加回归测试防止复发

6. 如果要写一套可在 Linux / Windows / Android 运行的 C++ 代码,你的整体架构与编码策略是什么?

  • “核心业务层”纯 C++17/20,无平台头
  • “平台抽象层 PAL”封装线程、文件、socket、时间、栈回溯
  • “适配层”放具体 OS 实现
  • CMake 管理多平台构建,按 target 做差异配置
  • 用 CI 做三平台持续构建和基础回归

7. 在跨平台工程中,你如何设计 PAL 与核心业务

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

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

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

全部评论
你这是啥时候面试的?面试没手撕?
点赞 回复 分享
发布于 03-11 21:34 陕西
感觉问的还挺多的啊
点赞 回复 分享
发布于 03-05 22:42 北京

相关推荐

问的项目很少,大部分是八股,时长45min1、自我介绍2、etcd使用的一致性协议,raft选主流程3、http和websocket的区别?4、websocket连接建立的流程5、用户输入url链接到浏览器渲染的流程6&nbsp;、一条SQL语句执行的流程7、innodb为什么用B+树8、介绍一下MVCC9、联合索引,有联合索引(a,b,c),SQL语句select&nbsp;*&nbsp;from&nbsp;xxx&nbsp;where&nbsp;b&nbsp;=&nbsp;x&nbsp;and&nbsp;c&nbsp;=x&nbsp;and&nbsp;a=x,走不走索引10、kafka的可靠性是怎么保证的11、如何保证分布式id的唯一性,如何保证递增12、在java中如何实现go的channel(channel的底层原理)13、一些开放问题,比如如何使用ai,了解用过agent吗等14、反问手撕&nbsp;lru缓存面试官很好,应该是我近几场面试感受最好的一次,会引导你回答问题,如果说错了还会解释清楚面试前还发了ai&nbsp;coding的,题目是Linux路径格式化的,不过面试的时候完全没提【拼多多27届暑期实习内推开始了!】第一轮笔试已于3.15结束,后续笔试将陆续开始!面试流程:通过内推链接投递简历、笔试、面试、实习、发放offer内推对象:27年毕业的同学实习要求:面试通过后,只要求7、8月在岗,只需实习2个月即可获得转正机会。实习期间表现优秀者,同等条件下优先录取。内推链接:薪资待遇:我们提供业界绝对顶尖、绝对领先的薪资,广阔的发展空间,一对一的大牛导师指导,欢迎优秀的同学加入!技术笔试可灵活顺延一次,两次都未参加,则该批次笔试结束。更多干货资料:*****************************************
查看14道真题和解析
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

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