百度一面:
1、实验室项目里面使用什么建模的
2、进程和线程具体的区别
通俗说法:
一个进程可以包括很多线程
同一个进程下的线程共享全局变量、静态变量
进程是资源分配的最小单位,线程是程序执行的最小单位。
进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
3、协程
Python语言中有协程
4、ngnix高性能服务器,为啥高性能
简单介绍ngnix
Nginx是一个流行的高性能服务器,官方宣称在压力测试下可以支持5万个并发连接,而且占用内存极低。相比于其他昂贵的硬件负载均衡解决方案,Nginx是开源免费的,可以大大降低成本。本文将从一下几个方面来剖析其内部结构。
- 特点
进程模型
- 惊羣效应
- 负载均衡
核心模块
- 模块分类
- 事件驱动模块机制
- 反向代理模块
- 配置文件
Nginx的特点
Nginx是俄罗斯工程师开发的高性能Web服务器,为了实现高效Nginx全部采用C语言编写,因为底层对不同的操作系统进行了封装,所以Nginx实现了平台无关性。 众所周知,Nginx性能高,而高性能与其架构是分不开的。Nginx采用多工作进程的方式处理连接请求,并且利用Cpu和进程的亲缘性将进程和特定Cpu绑定,在实现并发的同时避免了进程上下文切换的开销。同时,所有的Io操作,不管是网络Io还是磁盘Io,Nginx统一采用Linux内核的Epoll机制配合回调函数实现异步。这使得Nginx可以轻轻松松实现万级别的并发,相比其他主流Web服务器,如Apache的千级别的并发有很大的进步。除了上述两大特点外,Nginx内部处处可见大量的细节优化也是Nginx高效的基石。
5、输入一个URL,如何显示页面的过程
基本答出DNS 域名解析,TCP协议,HTTP协议
6、TCP三次握手
客户端发送链接请求给服务器,服务器确认连接请求,客户端再回一个收到确认。连接建立。
7、为什么需要三次握手
防止已过期的请求再发给服务器。
8、Time_wait
四次挥手,结束连接的过程中,收到服务器第三次挥手的报文等待2MSL再关闭客户端,是为了让最后一次确认报文顺利传到服务器。
9、什么是TCP粘包
TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
10、网络模型分几个层次
OSI 七层参考模型
11、TCP,UDP的区别
TCP面向连接可靠,UDP不用面向连接,不可靠。
- TCP面向连接(三次握手),通信前需要先建立连接;UDP面向无连接,通信前不需要连接。
- TCP通过序号、重传、流量控制、拥塞控制实现可靠传输;UDP不保障可靠传输,尽最大努力交付。
- TCP面向字节流传输,因此可以被分割并在接收端重组;UDP面向数据报传输。
12、流量控制和拥塞控制的区别
流控理解为 端到端的控制
拥塞控制是A与B之间的通信子网(通信子网是下3层的事)发生数据拥堵,来不及传输,这个牵涉的是网络节点的事。
13、TCP出现在传输层,IP在网络层
14、什么是平衡二叉树
左子数的深度和右子树的深度不超过1
15、快速排序和堆排序,什么是稳定和不稳定
快速排序分治
堆排序基于堆的思想
快速排序不稳定。
稳定就是原来再前的数,排序后还再前。
16、单链表如何判断有环?环的位置在哪?
快慢指针,剑指offer题目。
17、你来实习能实习多久?
18、部门做啥的,DuerOS,人工智能操作系统,度祕事业部。
百度二面:
1、TCP协议和IP协议有什么关系
TCP协议再IP协议之上。
2、TCP是如何保证可靠传输的
确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。
数据校验
数据合理分片和排序:
3、是如何确认的
滑动窗口机制
4、发送端是如何确认需要重传哪些包的
5、TCP和HTTP的关系,HTTP还可以基于什么传输
HTTP在TCP之上,
6、HTTP和HTTPS的关系
HTTPS的全称是Secure Hypertext Transfer Protocol(安全超文本传输协议),是在http协议基础上增加了使用SSL加密传送信息的协议。
7、加密算法有哪些,如何理解MD5
8、Linux如何创建空文件,创建目录指令,find如何查找用户名为work的文件,(答的不好)
mkdir, find
GDB的题目也经常考
9、如何调试的,GDB调试,
10、GDB如何打印当前进程的堆栈-(gdb) bt
11、如何将当前客户端的内容发送给其他客户端,如何实现的。
进程间通信吗?
12、同时发消息,是以什么顺序发送给其他人的
13、同时有一万人,同时说一句话,服务器没法处理的,该怎么办
14、短连接和长连接,聊天室是采取哪种连接方式。
短链接连一次就断开,长连接就是一直连着,不断开。
15、那你的聊天室采用短连接,连接的客户端又断开了,那你怎么发送数据给其他客户端的。
16、实验室项目介绍。
17、你有什么问题问我。
1、介绍一下web服务器的架构和实现(语速慢点)
2、智能指针(等面试官说完话在回答)
C++11 中4种智能指针,较难
3、http里面列举几个消息头,最常用的消息头。
GET | 向Web服务器请求一个文件 |
POST | 向Web服务器发送数据让Web服务器进行处理 |
PUT | 向Web服务器发送数据并存储在Web服务器内部 |
HEAD | 检查一个对象是否存在 |
DELETE | 从Web服务器上删除一个文件 |
CONNECT | 对通道提供支持 |
TRACE | 跟踪到服务器的路径 |
OPTIONS | 查询Web服务器的性能 |
4、为什么不使用多进程形式?
5、nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器
6、get文件返回和二进制文件返回有什么区别
7、主进程和工作线程中,epoll对套接字的复用是如何做的。
解释epoll函数
8、线程的套接字和主进程的套接字是如何作用的
9、华为挑战赛讲一下,做了多久。
10、实验室项目,技术层面上讲
11、做题目多线程归并排序
比较难
1、UTF8和GD2312的区别
2、一个汉字在GD2312中是几个字节表示的
前面两道题目为编码的问题
3、Linux进程栈和堆的空间如何分配和释放的
C/C++ 编程语言种堆空间需要手动释放,栈空间自动释放
4、进程栈和线程栈的区别
5、线程栈是在哪里分配的
6、TCP是如何处理粘包的问题
7、malloc的内存分配方式
8、二叉树找公共祖先,只有root节点和两个节点指针。
剑指offer
9、无序的整数数组,使得奇数在前面,所有的偶数都在后面。
快排。