深圳斯马顿电气有限公司 C++ 软件开发 一面 面经

1. 进程和线程的本质区别是什么?它们在资源分配和调度上有何不同?

参考答案:进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位。主要区别包括:

  • 资源开销:进程拥有独立的地址空间、文件描述符等资源,创建和切换开销大;线程共享进程资源,开销小
  • 通信方式:进程间通信需要IPC机制(管道、消息队列、共享内存等);线程可直接访问共享变量
  • 独立性:进程间相互独立,一个进程崩溃不影响其他进程;同一进程内的线程共享资源,一个线程崩溃可能导致整个进程终止
  • 地址空间:每个进程有独立的虚拟地址空间;同一进程的线程共享地址空间

2. 虚函数的实现机制是什么?虚函数表存储在哪里?

参考答案:虚函数通过虚函数表(vtable)和虚函数指针(vptr)实现多态:

  • 每个包含虚函数的类都有一个虚函数表,存储该类所有虚函数的地址
  • 每个对象实例包含一个虚函数指针,指向其类的虚函数表
  • 虚函数表通常存储在只读数据段(.rodata),虚函数指针存储在对象内存的起始位置
  • 调用虚函数时,通过对象的vptr找到vtable,再根据函数索引找到实际函数地址
  • 派生类会继承基类的vtable,并覆盖被重写的虚函数地址

3. 解释C++中的左值和右值,以及移动语义的作用

参考答案:

  • 左值(lvalue):有明确内存地址、可以取地址的表达式,如变量名、解引用指针等
  • 右值(rvalue):临时对象或字面量,没有持久的内存地址,如函数返回的临时对象、算术表达式结果
  • 移动语义通过右值引用(&&)实现资源的转移而非拷贝: 避免深拷贝开销,直接"窃取"临时对象的资源移动构造函数和移动赋值运算符接受右值引用参数std::move可将左值转换为右值引用,显式触发移动语义
  • 典型应用场景:容器元素的插入、返回

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

C++八股文全集 文章被收录于专栏

本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。

全部评论

相关推荐

03-11 20:19
已编辑
门头沟学院 Java
太压力了,面了2个多小时,本菜比已经被拷打的瑟瑟发抖面完两个小时后通知过了1.算法题三道(1)leetcode124 二叉树中最大路径和hard题 因为不久前才刷过撕出来了,又来了一道(2)leetcode 300 最长递增子序列变种除了递增之外还加了一个权重因素,但是思路没变,dp就行(3)寻找词汇库里符合固定长度前缀的匹配单词应该是他们自己题库的题。给了一串单词列表,然后又给了一个单词,一个下标,根据这个下标的前缀去单词列表里面找到所有匹配的单词再返回思路是创建一个单词前缀树,然后根据树找,但是可能是构件树数有问题没撕出来2.全方位项目拷打基本没有问八股,全部都是项目企业场景题,哎哟我操,完全不会。我就纯八股战士,结果没想到一道八股都没问反正尽可能把企业场景往八股上引吧。。1. 微服务多点部署其中一个宕机了怎么办2. 要是mq占据大量CPU该怎么排查?MySQL占据大量CPU该怎么排查?3. 假如说让你实现视频点赞功能,你打算怎么设计?讲讲思路(我知道多级缓存,但是碰巧没背……寄)4. Redis延迟双删是什么,分布式锁,哨兵模式5. MySQL到es同步的延迟该怎么优化6. Rabbit mq的队列是怎么实现的?(这个完全没整明白,可能是队列的底层结构? 反正我硬扯的讲了一下rabbit mq的架构)还扯了很多,但是往后完全就慌了),记住的是这些
查看9道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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