• 三句话回答C/C++面试题


    1 inline函数的好处

    节省调用开销;相对于宏展开,inline发生在编译阶段,会做类型检查。

    2 指针函数与函数指针的区别

    指针函数是指带指针的函数,即本质是一个函数,其返回类型是某一类型的指针;函数指针是指向函数的指针变量,即本质是一个指针变量。

    3 左值与右值的区别

    左值指的是可以取地址的变量,左值与右值的根本区别在于能否获取内存地址。

    4 C++中有malloc/free,为什么还需要new/delete?

    new/delete会调用构造/析构函数,适合于类类型对象的创建与销毁。

    5 C++空类默认有哪些成员函数?

    默认构造函数、析构函数、复制构造函数、赋值函数。

    6 重载(overload)和重写(override)的区别

    重载:在相同作用域中存在多个同名的函数,这些函数的参数表不同;

    重写:派生类重新定义基类虚函数。

    7 main函数执行之前会执行什么?

    全局对象的构造函数。

    8 进程间如何通信?

    信号、信号量、消息队列、共享内存。

    9 经常要操作的内存分为那几个类别?

    栈、堆、全局区(静态区)、字符串常量区、程序代码区。

    10 有哪几种情况初始化方式只能用initialization list而不能用assignment?

    当类中含有const、reference成员变量;基类的构造函数。

    11 C++是不是类型安全的?

    不是,两个不同类型的指针之间可以强制转换(reinterpret_cast)。

    12 C语言中volatile关键字的作用?

    volatile本意是可变的,使用volatile声明的变量要求在被系统访问时总是重新从它所在的内存读取数据,使得编译器对访问该变量的代码不再进行优化,从而可以提供对特殊地址的稳定访问。

    13 面向过程与面向对象的区别?

    面向过程:分析出解决问题所需要的步骤,然后用函数依次实现这些步骤,使用的时候依次调用;性能比面向对象高,但维护成本高。

    面向对象:将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据;借助于封装、继承、多态性等特性,后期维护成本更低,更方便复用和扩展,但性能较差。

    14 内存碎片是如何产生的?

    内存碎片指的是系统中不可用的空闲内存,一般是由于内存对齐导致的。

    15 new operator 和operator new 的区别?

    new operator实际上先后调用了operator new和constrctor两个函数。

    16 vector与deque的区别?

    1)deque访问容器元素的效率比vector容器慢很多;
     原因在于deque要跨内存块来访问,而vector只是使用一个内存块,不用跨内存的操作。vector容器相当于一个可以动态分配的数组。
    2)扩充容器容量的方面deque比vector的效率高很多;
     deque是申请一个小的内存块,然后把新申请的内存块与其它的deque内存块整合起来。
     vector是申请一个比原先更大的新内存块,把原vector里面的数据复制到新的大内存块里面,然后销毁原先的内存块。所以,在容量扩充方面,deque比vector高效,而且内存利用率也高。
    3)vector不可以收缩,deque自动收缩;
     vector不支持把容器的容量调小的操作,即容量需求小于实际容量的情况不会有任何操作。而deque因为它是有很多小内存块的组成的,所以有空闲的内存块时,会销毁空闲的内存块,但不会影响deque里面已有的数据。

  • 相关阅读:
    目标检测之YOLOv3
    残差网络(ResNet)
    FPN详解
    YOLOv2/YOLO 9000深入理解
    批归一化(BN)
    全卷积网络FCN
    基于深度学习的目标检测算法综述
    目标检测两个基础部分——backbone and detection head
    YOLOv1 深入理解
    内置模块
  • 原文地址:https://www.cnblogs.com/pepetang/p/11595355.html
Copyright © 2020-2023  润新知