【CPP面经】科大讯飞 &&腾讯后端开发面经分享

[复制链接]
发表于 2025-10-21 05:04:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
以下是整理后的 Markdown 格式内容,已根据你的需求从 <DOCUMENT> 中提取并重新构造,确保逻辑清晰、格式规范,得当直接复制到博客发布。内容涵盖了全部标题及其答案,并对部分复杂标题举行了扩展讲授。

C++ 口试标题整理

以下是常见的 C++ 口试标题及其答案,涵盖内存管理、并发、网络协议、数据库等多个方面,得当复习或口试预备。
根本标题简答

1. 内存对齐



  • 作用:进步 CPU 访问服从,克制跨对齐界限访问导致性能降落或硬件错误。
  • 实现:编译器通过插入添补字节,使数据按范例对齐(如 int 按 4 字节对齐);可用 #pragma pack(n) 或 alignas(n) 控制。
  • 示例
    1. struct A { char a; int b; short c; }; // sizeof(A) = 12,填充 3+2 字节
    复制代码
2. this 指针



  • 作用:指向当前对象实例,用于访问成员变量和方法,支持链式调用。
  • 实现:编译器隐式转达,成员函数吸取 this 作为隐蔽参数(如 void A::func(A* this))。
  • 示例
    1. class A { int x; void set(int x) { this->x = x; } };
    复制代码
3. 在成员函数中删除 this



  • 效果:开释对象内存,后续访问会导致未界说运动(如瓦解)。
  • 注意:仅实用于动态分配对象,需立刻返回克制继承使用。
  • 示例
    1. class A { void destroy() { delete this; return; } };
    复制代码
4. 引用占用内存吗?



  • 答案:通常不占额外内存(作为别名优化掉),但在类成员等场景大概占用指针巨细(4/8 字节)。
  • 示例
    1. int a = 10; int& ref = a; // ref 不占额外空间
    复制代码
5. C++ 越界访问场景



  • 数组越界(如 arr[10] 访问巨细为 5 的数组)。
  • 野指针或已开释内存访问。
  • 容器操纵(如 vector 的 operator[] 未查抄界限)。
  • 示例
    1. int arr[5]; arr[10] = 1; // 未定义行为
    复制代码
6. 进程通讯方式



  • 管道(匿名/定名)、消息队列、共享内存、信号量、套接字、信号、mmap 文件映射、Unix 域套接字。
7. 无锁队列实现



  • 方法:基于原子操纵(如 CAS)管理头尾指针。
  • 示例
    1. std::atomic<Node*> head; // 使用 CAS 更新
    复制代码
8. ping 在哪一层?实现原理?



  • 层级:网络层(ICMP 协议)。
  • 原理:发送 ICMP Echo 哀求,吸取 Echo 相应,盘算 RTT 判断连通性。
9. HTTPS 流程


  • 客户端发送 ClientHello(TLS 版本加密套件)。
  • 服务器返回 ServerHello 和证书。
  • 客户端验证证书,天生预主密钥并加密发送。
  • 两边派生对称密钥,加密通讯。
10. GDB 使用及 CPU 高使用定位



  • 使用:gdb attach <ID>,thread apply all bt 查察堆栈。
  • 定位:top -H 找高 CPU 线程,gdb 分析热门代码。
11. 智能指针



  • shared_ptr:引用计数,共享全部权。
  • unique_ptr:独占全部权,支持移动。
  • weak_ptr:办理循环引用。
12. 右值引用与移动语义



  • 右值引用(&&):绑定暂时对象。
  • 移动语义:通过右值引用转移资源,克制深拷贝。
  • 差别:右值引用是语法本事,移动语义是优化计谋。
13. coredump 与 minidump 区别



  • coredump:完备内存转储,文件大。
  • minidump:精简转储,仅关键信息。
14. 计划模式



  • 单例:确保唯一实例。
  • 工厂:封装对象创建。
  • 观察者:变乱关照。
  • 计谋:算法切换。
扩展标题详解

0. 自我先容 + 项目先容 + 标题办理



  • 示例:我是某公司开发,加入过高并发服务器项目,碰到内存走漏标题。用 valgrind 定位,优化资源开释逻辑办理。
1. 智能指针详解



  • 出现缘故原由:克制裸指针的内存走漏和悬空指针标题。
  • 性能开销:shared_ptr 有引用计数开销(原子操纵),unique_ptr 无额外开销。
  • 支持范例:恣意范例(内置范例、类、指针等)。
2. STL 容器底层原理



  • vector:动态数组,连续内存,容量翻倍增长。
  • list:双向链表,支持快速插入删除。
  • map:红黑树,键值对有序存储
3. B+ 树详解



  • 结构:多叉树,叶子节点存储数据,非叶子节点存储索引。
  • 特点:叶子节点双向链表(InnoDB),支持范围查询。
  • 上风:镌汰 IO,提升查询服从。
4. 线程创建方式



  • std::thread:C++11 尺度。
  • pthread_create:POSIX 线程。
  • 示例
    1. std::thread t([]{ std::cout << "Thread\n"; });
    复制代码
5. DFS 和 BFS 过程



  • DFS(深度优先搜索):递归或栈,深入一条路径。
  • BFS(广度优先搜索):队列,按层遍历。
malloc / free vs new / delete



  • malloc / free:C 风格,仅分配/开释内存,不调用构造/析构。
  • new / delete:C++ 风格,分配内存并调用构造/析构。
  • 示例
    1. int* p = new int(10); delete p;
    复制代码
shared_ptr 线程安全吗?



  • 引用计数:线程安全(原子操纵)。
  • 对象访问:不安全,需外部加锁。
  • 示例
    1. std::shared_ptr<int> sp = std::make_shared<int>(10);
    复制代码
内存对齐详解



  • 作用:进步 CPU 访问服从,克制硬件错误。
  • 实现

    • 默认对齐:按范例巨细(如 int 4 字节)。
    • 控制:#pragma pack(n) 或 alignas(n)。

  • 示例
    1. #pragma pack(2)
    2. struct A { char a; int b; }; // sizeof(A) = 6
    复制代码
右值引用 vs. 移动语义详解



  • 右值引用(&&):绑定暂时对象,允许修改。
  • 移动语义:转移资源,克制拷贝。
  • 示例
    1. std::string s1 = "Hello";
    2. std::string s2 = std::move(s1); // s1 变空
    复制代码
this 指针详解



  • 作用:访问当前对象,支持链式调用。
  • 实现:隐式参数,编译器转达。
  • 示例
    1. class A { A& set(int x) { this->x = x; return *this; } };
    复制代码
delete this 详解



  • 效果:开释对象内存,后续访问未界说。
  • 精确用法:动态对象,删除后立刻返回。
  • 示例
    1. class A { void destroy() { delete this; } };
    复制代码
引用占用内存详解



  • 一样平常情况:不占内存(优化为别名)。
  • 特别情况:类成员引用占指针巨细。
  • 示例
    1. struct A { int& ref; A(int& r) : ref(r) {} };
    复制代码
越界访问详解



  • 场景:数组越界、野指针、容器操纵错误。
  • 克制:界限查抄,使用 at()。
  • 示例
    1. std::vector<int> v{1, 2}; v.at(5); // 抛异常
    复制代码
无锁队列详解



  • 实现:原子操纵(如 CAS)管理指针。
  • 示例
    1. std::atomic<Node*> head; // CAS 更新
    复制代码
ping 详解



  • 层级:网络层(ICMP)。
  • 原理:发送 Echo 哀求,吸取 Echo 相应。
  • 示例
    1. ping 8.8.8.8
    复制代码
HTTPS 流程详解



  • 步调

    • ClientHello:发送 TLS 参数。
    • ServerHello:返回证书。
    • 密钥互换:天生对称密钥。
    • 加密通讯。

定位 new 详解



  • 界说:在已有内存上构造对象。
  • 用途:内存池、嵌入式体系。
  • 示例
    1. char buf[sizeof(int)]; int* p = new (buf) int(42);
    复制代码
线程池长处



  • 复用线程,镌汰创建烧毁开销。
  • 控制线程数,克制上下文切换。
  • 任务队列提升吞吐量。
TCP 三次握手与四次挥手



  • 三次握手:创建毗连,互换 ISN、窗口巨细。
  • 四次挥手:确保数据传输完成,防止丢失。
服务器使用保卫进程



  • 长处:背景运行,独立情况,连续服务。
  • 示例:Nginx、MySQL。
InnoDB vs MyISAM



  • InnoDB:变乱支持,行级锁,瓦解规复。
  • MyISAM:读性能高,表级锁,无变乱。
索引的作用



  • 进步查询速率,加速排序和 JOIN。
  • 示例
    1. CREATE INDEX idx ON table(col);
    复制代码
高精度加法



  • 实现:字符串模仿,处理处罚进位。
  • 应对非法输入:校验数字格式,去除前导零。
  • 示例
    1. string add(string a, string b);
    复制代码
锁机制



  • 范例:互斥锁、读写锁、自旋锁。
  • 示例
    1. std::mutex mtx; std::lock_guard lock(mtx);
    复制代码
TCP 三次握手额外信息



  • 互换 ISN、窗口巨细、MSS、时间戳等。
  • 示例
    1. SYN(seq=x) -> SYN-ACK(seq=y, ack=x+1)
    复制代码
B+ 树详解



  • 叶子节点:InnoDB 中双向链表,页内单向。
  • 链表范例

    • 单向:节省空间。
    • 双向:支持范围查询。
    • 循环:轮询调理。


以上内容已整理为 Markdown 格式,直接复制即可发布到博客。每个标题都有轻便回复或具体讲授,涵盖代码示例和关键点,得当技能分享或口试复习。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表