• 中兴面试


    一、C++

    1. 多态是什么,多态的作用?

    2. 纯虚函数是什么?

    3. 继承含有纯虚函数的父类,子类能否实例化?

    如果父类中存在纯虚函数,子类继承父类时,必须重写父类的纯虚函数,函数名、返回类型、参数个数和类型都不能改。若父类中的虚函数自己有定义,子类也可以不重写。之后便可以实例化子类。

    4. 构造函数是否可以用private修饰,如果可以,会有什么效果?

    1)如果一个类的构造函数只有一个且为private,这是可以编译通过的;

    2)如果一个类的构造函数只有一个且是private,如果类的内部没有专门创建实例的代码,则是无法创建任何实例的;

    3)如果一个类的构造函数只有一个且是private,如果类的内部有专门创建实例的代码,则只能创建一个或多个实例(根据类内部声明的成员对象个数来定);

    4)如果一个类的构造函数不止一个,private 构造函数如果参数 为void(无参),则子类无法编译;换言之,如果一个类构造函数只有private且存在子类,则无法编译,除非父类构造函数为public。

     此处注意:静态成员变量必须要定义,要初始化;即在内部声明之后,外部必须要初始化。

    5. 子类的指针能否转换为父类的指针?父类指针能否访问子类成员?

    1)当自己的类指针指向自己类的对象时,无论调用的是虚函数还是实函数,其调用的都是自己的:

    2)当指向父类对象的父类指针被强制转换成子类指针时候,子类指针调用函数时,只有非重写函数是自己的,虚函数是父类的;

    3)当指向子类对象的子类指针被强制转换成父类指针的时候,也就是父类指针指向子类对象,此时,父类指针调用的虚函数都是子类的,而非虚函数都是自己的;

    定义一个父类对象,将该父类对象的指针强制类型转换为子类指针,并赋给一个子类指针,则:该子类指针将指向该父类对象,但是其this指针仍然是指向子类的指针。当该指针调用虚成员函数时,将按照对象的内存布局(指向虚函数表的指针存储在该对象的前四个字节)调用父类虚成员函数。当该指针调用普通成员函数时,将通过this指针调用位于代码段的该子类的成员函数。

    总结成一句话就是:当父类子类有同名非虚函数的时候,调用的是转换后的指针类型的函数;

             当父类子类有同名虚函数的时候呢,调用的是指针转换前指向的对象类型的函数。

    另外:子变父,向上转换是安全的,父类的方法,子类肯定有
              父变子,向下转换不安全,子类的方法,父类可不一定有()

    6. 继承有哪些方式,各自的特点是什么?

    1)public(公有继承):继承时保持基类中各成员属性不变,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。

    2)private(私有继承):继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。

    3)protected(保护性继承):继承时基类中各成员属性均变为protected,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。

    7. 动态绑定是什么,与重载有什么区别?

    一. 重载(overload)

    1. 重载指的是函数具有的不同的参数列表,而函数名相同的函数。重载要求参数列表必须不同,比如参数的类型不同、参数的个数不同、参数的顺序不同。

    2. 如果仅仅是函数的返回值不同是没办法重载的,因为重载要求参数列表必须不同。

    3. 程序是根据参数列表来确定具体要调用哪个函数的。

    二. 覆盖(重写override)

    1. 覆盖是存在类中,子类重写从基类继承过来的函数。但是函数名、返回值、参数列表都必须和基类相同。

    2. 当子类的对象调用成员函数的时候,如果成员函数有被覆盖则调用子类中覆盖的版本,否则调用从基类继承过来的函数

    3. 如果子类覆盖的是基类的虚函数,可以用来实现多态。

        当子类重新定义基类的虚函数之后,基类指针可以根据赋给它不同子类指针动态的调用子类中的虚函数,可以做到动态绑定,这就是多态。

    4. 子类覆盖基类函数的特征

    (1)函数名相同、参数相同、返回值相同

    (2)如果基类函数是虚函数,子类覆盖虚函数可以实现多态

    区别:

    1) 重载要求函数名相同,但是参数列表必须不同,返回值可以相同也可以不同。

          覆盖要求函数名、参数列表、返回值必须相同。

    2) 在类中重载是同一个类中不同成员函数之间的关系

          在类中覆盖则是子类和基类之间不同成员函数之间的关系

    3.)重载函数的调用是根据参数列表来决定调用哪一个函数

          覆盖函数的调用是根据对象类型的不同决定调用哪一个

    4.)在类中对成员函数重载是不能够实现多态

          在子类中对基类虚函数的覆盖可以实现多态

    静态绑定:绑定的是对象的静态类型,某特性(比如函数)依赖于对象的静态类型,发生在编译期。
    动态绑定:绑定的是对象的动态类型,某特性(比如函数)依赖于对象的动态类型,发生在运行期。

    对象的静态类型:对象在声明时采用的类型。是在编译期确定的。
    对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。

    8. 动态链接与静态连接?

    1. 什么是静态链接、动态链接

    静态链接:静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。

    动态链接(Dynamic Linking):相对于静态链接而言,要等到程序运行时再将组成程序的目标文件进行链接的过程。

    2.静态链接、动态链接的优缺点

    静态链接

    优点

    不同的程序模块可以独立开发和测试,最后链接在一起供用户使用,促进程序开发效率;

    缺点

    (1) 浪费空间  这是由于多进程情况下,每个进程都要保存静态链接函数的副本

    (2)更新困难  当链接的众多目标文件中有一个改变后,整个程序都要重新链接才能使用心得版本

    动态链接

    优点

    (1)当系统多次使用同一个目标文件时,只需要加载一次即可,节省内存空间

    (2)不同数据间的数据和指令访问都集中在了同一个共享模块,可以减少物理页面的换入换出,增加CPU的缓存命中率

    (3)程序升级变得容易  当升级某个共享模块时,只需要简单的将旧目标文件替换掉,程序下次运行时,新版目标文件会被自动装载到内存并链接起来,即完成升级

    (4)插件的引入  程序运行时可以动态选择加载的各种模块,即选择插件

    (5)加强程序的兼容性  动态链接库相当于在程序和操作系统间增加一个中间层,消除程序对不同平台之间的依赖性

    缺点

    (1)当程序依赖的某个模块更新后,如果新旧模块接口不兼容,将导致整个程序无法运行

    (2)导致性能损失  动态链接把链接的过程推迟到装载的时候,那么程序每次被加载时都要进行重新链接,但是导致的性能损失与节省的空间和灵活性相比,还是值得的!

    9. 静态连接库与动态链接库的区别?

    静态链接库和动态链接库概念:
    (1)静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;
    (2)动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。
    区别:
    (1)静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。
    (2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

    10. const int *p; int const *p; int *const p; 有什么不同?

    11. new和delete对象时发生了什么?

    new:(1)调用::operator new(相当于malloc),分配一快内存;

               (2)检查第一步内存分配的结果,如果未被正常分配(比如系统资源耗尽),抛出异常,直接返回,接下来的步骤不会执行;

               (3)调用构造函数
    delete:(1)检查指定要删除的内存,如果已经为空,直接返回,接下来的步骤不会执行;

                  (2)调用析构函数;

                  (3)调用::operator delete(相当于free),释放内存

    12. Linux中,.a与.so文件文件是什么,Windows中的.DLL和.lib分别是什么,有什么区别?

    Linux下的静态库以.a结尾(Windows下为.lib)
    Linux下动态库以.so结尾或.so.y结尾,其中y代表版本号(Windows下为.dll)
    并且,Linux下库必须以lib开头,用于系统识别。
    静态库必要的目标代码是在对程序编译的时候被加入到程序中,而运行是不再需要.a的库了;

    而动态库是在运行时转载,所以动态链接的可执行代码比静态链接的可执行代码小得多。

    13. 对于Linux系统是否熟悉?

    二、项目介绍

    三、图像处理

    1. 傅里叶变换?

    直观上说,频率就是变化的快慢。傅立叶变换,把图像从空域变换到频域,在频率域中,高频分量表示图像中灰度变换比较快的那些地方,比如物体的边缘就是灰度的突然变化,所以物体边缘就是高频分量。而物体内部比较平坦的区域,灰度基本没有变化,对应的就是低频分量。         比如低通滤波只让低频分量通过,往往就是使图像模糊,因为边缘信息被去除了。

    2. 图像增强有哪些算法?

    空间域图像增强:直方图处理,灰度变换,平滑空间滤波器,锐化空间滤波器

    频域图像增强算法:傅里叶变换,平滑频域滤波器,频域锐化滤波器,同态滤波器 

    3. 图像膨胀和腐蚀?

        作图像腐蚀处理时,如果结构元素中的所有黑色点与它对应的大图像素点完全相同,该点为黑色,否则为白色。

        作图像膨胀处理时,如果结构元素中只要有一个及以上黑色点与它对应的大图像素点相同,该点为黑色,否则为白色。

        也就是说,如果结构元素中的所有黑色点与它对应的大图像素点没有一个相同,该点为白色,否则为黑色。结构元素中的所有黑色点与它对应的大图像素点没有一个相同,说明大图的这些像素点都是白色的,假如二值图的骨架为白色点,这个对黑色骨架二值图的膨胀处理恰好是对白色骨架二值图的腐蚀处理。同理,对黑色骨架二值图的腐蚀处理也就是对白色骨架的膨胀处理。

    4. 图像的锐化?

    在图像增强过程中,通常利用各类图像平滑算法消除噪声,图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像边缘信息也主要集中在其高频部分。这将导致原始图像在平滑处理之后,图像边缘和图像轮廓模糊的情况出现。为了减少这类不利效果的影响,就需要利用图像锐化技术,使图像的边缘变得清晰。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变得清晰。微分运算是求信号的变化率,由傅立叶变换的微分性质可知,微分运算具有较强高频分量作用。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。但要注意能够进行锐化处理的图像必须有较高的性噪比,否则锐化后图像性噪比反而更低,从而使得噪声增加的比信号还要多,因此一般是先去除或减轻噪声后再进行锐化处理。

           图像锐化的方法分为高通滤波和空域微分法。图像的边缘或线条的细节(边缘)部分 与图像频谱的高频分量相对应,因此采用高通滤波让高频分量顺利通过,并适当抑制中低频分量,是图像的细节变得清楚,实现图像的锐化,由于高通滤波我们在前面频域滤波已经讲过,所以这里主要讲空域的方法——微分法。

    5. 常用的滤波方法有哪些?

    高斯、中值、均值滤波

    6. 中值滤波的作用是什么?

    中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,
    它对脉冲干扰级椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊。

    7. 高斯滤波的作用是什么?(1) 从空间域讲,可以理解为带权重的空间平均;(2) 从频率域讲,是进行了一次低通滤波;

    图像处理中,常用的滤波算法有均值滤波、中值滤波以及高斯滤波等。均值滤波使用模板内所有像素的平均值代替模板中心像素灰度值,这种方法易收到噪声的干扰,不能完全消除噪声,只能相对减弱噪声;中值滤波计算模板内所有像素中的中值,并用所计算出来的中值体改模板中心像素的灰度值,这种方法对噪声不是那么敏感,能够较好的消除椒盐噪声,但是容易导致图像的不连续性。高斯滤波对图像邻域内像素进行平滑时,邻域内不同位置的像素被赋予不同的权值,对图像进行平滑的同时,同时能够更多的保留图像的总体灰度分布特征。

  • 相关阅读:
    【洛谷P2660烤鸡】
    cogs448
    排队打水
    洛谷U36590搬书
    NOIP2012借教室
    归并排序模版
    NOIP2015神奇的幻方
    NOIP2006能量项链
    NOIP2003加分二叉树
    NOI1995石子合并&多种石子合并
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/7531810.html
Copyright © 2020-2023  润新知