JL Prepare
前言
正文
自我介绍一下
个人资料:一句话,占比5%左右
学习技能:半分钟~一分钟,占比20%左右
项目和经历:一分钟左右,占比45%左右
工作体会:半分钟,占比15%左右
一句话左右:职业规划,占比10%左右
一句话:兴趣占比,占比5%左右
干货:程序员面试时如何做“自我介绍”
一、专业技能
1. 请你介绍一下STL有哪些容器,并且他们的底层结构是怎么样的,有哪些应用场景?
-
vector
底层结构:为数组,为线性连续空间。
应用场景:在一些有大量查询,更改操作,而增删操作较少的地方使用。 -
list
底层结构:为双向链表
应用场景:支持快速增删,最查询效率较低。 -
map
底层结构:红黑树
应用场景:其查找,删除,增加等一系列操作的时间复杂度都是稳定的。都为O(LOGN). -
unordered_map
底层结构:哈希表
应用场景:查找,删除,添加的速度快,时间复杂度为O(c). -
deque
底层结构:一个中央控制器和多个缓冲区。是一种双向开口的连续线性空间。
应用场景:可以高效的在头尾两端插入和删除元素。
2. OSI七层模型有哪些?简述一下
-
应用层
-
表示层
-
会话层
-
传输层
-
网络层
-
数据链路层
-
物理层
3. UDP与TCP的区别是什么?
-
连接性:UDP是无连接的,TCP是基于连接的。
-
消耗的资源:UDP消耗的资源比TCP消耗的资源少。
-
UDP是数据报,TCP是基于流传输的。
-
TCP是可靠传输,UDP是不可靠传输。
4. TCP如何实现其可靠性?
-
序列号和确认应答信号。
-
重传机制
-
流量控制
-
拥塞控制
5 滑动窗口管理(未收到确认信号,可持续发送的数据长度)
5. UDP如何也能做到可靠性?(RUDP:Reliable UDP)
- 首先,不同场景对可靠的需求是不一样的,有这么三个点:
-
尽力可靠:通信的接收方要求发送方的数据尽量完整到达,但业务本身的数据是可以允许缺失的。例如:音视频数据。
-
无序可靠:通信的接收方要求发送方的数据必须完整到达,但可以不管到达的先后顺序.例如:文件传输、白板书写、图形实时绘制数据、日志型追加数据。
-
有序可靠:通信接收方要求发送方的数据必须按顺序完整到达。
-
为什么要用UDP做可靠保证?
在保证通信的时延和质量的条件下尽量降低成本。 -
RUDP主要解决的问题?
-
端到端连通性问题:一般终端直接和终端通信都会涉及到 NAT 穿越,TCP 在 NAT 穿越实现非常困难,相对来说 UDP 穿越 NAT 却简单很多.
-
弱网环境传输问题。
-
带宽竞争问题:客户端数据上传需要突破本身 TCP 公平性的限制来达到高速低延时和稳定,也就是说要用特殊的流控算法来压榨客户端上传带宽。
-
传输路径优化问题: 在一些对延时要求很高的场景下,会用应用层 relay 的方式来做传输路由优化,也就是动态智能选路,这时双方采用 RUDP 方式来传输,中间的延迟进行 relay 选路优化延时。
-
资源优化问题:某些场景为了避免 TCP 的三次握手和四次挥手的过程,会采用 RUDP 来优化资源的占用率和响应时间,提高系统的并发能力,例如 QUIC.
4, RUDP如何保证可靠性?
- 重传模式:RUDP 的重传是发送端通过接收端 ACK 的丢包信息反馈来进行数据重传,发送端会根据场景来设计自己的重传方式,重传方式分为三类:定时重传、请求重传和 FEC 选择重传。
A. 定时重传:发送端如果在发出数据包(T1)时刻,在一个RTO(Retransmission TimeOut即重传超时时间)之后,还未收到这个数据包的ACK消息,那么发送端就重传这个数据包。
B.请求重传: 接收端在发送ACK的时候携带自己丢失报文的信息反馈,发送端在接收到ACK信息时根据丢包反馈进行报文重传。
参考
6. 手写一个单例模式?
7. 手写一个装饰器模式(简单介绍一下装饰器模式)?
8. 介绍一下I/O复用技术?并阐述一下他们的底层原理?
9. socket套接字进行通讯的整个流程?
二、工作经历
1.
三、项目经历
第一个项目
1. 简单介绍一下回调函数以及描述一下如何使用回调函数?
2. 为什么使用select函数,而不使用epoll函数?
第二个项目
1. 介绍一下共享内存
2. 介绍一下反射调用
3. 你学到了哪些提升程序性能的方法?
4. 所以高速状况下,你是如何保持好IO的稳定性与有序性的?
项目总体询问