18号南京阿里C++面试经验分享

来源:互联网 发布:录制游戏的软件 编辑:程序博客网 时间:2024/05/17 07:42

1,c于cpp的区别

答:首先,面向过程与面向对象这个回答似乎并不是最好或者最完善的答案。况且我想你们也不会希望我仅仅回答这样的答案。但是我也不能在短时间内,没有经过任何参考的情况下,给出语言特性,使用场景,设计哲学等方面给出完整解释。既然这么问了,我只能给出我对于C与C++的感悟。

进入正题:

C++几乎是C的超集,只有少量功能C++不支持。C++多出来的东西太多,不然也无法解释不管是C++Primer还是C++Primer Plus都比C Primer厚的原因。C++比C多了类,模板,异常等这些部分,这只是语言的部分,标准库就多的太多了。至于使用场景嘛,C具备编译速度快,容易学习,显示描述程序细节,较少更新标准等优点。语言的优点和缺点决定了语言的使用场景。至于设计哲学嘛,抱歉,这个我无法回答,没有经过很多项目的锤炼,我还不敢并且也无法回答这个问题。我想C++开发工程师更应该关注“是否稳定,是否可维护,是否扩展性好”这样的问题,而不是这种C与C++的区别这种“玄学”问题。我更愿意相信你们问这个是打开话题的。

2,cpp三大特性

封装性,继承性,多态性

3,多态的实现原理

虚函数

4,四种cast介绍

reinterpret_cast可用于任何类型之间的转换,这个操作不会进行动态类型或静态类型的检测,仅仅将值强行赋值过去。

const_cast通常被用来将对象的常量性转除,它也是C++唯一有次能力的C++转型操作符。

static_cast与const_cast在向上类型转换的时候功能差不多,向下类型转换的时候分两种情况,如果基类指针确实指向派生类对象,可以转换,如果不是转换失败,返回NULL(对于指针型的来说),但是static_cast这里就会在运行阶段出错,如果通过基类的指针访问派生类特有的东西,就会出错,不安全。dynamic_cast具有类型检查的功能,牺牲了效率但比static_cast安全。

dat*pd=reinterpret_cast<dat *>(&value)这里的pd与&value的值是一样的,不同的指针,但是这个指针保存的值是一样的指向同一块内存。可以将指针类型转换为足以存储指针表示的整形。

5,reinterpret_cast原理。一个double用reinterpret_cast成int后结果是什么

我的编译器上是无效。但是指针的话,指针不变,指针所指向的值原来的还是原来的值,转换过后的值就乱了。

6,HTTP协议介绍

指针HTTP是一套计算机通过网络进行通信的规则。无状态是指web浏览器和web服务器之间不需要建立持久的连接,这意味着当一个客户端发出请求,然后web服务器返回响应,连接就被关闭了,在服务器端不保留连接的有关信息。

7,dynamic_cast原理,RTTI原理,虚函数表是类所有还是对象所有

答:运行阶段类型识别,分为指针类型的和引用类型的。指针类型的如果失败了,返回0,引用类型的失败了抛出异常,这个要包含头文件typeinfo。 RTTI工作原理,dynamic_cast运算符将使用一个指向基类的指针来生成一个指向派生类的指针,否则返回0,typeid运算符返回一个指出对象的类型的值。type_info结构存储了特定类型的信息。虚函数表是类所有,对象共享虚函数表,对象只要指向虚函数表的指针。

8,有一个类c继承自a和b。有一个b类型的指针指向c,现在用dynamiccast将b转成a后,转换前后地址是否一致。
答:不一致,有偏移量

7,对多继承的看法,怎么解决菱形继承,又问了虚继承原理,然后还问除了虚继承还有什么解决方案。

答:谨慎,适度地使用多重继承,虚基类解决菱形问题。虚基类使得从多个类(它们的基类相同)派生出的对象只继承一个基类对象。通过在类申明中使用关键字virtual。产生vbptr虚基类表指针,该指针指向一个虚表,虚表中记录了vbptr与本类的偏移地址与偏移量,所以只保存一份数据。使用限定符也可以解决这个问题。

 

原创粉丝点击