欢迎来到 职场词典网 , 一个优秀的职场知识学习网站!

加入收藏

您所在的位置:首页 > 面试指南 > 面试技巧

面试技巧

奇虎360校园招聘后台研发二面经验

分类: 面试技巧 职场词典 编辑 : 职场知识 发布 : 04-17

阅读 :450

 

       职位类型:后台研发

       面试时间:2014校招

       招聘公司:奇虎360

       360二面主要是技术复试,以下我能回想起的面试题目,仅供大家参考。

       一、C和C++

       1、堆和栈的区别

       堆和栈均是计算机硬件层面的上概念,操作系统给每个进程分配4G(前提32位)的虚拟内存空间。内存空间分别由堆、栈、数据段和代码段组成。总体来说,堆和栈的区别主要有一下几点:

       1)存的值的类容

       堆中的值一般是由new、malloc、realloc分配的,存值类容不固定。可以往里写任何类型的值。栈里存的是函数返回地址,函数参数和局部变量等。

       2)分配与管理

       堆是动态分配的,需要程序员调用new、malloc等分配,调用delete,free等释放。栈是由编译器将源代码编译成一条条“push”“pop”指令,CPU执行到“push”就自动压栈,执行到“pop”就自动弹栈。无需程序员管理。push、pop指令是编译器自动生成的,无需显示告诉其何时“push”何时“pop”,达到了自动管理

       注意:堆是动态分配的(malloc、new、realloc),栈可以静态分配也可以动态分配(alloca函数)

       3)生长方式不同

       栈是自顶向下增长,堆的增长方式有三种:首次适应、最佳适应和最差适应

       4)是否产生碎片

       栈不会产生碎片,堆会产生,尤其是频繁分配和释放的时候

       5)空间大小不同:win32中,堆可达4G;VC中栈默认1M(可以修改)。

       2、new和malloc的区别

       new是C++里的运算符,而malloc是c里面的函数。C++之所以要引入new关键字是因为malloc是封装好的库函数,无法修改内部结构。但是,在C++里,如果不是内部数据类型,在绝大多数情况下分配内存的时候是要调用构造函数,释放内存的时候要调用析构函数的(注意并非所有的类都会调用,一些极其简单的类是没有构造函数和析构函数的,分配方式和C完全一致)。由于malloc无法实现,因此C++里增加了new运算符。可以这么理解:new=malloc+构造函数。delete=free+析构函数。而且new和delete还可以申请数组和释放数组,如newint[10],delete[]等。

       free和delete如何知道应该释放多少内存

       答:malloc和new在分配内存的时候会在内存块前添加一个头部,通常是四字节(4G)或八字节(64位的,多少G就自己算吧),然后在freep或deletep的时候找到p前面四字节或八字节大小就知道应该释放多少内存了。

       3、写个类A,声明类A指针指向NULL,调用类A的方法会有什么后果,编译通过吗?

       编译可以通过,运行时会产生段错误(segmentationfault),指针指零的常见错误。

       4、C++如何找到不同类型的成员方法?

       什么是重载,相同参数不同返回值可以吗?为什么?对不同函数编译器会加什么参数?externC

       C++的特性,C中没有。函数的参数的类型、个数或者顺序不同,因此在编译的时候会编入参数信息,例如intf(inta,doubleb)编译后会是f@int@double之类的,注意看没有返回值信息在里面。加了externC以后,编译器就按C标准编译了,因此所有的重载函数就都成了一个样子的。

       5、多态在现实中的应用,多态的实现原理

       问:sizeof空类为多少?为什么这么设计?

       答:sizeof一个空类是一个字节(char)。

       一个类能够实例化,编译器就需给它分配内存空间,来指示类实例的地址,这里编译器默认分配了一个字节(如:char),以便标记可能初始化的类实例,同时使空类占用的空间也最少(即1字节)

       问:sizeof一个只有一个虚函数的类等于多少?

       答:等于sizeof(int),即一个指针的大小。一般32位系统下是4个字节。

       问:AB两个类各自有个虚函数,C继承A和B,sizeof(C)为多少?

       答:等于2*sizeof(int),即2倍指针大小,一般32位系统下是8个字节。

       问:构造函数能声明为虚函数吗,析构函数呢?为什么?

       6、关于地址对齐

       64位是什么意思,CPU64位指的是什么,操作系统64位指的是什么?

       为什么要有地址对齐,CPU如何取址?

       哪些情况会遇到地址对齐,试举一例?

       二、进程与线程

       两者的区别

下一篇:面试结束后要做的事情 下一篇 【方向键 ( → )下一篇】

上一篇:行政专员面试技巧和注意事项 上一篇 【方向键 ( ← )上一篇】