百度智能云-后端研发-电话一面

时间:7.19
方式:电话一面
部门:百度智能云
岗位:后端研发
时长:1小时左右

先问基础(25分钟左右)
1. 二叉树有哪几种形式?
答:
二叉查找树、平衡二叉树、红黑树、B+树、B-树、字典树、后缀树、广义后缀树。
2. 二叉树有哪几种遍历方式?
答:
前序遍历、中序遍历、后序遍历、层次遍历。
3. 有一个双向链表,在a后插入一个节点,描述下插入过程?
答:
在结点a后插入结点s

在结点b前插入结点s

4. 进程和线程的区别?
答:
1) 一个程序至少有一个进程,一个进程至少有一个线程。
2) 线程的划分尺度小于进程,使得多线程程序的并发性高。
3) 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4)从执行过程来看,每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
5. 进程间通信方式?
答:
管道、信号、消息队列、共享内存、信号量、套接字。
6. 进程死掉后,内存是否会被释放?
答:
我理解的是:进程退出(终止)后,操作系统会自动回收内存。如果异议,欢迎讨论。
7. 讲一下僵尸进程?
答:
一个进程使用fork创建子进程,如果子进程退出,而父进程没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称为僵尸进程。
当父进程退出后,这个僵尸进程成为了孤儿进程,过继给了init进程,而init进程会周期性的调用wait系统调用来清除各个僵尸进程的子进程。
8. 讲下TIME_WAIT?
答:
1. A不能保证最后的ACK能达到B,如果最后的ACK丢失, 那么B显然收不到, B于是发起了重传FIN的操作, 此时如果A处于CLOSED的状态, 就没办法给对端发ACK了,所以A应该等一段时间,这段时间就是所谓的TIME_WAIT。
2. 保证新旧四元组互不干扰,假设tcp连接是: A(1.2.3.4:8888)------B(6.7.8.9:9999), 这就是一个tcp四元组。 当tcp连接关闭后, 四元组释放。 后面的新连接可能会重用到这个四元组(有这个可能性), 那么问题就来了: 新四元组和旧四元组完全一致, 他们的网络包会混乱吗?所以,可以考虑这样一个机制:让旧四元组对应的所有网络包都消失后(等一段时间),才允许新四元组建立,颇有点锁的味道。这个等一段时间就是2MSL。
9. 如果一个TCP连接处于TIME_WAIT状态,现在想立刻重用旧连接的端口,socket中应该加哪个选项参数?
答:
SO_REUSEADDR。一般来说,一个端口释放后会等待两分钟左右才能再被使用,而使用SO_REUSEADDR则可以让端口释放后立即被再次使用。
10. 讲下TCP/UDP的应用场景?
答:
TCP适合对效率要求相对低,但对准确性要求相对高或者是有连接的场景,TCP一般用于文件传输(HTTP,HTTPS,FTP等协议),邮件(POP,SMTP等协议),远程登录等场景;UDP更适合对效率要求相对高,对准确性要求相对低的场景,UDP一般用于即时通信(QQ聊天),在线视频(rtsp流速度一定要快,偶尔丢包没关系),网络语音电话等场景;
11. 了解HTTP协议吗?
答:
HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)。HTTP的特点是:简单快速,灵活,无连接,无状态,支持B/S及C/S模式。
推荐:https://www.cnblogs.com/ranyonsue/p/5984001.html
12. 了解Shell脚本吗?
答:
Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
推荐:https://www.runoob.com/linux/linux-shell.html

13. 了解01背包吗?

答:

推荐:https://zhuanlan.zhihu.com/p/68351189

再问项目(25分钟左右)
1. 接入中间件,如何实现的?
2. 指令下发模块,为什么采用UDP-Socket进行通信?
3. 多屏流媒体播放器,视频延迟及稳定性怎么解决的?
4. 视频分析服务器,人脸库是调用的哪里的?检测效率和稳定性如何解决?

你还要什么要问我的?(10分钟左右)
1. 请问你们部门后端使用的主流语言是什么?
面试官答:主要用Python和Go语言,当然也有部分工作需要C++和Java语言进行开发。
2. 请问你们部门使用了哪些主流开源框架?
面试官答:我们使用的开源框架也有很多,主要选用有社区维护,开源时间比较长,稳定性比较好的一些开源框架,对于一些比较新的框架我们较少采用。
3. 请问你们部门怎么看待开源项目呢?
面试官答:面向商业的产品是不能开源的,如果是自己写的一个组件或者插件,希望更多人使用,是可以开源的。

觉得和面试官聊的挺开心,不管有没有过,收获还是蛮多的!

原文地址:https://www.cnblogs.com/zkfopen/p/11217947.html