常见C++面试问题总结2

来源:互联网 发布:域名和空间ip的绑定 编辑:程序博客网 时间:2024/04/27 02:15

【1】虚函数和纯虚函数?区别和应用?

 

 

 

 

【2】知道哪些IO模型?

见《Unix网络编程··卷一》P123

(1)阻塞式I/O

(2)非阻塞式I/O

(3)I/O复用

(4)信号驱动式I/O

(5)异步I/O

 

【3】QQ哪些功能用了TCP?哪些用了UDP?UDP不可靠,为什么还要用它?

       腾讯QQ即使用了TCP又是用了UDP,但是以UDP为主。UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。

       客户登录成功后,都会有一个TCP连接来保持在线状态;

       聊天信息通信采用UDP协议,通过服务器中转的方式。由于UDP不可靠传输,效率高,速度快,可以保证实时性。QQ采用上层协议保证可靠性:如果客户端使用UDP发送消息后,服务器收到该包,需要使用UDP协议发回一个应答包,来保证消息的无遗漏传输。有时,之所以会出现客户明明看到“消息发送失败”,但对方却收到消息的情况,这是因为客户端发出的消息,服务器已经收到并转发成功,由于网络原因,客户端没有收到服务器的应答包而引起的。

       语音、视频均是采用UDP协议;

       文件传输,采用TCP协议;

【4】每个电话号码都有区号,比如深圳的区号是0755,北京的是010。现在让你设计一个数据结构,去存这些区号,然后给你一个电话号码,尽可能快的确定这是属于哪个地区的电话号码。

Trie树,前缀树。

 

 

【5】你知道登录qq的时候怎样确保你的账号和密码在传输的过程中不被别人窃取吗?

       对用户输入的用户名和密码进行加密,加密后的用户名和密码用一连串的字符表示,所以即使别人窃取了客户的用户名和密码,得到也只是一串字符,无法解密,这是网络安全中的一道防线。

       所谓加密(Encryption)是将一个信息(明文)经过加密钥匙及加密函数转换,变为无意义的密文,而接收方将此密文经过解密函数、解密钥匙还原成明文。加密技术是网络安全的基石。

       数据加密技术要求只有在指定的用户或网络下才能解除密码获得原来的数据,这就需要给数据发送方和接收方以一些特殊的信息用于加解密,这就是所谓的密钥,其值是从大量的随机数里面选取的,按加密算法分为专用密钥和公开密钥两种。

 

【6】结构体和共同体的区别?

       结构体是把不同数据类型组合为一个整体用于自定义抽象数据类型,存储空间是所有成员需要的空间总和(以其中占用空间最大的数据类型字节对齐);

       共同体也叫联合体由不同数据类型共享存储空间,空间大小是容纳共同体中成员最大者,其成员不能同时存在。

 

【7】static和const分别怎么用?类里面static和const可以同时修饰成员函数吗?

static关键字至少有下列5个作用:

(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;

(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;

(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;

(4)在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;

(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

==================================================

const关键字至少有下列n个作用:

(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;

(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;

(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;

(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;

(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:

const classA operator*(const classA& a1,constclassA& a2);

operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:

classA a, b, c;

(a * b) = c; // 对a*b的结果赋值

操作(a * b) = c显然不符合编程者的初衷,也没有任何意义。

 

我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量)。

请问:能不能同时用static和const修饰类的成员函数?

答案是不可以。C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时const的用法和static是冲突的。

我们也可以这样理解:两者的语意是矛盾的。static的作用是表示该函数只作用在类型的静态变量上,与类的实例没有关系;而const的作用是确保函数不能修改类的实例的状态,与类型的静态变量没有关系。因此不能同时用它们。

 

【8】指针和引用的区别?引用可以用常指针实现吗?

 

 

【9】什么是多态?多态有什么用途?

 

 

【10】各个排序算法的时间复杂度和稳定性,快排的原理?

 

 

【11】vector中size()和capacity()的区别?

 

 

【12】map和set的原理?

 

 

【13】tcp为什么要三次握手,tcp为什么可靠?

 

 

【14】函数调用和系统调用的区别?

内核的接口被称为系统调用,各种UNIX实现都提供良好定义、数量有限、直接进入内核的入口点,这些入口点称为系统调用。公共函数库构建在系统调用之上,应用程序即可使用公共函数库,也可使用系统调用。

 

【15】线程和进程,线程可以共享进程内的什么东西?知道协程吗?

 

 

【16】MySQL中的数据库引擎有哪些?它们的区别?

 

 

【17】智力题,100本书,你和小明轮流拿,一次可以拿1到5本,你先拿,怎样保证最后一本书是你拿走的?

 

 

【18】一个文件依赖库a,库a依赖库b,写makefile的时候,a要放在b的前面还是后面?

       a放前面

 

 

《其它常见面试题》

(1) 多态性都有哪些?(静态和动态,然后分别叙述了一下虚函数和函数重载)

(2) 动态绑定怎么实现?(就是问了一下基类与派生类指针和引用的转换问题)

(3) 类型转换有哪些?(四种类型转换,分别举例说明)

(4) 操作符重载(+操作符),具体如何去定义,?(让把操作符重载函数原型说一遍)

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

(6) 模版怎么实现?

(7) 指针和const的用法?(四种情况)

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

(9) 内联函数(内联函数的优点以及和宏定义的区别)

(10) const和typedef(const的用处,优点)

(11) 排序算法有哪些?快速排序怎么实现的?最好时间复杂度,平均时间复杂度。

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

(13) c语言和c++有什么区别?(继承、多态、封装、异常处理等)

(14) const关键字的作用?(const成员函数,函数传递,和define的区别)

(15) 静态成员函数和数据成员有什么意义?

(16) 模版特化的概念,为什么特化?

(17) explicit是干什么用的?

(18) strcpy返回类型是干嘛用的?

(19) 内存溢出有那些因素?

(20) new与malloc的区别,delet和free的区别?

(21) 为什么要用static_cast转换而不用c语言中的转换?

(22) 异常机制是怎么回事?

(23) 迭代器删除元素的会发生什么?

(24) 必须在构造函数初始化式里进行初始化的数据成员有哪些?

(25) 类的封装:private,protected,public

(26) auto_ptr类。

(27) strcpy函数的编写?(现场编写)

(28) 数据结构中二叉树的非递归遍历?(现场画图举例讲解)

(29) c++中四种类型转换机制?

(30) 继承机制中对象之间是如何转换的?

(31) 继承机制中引用和指针之间如何转换?

(32) 虚函数,虚函数表里面内存如何分配?

(33) 如何实现只能动态分配类对象,不能定义类对象?

(34) stl有哪些容器,对比vector和set?

(35) 红黑树的定义和解释?

 
【海量数据处理】

(1)40亿个qq号码,其中qq号码来自(1、2、3、4)上述的4个地方,服务器的规格是能够支持20万/s的读请求、16G的内存空间。要求设计数据结构,问需要使用多少台服务器,使用什么样的数据结构能够存储这40亿个qq号码以及他们的地点,同时系统能够满足100万次/S的地点查询?

 

 

0 0
原创粉丝点击