腾讯面试题收集

Q:TCP/IP编程服务器端主要调用哪些接口

A:bind listen connect send read write等等

 

Q:select/poll/epoll的区别

A:三种IO多路复用 epoll性能更高,节省更多开销

 

Q:recv函数的返回值及其意义

A:当应用程序调用recv函数时,

    (1)recv先等待socket的发送缓冲中的数据被协议传送完毕,如果协议在传送socket的发送缓冲中的数据时出现网络错误,那 么recv函数返回SOCKET_ERROR,

    (2)如果socket的发送缓冲中没有数据或者数据被协议成功发送完毕后,recv先检查套接字socket的接收缓冲区,如果接收缓冲区中没有数据或者协议正在接收数据,那么recv就一直等待,直到协议把数据接收完毕。当协议把数据接收完毕,rec函数就把socket的接收缓冲中的数据copy到buffer中(注意协议接收到的数据可能大于buf的长度,所以 在这种情况下要调用几次recv函数才能把socket的接收缓冲中的数据copy完。recv函数仅仅是copy数据,真正的接收数据是协议来完成的),rec函数返回其实际copy的字节数。如果recv在copy时出错,那么它返回SOCKET_ERROR;如果recv函数在等待协议接收数据时网络中断了,那么它返回0。

 

Q:进程之间通讯有哪几种方式?

A:无名管道(父子间)、有名管道(无亲缘关系也可以)、消息队列(消息的链表)、信号量(计数器,一种同步手段)、信号、共享内存、套接字等等

 

Q:进程和线程的优缺点,各适用于什么场合?

A:进程优点:使任务并发执行;每个进程互相独立不影响;容易扩充性能

      进程缺点:逻辑控制复杂;调度开销大

      线程优点:无需跨进程边界;程序逻辑和控制方式简单;所有线程可以直接共享内存和变量

      线程缺点:一个线程的崩溃可能影响到整个程序的稳定性;调度开销大,性能扩充难

      多线程比多进程成本低,但性能更低,线程适用于对性能要求不高的场合

 

Q:extern "C"的作用

A:指示编译器这部分代码按C语言的进行编译,更好地支持旧代码

 

Q:map和hash_map的区别

A:map的基础数据结构是红黑树,hash_map的基础数据结构是哈希表,hashmap的查询时间复杂度比较低,适合记录比较多的情况

 

Q:非递归求二叉树的深度搜索

A:使用队列,加个level变量++深度增加

 

Q:Top K海量数据查找

A:先通过Hash法,把这1亿个数字去重复,然后创建最小堆,比较、替换堆顶元素再重新调整为最小堆,直至遍历完

 

Q:基类的析构函数必须为虚函数吗?

A:如果确定程序中有基类指针指向派生类的问题,则必须将基类的析构函数指定为虚函数,否则不需要

 

Q:vector list 区别

A:vector和数组类似,list用双向链表实现,它们的区别就是数组/链表的区别

 

Q:单链表找环

A:保存遍历过的节点(空间更少方法:一边遍历一边反转链表(翻转指针),如果有环会掉头走回头结点)

 

Q:静态链接库和动态链接库的区别

A:静态:函数代码直接链接进目标程序;动态:程序运行的时候再从DLL中寻找相应函数代码

      静态执行速度略比动态链接库快

      动态更加节省内存,提高了可维护性和可扩展性,适合大规模开发

 

Q:一个C++程序从编译到运行都经历了哪些阶段

A:编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件

 

Q:观察者模式

A:观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新(“注册——通知——撤销注册”)

 

Q:大端法和小端法指的是什么

A:最高有效字节在最前面的方式称为大端法,小端法相反

 

Q:判断两个链表有没有交点

A:如果他们相交的话,那么他们最后的一个节点一定是相同的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章