面试问题整理

来源:互联网 发布:3dmax是什么软件 编辑:程序博客网 时间:2024/06/05 12:42

1.malloc函数在内部干了什么?
答:。。。不知道。

2.TCP/IP通信时,如何判断有没有断开连接?或者数据有没有发送成功?
答:我认为send函数在发送数据时,如果成功会返回发送字符串长度,如果没有,则会返回错误代号,或者是服务器重启错误,或者是网络断开错误等。如果发生了错误,那么就要立即关闭本次通信的套接字。

3.stl中vector和map用什么数据结构实现的?
答:vector用的是数组,它可以动态扩展,当需要扩展时,长度可以变长1.5倍;map使用Hash表实现的。

4.哪些变量或者内存会放在栈里,哪些会放在堆里?
答:局部变量会放在栈里,malloc或new申请分配的内存会放在堆里。

5.两个有序数组(生序),数组1和数组2,数组1足够长,要求将两个数组合并在数组1里?
答:以归并排序的思路,申请一个数组3,然后比较数组1和数组2的元素,将小的那个放在数组3里,然后比较下一个。最后将数组3复制给数组1.
问:如果不让用辅助数组呢?
答:那就将数组2复制到数组1末尾,然后对数组1进行插入排序算法进行排序。

6.如何让主线程和子线程可以访问同一个变量呢?
答:将该变量设置成静态变量或者全局变量。
问:那会不会导致访问冲突?
答:会,所以要用同步方法进行同步,不可同时访问。

7.你对OOP了解过?
答:我用过继承和多态。
问:那么你说一下多态。
答:多态是用虚函数实现的,将基类的函数设置成虚函数,然后实现派生类的同名函数,这样做以后,就可以用基类的指针统一地访问各个派生类的函数。

8.如果将一个链表逆序?
答:不明白逆序啥意思?逆序打印?然后我就用一个栈将各个节点放进去,然后再弹出来逐个打印。
其实逆序的意思是将链表的头变成尾,尾变成头。是一道很经典的题,但不明白题意,所以这道题做错了,但是即使明白了题意,我也做不出来。
思路是利用两个指针,一个在前,一个在后,让后面指针指向的节点的next 等于前一个指针。

9.如何提高服务器的并发能力?
答:1、买更好的设备(如果有钱的话);2、优化程序,提高程序的性能,比如在数据库、核心函数地方优化,优化多线程等并发方式的能力。

10.如何判断程序发生了死锁?
答:调试模式下查看程序栈,看停在了哪一步。
注:这是我瞎说的,不知道对不对。

11.如果发生了死锁,怎么解除?
答:。。。不知道。

12:某一个程序很好资源,达到了98%,如何找出给程序中最耗资源的函数?
答:。。。。不知道。

13.如何安全地关闭线程?
答:根据利用同步的方式,按照其释放方式释放拥有权限,然后再关闭线程。
注:这也是我瞎说的,也不知道对不对。