C++面试

本文介绍了C++面试中常见的线程池设置、任务执行、RAII、完美转发、智能锁的区别、多态原理等技术问题,详细解答了每个问题的关键点,帮助面试者理解和掌握C++的核心概念。
摘要由CSDN通过智能技术生成

目录

1.线程池的数量一般怎么设置?IO密集和CPU密集

2.来了一个新的任务,线程池是怎么工作的?

3.RAII指?在C++11中有什么用了RAII

4.完美转发介绍一下 去掉std::forward会怎样?

5.介绍一下unique_lock和lock_guard区别?

6.shared_lock

7.条件变量的wait

8.多态介绍一下

9.虚函数原理 虚表是什么时候建立的

10.为什么要把析构函数设置成虚函数?

11.动态多态和静态多态有什么?

12.C代码中引用C++代码有时候会报错为什么?


1.线程池的数量一般怎么设置?IO密集和CPU密集

线程池的数量设置对系统性能和资源占用有很大的影响。一般来说,线程池的数量要根据系统的特点、任务的类型、系统负载和可用资源等因素来考虑,具体设置方法如下:

对于I/O密集型任务,线程的主要时间都用在等待I/O操作的完成上,CPU的利用率很低,可以设置较多的线程数,并且线程数可大于物理CPU总数。根据经验,线程数可设置为2 * CPU核数 + 1左右。

对于CPU密集型任务,线程的时间大部分用在CPU计算上,线程数不能设置过多,否则系统会出现过多的线程切换和竞争,导致CPU利用率下降。一般来说,线程数应该小于等于CPU核心数。

但是,线程池的数量也不是越大越好,因为线程池数量过多也会占用大量的系统资源,甚至影响系统的稳定性。所以,在设置线程池数量时,还需结合具体应用场景进行优化。

2.来了一个新的任务,线程池是怎么工作的?

线程池是由一组多个线程组成的资源池,它可以用来执行并发的任务,从而提高程序的运行效率。具体地说,线程池会在程序启动时预先创建一定数量的线程,并将这些线程保存在一个池中;当需要执行任务时,线程池会从池中取出一个空闲的线程,并将任务分配给其执行;当任务执行完成后,线程将会返回池中等待下一个任务的到来。

使用线程池可以避免反复地创建和销毁线程带来的开销,节约系统资源,并且可以提高系统的并发性能。但是线程池的数量设置需要根据任务类型、系统负载和可用资源等因素来考虑,过多或过少的线程池都会影响系统的执行效率。

3.RAII指?在C++11中有什么用了RAII

RAII是Resource Acquisition Is Initialization的缩写,指的是资源的获取与释放应该在对象的构造和析构时完成。在C++11中,RAII被广泛使用,特别是在管理动态内存和文件句柄等资源方面。使用RAII可以避免内存泄漏和资源泄漏的问题,使得代码更加可靠和安全。通过使用标准库中的智能指针、容器等封装类,可以更加方便地使用RAII。同时,C++11还引入了移动语义,进一步简化了RAII的使用。

4.完美转发介绍一下 去掉std::forward会怎样?

完美转发是在 C++11 中引入的一种技术,用于将函数传递的参数(包括左值和右值)转发到另一个函数中,同时保持参数的原始类型和值类别。

在使用完美转发时,通常需要使用 std::forward 函数模板来实现参数转发。该函数模板具有以下特点:

  • 对于右值参数,std::forward 返回右值引用。
  • 对于左值参数,std::forward 返回左值引用。

如果不使用 std::forward 来实现参数转发,而是直接使用对应的引用类型来传递参数,则会出现参数类型和值类别被截断的情况,导致代码出现编译错误或者运行时错误。

例如,考虑以下示例代码:

void foo(int& x)
{
    std::cout << "Lvalue: " << x << std::endl;
}

void foo(int&& x)
{
    std::cout << "Rvalue: " << x << std::endl;
}

template <typename T>
void bar(T&& x)
{
    foo(x);
}

int main()
{
    int i = 5;
    bar(i);
    bar(10);
    return 0;
}

在 bar 函数内部,我们试图将传递给 bar 的参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值