JL Prepare


前言

正文

自我介绍一下

个人资料:一句话,占比5%左右
学习技能:半分钟~一分钟,占比20%左右
项目和经历:一分钟左右,占比45%左右
工作体会:半分钟,占比15%左右
一句话左右:职业规划,占比10%左右
一句话:兴趣占比,占比5%左右

干货:程序员面试时如何做“自我介绍”

一、专业技能

1. 请你介绍一下STL有哪些容器,并且他们的底层结构是怎么样的,有哪些应用场景?

  1. vector
    底层结构:为数组,为线性连续空间。
    应用场景:在一些有大量查询,更改操作,而增删操作较少的地方使用。

  2. list
    底层结构:为双向链表
    应用场景:支持快速增删,最查询效率较低。

  3. map
    底层结构:红黑树
    应用场景:其查找,删除,增加等一系列操作的时间复杂度都是稳定的。都为O(LOGN).

  4. unordered_map
    底层结构:哈希表
    应用场景:查找,删除,添加的速度快,时间复杂度为O(c).

  5. deque
    底层结构:一个中央控制器和多个缓冲区。是一种双向开口的连续线性空间。
    应用场景:可以高效的在头尾两端插入和删除元素。

2. OSI七层模型有哪些?简述一下

  1. 应用层

  2. 表示层

  3. 会话层

  4. 传输层

  5. 网络层

  6. 数据链路层

  7. 物理层

3. UDP与TCP的区别是什么?

  1. 连接性:UDP是无连接的,TCP是基于连接的。

  2. 消耗的资源:UDP消耗的资源比TCP消耗的资源少。

  3. UDP是数据报,TCP是基于流传输的。

  4. TCP是可靠传输,UDP是不可靠传输。

4. TCP如何实现其可靠性?

  1. 序列号和确认应答信号。

  2. 重传机制

  3. 流量控制

  4. 拥塞控制

5 滑动窗口管理(未收到确认信号,可持续发送的数据长度)

5. UDP如何也能做到可靠性?(RUDP:Reliable UDP)

  1. 首先,不同场景对可靠的需求是不一样的,有这么三个点:
  1. 尽力可靠:通信的接收方要求发送方的数据尽量完整到达,但业务本身的数据是可以允许缺失的。例如:音视频数据。

  2. 无序可靠:通信的接收方要求发送方的数据必须完整到达,但可以不管到达的先后顺序.例如:文件传输、白板书写、图形实时绘制数据、日志型追加数据。

  3. 有序可靠:通信接收方要求发送方的数据必须按顺序完整到达。

  1. 为什么要用UDP做可靠保证?
    在保证通信的时延和质量的条件下尽量降低成本。

  2. RUDP主要解决的问题?

  1. 端到端连通性问题:一般终端直接和终端通信都会涉及到 NAT 穿越,TCP 在 NAT 穿越实现非常困难,相对来说 UDP 穿越 NAT 却简单很多.

  2. 弱网环境传输问题。

  3. 带宽竞争问题:客户端数据上传需要突破本身 TCP 公平性的限制来达到高速低延时和稳定,也就是说要用特殊的流控算法来压榨客户端上传带宽。

  4. 传输路径优化问题: 在一些对延时要求很高的场景下,会用应用层 relay 的方式来做传输路由优化,也就是动态智能选路,这时双方采用 RUDP 方式来传输,中间的延迟进行 relay 选路优化延时。

  5. 资源优化问题:某些场景为了避免 TCP 的三次握手和四次挥手的过程,会采用 RUDP 来优化资源的占用率和响应时间,提高系统的并发能力,例如 QUIC.

4, RUDP如何保证可靠性?

  1. 重传模式: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的稳定性与有序性的?

项目总体询问

1. 在这个项目的过程中最让你满意的是什么?

2. 能不能介绍一下你平时遇到的一个比较印象深刻的问题,以及你的解决思路。(准备3个问题进行探讨)

四、技术面反问

1. 咱公司的技术栈的需求是怎么样的?

2. 技术人员的整体晋升通道是怎么样的?

五、HR面询问

1. 你的职业规划是怎么样的?

参考