汇集深信服所有面经

/*
分布:
1.岗位要求,针对C++岗的笔试面试官网要求

2.多个面经及其关键解释

3.个人面经

*/


岗位描述: 负责深信服旗下虚拟化、云计算、安全、无线、物联网、企业级移动应用产品的软件开发,为众多的企业级用户提供更简单、更安全、更有价值的产品,影响千千万万家知名企事业单位的IT建设。在这里,你将有机会接触到目前最前沿的IT领域技术,并成为大牛级人物。
岗位要求: 
1 本科及以上学历,专业不限; 
2 编程基本功扎实,熟练掌握C/C++语言以及常用算法和数据结构; 
3 优先条件(其中某项):
   A:有虚拟化、云计算、安全、无线、物联网、移动应用产品某一类型产品的软件开发经验者优先;
   B:对Linux内核、Windows驱动某一领域有所了解者优先;
   C:有ACM等大赛经验且获得奖项者优先。
薪资待遇:
年薪:本科16万起,硕士19万起,优秀者可获得薪资更高的SP Offer。

注:1、工作地点在长沙的薪酬比深圳、北京低10%;2、公司提供3个月免费过渡宿舍。

Q9:深信服公司开发工作的要求是什么?
答:语言以C或者C++为主,但有些产品也会用到JAVA和JS、PHP方面的知识,平台比较多样,主要是LINUX,但也有用到Windows/IOS/android等平台;如果做过云计算、虚拟化、网络安全/云安全、有过较多的项目经验、参加过acm大赛并获得较好的名次,将会优先考虑。

Q11:深信服的开发岗位笔试时会笔试哪些内容?
答:笔试的内容以基础知识为主,主要是考察C语言,数据结构和算法。


笔试题
1.堆排序
2.链表排序
3.二进制数反序
4.正则表达式
5.棋盘问题,气数(函数calc计算围棋盘位置(x,y)处的棋子还有多少口气。某个位置处的棋子还有多少口气的计算方法(简化计算):从该位置出发,向四个方向遍历,允许拐弯,但不允许走斜线。如果遇到边线和对方棋子,则认为不能继续往前走。遍历完成后统计遍历过程中遇到的未落子的位置个数,该位置个数即出发点棋子的气的数目。)


1.结构体内存对齐(可以回答作用:1.平台移植 2.提高<访问>效率 3.节省存储空间)
2.能不能修改默认对齐数,怎么修改(使用宏:#param pack)
3.怎么获取一个文件的大小(ls -l、wc)
4.main函数的参数(也就是argc、argv)(main之前有启动例程,启动例程从内存获取命令行参数和环境变量值,传递给main)
5.如何获取main函数的返回值(bash:echo $? fork:wait族函数)
6.printf函数怎么传参,printf("%d%d",i)会发生什么,为什么(函数的堆栈映像图,反序入栈,根据控制字符串,检索参数个数和参数类型)(会造成获取一个错误的参数,具体数据是不确定的)(提示:光回答问题没太多意思,你直接画出堆栈映像图去解析,加分呢)
7.在一个公交车站等公交车,等一分钟等到车的概率为p,那么等三分钟等到车的概率是多少(p+(1-p)p+(1-p)(1-p)p,典型的二分概率)
8.explicit关键字的作用(防止隐性转换和拷贝初始化,然后举拷贝初始化失败的一个例子)


一面
1 自我介绍,聊项目。
2 看笔试成绩,聊做错的题目和算法题。
3 strcpy在栈里拷贝到一个字符数组会出现的情况。(strcpy拷贝过程判断'\0',字符数组没有该字符时,会把后面地址的数据进行覆盖)
4 对于struct结构体,能不能用memcmp进行内存比较。为什么。(不能,结构体对齐后,自动填充的字节的内容是随机的)
5 一个有n*n个方格的棋盘,在里面放m个地雷,如何放保证在每个方格上放雷的概率相等。(不会)
6 拷贝构造函数的参数不是引用可以吗?(不可以,函数对于非引用的参数值而言,都会对其在栈内进行拷贝,而对类进行拷贝,又调用了拷贝构造函数,这样会造成无限的调用,直至函数栈溢出)


二面
1 看一面面试官评价 和笔试成绩。
2 多线程编程会带来的问题。(编写线程安全的函数、调试困难,比较难去重现bug、同步互斥过程中造成死锁问题)
3 如果是线程池,固定了创建的线程数量,如果每个线程都阻塞了,怎么办。(我并没有并发开发的经验,但个人根据OS原理:资源分配不合理导致的问题,要么增加系统资源满足任务调用,要么重新分配任务的工作量,减少单个任务的资源占用)
4 如果一个单线程阻塞了一个系统调用,比如read,如何解决。(使用select函数进行定时读取,多次阻塞无效后,放弃资源,提示应用系统错误信息,交给用户进一步排查;也可以是将read设置为非阻塞)
5 read函数设置成非阻塞的话,会有哪些返回值。(-1出错、正数-读到的字节数、0-到了文件尾)
6 read返回-1时,遇到哪些错误码可以忽略,应该认为是正确的,继续进行操作。(中断EINTR)
7 A B C D 四个人晚上过桥,每个人过桥需要的时间不一样。过桥需要手电筒,且只有一个手电筒,如何设计让过桥时间最短。(需要确定是否一次只能过一个人,如果是,那只有一个手电筒好像没法解决问题,这题目估计面经编写者没有写清楚吧。感觉条件不够)
8 有A B C D四个数字序列,求这四个序列的交集。内存放不下,没考虑序列中有重复值,被鄙视。(先对数字序列进行排除重复值,然后建立二叉搜索树,节点含藏数值和计数变量,分别输入四个处理后的数字序列,最后统计计数变量为4的数值,就是4个数字序列的交集)
9 不用编译器,如何确定代码的错误位置,除了打日志,抛异常。(不用编译器就是不用assert,不用打印日志就是不用printf,只能使用core dump,通过gdb去调试,定位堆栈信息)
10 core dump 打印堆栈信息。(bt命令查看当前sp指针所在的堆栈帧、where命令也是可以的)


一面
1:C++调用C函数使用什么(#ifdef __cplusplus extern "C"将实现与声明包含在里面)
2:C语言调用C++函数(目前还没有使用过这个,我目前可以想到的是:C++比C多了函数重载,编译过程中会添加标识,所以的话,应该需要对C++的一个重载的接口进行转换)
3:拷贝构造函数是值的形式吗?(不可以,前面已经提及,造成无限调用问题)
4:手写代码vector函数删除代码(我一时间都看不懂题目,感觉是不是缺少了说明,删除函数???)
5:将卷子翻出来,问你错的思路(几个面经都谈到了这个,所以笔试期间,需要拍照,并且重新弄懂)
6: 同步和异步,阻塞和非阻塞区别(前者:是否导致阻塞;后者:进程是否投入睡眠)
7:tcp三次握手(容易)
8:struct{char data[0]}这个data表示什么意思(有点像变长数组,类似一个指针使用)
9: struct {char a:1,char b:1}(位域,同样会有字节对齐问题)
10:liunx有没有用过(这个问题,问得我都触不及防,可见,这个面试官比较水,遇见就很幸运了)


二面:
1:介绍下你的项目,你项目的难点和关键点是什么(进程间通信,模块拆分)
2:项目当中让你最苦恼的是那一块(网络传输)
3:你有没有遇到过,你不熟悉的领域,然后怎么快速学习,请说说你的看法(网络传输、图像质量检测)
4:你为什么参加ACM,你学到了什么
5:拓展问题,微信和QQ比较,你觉得需要补充什么功能(QQ稍微卡了一点,微信可以加直播的功能)


HR面:
1:自我介绍
2:朋友怎么评价你的()
3:你自己怎么评价自己的()
4:你了解我们公司嘛(这个很关键)(AC业务、研发业务新方向)
5:你有得到offer?你希望的工资?()
有没有什么问我的(今年的培训计划、长期实习及其内容、导师安排、实习期间住宿问题)


1、系统调用与函数调用(回答完四点,最好是加上自己的理解,不然就是背课本)
2、linux信号有哪些(中断、堆栈、段错误、父子进程)
3、可重入函数,线程安全(可重入主要解决全局变量问题;而线程安全还要解决信号安全)
5、阻塞与非阻塞(进程是否投入睡眠)
6、可变参数函数的定义及实现(使用到那些宏、怎么使用)(v_start/v_arg/v_end)
7、缓冲溢出报警及解决(在堆栈帧中通过缓冲区溢出改写sfp帧指针所指的函数返回地址,从而改变函数执行流程,跳至攻击程序。直接作堆栈映像图解析。使用snprintf而不是sprintf等;使用std:string而不是char*)
8、内存溢出解决(将要使用的内存超出了允许使用的范围;使用strncpy而不是strcpy)
9、malloc和new分配内存区别(前者库函数,后者运算符;前者仅申请空间,后者还创建对象)
10、一棵树转换成二叉树(翻车了,不会)
11、如何比较两个结构体是否相等(逐个成员对比,不能使用memcomp)
12、main函数返回值意义及获取方式(进程的退出状态,是否出异常或正常退出;echo $?或fork之后的wait族函数)
13、快排原理,什么时候复杂度最高及如何改进(快排原理是二分法,已经排序好序列复杂度最高,partion函数使用随机定位)
14、云盘中秒传功能是什么原理,说说其中一个算法(MD5)


一面:
1. this指针调用成员函数时的压栈和相关寄存器使用?(从右往左调用,这个容易可以回答;在x86中,会将this指针放在寄存器ecx中,以便快速访问,对于寄存器方面,我完全没有了解)
2. 虚表的调用,以及单继承,多继承,菱形继承中虚表在对象内存中位置?是一个虚表还是多个虚表?(虚表调用就是类的首地址,然后查表,单继承是单表,多继承是多表)
3. RTTI的使用?(运行时类型鉴定,适用于使用基类的指针或引用转换为派生类并调用非虚函数方法)
4. TCP的nagle算法以及延迟ACK?(Nagel算法将较小tcp包进行合并发送;适用于批量数据传输,减少ACK回应流量)
5. TCP拥塞控制的几种方式?(慢开始和拥塞避免、快开始与快恢复)
6. linux环境下互斥锁的使用以及互斥锁释放后,等待线程是随机唤醒还是唤醒第一个等待队列?(互斥锁实现互斥机制,保护多个线程更改一个共享资源)(优先级唤醒)(其实这跟锁并没有太多关系,而是系统的线程调度问题)
7. linux环境下条件变量的使用?(条件变量提供信号机制,所有等待该条件的线程同时阻塞,使用过程需要一互斥量配合使用。作用?使用场景?如何使用?)
8. pthread_cond_boardcase和pthread_cond_signal的区别?(前者广播唤醒等待该条件的所有线程,后者单播至少唤醒一个等待该条件的线程)
9. 进程之间的通信方式?有没有实践过?讲讲其中你觉得用的最多的方式?(;;最多是共享内存和信号量,之前第二个项目是传输大块数据,实现循环缓冲区;最后一个小问实际上是需要结合实际的需求,不同的需求会有不同的方式选择)
10. select和epoll的区别以及他们的优劣?(是否重复拷贝、检测过程是否遍历所有)
11. 问了一下大学干了些啥以及意向城市?(社团工作、创业公司、校企培养;深圳-IT行业繁荣)


二面:
1. 写一下将一个整型的二进制后三位清零?(n &=~7)
2. __stdcall和__cdecl有什么区别?(一个是函数自己管堆栈参数清理;一个是调用者管堆栈参数清理,默认方式)
3. 用一个父类的指针,怎么调用子类的虚函数的?他们的调用流程是什么?(就是虚函数机制,虚表的实现,说一遍即可)
4. 为什么浮点有误差?二进制无法精确的表达十进制小数(计算机本质是二进制,通过浮点表示小数,都是模拟出来的)
5. printf("%s%d", s, d)的压栈情况?(突出说明要压入下一条指令执行的地址,保护现场;也就是函数调用的堆栈帧的映射图)
6. 说一说大学做了什么项目?学过什么东西?(送分)
7. 说说你这个项目中遇到的一些问题和对应的解决方案?你还能提出新的功能吗?还有没?这样做的原因是什么?(这一部分全靠想)(问题:网络传输不稳定,方案:流量控制;日志系统,方便查看执行过程中的错误)
8. 有没有做过开源项目?基于开源框架进行开发?()
9. 看过linux源码,说说epoll和select以及poll的底层代码实现?具体有哪些?select和epoll的优劣,从实现上说明?(没看过,但我还是知道一部分底层实现;是否重复拷贝、是否遍历所有)
10. 求一堆字符串的最长公共前缀?指针后移就可以了
11. 求给定一堆字符串中,其中几个的最长公共前缀?用字典树说明一下就可以了
12. 64位x86操作系统和32位x86操作系统函数调用的差别?(64位前6个参数放寄存器,32位是直接压栈;这个我完全不会)
13. 信号传递机制?(信号本质一个软件模拟的中断,或许是硬件中断Ctrl-C等操作,或许是软件kill函数等发送信号;进程注册信号,内核监控,进程切换至内核,检测是否发生信号,传递信号,进入进程的信号服务函数)


三面:BOSS面
1. 有博客吗?(有)
2. 看看你的博客,做过网络安全,说说gdb,sub rsp,0x40,call 0x400540<gets@plt>这几条反编译汇编语句的作用是什么?(他们分别作了什么?感觉自己作死,不过回答上来了。)
3. 对gets进行处理,可以造成栈溢出然后破解程序吗?(如果开启保护,如果没开启保护)
4. 除了ACM编程设计外,你还干过什么?看博客
5. 这个竞赛中你担任了什么工作?做了什么事情?你们团队怎么分工的?你擅长的部分是什么?遇到问题你们是怎么解决的?
6. 实习的时候你学到了什么?(沟通、最合适的方式完成任务)


HR面:
1. 你最想去的公司?
2. 你大学遇到的最受挫的事情是什么?
3. 你对深信服了解吗?什么时候知道深信服的?参加了宣讲会没?()
4. 你为什么不考研?()
5. 为什么没有留在你实习的公司?()
6. 有没有其它offer?(同上面问题一样)


一面:
1. new和malloc的区别。(运算符与库函数;分配内存后是否创建对象)
2. 浮点数怎么判断相等。(相减比较0.0000001)
3. 一共四个人过桥,每个通过桥的时间为1,2,5,8分钟,他们只有一个手电筒,桥每次只能承受两个人的重量,问你怎么过桥最快?换成是一堆人该怎么办?(讲述思路即可,8=5+2+1;一堆人的话,就凑整)
4. 手写代码,算出一个文件里的每个小写字母出现的次数。(哈希表直接撸,注意小写字母,在获取结果是数组索引采用'a~z'即可)
5. 怎么比较两个结构体相等?(逐个成员比较)
6. A函数调用了B函数,这时候在B中添加成员函数,问A需不需要重新编译?(在C和C++ 中分别需不需要重新编译。)
7. 指针传参和引用传参的区别。(是否拷贝,是否同一实体,是否绝对安全)


二面:(这估计是同一个面试官吧,上来基本一样)
1. 将一个整型的二进制最后三位清零。(x&=~7)
2. 面试官自己手写的一个代码让你写输出结果。(这可以,最怕几个loop的代码)
3. 求一堆字符串的最长公共前缀。还有就是找这一堆字符串中公共前缀最长的两个字符串。
4. printf("%s%d", s, d)的压栈情况,执行Printf函数时sp指针的变化。(被考无数次的题目?sp就是堆栈指针,直接移动即可,注意堆栈是从高到底,相加相减分清楚)
5. 有一幢大楼(忘了他有没有说大楼有多高),然后你有两个玻璃球,玻璃球在你从大楼的第N层扔下的时候会碎,从小于N的楼层扔下不会碎,大于N的楼层扔下也会碎,让你用最快的方法找到N的具体值。(二分法,具体忘记怎么录了)
6. 浮点数不能直接比较的原理。(计算机基础,不过也可以展开讲)
7. 说下你的项目经历?
8. 有没有看过什么开源项目。(FFmpeg)


深信服-星云计划 失败
1. 聊项目
2. 对于N个点的网络,求任意两点的最短路径?(专门的算法,贪心)
3. C语言局部变量与全局变量(内存位置、声明周期、作用域等方面描述)
4. 对于大的数组,如何使用局部变量?(修改进程栈大小、)
5. 不同文件中如何引用外部变量?(头文件包含)
6. 递归时栈溢出怎么办?任何递归都可以用非递归实现么?(转为迭代实现,尾递归可以)
7. 存储通讯录信息:姓名,手机,邮箱,简介,如何能实现快速查询以及部分查询?
8. Linux编程中的锁有哪些?(自旋锁、互斥锁、信号量)
9. 自旋锁与互斥锁区别(是否投入睡眠)
10. 进程IPC方式(管道、FIFO、消息队列、信号量、共享内存、socket)
11. socket与共享内存用于什么情况?(socket实现进程间传递打开文件描述符,共享内存实现大数据块传输,最快IPC)
12. 卫星网络中网络带宽足够,但丢包率高,导致网页打不开,通信质量差,什么原因?如何解决?(设备丢包、MTU设置不恰当、网络攻击)
13. Dijkstra单源最短路径(学习的时候弄懂了,现在又忘记了)
深信服这场也跪在了算法上,面试官说只要你回答上这个问题就给你过,但还是没想起来Dijkstra的具体内容。 无奈。


笔试
1.双向链表插入
2.C++拷贝构造函数
3.不使用库写一个函数


一面
一对一面试
1.你会什么(Linux和C)
2.多进程的创建与返回值的意义、僵尸进程(;父进程没有对子进程的退出进行wait,造成资源没有完全归还给系统,子进行依然保留在进程表里面但不运行)
3.多线程的互斥、通信机制、效率问题()
4.会几种查找算法(二分、图、树)、某算法的时间复杂度
5.你会几种排序?(快排、选择、希尔、哈希、归并、堆)、实现其中一个算法
6.几种错误信号,并讲述其中一个的意义(SIGSEVG段错误,内存越界、权限问题)
7.说说TCP协议的(可靠机制、流量控制、拥塞控制、连接管理)


二面
1,new  malloc的实现区别(运算符和库函数、是否构造对象)
2,解释struct的字节对齐,估计是昨天的试卷这个错误比较严重,为什么要对齐,如何实现两个结构体的比较相等,可以用compare()按字节比较吗?(对齐的作用;逐个成员比较)
3,指针和引用的区别(是否拷贝,是否同一实体,是否绝对安全,引用只能初始化并且以后不能改变)
4,什么技术可以代替宏定义(这其实考的面非常广,看你软件开发的经验,看你对宏技术发展的理解;C++里面可以:const实现常量、inline内联替代宏函数、typedef替代类型定义、条件编译)
5,描述下快速排序的思想,时间复杂度是多少,什么情况下复杂度最大(根本在于分治法;O(log(n));已排序好)
6,写下二分查找
7,动态链接库的接口函数是什么(dlopen类,这是显示链接共享库,我从来没用过)
8,云上传是怎么实现秒传的(MD5)
  • 8
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值