面经中高频知识点归纳

网易面经知识点(C++/C研发)

注:由阅读大牛面经整理而成!主要是夯实基础块!

1、多态性都有哪些?

C++中的多态(虽然多态不是C++所特有的,但是C++中的多态确实是很特殊的)分为静多态和动多态(也就是静态绑定和动态绑定两种现象),静动的区别主要在于这种绑定发生在编译期还是运行期,发生在编译期的是静态绑定,也就是静多态;发生在运行期的则是动态绑定,也就是动多态。静多态可以通过模板和函数重载来实现(之所说C++中的多态主要还是因为模板这个东西),下面举两个例子:1)函数模板template <typename T>T max(const T& lsh, const T& rhs) {       return (lsh > rhs) ? lsh : rhs;}返回两个任意类型对象的最大值(对象),前提是该类型能够使用>运算符进行比较,并且返回值是bool类型。使用:int a = 3; int b = 4;cout << max(a, b) << endl;float c = 2.4; float d = 1.2;cout << max(c, d) << endl;输出结果为:         4                2.4这种绑定发生在编译期,这是由于模板的实例化是发生在编译期的,即在编译时编译器发现你调用max(a, b)时就自动生成一个函数int max(const int& lsh, const int& rhs) {       return (lsh > rhs) ? lsh : rhs;}即将所有的T替换成int;当你调用max(c, d)时就自动生成一个函数float max(const float& lsh, const float& rhs){        return (lsh > rhs) ? lsh : rhs;}之所以说开始的函数定义是函数模板,就是因为他就像个模子似的,你可以用铝作为原料也可以用石膏或者铜。2)函数重载:int max (int a, int b){     return (a > b) ? a : b;}int max (int a, int b, int c){     return max(max(a, b), c);}两个函数名称一样,参数类型或个数不完全相同,返回值一样(这个不重要)。使用:int a = 3, b = 4, c = 5;cout << max(a, b) << endl;cout << max(a, b, c) << endl;输出结果为:         4                5确定函数的过程也发生在编译器,当你使用max(a, b),编译器发现只有两个参数,那么就调用只有两个参数的函数版本,当使用max(a, b, c)时,编译器则使用有3个参数的版本。通过上面的两个例子,你还可以使用更为方便的模板函数重载:template <typename T>T max(const T& lsh, const T& rhs) {       return (lsh > rhs) ? lsh : rhs;}

template <typename T>T max(const T& a, const T& b, const T& c){      return max(max(a, b), c);}使用float a = 3.6, b = 1.2, c = 7.8;cout << max(a, b, c) << endl;输出:       7.8通过参数个数和类型,编译器自动生成和调用对应得函数版本!

动多态则是通过继承、虚函数(virtual)、指针来实现。class A {public:    virtual void func() const {         coust << “A::func()” << endl;    }}

class B : public A {public:     virtual void func() const {         coust << “B::func()” << endl;    }}使用:A a* = B();a->func();输出:     B::func()编译期是不调用任何函数的,编译器编译到a->func()时只是检查有没有语法问题,经过检查没有。编译器并不知道调用的是A版本的func()还是B版本的func(),由于a是一个指向B对象的指针,所以a只知道它指向的是一个A类型(或者能转换成A类型)的对象。通常集成体系就说明了(由于是公有继承)B是一种A。在运行期,a要调用a所指向对象的func()函数,就对它指向的对象下达调用func()的命令,结果a所指向的是一个B对象,这个对象就调用了自己版本(B版)的func()函数,所以输出时B::func()

总结:在编译期决定你应该调用哪个函数的行为是静态绑定(static-binding),这种现象就是静多态。在运行期决定应该调用哪中类型对象的函数的行为是动态绑定(dynamic-binding),这种现象就是动多态!

2、类型转换有哪些?

3、操作符重载(+操作符),具体如何去定义?

4、内存对齐的原则?(原则叙述了一下并举例说明)

5、模版怎么实现?

6、指针和const的用法?(就是四种情况说了一下)

7、虚函数、纯虚函数、虚函数与析构函数?(纯虚函数如何定义,为什么析构函数要定义成虚函数)

8、 内联函数(讲了一下内联函数的优点以及和宏定义的区别)

9、 const和typedef(主要讲了const的用处,有那些优点)

10、链接指示:extern “C”(作用)

11、c语言和c++有什么区别?(大体讲了一下,继承、多态、封装、异常处理等

12、

时间: 2024-11-08 06:02:57

面经中高频知识点归纳的相关文章

面经中高频知识点归纳(六)

1.通常递归所采用的数据结构?递归和循环的区别? ->采用的数据结构为:栈 ->(1)递归算法与循环算法的设计思路区别在于: 函数或算法是否具备收敛性,当且仅当一个算法存在预期的收敛效果时,采用递归算法才是可行的,否则,就不能使用递归算法. (2)递归其实是方便了程序员难为了机器.优点就是易理解,容易编程.但递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算 法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销.所以

面经中高频知识点归纳(五)

求职季真真切切的来啦,继续整理一些高质量的面经,查查漏补不缺吧!fighting! 不熟悉的地方: 1.tcp粘包分析 2.管道,消息队列,共享内存! 进程间通信       有用过管道吗      是单向还是双向     可以双向吗? 进程间通信和线程间通信 <现代操作系统>读书笔记之——进程间通信 面经:腾讯求职经历 计算机网络相关 1 TCP三次握手.四次挥手2 TCP滑动窗口机制3 TCP拥塞控制机制4 socket模型 C/C++相关 1 虚析构.模板和宏2 虚函数实现机制3 vec

2016年初中数学知识点中考总复习总结归纳

2016年初中数学知识点中考总复习总结归纳 http://wenku.baidu.com/link?url=NbEiI_Ld2TO3zEH8d5oDxTux2IBWJ5HqNmZ467MGchJTV2G0pyG4_TauOsYhjL6Ybyqp8MxUKM_wtofUqMTc7ePR3gJv3zIY27sTuSGOaRW

【路线篇(二)】知识点归纳

[喵"的Android之路][路线篇(二)]知识点归纳 参考:http://blog.csdn.net/xujing81/article/details/7313507 第一阶段:Java面向对象编程 1 Java数据类型与运算符 2 String和StringBuffer的使用.正则表达式 3 我给面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收:构造函数.this关键字.方法和方法的参数传递过程.static关键字.内部类,Java的垃极回收机制,Javadoc介绍 4 对象实例

索引知识点归纳总结

1. 聚集索引 聚集索引(clustered index)就是按照每张表的主键构造一棵B+树,同时叶子节点中存放的为整张表的行记录数据.也将聚集索引的叶子节点称为数据页.同B+树数据结构一样,每个数据页都通过一个双向链表进行链接. 由于实际的数据页只能按照一棵B+树进行排序,因此每张表只能拥有一个聚集索引.在多数情况下,查询优化倾向于采用聚集索引.因为聚集索引能够在B+树索引的叶子节点直接找到数据.另外,由于定义了数据的逻辑顺序,聚集索引能够特别快的访问针对范围的查询. 聚集索引的存储并不是物理

Java的21个技术点和知识点归纳

1. JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可.不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的. JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透.我在面试有超过3年Java经验的开发者的时候, JVM几乎就是一个必问的问题了.当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证java开发能力的高低. 在JVM这个大类

给Java新手的一些建议——Java知识点归纳(Java基础部分)

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

给Java新手的一些建议----Java知识点归纳(Java基础部分)

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

给Java新手的一些建议----Java知识点归纳(J2EE and Web 部分)

J2EE(Java2 Enterprise Edition) 刚出现时一般会用于开发企业内部的应用系统,特别是web应用,所以渐渐,有些人就会把J2EE和web模式画上了等号.但是其实 J2EE 里面并不仅仅是web,可以看到很多其中的规范都是通用的,目的是为了高效开发出健壮的服务企业业务模式的应用系统.J2EE中也是可以没有web界面的应用,而现在面向大众用户开发的网站往往也会使用到很多的J2EE的技术,所以J2EE和web开发的概念都是融合在了一起了. 我本人在JAVA开发刚入行的时候,也是