今天晚上九点多,脑袋昏昏的,还在卖力的装女友双十一买的散装衣柜,一个电话面试就打过来了,本来信心就不是很足,但是还是有收获吧。
ps:是一个linux c++后台开发的岗。
开头大概寒暄了几句,我就自我介绍了一下,然后就是面试官发问了。
一、熟悉那些服务器编程模型,我回答了apache、nginx和epoll,然后又问nginx怎么连接的,这个我肯定答不上来,因为apche和nginx我根本没学过,呵呵,后面再补学吧。
二、M:你熟悉C++吧?
W:比较熟悉吧。
M:用C++实现单例模式。
我大概描述了一下项目中一般用的单例模式,不过项目中其实实现的是懒汉模式,即需要时再初始化,但是我们的项目不存在多线程,所以无所谓了。
http://www.cnblogs.com/weixliu/p/3900764.html --最后的双重check是一个很大的考点啊。
http://blog.csdn.net/hackbuteer1/article/details/7460019
我意识到了线程安全性,提到了用加锁,面试官又问关于锁的粒度的问题,我大概描述了一下读写锁,就是多人可以读,只有一人可以写。
M又问如果申请一片内存,把这个类用memcpy拷贝过去,那么就也可以调用这个单例类的函数咯?我回答了否,胡扯了一通,明显错了,汗!!其实类函数指针只不过是一个多了一个this指针参数的函数罢了。
回来搜索一通,收获还是蛮大的:
https://www.zhihu.com/question/27738023
http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/12/24/2831667.html ----这篇博客很赞,这个例子也非常好,利用类B去调类A的函数指针,成功了。
三、你熟悉网络编程吗?请描述一下服务器建立到连接一个客户端的过程?
我回到了socket、bind、listen、accept (阻塞);
accept发生在三次握手的哪一次握手?
我回答了第二次,我想啊,客户端connect算是第一次握手,这时候服务器应该accept回复了吧。汗!!其实这些都只是发生在内核态,accept只有等这些握手完成完了之后才能从内核获取连接的文件描述符。
如果第三次握手的ACK丢掉了,客户端是什么状态,我回答了ESTABLISHED,这应该是正确的吧。
四、你熟悉数据结构算法吗?那么请实现一个长字符串,该长字符串由英文单词构成,单词之间有三个空格,头尾交换。
想了大概5分钟左右,没想出来,回来搜了一下才知道是经典问题,先反转整个字符串,然后反转每个单词。
http://blog.csdn.net/architect19/article/details/9000129?locationNum=7&fps=1
现在觉得自己看的东西多,其实真正踏踏实实掌握的东西很少,希望自己以后静下心来细嚼慢咽,而不是狼吞虎咽,到头来只是一场空。
回头想想,每个问题之前都问熟不熟悉,然后出一道题把我难住,真有点打脸的味道。最后面试官彬彬有礼的说道谢谢你的时间。
ZZ加油,不管以前怎么样,以后的路要走的精彩,想做就别犹豫。