2018深信服C++面经【已拿offer】
2018深信服C++岗面经
投的工作地点是长沙研究所
背景:四非院校本科,CS专业,项目经验≈0,竞赛经历:区域赛铁牌
update 9/27: 刚刚收到offer的短信和邮件,明天去签约咯~~~,这里把我面试前准备的所有题目都放出来,希望大家都能拿到理想的offer sangfor面试准备
笔试
选择题:Linux多线程、信号、*作系统、C。
填空题:简单的数学和概率
编程题:2018深信服秋招C++笔试题
笔试总体难度还是有一点的,我对多线程和信号完全不懂所以选择题做的稀烂,靠着2.5道编程题过了笔试(听HR说笔试分很高)
不过听说有人过了0.2甚至编程题都没做都收到了面试通知。。。
21号笔试完,22号收到面试通知,23号上午9:00面试,下午搞完HR面,回到学校现在发面经回馈牛客
一面
感谢牛客的各位大佬,一面的题库在这里基本上都能找到,所以面的也很顺利
Q:象棋中马从一个位置跳到另一个位置的最少步数
A:手写BFS
Q:一次可以上一层台阶,也可以上两层台阶,到第N层有多少种走法
A:F[N]=F[N-1]+F[N-2]
Q:一分钟内经过公交车的概率为p,求三分钟内有公交车经过的概率
A:P=1-(1-p)^3
Q:strcpy和memcpy的区别
A:复制的内容不同,strcpy无需指定长度,遇到'\0'为止
Q:那strncpy呢?
A:我没用过
Q:你怎么判断两个struct相等?
A:我会选择重载==运算符,逐一比较成员变量是否相等
Q:那能不能用内存比较memcmp来判断呢?
A:不能,涉及字节对齐,可能有内存间隙,这里的值是随机的
Q:进程间的通信有哪些方式?
A:管道、有名管道、(信号、信号量、)共享内存、消息队列、socket
Q:epoll和select/poll的区别
A:epoll是实现I/O多路复用的一种方法,有水平触发(level trigger,LT,默认)和边缘触发(edge trigger,ET)两种工作模式,区别在于两种模式的返回就绪状态的时间不同。水平触发和select/poll的方式一样
- 水平触发
- 读:缓冲内容不为空返回读就绪
- 写:缓冲区还不满返回写就绪
- 边缘触发
- 读:
- 缓冲区由不可读变为可读
- 新数据到达,缓冲区中待读数据变多时
- 写:
- 当缓冲区由不可写变为可写
- 当有旧数据被发送走,即缓冲区中的内容变少的时候
- 读:
epoll之所以高效,是因为epoll将用户关心的文件描述符放到内核里的一个事件表中,而不是像select/poll每次调用都需要重复传入文件描述符集或事件集。比如当一个事件发生(比如说读事件),epoll无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入就绪队列的描述符集合就行了。
Q:在TCP连接中,服务端的socket要做哪些?
A:socket->bind->listen->accept->send/recv
Q:堆和栈的区别?
A:堆是一颗二叉树、栈是一个单向进出的线性结构
Q:堆排序和快排的区别?
A:快排的思想是分治,每次选择当前范围的第一个数作为标杆,然后再将这个范围的所有比它小的数放到他左边,大的放到他右边,由这个标杆的现在位置划分出两个范围,分别对这两个范围的数再重复这样的*作,直到范围大小为1
堆排序则是在建堆的时候保证堆顶最小,然后每次取堆顶
下面应该是面试官自己出的一些题目
Q:XML是什么结构?
A:树
Q:用过正则表达式吗?写一个32位IP地址的正则
A:用过,忘记了不好意思
Q:进程和线程的区别?
A:这个没背,只回答上了几句话
二面
二面真的看造化、、、、因为没啥项目经验,面试官一直在想办法找问题问,从***的工作原理扯到人工智能。算法竞赛这块感觉面试官也不太懂,ICPC和CCPC都没听过,问的问题都在尬聊,怪我专业基础不够扎实吧。。
总体感觉:我怎么什么都不会???还是感谢面试官让我过了二面
HR面
就问了一些职业规划和基本信息的问题,说如果通过的话26号左右会通知
#深信服##面经##C++工程师##校招#