深信服实习面筋

下面是实习面试过程中的一些总结:

面经1

一面:

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函数等发送信号;进程注册信号,内核监控,进程切换至内核,检测是否发生信号,传递信号,进入进程的信号服务函数)

面经2

一面:

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)

面经3

深信服-星云计划 失败
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的具体内容。 无奈。

面经4

一面

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)

猜你喜欢

转载自blog.csdn.net/u012414189/article/details/84881739