面经整理:C++后端面试题(一)百度提前批

题作者:时光微痛 链接:https://www.nowcoder.com/feed/main/detail/6e4398bc9bf4469ba2641b73d1879881?sourceSSR=search

如果一个线程出现了问题怎么通知主线程,发生异常了数据库事怎样处理,数据还要入表吗。

子线程发生问题时,可以通过条件变量、消息队列、或std::promise等机制通知主线程。
数据库事务处理时,如果发生异常,通常会选择回滚以保证数据一致性。
是否继续将数据入表,需要根据具体的异常类型和业务逻辑来决定。

说一下左值与右值,c++中有哪些设计体现了右值操作,右值有啥用处。

左值是指在程序运行时具有持久存储地址的对象,可以对其进行取地址操作

右值是指不具有持久存储地址的值,通常是表达式的结果、字面量、或者临时对象。右值通常不能对其取地址。

体现右值操作:

右值引用:右值引用是专门用于绑定右值的引用类型,允许我们捕获和操作即将销毁的临时对象。
移动语义:通过右值引用,C++允许我们从临时对象中“移动”资源,而不是“拷贝”,从而提高性能。
std::move:用于将左值强制转换为右值引用,从而明确表示可以移动资源。
右值的用处:在处理大对象或资源时避免不必要的拷贝操作,从而显著提高程序性能。可以实现对象资源的“窃取”,从而高效地管理内存、文件句柄等资源。

GDB调试的场景题。一个程序在运行过程中,某个线程CPU占用资源满了,我要具体怎么处理。

  • 使用命令确认高CPU占用的线程ID
  • 使用GDB附加到正在运行的进程
  • 获取线程列表,查找CPU占用率高的线程,找到相应的GDB线程ID。
  • 在GDB中使用以下命令切换到高CPU占用的线程
  • 使用bt(backtrace)命令查看当前线程的调用栈,分析线程(backtrace命令查看当前线程的调用栈)
  • 动态调试、诊断问题、重新运行测试

线程已经跑起来了,怎么使用GDB查找错误。

  • 找到程序的进程ID(PID)
  • 使用GDB附加到该进程
  • 附加后,GDB会暂停程序执行,此时你可以开始调试
  • 使用info threads命令查看所有运行中的线程,找到哪个线程可能出了问题
  • 使用thread 命令切换到该线程
  • 使用backtrace(或缩写bt)命令查看当前线程的调用栈
  • 检查局部变量、设置断点、单步调试
  • 根据GDB调试获得的信息,分析问题原因

多线程,某一个线程出错了,GDB怎么定位。

  • 程序已经在运行,使用ps命令查找进程ID(PID),使用GDB附加到该进程(进程崩溃,可以直接启动GDB并传入可执行文件和崩溃时生成的core文件)
  • 查看线程列表,info threads命令
  • 使用thread 命令切换到你怀疑有问题的线程
  • 使用backtrace命令查看当前线程的调用栈
  • 使用info locals命令查看当前函数的局部变量
  • 设置断点动态调试

(算法)怎样高效的将(float 数组转换成字符串,字符串转换为float数组)

将 float 数组转换为字符串通过 std::ostringstream 或手动拼接字符串。将字符串转换回 float 数组时,可以使用 std::istringstream 来高效地解析字符串。

描述一下死锁情况

死锁是指在多线程或多进程环境中,两个或多个线程或进程互相等待对方释放资源,导致它们都无法继续执行的情况。

死锁只有同时满足以下四个条件才会发生:

  • 互斥条件;每个资源要么已经分配给了某个线程,要么就是可用的,即资源只能被一个线程使用。
  • 持有并等待条件;一个线程至少已经持有了一个资源,同时还在等待获取其他被其他线程持有的资源。
  • 不可剥夺条件;资源不能被强制剥夺;它们只能由持有它的线程显式释放。
  • 环路等待条件;存在一个线程等待链,线程A等待线程B持有的资源,线程B等待线程C持有的资源,线程C又等待线程A持有的资源,形成一个环路。

C++后端八股文附面试宝典:https://www.bilibili.com/video/BV1woYLeoEqE/?share_source=copy_web&vd_source=372dd700b4e05101f6e1d19c12fe5047

C++后端开发教程:https://www.bilibili.com/video/BV14

C/C++后端开发学习资料、大厂面试题、教学视频和 T9学习路线图,
↓↓↓↓↓↓见下面文章底部点击免费领取↓↓↓↓↓↓

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值