当前位置: 首页 > news >正文

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

文章目录

  • C++ 面试问题整理
    • 基础问题简答
      • 1. 内存对齐
      • 2. `this` 指针
      • 3. 在成员函数中删除 `this`
      • 4. 引用占用内存吗?
      • 5. C++ 越界访问场景
      • 6. 进程通信方式
      • 7. 无锁队列实现
      • 8. `ping` 在哪一层?实现原理?
      • 9. HTTPS 流程
      • 10. GDB 使用及 CPU 高使用定位
      • 11. 智能指针
      • 12. 右值引用与移动语义
      • 13. `coredump` 与 `minidump` 区别
      • 14. 设计模式
    • 扩展问题详解
      • 0. 自我介绍 + 项目介绍 + 问题解决
      • 1. 智能指针详解
      • 2. STL 容器底层原理
      • 3. B+ 树详解
      • 4. 线程创建方式
      • 5. DFS 和 BFS 过程
      • `malloc` / `free` vs `new` / `delete`
      • `shared_ptr` 线程安全吗?
    • 内存对齐详解
    • 右值引用 vs. 移动语义详解
    • `this` 指针详解
    • `delete this` 详解
    • 引用占用内存详解
    • 越界访问详解
    • 无锁队列详解
    • `ping` 详解
    • HTTPS 流程详解
    • 定位 `new` 详解
    • 线程池优点
    • TCP 三次握手与四次挥手
    • 服务器使用守护进程
    • InnoDB vs MyISAM
    • 索引的作用
    • 高精度加法
    • 锁机制
    • TCP 三次握手额外信息
    • B+ 树详解

以下是整理后的 Markdown 格式内容,已根据你的需求从 <DOCUMENT> 中提取并重新组织,确保逻辑清晰、格式规范,适合直接复制到博客发布。内容涵盖了所有问题及其答案,并对部分复杂问题进行了扩展讲解。


C++ 面试问题整理

以下是常见的 C++ 面试问题及其答案,涵盖内存管理、并发、网络协议、数据库等多个方面,适合复习或面试准备。

基础问题简答

1. 内存对齐

  • 作用:提高 CPU 访问效率,避免跨对齐边界访问导致性能下降或硬件错误。
  • 实现:编译器通过插入填充字节,使数据按类型对齐(如 int 按 4 字节对齐);可用 #pragma pack(n)alignas(n) 控制。
  • 示例
    struct A { char a; int b; short c; }; // sizeof(A) = 12,填充 3+2 字节
    

2. this 指针

  • 作用:指向当前对象实例,用于访问成员变量和方法,支持链式调用。
  • 实现:编译器隐式传递,成员函数接收 this 作为隐藏参数(如 void A::func(A* this))。
  • 示例
    class A { int x; void set(int x) { this->x = x; } };
    

3. 在成员函数中删除 this

  • 后果:释放对象内存,后续访问会导致未定义行为(如崩溃)。
  • 注意:仅适用于动态分配对象,需立即返回避免继续使用。
  • 示例
    class A { void destroy() { delete this; return; } };
    

4. 引用占用内存吗?

  • 答案:通常不占额外内存(作为别名优化掉),但在类成员等场景可能占用指针大小(4/8 字节)。
  • 示例
    int a = 10; int& ref = a; // ref 不占额外空间
    

5. C++ 越界访问场景

  • 数组越界(如 arr[10] 访问大小为 5 的数组)。
  • 野指针或已释放内存访问。
  • 容器操作(如 vectoroperator[] 未检查边界)。
  • 示例
    int arr[5]; arr[10] = 1; // 未定义行为
    

6. 进程通信方式

  • 管道(匿名/命名)、消息队列、共享内存、信号量、套接字、信号、mmap 文件映射、Unix 域套接字。

7. 无锁队列实现

  • 方法:基于原子操作(如 CAS)管理头尾指针。
  • 示例
    std::atomic<Node*> head; // 使用 CAS 更新
    

8. ping 在哪一层?实现原理?

  • 层级:网络层(ICMP 协议)。
  • 原理:发送 ICMP Echo 请求,接收 Echo 响应,计算 RTT 判断连通性。

9. HTTPS 流程

  1. 客户端发送 ClientHello(TLS 版本、加密套件)。
  2. 服务器返回 ServerHello 和证书。
  3. 客户端验证证书,生成预主密钥并加密发送。
  4. 双方派生对称密钥,加密通信。

10. GDB 使用及 CPU 高使用定位

  • 使用gdb attach <PID>thread apply all bt 查看堆栈。
  • 定位top -H 找高 CPU 线程,gdb 分析热点代码。

11. 智能指针

  • shared_ptr:引用计数,共享所有权。
  • unique_ptr:独占所有权,支持移动。
  • weak_ptr:解决循环引用。

12. 右值引用与移动语义

  • 右值引用(&&:绑定临时对象。
  • 移动语义:通过右值引用转移资源,避免深拷贝。
  • 差异:右值引用是语法手段,移动语义是优化策略。

13. coredumpminidump 区别

  • 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 线程。
  • 示例
    std::thread t([]{ std::cout << "Thread\n"; });
    

5. DFS 和 BFS 过程

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

malloc / free vs new / delete

  • malloc / free:C 风格,仅分配/释放内存,不调用构造/析构。
  • new / delete:C++ 风格,分配内存并调用构造/析构。
  • 示例
    int* p = new int(10); delete p;
    

shared_ptr 线程安全吗?

  • 引用计数:线程安全(原子操作)。
  • 对象访问:不安全,需外部加锁。
  • 示例
    std::shared_ptr<int> sp = std::make_shared<int>(10);
    

内存对齐详解

  • 作用:提高 CPU 访问效率,避免硬件错误。
  • 实现
    • 默认对齐:按类型大小(如 int 4 字节)。
    • 控制:#pragma pack(n)alignas(n)
  • 示例
    #pragma pack(2)
    struct A { char a; int b; }; // sizeof(A) = 6
    

右值引用 vs. 移动语义详解

  • 右值引用(&&:绑定临时对象,允许修改。
  • 移动语义:转移资源,避免拷贝。
  • 示例
    std::string s1 = "Hello";
    std::string s2 = std::move(s1); // s1 变空
    

this 指针详解

  • 作用:访问当前对象,支持链式调用。
  • 实现:隐式参数,编译器传递。
  • 示例
    class A { A& set(int x) { this->x = x; return *this; } };
    

delete this 详解

  • 后果:释放对象内存,后续访问未定义。
  • 正确用法:动态对象,删除后立即返回。
  • 示例
    class A { void destroy() { delete this; } };
    

引用占用内存详解

  • 一般情况:不占内存(优化为别名)。
  • 特殊情况:类成员引用占指针大小。
  • 示例
    struct A { int& ref; A(int& r) : ref(r) {} };
    

越界访问详解

  • 场景:数组越界、野指针、容器操作错误。
  • 避免:边界检查,使用 at()
  • 示例
    std::vector<int> v{1, 2}; v.at(5); // 抛异常
    

无锁队列详解

  • 实现:原子操作(如 CAS)管理指针。
  • 示例
    std::atomic<Node*> head; // CAS 更新
    

ping 详解

  • 层级:网络层(ICMP)。
  • 原理:发送 Echo 请求,接收 Echo 响应。
  • 示例
    ping 8.8.8.8
    

HTTPS 流程详解

  • 步骤
    1. ClientHello:发送 TLS 参数。
    2. ServerHello:返回证书。
    3. 密钥交换:生成对称密钥。
    4. 加密通信。

定位 new 详解

  • 定义:在已有内存上构造对象。
  • 用途:内存池、嵌入式系统。
  • 示例
    char buf[sizeof(int)]; int* p = new (buf) int(42);
    

线程池优点

  • 复用线程,减少创建销毁开销。
  • 控制线程数,避免上下文切换。
  • 任务队列提升吞吐量。

TCP 三次握手与四次挥手

  • 三次握手:建立连接,交换 ISN、窗口大小。
  • 四次挥手:确保数据传输完成,防止丢失。

服务器使用守护进程

  • 优点:后台运行,独立环境,持续服务。
  • 示例:Nginx、MySQL。

InnoDB vs MyISAM

  • InnoDB:事务支持,行级锁,崩溃恢复。
  • MyISAM:读性能高,表级锁,无事务。

索引的作用

  • 提高查询速度,加速排序和 JOIN。
  • 示例
    CREATE INDEX idx ON table(col);
    

高精度加法

  • 实现:字符串模拟,处理进位。
  • 应对非法输入:校验数字格式,去除前导零。
  • 示例
    string add(string a, string b);
    

锁机制

  • 类型:互斥锁、读写锁、自旋锁。
  • 示例
    std::mutex mtx; std::lock_guard lock(mtx);
    

TCP 三次握手额外信息

  • 交换 ISN、窗口大小、MSS、时间戳等。
  • 示例
    SYN(seq=x) -> SYN-ACK(seq=y, ack=x+1)
    

B+ 树详解

  • 叶子节点:InnoDB 中双向链表,页内单向。
  • 链表类型
    • 单向:节省空间。
    • 双向:支持范围查询。
    • 循环:轮询调度。

以上内容已整理为 Markdown 格式,直接复制即可发布到博客。每个问题都有简洁回答或详细讲解,涵盖代码示例和关键点,适合技术分享或面试复习。

相关文章:

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

文章目录 C 面试问题整理基础问题简答1. 内存对齐2. this 指针3. 在成员函数中删除 this4. 引用占用内存吗&#xff1f;5. C 越界访问场景6. 进程通信方式7. 无锁队列实现8. ping 在哪一层&#xff1f;实现原理&#xff1f;9. HTTPS 流程10. GDB 使用及 CPU 高使用定位11. 智能…...

el-card 结合 el-descriptions 作为信息展示

记录下el-card 组合 el-descriptions 实现动态展示信息 文章结构 实现效果1. el-descriptions 组件使用1.1 结合v-for实现列表渲染1.2 解析 2. 自定义 el-descriptions 样式2.1 修改背景色、字体颜色2.2 调整字体大小2.3 解析 3. el-card 结合 el-descriptions 作为信息展示3.…...

GaussDB自带诊断工具实战指南

一、引言 GaussDB是一种分布式的关系型数据库。在数据库运维中&#xff0c;快速定位性能瓶颈、诊断故障是保障业务连续性的关键。GaussDB内置了多种诊断工具&#xff0c;结合日志分析、执行计划解析和实时监控功能&#xff0c;帮助开发者与运维人员高效解决问题。本文深入讲解…...

LeetCode 链表章节

简单 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2…...

SSL证书和HTTPS:全面解析它们的功能与重要性

每当我们在互联网上输入个人信息、进行在线交易时&#xff0c;背后是否有一个安全的保障&#xff1f;这时&#xff0c;SSL证书和HTTPS便扮演了至关重要的角色。本文将全面分析SSL证书和HTTPS的含义、功能、重要性以及它们在网络安全中的作用。 一、SSL证书的定义与基本概念 S…...

正交投影与内积空间:机器学习的几何基础

前言 本文隶属于专栏《机器学习数学通关指南》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 &#x1f50d; 1. 内积空间的…...

Qt中txt文件输出为PDF格式

main.cpp PdfReportGenerator pdfReportGenerator;// 加载中文字体if (QFontDatabase::addApplicationFont(":/new/prefix1/simsun.ttf") -1) {QMessageBox::warning(nullptr, "警告", "无法加载中文字体");}// 解析日志文件QVector<LogEntr…...

《HelloGitHub》第 107 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…...

Langchain解锁LLM大语言模型的结构化输出能力(多种实现方案)

在 LangChain解锁LLM大语言模型的结构化输出能力&#xff1a;调用 with_structured_output() 方法 这篇博客中&#xff0c;我们了解了格式化LLM输出内容的必要性以及如何通过调用langchain框架中提供的 with_structured_output() 方法对LLM输出进行格式化&#xff08;三种可选方…...

AI数据分析:deepseek生成SQL

在当今数据驱动的时代&#xff0c;数据分析已成为企业和个人决策的重要工具。随着人工智能技术的快速发展&#xff0c;AI 驱动的数据分析工具正在改变我们处理和分析数据的方式。本文将着重介绍如何使用 DeepSeek 进行自动补全SQL 查询语句。 我们都知道&#xff0c;SQL 查询语…...

力扣-动态规划-115 不同子序列

思路 dp数组定义&#xff1a;0_i-1的字符串中有0_j-1的字符串有dp[i][j]个递推公式&#xff1a; if(s[i-1] t[j-1]){dp[i][j] dp[i-1][j-1] dp[i-1][j]; }else{dp[i][j] dp[i-1][j]; } 在该元素相同时&#xff0c;有两种可能1&#xff1a;使用该元素&#xff0c;所以0_i-2…...

Qt C++ 开发 动态上下页按钮实现

项目开发&#xff0c;想实现动态的显示按钮&#xff0c;考虑使用QStackedWidget做两个页面去切换。 首先&#xff0c;我们使用Qt ui 画出两个QStackedWidget的两个页面 要实现切换&#xff0c;我们只需要调用stackedWidget->setCurrentIndex(index)就行。 那么如何自动调…...

数据结构第五节:排序

1.常见的排序算法 插入排序&#xff1a;直接插入排序、希尔排序 选择排序&#xff1a;直接选择排序、堆排序 交换排序&#xff1a;冒泡排序、快速排序 归并排序&#xff1a;归并排序 排序的接口实现&#xff1a; // 1. 直接插入排序 void InsertSort(int* a, int n); // 2. 希…...

从文件到块: 提高 Hugging Face 存储效率

Hugging Face 在Git LFS 仓库中存储了超过30 PB 的模型、数据集和 Spaces。由于 Git 在文件级别进行存储和版本控制&#xff0c;任何文件的修改都需要重新上传整个文件。这在 Hub 上会产生高昂的成本&#xff0c;因为平均每个 Parquet 和 CSV 文件大小在 200-300 MB 之间&#…...

Android14 串口控制是能wifi adb实现简介

Android14 串口控制是能wifi adb实现简介 一、前言 文章目录 Android14 串口控制是能wifi adb实现简介一、前言二、Android14 串口控制是能wifi adb实现1、设置prop属性命令开启adb&#xff08;1&#xff09;相关prop属性设置&#xff08;2&#xff09;在设置界面或者 ifconfi…...

vue3中 组合式~测试深入组件:事件 与 $emit()

一、语法(props) 第一步&#xff1a;在组件模板表达式中&#xff0c;可以直接用$emit()方法触发自定义事件&#xff0c; <!-- MyComponent --> <button click"$emit(someEvent)">Click Me</button> 第二步父组件可以通过 v-on (缩写为 ) 来监听…...

SQL-labs13-16闯关记录

http://127.0.0.1/sqli-labs/less-13/ 基于POST单引号双注入变形 1&#xff0c;依然是一个登录框&#xff0c;POST型SQL注入 2&#xff0c;挂上burpsuite&#xff0c;然后抓取请求&#xff0c;构造请求判断漏洞类型和闭合条件 admin 发生了报错&#xff0c;根据提示闭合方式是(…...

基于微信小程序的停车场管理系统的设计与实现

第1章 绪论 1.1 课题背景 随着移动互联形式的不断发展&#xff0c;各行各业都在摸索移动互联对本行业的改变&#xff0c;不断的尝试开发出适合于本行业或者本公司的APP。但是这样一来用户的手机上就需要安装各种软件&#xff0c;但是APP作为一个只为某个公司服务的一个软件&a…...

DAIR-V2X-R数据集服务器下载

【官方github链接】https://github.com/ylwhxht/V2X-R 点击并登录 选择并点击下载 浏览器弹窗&#xff0c;右键选择复制下载链接 ------------------------------------服务器下载----------------------------------------- 登录服务器&#xff0c;选在要下载的文件夹复制路…...

table 拖拽移动

表格拖拽 Sortable.js中文网|配置 <!-- 教务处 --><template><div class"but"><el-button click"mergeAndPrintArrays()" type"primary">保存数据</el-button><el-button click"restoration()" t…...

李慕婉-仙逆-造相Z-Turbo一键部署教程:基于Ubuntu20.04的快速环境搭建

李慕婉-仙逆-造相Z-Turbo一键部署教程&#xff1a;基于Ubuntu20.04的快速环境搭建 1. 开篇&#xff1a;为什么选择这个方案&#xff1f; 如果你对AI绘画感兴趣&#xff0c;特别是想自己动手部署一个功能强大的开源模型来玩玩&#xff0c;那今天这个教程就是为你准备的。李慕婉…...

Wan2.2-I2V-A14B极限测试:挑战生成复杂网络拓扑结构的动态演化视频

Wan2.2-I2V-A14B极限测试&#xff1a;挑战生成复杂网络拓扑结构的动态演化视频 1. 开场白&#xff1a;当AI遇见网络拓扑 最近在测试Wan2.2-I2V-A14B模型时&#xff0c;我突发奇想&#xff1a;这个号称能理解复杂概念的文生视频模型&#xff0c;能否准确呈现网络拓扑结构的动态…...

智能资金概念在算法交易中的深度解析:从理论到实战应用

智能资金概念在算法交易中的深度解析&#xff1a;从理论到实战应用 【免费下载链接】smartmoneyconcepts This is a python package for smart money concept indicators 项目地址: https://gitcode.com/gh_mirrors/smar/smartmoneyconcepts 在当今算法交易领域&#xf…...

数字古籍下载工具bookget:从技术实现到应用实践

数字古籍下载工具bookget&#xff1a;从技术实现到应用实践 【免费下载链接】bookget bookget 数字古籍图书下载工具 项目地址: https://gitcode.com/gh_mirrors/bo/bookget 在数字化时代&#xff0c;学术研究与文化传承越来越依赖数字资源的获取效率。数字古籍下载作为…...

保姆级教程:用Halcon的cooc_feature_image算子搞定LCD屏幕缺陷检测(附完整代码)

工业级LCD屏幕缺陷检测实战&#xff1a;Halcon纹理特征分析与优化策略 在液晶显示屏&#xff08;LCD&#xff09;制造过程中&#xff0c;微米级的缺陷可能导致产品报废。传统人工检测不仅效率低下&#xff0c;且漏检率高达15%-30%。Halcon的cooc_feature_image算子通过灰度共生…...

自定义默认提示词:PandaWiki 问答 “一键贴合业务”,企业降本增效新方案

深耕企业数字化与知识管理 7 年&#xff0c;服务过数百家中大型企业&#xff0c;发现企业知识库普遍存在三大核心痛点&#xff1a;AI 问答泛化、风格混乱、效率低下、人力成本高。PandaWiki 的自定义默认提示词功能&#xff0c;搭配多平台客服 开源可控&#xff0c;为企业提供…...

高频电路设计必看:5分钟搞懂PCB阻抗匹配的3个关键参数(附SI9000计算技巧)

高频PCB设计实战&#xff1a;从阻抗理论到SI9000精准计算的完整指南 引言&#xff1a;为什么你的高速信号总是不稳定&#xff1f; 上周和一位资深硬件工程师聊天&#xff0c;他提到自己设计的千兆以太网板卡在测试时总是出现信号抖动问题&#xff0c;反复调整了三四版Layout依然…...

ESLyric歌词源一站式配置:Foobar2000多平台格式转换高效解决方案

ESLyric歌词源一站式配置&#xff1a;Foobar2000多平台格式转换高效解决方案 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource ESLyric歌词源是Foobar2000播…...

手把手教你用EFR32BG22实现BLE串口透传(附GATT配置全流程)

EFR32BG22低功耗蓝牙串口透传开发实战指南 在物联网终端设备开发中&#xff0c;蓝牙串口透传是最基础也最实用的功能之一。本文将带您深入EFR32BG22芯片的蓝牙开发世界&#xff0c;从零开始构建一个高效的BLE串口透传服务。不同于简单的代码搬运&#xff0c;我们将重点关注GATT…...

串口转HID实战:CH9329芯片在无外网环境下的应用指南

CH9329芯片串口转HID实战&#xff1a;隔离环境下的设备控制方案 在工业控制、医疗设备和某些特殊应用场景中&#xff0c;经常需要在物理隔离的网络环境下实现设备控制。CH9329芯片作为一款串口转HID&#xff08;人机接口设备&#xff09;的专业芯片&#xff0c;为解决这类问题提…...