深信服c++面试总结

昨天约了深信服的面试,今天下午和面试官微信语音面试,面完后觉得自己还有很多地方没有完全掌握到,继续加油吧。

面试官:说说你最熟悉的几个方面

回答:c++、Qt、网络编程

面试官:好,介绍一下你的项目,巴拉巴拉

(没有自我介绍,开始进入主题)

问题1:说说http协议有哪些常见状态码,403代表什么意思?

回答:200,404,403,400等,403表示资源不可用。服务器收到了客户的请求,但拒绝处理它。主要由于服务器上文件或目录的权限设置导致。

问题2:tcp三次握手和四次挥手说一下,他们的当时状态分别是怎么样的?

三次握手:

发送端首先发送一个带SYN标志的数据包给接收端。

接收端收到后,回传一个带有SYN/ACK标志的数据包

扫描二维码关注公众号,回复: 10079480 查看本文章

发送端收到后,再回传一个带ACK标志的数据包,表示握手结束。

四次挥手:

客户端首先发送一个带FIN标志的数据包给服务端,请求关闭客户端到服务端的连接。

服务端收到FIN后,回传一个带有ACK标志的数据包给客户端

服务端再发送一个FIN给客户端,关闭服务端到客户端的连接。

客户端收到FIN,回传一个ACK给服务端。至此四次握手结束

状态记不清了。

问题3:linux熟悉么,查找已知进程名的进程号怎么查?

回答:还好,结果没答出来。后面查了一下是:ps -ef | grep 进程名

问题4:聊聊c++基础吧,c++怎么申请内存,和c语言申请的方式有什么不同?

回答:c++使用new运算符申请,c语言使用malloc,

二者的不同之处在于,1、malloc是c库函数,new是运算符,2、new可以在申请内存时对变量进行初始化,malloc不可以。

3、new以具体类型为单位进行内存分配,malloc只能以字节为单位进行内存分配。

问题5:c++如何判断内存是否申请成功?

回答:if(p==NULL); 面试官说不对,这是C语言的方式,我说的是C++的。没答出来,后面查了一下是用try catch抛出异常来处理new内存分配失败的问题。

问题7:stl的vector的实现原理是什么,自动扩容的时候扩大多少倍?

回答:vector通过一个连续的内存存放元素,和数组类似,如果内存已满,在新增数据的时候,就要分配一块更大的内存,将原来的数据复制过来,释放之前的内存,在插入新增的数据。一般是2倍。

问题7:stl的map的实现原理是什么,如何给无序的map排序?

回答:二叉树,面试官问哪一种类型的二叉树,回答红黑树。排序分为对key或者value排序。

问题8:如何快速定位一个大型c++项目的内存泄漏问题?

回答:查找关键日志。还有其他方法么?想不到了。

问题9:多线程的同步有哪几种方式?多进程通信方式呢?

回答:多线程同步:互斥锁、读写锁、信号量,条件变量

多进程通信:消息队列,共享内存,套接字、管道。

除了简单的,其他的要么是回答不出,要么就是回答不全,后面面试官可能也觉得基础不太好,就没有继续问下去了。

还是复习没有到位,不过也发现了目前存在的比较多的问题,继续加油吧。

个人感觉有时候面试一下,还是有益无害的,能帮助自己查漏补缺,所谓当局者迷,哈哈哈。

发布了133 篇原创文章 · 获赞 175 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/c_shell_python/article/details/104450327