字节跳动 C++实习 一面
1. 计算机网络的五层模型和七层模型分别是什么
答案:五层模型一般是应用层、传输层、网络层、数据链路层、物理层。七层模型也就是 OSI 模型,分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。实际工程里讲得更多的是 TCP/IP 分层和五层模型,因为更贴近真实协议栈实现。七层模型更像一种教学和抽象方式,方便理解不同职责是如何拆分的。比如 HTTP、DNS 这种通常归在应用层,TCP/UDP 在传输层,IP 在网络层,以太网协议在数据链路层。
2. TCP 和 UDP 在哪一层,它们分别解决什么问题
答案:TCP 和 UDP 都属于传输层协议。传输层主要解决的是端到端通信问题,也就是主机上的某个进程如何把数据可靠或者高效地送到另一台主机上的某个进程。TCP 提供面向连接、可靠、有序、带流量控制和拥塞控制的传输服务;UDP 提供无连接、尽力而为、报文边界清晰的传输服务。如果业务更重视可靠性和顺序,比如 RPC、数据库连接、文件传输,通常会选 TCP;如果更在意时延和实现灵活性,比如实时音视频、DNS、在线游戏状态同步,UDP 更常见。
3. 详细讲一下 TCP 和 UDP 协议
答案:TCP 是字节流协议,通信双方建立连接后,发送方写入的是一串连续字节,接收方读到的也是字节流,所以应用层自己要处理消息边界。它的可靠性来自序列号、确认应答、超时重传、滑动窗口、流量控制和拥塞控制。UDP 是数据报协议,发送方发一个包,接收方就按包接收,协议层保留报文边界。它不保证一定送达,也不保证顺序、不做重传、不做拥塞控制,因此头部更小,时延更低。TCP 更像一个“可靠管道”,UDP 更像“直接投递消息”。不过现实里很多高性能协议会在 UDP 之上自己实现可靠性、重传和拥塞控制,比如 QUIC,这说明 TCP/UDP 的选择不只是“要不要可靠”,还跟时延控制、连接迁移、用户态实现能力有关。
4. 讲讲 TCP 三次握手和四次挥手的过程
答案:三次握手的过程是:客户端先发送 SYN,表示希望建立连接并携带自己的初始序列号;服务端收到后返回 SYN+ACK,表示同意建立连接,同时确认客户端的 SYN,并带上自己的初始序列号;客户端再发送 ACK,确认服务端的 SYN,连接建立完成。之所以是三次,不是两次,是因为双方都要确认“发送能力”和“接收能力”基本正常,而且要同步各自的初始序列号。四次挥手时,主动关闭方先发 FIN,表示自己不再发送数据;被动关闭方回 ACK,表示这个关闭请求我收到了;等它自己的数据也发完后,再发一个 FIN;最后主动关闭方回 ACK,连接彻底关闭。主动关闭方通常会进入 TIME_WAIT,目的是防止最后一个 ACK 丢失导致对端重发 FIN,同时也避免旧连接中的延迟报文影响后续新连接。
5. 如果已经有三次握手了,为什么还需要 TIME_WAIT
答案:TIME_WAIT 主要解决两个问题。第一个是保证被动关闭方如果没收到最后一个 ACK,能够重发 FIN,而主动关闭方还来得及再回 ACK。第二个是让网络中属于旧连接的延迟报文在一段时间内自然消失,避免后面新建同样四元组的连接时被误收。所以 TIME_WAIT 不是多余设计,而是可靠关闭的一部分。线上如果发现 TIME_WAIT 很多,不能只想着“怎么关掉它”,更应该先判断是不是短连接过多、连接复用做得不够、端口耗尽风险升高。
6. HTTP 和 HTTPS 的区别是什么
答案:HTTP 是明文传输协议,本身不提供加密、身份认证和完整性保护。HTTPS 本质上是 HTTP 跑在 TLS 之上,通过 TLS 提供加密通信、服务端身份认证以及消息完整性校验。从默认端口看,HTTP 常用 80,HTTPS 常用 443。从安全性看,HTTP 在传输过程中容易被窃听、篡改和冒充;HTTPS 能较好解决这些问题。现代互联网里,HTTPS 基本已经是默认选择,不只是因为“更安全”,还因为很多浏览器、平台能力和新协议生态都默认围绕 HTTPS 建设。
7. HTTPS 是怎么通过 SSL/TLS 完成加密通信的
答案:HTTPS 并不是每次都直接用非对称加密传全部数据,那样开销太大。典型过程是先通过 TLS 握手协商协议版本、密码套件、随机数等信息,服务端把证书发给客户端,客户端校验证书链、域名和签名是否合法。校验通过后,双方通过密钥交换机制协商出一个会话密钥,后续真正的大量应用数据传输主要靠这个对称密钥加密。也就是说,TLS 通常是“非对称加密 + 证书认证 + 对称加密”的组合方案。TLS 1.3 相比旧版本进一步简化了握手流程,减少了往返时延,也去掉了一些不安全和过时的算法。
8. 非对称加密和对称加密分别是什么,实际协作过程是怎样的
答案:对称加密指加密和解密使用同一个密钥,优点是速度快,适合大量数据加密;缺点是密钥分发困难。非对称加密使用公钥和私钥,公钥公开、私钥自己保存。公钥加密的数据通常只能私钥解密,或者私钥签名、公钥验签。它更适合做身份认证、密钥交换和数字签名,但性能通常比对称加密差。实际 TLS 里,往往不是直接拿 RSA 或 ECC 去加密整段业务数据,而是先利用非对称体系完成身份认证和密钥协商,再用协商出的对称密钥进行后续高效加密通信。所以面试里如果问这题,重点不是背定义,而是说清楚为什么现实系统里要把两者组合起来用。
9. 你知道哪些对称加密算法,AES 为什么更常见
答案:常见对称加密算法有 AES、DES、3DES、ChaCha20、SM4 等。DES 因为密钥长度太短已经不安全了,3DES 也比较老,性能和安全性都不再占优。AES 非常常见,一方面是安全性经过广泛验证,另一方面是很多 CPU 都提供了 AES-NI 这类硬件加速指令,工程上性能很好。在移动端或者某些没有 AES 硬件加速的平台,ChaCha20-Poly1305 也很有竞争力。所以
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.
查看14道真题和解析