赞
踩
本文仅为博主的个人面试经历,如果以下内容对您有帮助的话,请不要忘记请我吃鸡腿^_^。
05/11/2016, 新增资料推荐部分。
一面加起来一共30+分钟, 主要是围绕项目问一些问题。
我: 主要说了 1. 做这个项目的原因(需求) 2. 项目中使用的相关技术 3. 自己通过做这个项目学到了什么东西 4. 认识到了自己的一些不足和开源的魅力。
注: frog 是笔者写的一个http 库,代码托管在 https://github.com/okingniko/frog
面: 看来你对服务器后台设计有些研究啊,说说常见的服务器端编程模式
我: 主要是参考《linux 多线程服务器端——使用muduo库》和《unix网络编程》相关章节以及平时积累的一些东西 进行介绍。
技术注解: 里面主要提到了prefork, pre threaded(线程池) ;reactor和proactor等模型,以及根据服务器是计算密集型还是I/O密集型进行一些组合的情况。
面: 那你自己设计服务器会采用什么模式
我: Reactor + 线程池, 巴拉巴拉。。。最后讲了一下epoll怎么使用。
技术注解: Reactor模式实际为 非阻塞I/O + I/O多路复用(select, poll, epoll)
面: 那你讲讲epoll的边缘触发和水平触发的区别
我: 边缘触发是在监听的文件描述符上有新的I/O活动(例如新的输入)时,触发通知; 水平触发是在文件描述符上可以非阻塞的执行I/O系统调用时,此时认为它已经就绪。
技术注解: 具体可参见《linux/unix系统编程手册》第63章和 UNP的第6章,写的不能更棒的两章。
面: 多线程服务器下,你会开多少线程。
面: 这也是个经验值,但至少要比CPU核数要多,因为有些线程会处于空闲状态,等等。。。
面: 我看你项目中用了一些C++11的feature, 里面有些用的太过了,比如shared_ptr(智能指针)和lambda函数
我: 是的,智能指针会带来额外的开销(维持引用计数)、lambda函数看起来也不是那么的直观,必要的话我会考虑用函数指针来代替。
面: 有没有什么问题问我的。
二面主要是一个实力很强的中年男子,按照我写的简历一行一行问,大概持续70min。
我: 和一面一样,介绍了一下自己的项目
面: HTTP了解的怎么样
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。