设为首页 收藏本站
查看: 91|回复: 0

[经验分享] 最新大厂C++面试真题合集,大厂面试百日冲刺 day7

[复制链接]
累计签到:50 天
连续签到:1 天
发表于 2025-3-7 16:08:48 | 显示全部楼层 |阅读模式
小米C++面试
static 关键字的作用
static关键字在编程中有多种作用:
  • 在类的成员变量前使用,表示该变量属于类本身,而不是任何类的实例。
  • 在类的成员函数前使用,表示该函数不需要对象实例即可调用,且只能访问类的静态成员变量和其他静态成员函数。
  • 在局部变量前使用,表示该变量在函数调用结束后不会被销毁,而是保持其值不变。
  • 在全局变量或函数前使用,限制其作用范围仅在定义的文件内,对其他文件不可见。

extern 关键字的作用
主要作用是:
  • 允许在多个文件中访问同一个全局变量或函数。
  • 表明变量或函数的定义存在于其他文件中。

指针和引用的区别
  • 指针是一个存储变量地址的变量,而引用是一个变量的别名。
  • 指针可以被重新赋值以指向另一个不同的地址,但引用一旦绑定到一个对象,就不能被改变指向另一个对象。
  • 指针可以是nullptr或指向任意地址的值,而引用必须被初始化且不能为nullptr
  • 指针使用*操作符来访问目标变量的值,引用直接像普通变量一样使用。

c++内存分配的方式
  • 静态存储:编译时分配,如全局变量、静态变量。
  • 自动存储:函数内部声明的变量,如局部变量,随着函数调用创建和退出销毁。
  • 动态存储:使用newdelete进行手动分配和释放的堆内存。

静态内存分配和动态内存分配的区别,静态分配的优缺点
静态内存分配与动态内存分配的区别:
  • 静态内存分配在编译时就确定了存储空间的大小和生命周期,通常用于全局变量和静态局部变量。
  • 动态内存分配在运行时根据需要动态地分配和释放内存,通常使用newdelete操作符。

静态内存分配的优点:
  • 管理简单,没有额外的运行时开销。
  • 生命周期长,随程序启动创建,程序结束时销毁。

静态内存分配的缺点:
  • 灵活性低,必须提前预知并定义所需内存大小。
  • 可能会导致内存浪费,若预分配内存未被充分利用。

互斥锁和自旋锁的区别
  • 互斥锁:当一个线程获得互斥锁后,其他尝试获得该锁的线程会被挂起(阻塞),直到锁被释放。适用于线程执行时间较长的情况。
  • 自旋锁:当一个线程尝试获取自旋锁而锁已被占用时,线程会循环等待(自旋),直到锁被释放。适用于线程执行时间非常短的情况,避免了线程挂起的开销。

线程和进程的区别
进程是操作系统进行资源分配和调度的基本单位,每个进程拥有独立的地址空间和系统资源。线程是进程中的执行单元,是CPU调度的基本单位,同一进程中的线程共享该进程的地址空间和资源。
如何进行线程切换的?

线程切换是操作系统的调度器通过保存当前线程的状态到线程的上下文中,然后加载另一个线程的上下文并恢复其状态,这样CPU就可以继续执行新线程的处理。
线程切换需要保存的上下文、保存在哪里?

线程切换时需要保存的上下文包括CPU的寄存器状态、程序计数器、堆栈指针等。这些信息通常保存在系统内存中,具体位置由操作系统决定,通常是在对应线程的内核栈或者线程的控制块中。
IP寄存器的作用,是通用寄存器吗?

IP寄存器,即指令指针寄存器(在x86架构中称为EIP,在x64架构中称为RIP),其作用是存储下一条要执行的指令的地址。它不是通用寄存器,因为它有特定的用途,即指向程序的下一条指令,而不能用于通用数据存储或算术逻辑运算。
LR寄存器了解吗

LR寄存器是链接寄存器,在ARM架构中常见。它用于存储子程序调用返回后执行的下一条指令的地址。当进行函数或子程序调用时,返回地址会存入LR寄存器。这样,在子程序执行完毕后可以通过LR寄存器找到并返回到调用点继续执行。LR寄存器不是通用寄存器。
线程有哪几种状态?

创建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting)和终止(Terminated)。
自旋锁等待时线程处于什么状态?互斥锁呢?

自旋锁等待时线程处于运行状态,因为它在忙等待,不停地检查锁是否可用。互斥锁等待时,线程处于阻塞状态,不占用CPU资源,直到锁成为可用状态。
讲一下你了解的进程调度算法

进程调度算法是决定哪个进程将接下来使用CPU的规则集合。常见的进程调度算法包括:
  • 先来先服务(FCFS):按照进程到达的顺序进行调度。
  • 最短作业优先(SJF):先执行预计运行时间最短的进程。
  • 优先级调度:优先执行优先级最高的进程。
  • 轮转调度(Round Robin,RR):每个进程分配时间片,轮流执行。
  • 多级反馈队列(Multilevel Feedback Queue,MFQ):动态调整进程的优先级和时间片。

讲一下c++智能指针
  • unique_ptr:独占所有权,不支持复制和赋值操作。
  • shared_ptr:引用计数机制,多个智能指针可以共享同一个对象。
  • weak_ptr:不对对象的所有权计数,用于解决shared_ptr的循环引用问题。

shared_ptr的底层实现了解吗?
shared_ptr的底层实现通常包括两个主要部分:
  • 控制块:存储引用计数和指向动态分配的对象的指针。
  • 智能指针对象:包含对控制块的引用。

讲一下lambda表达式,lambda表达式优点和应用场景
Lambda表达式是C++中的匿名函数,让你能够写出内联的、可调用的代码块,可以捕获并使用其所在作用域中的变量。其优点包括:
优点:
  • 简洁:减少了编写单独函数或函数对象的必要。
  • 方便:可直接在需要的地方定义和使用。
  • 灵活:能够捕获所在作用域的变量。

应用场景:
  • 作为回调函数,例如给线程或算法传参。
  • 在STL算法中,用于自定义排序准则或操作。
  • 用于定义局部的小功能块,避免编写多余的函数。

map 和 unordered_map 区别
mapunordered_map的区别:
  • map


    • 基于红黑树实现。
    • 元素按键自动排序。
    • 查找、插入和删除操作的时间复杂度为O(log n)。


  • unordered_map


    • 基于哈希表实现。
    • 元素不排序,按哈希值存储。
    • 平均情况下查找、插入和删除操作的时间复杂度为O(1),最坏情况为O(n)。


unordered_map 实现了解吗?
unordered_map通过哈希表实现。它使用一个哈希函数将键映射到桶中,并在桶内使用链表处理哈希冲突。当发生冲突时,即多个元素映射到同一桶,这些元素会以链表形式存储在该桶中。这样可以通过键的哈希值快速访问到对应的桶,从而进行元素的查找、插入和删除。
哈希冲突是指什么?

哈希冲突是指不同的键通过哈希函数计算后得到相同的哈希值,因此它们被映射到同一个哈希表的存储位置上。
讲一下TCP

三次握手TCP三次握手过程:
  • 客户端发送一个含有SYN标志的数据包给服务器,请求连接。
  • 服务器收到SYN包,回应一个含有SYN/ACK标志的数据包,表示确认。
  • 客户端收到SYN/ACK包,再发送一个ACK包给服务器,完成连接建立。

http协议和TCP协议的关系
HTTP协议运行在TCP协议之上,使用TCP提供的可靠传输服务来确保数据正确无误地从客户端传输到服务器,或者反过来。
https协议和http协议的关系

mapunordered_mapHTTPS是HTTP协议的安全版本,它通过SSL/TLS协议提供加密处理数据的功能,保证数据传输的安全性和完整性。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-1005694-1-1.html 上篇帖子: 最新大厂C++面试真题合集,大厂面试百日冲刺 day6 下篇帖子: 【大厂C++面试必刷手册】Day8:内存管理×虚函数×进程调度...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表