腾讯2015年校招一面、二面、三面面经(2014/9/16)

匿名网友 匿名网友 发布于: 2015-10-13 00:00:00
阅读 348 收藏 0 点赞 0 评论 0

一面

1 红黑树和平衡二叉树的区别

平衡二叉树(最严格的定义):每个节点的左右子树的高度一样。

AVL树(较为宽松):每个节点的左右子树的高度差的绝对值小于等于1。

红黑树(更为宽松):每个节点的左右子树高度至多是两倍的关系。

2 为什么STL用的是红黑树

AVL树在每次修改时,都要对树进行平衡操作,代价比较高。而红黑树只需要在违背红黑树的规则时,才进行旋转,在查找效率与AVL树相当的情况下,修改的代价更低,因此,大多数应用都选择红黑树作为实现。

3 linux的进程内存映像

《深入理解计算机系统》上多次列出的那个内存映像图。

4 静态库和动态库

4.1 不考虑库

如果不考虑库时,当程序员调用printf时,就要将程序的目标文件与包含printf的目标文件进行链接,如果包含printf的目标文件中有许多其它的函数,不管程序员是否使用,都会链接到程序的目标文件构成可执行文件。

4.2 静态库

静态库可以理解为许多函数的目标文件的压缩包。当程序员调用printf时,只将printf的目标文件链接进来,不使用的函数不链接,因此,比不使用库的可执行文件的空间更小。

4.3 动态库

动态库主要的思想是共享。当程序员调用printf时,如果printf的目标代码已经在内存中,就可以直接使用该代码,而不需要在编译时将这部分代码链接进来。因此,编译这种程序时,编译器并不将printf的目标代码链接进来,而是在执行时,在内存中查找是否有printf的目标代码。这样的好处是,可执行文件比较小。

5 strcpy

主要考虑目标与源的地址范围可能重叠。

二面

1 什么是内存泄露吗?栈会发生内存泄露吗?如何避免内存泄露?

内存泄露就是new/malloc,但是没有delete/free,于是自己没有使用这部分内存,其它的进程也不能使用,就像内存“泄露”了一样。由于栈是自动管理的,因此,不存在内存泄露。

备注:去海豚浏览器面试时,面试官出了个关于new/delete和malloc/free的问题。

面试官:new的资源可以用free释放吗?

:new的语义和delete的语义是对应的,new先分配内存,然后调用构造函数,delete先调用析构函数,然后释放内存,而malloc只分配内存,free只释放内存。因此,是不行的。

面试官:如果程序员就是要用free释放new的资源呢?

:可能会出现运行时错误吧。(回来试了下,在codeblocks中,是可以的,没有出现任何问题)。

2 TCP中如果一端掉线,另一端知道吗?

3 如何查看TCP连接的状态?如果有过多的连接处于CLOSE_WAIT或者TIME_WAIT时会有什么问题?

4 解释纯虚函数(按照自己的理解)

当定义基类时,程序员要为这个基类添加一个方法,但是,这个方法对基类时没有意义的,或者说,程序员不知道该如何定义这个方法的函数体,这时就可以将这个方法声明为虚函数。

三面

1 简述项目,项目组有几个人?组员是如何沟通的?

2 一般从哪些途径了解互联网新闻?最近腾讯有什么新闻?

当时回答的是:百度新闻,微博。后来想想,是不是应该回答,腾讯新闻呢。。。

至于最近腾讯的新闻,还真是想不起来,最近都是阿里IPO的新闻,最后回答,微信的支付和滴滴打车。

评论列表
文章目录