已解析题目
C/C++ 工程师相关题目
C++ 指针和引用有什么区别?
C++ 指针和引用有什么区别?这道腾讯牛客题的关键是围绕“C++ 指针与引用语义”讲清概念、机制、取舍和边界。C++ 指针和引用都能间接访问对象,但语义不同。指针是一个可重新赋值的对象,可以为空,可以参与地址运算;引用更像对象别名,初始化后通常不能改绑,也不应为空。
C++ 虚函数和虚函数表的实现原理是什么?
C++ 虚函数和虚函数表的实现原理是什么?这道腾讯牛客题的关键是围绕“C++ 虚函数与虚表实现”讲清概念、机制、取舍和边界。C++ 虚函数通常通过 vptr 和 vtable 实现。含虚函数的对象里有虚表指针,指向所属动态类型的虚函数表;通过基类指针或引用调用虚函数时,运行时按 vtable 槽位找到最终覆盖的函数。
内存泄漏如何定位和排查?
内存泄漏如何定位和排查?这道腾讯牛客题的关键是围绕“内存泄漏定位与排查”讲清概念、机制、取舍和边界。内存泄漏排查要先确认是进程常驻内存持续增长、堆对象无法释放,还是缓存、连接、文件句柄等资源增长。Java 场景重点看堆转储、GC Roots 和对象引用链;C/C++ 场景还要看 malloc/new 未释放和越界破坏。
动态库和静态库有什么区别?
动态库和静态库有什么区别?这道腾讯牛客题的关键是围绕“静态库与动态库的链接和装载差异”讲清概念、机制、取舍和边界。静态库和动态库的核心区别在代码进入进程的时机和共享方式。静态库在链接阶段把目标代码复制进可执行文件,运行时不再依赖该库文件;动态库在装载或运行时由动态链接器映射进进程,可被多个进程共享同一份只读代码页。
c++程序从编译到可执行文件的流程?
c++程序从编译到可执行文件的流程?这道腾讯牛客题的关键是围绕“C++ 从源码到可执行文件的构建链路”讲清概念、机制、取舍和边界。C++ 程序从源码到可执行文件通常经过预处理、编译、汇编和链接四个阶段。预处理展开头文件和宏,编译把翻译单元转成汇编或中间表示并做语义检查,汇编生成目标文件,链接解析符号并合并目标文件和库。
C++ map底层数据结构?
C++ map底层数据结构?这道腾讯牛客题的关键是围绕“std::map 底层结构与复杂度”讲清概念、机制、取舍和边界。C++ `std::map` 通常基于红黑树这类自平衡二叉搜索树实现,元素按 key 有序存储。查找、插入和删除的复杂度通常是 O(log n),迭代时能按 key 顺序遍历。
tcp连接建立的过程?
tcp连接建立的过程?这道腾讯牛客题的关键是围绕“TCP 连接建立与三次握手”讲清概念、机制、取舍和边界。TCP 建立连接的核心是三次握手:客户端发送 SYN,服务端回复 SYN+ACK,客户端再回复 ACK。这个过程同步双方初始序列号、确认收发能力,并让双方进入 ESTABLISHED 状态。
http与https区别?
http与https区别?这道腾讯牛客题的关键是围绕“HTTP、HTTPS 与 TLS 安全链路”讲清概念、机制、取舍和边界。HTTP 是明文应用层协议,HTTPS 是 HTTP 运行在 TLS 之上。TLS 通过证书链验证服务器身份,通过密钥交换协商会话密钥,后续数据主要用对称加密传输,同时用完整性校验防止篡改。
快排与归并排序的区别?
快排与归并排序的区别?这道腾讯牛客题的关键是围绕“快速排序与归并排序对比”讲清概念、机制、取舍和边界。快速排序和归并排序都能做到平均 O(n log n),但思路和工程取舍不同。快排通过 partition 原地划分再递归子区间,平均快、缓存友好但通常不稳定,最坏可能 O(n^2);归并排序先递归拆分再合并有序段,稳定且最坏 O(n log n),但通常需要 O(n) 额外空间。
tcp拥塞控制是怎么实现的?
tcp拥塞控制是怎么实现的?这道腾讯牛客题的关键是围绕“TCP 拥塞控制”讲清概念、机制、取舍和边界。TCP 拥塞控制解决的是发送速率不能超过网络承载能力的问题。典型机制包括慢启动、拥塞避免、快速重传和快速恢复,通过拥塞窗口 cwnd 与接收窗口共同限制在途数据量。
http和https的区别?
http和https的区别?这道腾讯牛客题的关键是围绕“HTTP、HTTPS 与 TLS 安全链路”讲清概念、机制、取舍和边界。HTTP 是明文应用层协议,HTTPS 是 HTTP 运行在 TLS 之上。TLS 通过证书链验证服务器身份,通过密钥交换协商会话密钥,后续数据主要用对称加密传输,同时用完整性校验防止篡改。
如何判断一个链表是否有环?
如何判断一个链表是否有环?这道腾讯牛客题的关键是围绕“链表判环与快慢指针”讲清概念、机制、取舍和边界。判断链表是否有环,常用 Floyd 快慢指针。慢指针每次走一步,快指针每次走两步;如果链表有环,快指针最终会在环内追上慢指针;如果无环,快指针会先走到 null。
TCP如何可靠传输的?
TCP如何可靠传输的?这道腾讯牛客题的关键是围绕“TCP 可靠传输机制”讲清概念、机制、取舍和边界。TCP 保证可靠传输依靠序列号、确认应答、超时重传、快速重传、校验和、滑动窗口、拥塞控制和有序重组。它保证的是可靠有序的字节流,不保证应用层消息边界。
为什么HTTPS是安全的?
为什么HTTPS是安全的?这道腾讯牛客题的关键是围绕“HTTP、HTTPS 与 TLS 安全链路”讲清概念、机制、取舍和边界。HTTP 是明文应用层协议,HTTPS 是 HTTP 运行在 TLS 之上。TLS 通过证书链验证服务器身份,通过密钥交换协商会话密钥,后续数据主要用对称加密传输,同时用完整性校验防止篡改。
TCP怎么保证可靠性?
TCP怎么保证可靠性?这道腾讯牛客题的关键是围绕“TCP 可靠传输机制”讲清概念、机制、取舍和边界。TCP 保证可靠传输依靠序列号、确认应答、超时重传、快速重传、校验和、滑动窗口、拥塞控制和有序重组。它保证的是可靠有序的字节流,不保证应用层消息边界。
HTTPS工作原理?
HTTPS工作原理?这道腾讯牛客题的关键是围绕“HTTP、HTTPS 与 TLS 安全链路”讲清概念、机制、取舍和边界。HTTP 是明文应用层协议,HTTPS 是 HTTP 运行在 TLS 之上。TLS 通过证书链验证服务器身份,通过密钥交换协商会话密钥,后续数据主要用对称加密传输,同时用完整性校验防止篡改。
什么是缓存穿透?
什么是缓存穿透?这道腾讯牛客题的关键是围绕“缓存穿透”讲清概念、机制、取舍和边界。缓存穿透指请求查询一个缓存和数据库都不存在的 key,缓存无法命中,每次都会打到数据库。恶意构造不存在参数或大量长尾不存在 key 时,会造成回源 QPS 异常升高。
内存中堆和栈有什么区别?
内存中堆和栈有什么区别?这道腾讯牛客题的关键是围绕“内存堆与栈区别”讲清概念、机制、取舍和边界。内存中的栈主要保存函数调用帧、局部自动变量、返回地址和寄存器保存信息,生命周期随函数调用自动管理;堆用于动态分配对象,生命周期由 malloc/free、new/delete 或运行时 GC 管理。
TCP如何实现可靠传输?
TCP如何实现可靠传输?这道腾讯牛客题的关键是围绕“TCP 可靠传输机制”讲清概念、机制、取舍和边界。TCP 保证可靠传输依靠序列号、确认应答、超时重传、快速重传、校验和、滑动窗口、拥塞控制和有序重组。它保证的是可靠有序的字节流,不保证应用层消息边界。
TCP拥塞窗口 / 滑动窗口及区别?
TCP拥塞窗口 / 滑动窗口及区别?这道腾讯牛客题的关键是围绕“TCP 滑动窗口与拥塞窗口”讲清概念、机制、取舍和边界。TCP 滑动窗口通常指接收方通告的接收窗口 rwnd,用来做流量控制;拥塞窗口 cwnd 是发送方根据网络拥塞情况维护的窗口,用来做拥塞控制。实际可发送的在途数据通常受 min(rwnd, cwnd) 限制。
epoll 的 LT 和 ET 两种触发模式有什么区别?
epoll 的 LT 和 ET 两种触发模式有什么区别?这道腾讯牛客题的关键是围绕“epoll LT 与 ET 触发模式”讲清概念、机制、取舍和边界。epoll 常说的两种触发模式是 LT 水平触发和 ET 边缘触发。LT 只要 fd 仍然处于可读或可写状态,就会持续通知;ET 只在状态从不可读变为可读、不可写变为可写这类边缘变化时通知一次。
https原理,如何解决中间人攻击?
https原理,如何解决中间人攻击?这道腾讯牛客题的关键是围绕“HTTP、HTTPS 与 TLS 安全链路”讲清概念、机制、取舍和边界。HTTP 是明文应用层协议,HTTPS 是 HTTP 运行在 TLS 之上。TLS 通过证书链验证服务器身份,通过密钥交换协商会话密钥,后续数据主要用对称加密传输,同时用完整性校验防止篡改。
C++的vector跟Java的ArrayList的区别?
C++的vector跟Java的ArrayList的区别?这道腾讯牛客题的关键是围绕“C++ vector 与 Java ArrayList 对比”讲清概念、机制、取舍和边界。C++ vector 和 Java ArrayList 都是动态数组,但 vector 存放的是元素本身并通过模板在编译期确定类型;ArrayList 底层是 Object[] 引用数组,泛型有类型擦除,基本类型需要装箱成对象。
如何判断单链表是否成环?
如何判断单链表是否成环?这道腾讯牛客题的关键是围绕“链表判环与快慢指针”讲清概念、机制、取舍和边界。判断链表是否有环,常用 Floyd 快慢指针。慢指针每次走一步,快指针每次走两步;如果链表有环,快指针最终会在环内追上慢指针;如果无环,快指针会先走到 null。
stl vector push_back() 的复杂度?
stl vector push_back() 的复杂度?这道腾讯牛客题的关键是围绕“std::vector::push_back 复杂度与扩容”讲清概念、机制、取舍和边界。std::vector::push_back 的均摊时间复杂度是 O(1),但单次操作在容量不足触发扩容时可能是 O(n)。扩容需要申请更大的连续内存,把已有元素移动或拷贝过去,再插入新元素。
list和vector实现有什么区别?
list和vector实现有什么区别?这道腾讯牛客题的关键是围绕“C++ list 与 vector 实现差异”讲清概念、机制、取舍和边界。C++ `vector` 是连续动态数组,支持 O(1) 随机访问,尾插摊还 O(1),中间插删需要移动元素;`list` 是双向链表,不支持随机访问,已知位置插入删除 O(1),但查找位置和遍历通常 O(n)。
char arr[20]和char *p = new char[20]的区别?
char arr[20]和char *p = new char[20]的区别?这道腾讯牛客题的关键是围绕“栈数组与堆数组的生命周期和所有权”讲清概念、机制、取舍和边界。char arr[20] 和 char *p = new char[20] 都能表示 20 个 char 的连续空间,但生命周期、存储位置和所有权不同。arr 通常是自动存储期对象,离开作用域自动释放;new char[20] 在自由存储区分配,p 只是指向这块内存的指针,需要 delete[] 释放。
线程间的通信机制?
线程间的通信机制?这道腾讯牛客题的关键是围绕“线程互斥与通信机制”讲清概念、机制、取舍和边界。线程互斥用于保护共享资源,常见 mutex、spinlock、rwlock、atomic/CAS 和 semaphore;线程通信常用 condition variable、线程安全队列、future/promise、eventfd 或 channel 风格封装。
stl的list和vector有什么区别?
stl的list和vector有什么区别?这道腾讯牛客题的关键是围绕“C++ list 与 vector 实现差异”讲清概念、机制、取舍和边界。C++ `vector` 是连续动态数组,支持 O(1) 随机访问,尾插摊还 O(1),中间插删需要移动元素;`list` 是双向链表,不支持随机访问,已知位置插入删除 O(1),但查找位置和遍历通常 O(n)。
C和C++有什么区别?
C和C++有什么区别?这道腾讯牛客题的关键是围绕“C 与 C++ 差异”讲清概念、机制、取舍和边界。C 更偏过程式语言,核心是函数、结构体、指针和手动资源管理;C++ 在兼容大量 C 能力的基础上加入类、封装、继承、多态、模板、STL、异常、命名空间和 RAII,支持过程式、面向对象、泛型和资源管理抽象。
锁的种类、悲观锁和乐观锁的区别?
锁的种类、悲观锁和乐观锁的区别?这道腾讯牛客题的关键是围绕“悲观锁、乐观锁与锁类型选择”讲清概念、机制、取舍和边界。悲观锁和乐观锁不是具体 API 名称,而是并发控制思路。悲观锁假设冲突常发生,访问共享资源前先加锁,典型表现是互斥锁、数据库行锁;乐观锁假设冲突较少,先无锁读取和计算,提交时用版本号、CAS 或时间戳检测冲突。
进程有哪些常见状态?
进程有哪些常见状态?这道腾讯牛客题的关键是围绕“Linux 进程状态”讲清概念、机制、取舍和边界。Linux 常见进程状态包括 R 运行或可运行、S 可中断睡眠、D 不可中断睡眠、T 停止、Z 僵尸。面试时要说明这些状态代表任务是在用 CPU、等事件、等不可中断 I/O、被暂停,还是已经退出等待父进程回收。
C++程序编译过程,哪几步?
C++程序编译过程,哪几步?这道腾讯牛客题的关键是围绕“C++ 从源码到可执行文件的构建链路”讲清概念、机制、取舍和边界。C++ 程序从源码到可执行文件通常经过预处理、编译、汇编和链接四个阶段。预处理展开头文件和宏,编译把翻译单元转成汇编或中间表示并做语义检查,汇编生成目标文件,链接解析符号并合并目标文件和库。
Go和C++有什么区别?
Go和C++有什么区别?这道腾讯牛客题的关键是围绕“语言差异与工程边界对比”讲清概念、机制、取舍和边界。比较 C、C++ 或 Go 和 C++ 时,不能只列语法差异。要从抽象能力、内存管理、类型系统、运行时、并发模型、构建部署和性能控制这些工程边界展开。
怎么实现线程之间的互斥?
怎么实现线程之间的互斥?这道腾讯牛客题的关键是围绕“线程互斥实现”讲清概念、机制、取舍和边界。线程互斥的目标是保护共享临界区,确保同一时刻只有一个线程修改共享状态。常见手段包括 mutex、spinlock、rwlock、atomic/CAS 和 semaphore,其中 mutex 是最常用的阻塞互斥原语。
线程上下文和进程上下文区别?
线程上下文和进程上下文区别?这道腾讯牛客题的关键是围绕“线程上下文与进程上下文切换”讲清概念、机制、取舍和边界。线程上下文切换和进程上下文切换都要保存/恢复寄存器、程序计数器、栈指针和调度状态;区别在于同进程线程共享地址空间,通常不需要切换完整 mm_struct 和页表,而进程切换更可能带来地址空间、TLB 和 cache 扰动。
RAII 和智能指针的原理是什么?
RAII 和智能指针的原理是什么?这道腾讯牛客题的关键是围绕“C++ 智能指针与内存泄漏治理”讲清概念、机制、取舍和边界。智能指针通过 RAII 把堆对象生命周期绑定到对象析构,能减少忘记 delete、异常路径提前返回和重复释放导致的问题。unique_ptr 表达独占所有权,shared_ptr 表达共享所有权,weak_ptr 用来观察对象并打破 shared_ptr 循环引用。
stl map是如何实现的?
stl map是如何实现的?这道腾讯牛客题的关键是围绕“std::map 底层结构与复杂度”讲清概念、机制、取舍和边界。C++ `std::map` 通常基于红黑树这类自平衡二叉搜索树实现,元素按 key 有序存储。查找、插入和删除的复杂度通常是 O(log n),迭代时能按 key 顺序遍历。
C++11有哪些新特性?
C++11有哪些新特性?这道腾讯牛客题的关键是围绕“C++11 常用新特性与解决的问题”讲清概念、机制、取舍和边界。C++11 的常用新特性包括 auto、range-for、lambda、右值引用和移动语义、智能指针、nullptr、constexpr、线程库、统一初始化和 unordered 容器。回答时要说这些特性分别解决什么问题。
C++面向对象的特性?
C++面向对象的特性?这道腾讯牛客题的关键是围绕“C++ 面向对象特性”讲清概念、机制、取舍和边界。C++ 面向对象常讲封装、继承和多态。封装把数据和行为组织成类并控制访问;继承复用和扩展基类接口;多态通过虚函数让基类指针或引用在运行时调用派生类实现。
给定一个有序数组,统计指定元素出现的次数?
给定一个有序数组,统计指定元素出现的次数?这道腾讯牛客题的关键是围绕“有序数组统计元素次数”讲清概念、机制、取舍和边界。有序数组统计 target 出现次数,最稳的方法是两次二分:lower_bound 找第一个大于等于 target 的位置,upper_bound 找第一个大于 target 的位置,次数等于 upper-lower。
树有哪几种遍历方式?
树有哪几种遍历方式?这道腾讯牛客题的关键是围绕“树的遍历方式”讲清概念、机制、取舍和边界。常见树遍历包括前序、中序、后序和层序。二叉树中前序是根-左-右,中序是左-根-右,后序是左-右-根,层序按层访问。N 叉树通常保留前序、后序和层序,中序没有统一定义。
C++ 中 auto_ptr 和 shared_ptr 有什么区别?
C++ 中 auto_ptr 和 shared_ptr 有什么区别?这道腾讯牛客题的关键是围绕“auto_ptr 与 shared_ptr 所有权语义”讲清概念、机制、取舍和边界。auto_ptr 和 shared_ptr 的核心差异是所有权语义。auto_ptr 拷贝会转移所有权,源指针变空,语义危险且已废弃并从现代 C++ 移除;shared_ptr 使用控制块和引用计数共享所有权,最后一个引用释放时删除对象。
C++11 有哪些常用新特性?
C++11 有哪些常用新特性?这道腾讯牛客题的关键是围绕“C++11 常用新特性与解决的问题”讲清概念、机制、取舍和边界。C++11 的常用新特性包括 auto、range-for、lambda、右值引用和移动语义、智能指针、nullptr、constexpr、线程库、统一初始化和 unordered 容器。回答时要说这些特性分别解决什么问题。
同公司岗位有 2 条面经记录
如何判断单链表是否有环?
如何判断单链表是否有环?这道腾讯牛客题的关键是围绕“链表判环与快慢指针”讲清概念、机制、取舍和边界。判断链表是否有环,常用 Floyd 快慢指针。慢指针每次走一步,快指针每次走两步;如果链表有环,快指针最终会在环内追上慢指针;如果无环,快指针会先走到 null。
为什么数据库索引常用 B+ 树,B 树、B+ 树和二叉树有什么区别?
为什么数据库索引常用 B+ 树,B 树、B+ 树和二叉树有什么区别?这道腾讯牛客题的关键是围绕“数据库索引为什么常用 B+ 树”讲清概念、机制、取舍和边界。数据库索引常用 B+ 树,是因为它适合磁盘页和范围查询。B+ 树分叉多、树高低,非叶子节点只存 key 和子页指针,叶子节点顺序保存数据或主键并通过链表相连,能减少随机 I/O 并高效范围扫描。
二叉树有哪些基本性质和特点?
二叉树有哪些基本性质和特点?这道腾讯牛客题的关键是围绕“二叉树基本性质”讲清概念、机制、取舍和边界。二叉树每个节点最多有两个孩子,可分为普通二叉树、满二叉树、完全二叉树、平衡二叉树和二叉搜索树等。常见性质包括第 i 层最多 2^(i-1) 个节点,深度为 h 的二叉树最多 2^h-1 个节点。
平衡二叉树失衡后如何通过旋转恢复平衡?
平衡二叉树失衡后如何通过旋转恢复平衡?这道腾讯牛客题的关键是围绕“平衡二叉树旋转维护”讲清概念、机制、取舍和边界。平衡二叉树常以 AVL 为例,要求任一节点左右子树高度差不超过 1。插入或删除导致失衡后,根据 LL、RR、LR、RL 四种情况做单旋或双旋恢复平衡。