C/C++面试题收集

(李飞飞的IMAGENET,何凯明的RCNN/ SPP / MaskRCNN,贾扬清Caffe / Fair,任晓枫KITTI / Graphics,汤晓鸥Facial Descriptors)

《机器学习与模式识别》、《剑指offer》、《计算机视觉算法与应用》

1. 问:构造函数的作用?并把构造函数的定义格式写出来。

构造函数用于解决类中的对象初始化的问题 
构造函数是一类特殊的函数,与其他的成员函数不同的是构造函数构造函数不需要用户来调用它,而是建立对象的时候自动的执行

https://blog.csdn.net/tiantang46800/article/details/6938762

2. 问:谈谈对多态的理解。

多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。   

C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。(这里我觉得要补充,重写的话可以有两种,直接重写成员函数和重写虚函数,只有重写了虚函数的才能算作是体现了C++多态性)而重载则是允许有多个同名的函数,而这些函数的参数列表不同,允许参数个数不同,参数类型不同,或者两者都不同。编译器会根据这些函数的不同列表,将同名的函数的名称做修饰,从而生成一些不同名称的预处理函数,来实现同名函数调用时的重载问题。但这并没有体现多态性。   

多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的,就是说地址是早绑定的。而如果函数调用的地址不能在编译器期间确定,需要在运行时才确定,这就属于晚绑定。   那么多态的作用是什么呢,封装可以使得代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。也就是说,不论传递过来的究竟是那个类的对象,函数都能够通过同一个接口调用到适应各自对象的实现方法。   

最常见的用法就是声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。如果没有使用虚函数的话,即没有利用C++多态性,则利用基类指针调用相应的函数的时候,将总被限制在基类函数本身,而无法调用到子类中被重写过的函数。因为没有多态性,函数调用的地址将是一定的,而固定的地址将始终调用到同一个函数,这就无法实现一个接口,多种方法的目的了。 

https://blog.csdn.net/Hackbuteer1/article/details/7475622

3. 问:虚函数和纯虚函数的区别。

定义一个函数为虚函数,不代表函数为不被实现的函数。 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数,才代表函数没有被实现。 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

https://blog.csdn.net/Hackbuteer1/article/details/7558868

4. 问:静态链接库和动态链接库的区别。

5. 问:const放在函数的前中后分别有什么区别。

6. 问:vector如何实现动态增长,如何实现申请一大片连续空间;

关于vector,简单地讲就是一个动态数组,里面有一个指针指向一片连续的内存空间,当空间不够装下数据时会自动申请另一片更大的空间,然后把原有数据拷贝过去,接着释放原来的那片空间,新空间为原空间大小的2倍;当释放或者说是删除里面的数据时,其存储空间并不会释放,仅仅只是清空了里面的数据。 

https://blog.csdn.net/mfcing/article/details/8746256

https://blog.csdn.net/c_base_jin/article/details/51099807

7. 问:链表,键值,堆栈分段存储;

https://blog.csdn.net/amork/article/details/7258216

8. 问:全局与局部静态变量区别;

1.全局静态变量只能被当前源文件引用,不能被工程里其它源文件引用。 除了这点特殊,其它与普通的全局变量一样。

2.局部静态变量,只执行一次初始化,只能被所在函数引用,函数执行 完毕,变量仍存在,生存周期贯穿整个程序。

9. 问:explicit关键字的作用;

C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生,声明为explicit的构造函数不能在隐式转换中使用。

C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 

1 是个构造;2 是个默认且隐含的类型转换操作符。

所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象。

这样看起来好象很酷, 很方便。 但在某些情况下, 却违背了程序员的本意。 这时候就要在这个构造器前面加上explicit修饰, 指定这个构造器只能被明确的调用/使用, 不能作为类型转换操作符被隐含的使用。
 

10. 问:如何实现多态;

1.通过对象直接调用成员函数时,始终默认使用该对象的类的成员函数(除非用::显示指定类名)    

2.通过指向对象的指针或引用调用成员函数时,如果该函数是实函数,则调用该指针或引用的类的成员函数;如果该函数是虚函数,则调用该指针或引用指向的对象的类的成员函数。

11. 问:解释一下动态对象捆绑技术;

12. 问:解释一下运算符重载;

13. 问:谈谈你对指针函数与函数指针的理解;

14. 问:SVM原理;

15. 问:CNN-loss;

16. 问:梯度消失;

17. 问:GAN;SiameseNet;

18. 问:SiameseNet;对临界资源、互斥锁与自旋锁的理解,

19. 问:对临界资源、互斥锁与自旋锁的理解,

20. 问:链表和红黑树;

21. 问:稀疏表达;

22. 问:DCF原理;水平集分割;遗传算法原理;

23. 问:水平集分割;

24. 问:遗传算法原理;

25. 问:SIFT算法原理;

26. 问:深拷贝,浅拷贝;

27. 问:解释一下线性分类和非线性分类的区别;

28. 问:为什么Python可以实现跨平台,Python的时间消耗最多的环节在哪里,谈谈你知道的依赖Python的机器学习库和计算机视觉库;

29. 问:在MOBA游戏如英雄联盟、王者荣耀中,一般有多个玩家同时游戏,要如何实现游戏的实时性,如何处理玩家角色之间的同步?

30. 问:说一下你对跟踪的理解并谈谈主流的跟踪方法?

31. 问:快速排序算法(堆排序);

32. 问:动态优化的边界条件;

33. 问:L1正则化L2正则化的优缺点,为什么需要L1.5正则化;

34. 问:全局与局部静态变量区别;

35. 问:explicit关键字的作用;

36. 问:如何实现多态,

37. 问:解释一下运算符重载;

38. 问:谈谈你对指针函数与函数指针的理解;

39. 问:游戏中需要对毛发进行深度刻画,从渲染引擎角度设计一个基本的算法

40. 问:malloc,alloc与new的区别

http://www.cnblogs.com/ywliao/articles/8116622.html

 

猜你喜欢

转载自blog.csdn.net/Mei_ZS/article/details/81010050