C/C++常考面试题(一)

这算是一个系列吧,记录一下在准备秋招期间,所准备的C++面试题,望秋招顺利。所有的面试题均来源于各大论坛,网络。

C/C++常考面试题(一)

  1. 常用的C++数据结构有哪些?

    • vector,序列式容器,相当于数组,顺序表;
    • list, 双向链表
    • deque,双端队列,queue,队列,stack,栈,priority_queue,优先级队列
    • map,set,multimap,multiset
    • hashtable,散列表
    • 图,树等等
  2. 什么是虚函数,多继承有什么问题

    • 被virtual关键字修饰的成员函数,就是虚函数
    • 多继承可能会发生重复继承的情况,从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致的问题,二义性的问题。解决办法虚继承
  3. 为什么要用虚析构函数,什么是多态

    • 在多态中,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生
    • 多态可以简单地概括为“一个接口,多种方法”,在程序运行的过程中才决定调用的函数。多态性是面向对象编程领域的核心概念。多态性是允许你将父对象设置成为和它的一个或更多的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单地说就是一句话,允许将子类类型的指针赋值给父类类型的指针。多态性在C++中都是通过虚函数(Virtual Function)实现的。
  4. 进程和线程的区别和联系

    • 定义

      • 进程是程序的一次执行,是程序在一个数据集合上运行的过程,是一个动态概念,是系统进行资源分配和管理的基本单位。
      • 线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位,也称为轻型进程,是可执行的实体单元。
    • 区别

      • 地址空间和其他资源:进程间相互独立,同一进程的各线程间共享。某进程的线程在其他进程中不可见。
        • 每一个进程都有一个自己的地址空间,即进程空间。进程空间的大小只与机器位数有关。一个进程崩溃后,在保护模式下不会对其他进程产生影响。而线程只是一个进程中的不同执行路径,每一个线程有自己的堆栈和局部变量,但是没有自己独立的地址空间,每个线程共享其所属进程的资源。一个线程死掉等于整个进程死掉,所以多进程的程序要比多线程的程序健壮。
      • 通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信,但是需要相关同步和互斥手段的辅助,以保证数据的一致性。
      • 调度和切换:线程的上下文切换比进程的上下文切换快得多。
      • 一个程序至少有一个进程,一个进程至少有一个线程
      • 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。