字节跳动 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++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论

相关推荐

05-04 08:23
东南大学 C++
一、基本情况与项目背景1.请做一个简单自我介绍。2.详细介绍一下你在字节做的端智能 SDK / 特征平台项目。3.端上的原始数据流主要包含哪些内容?4.这些数据是在端上落库,还是会上报云端?两条链路分别做什么?5.业务方如何注册、消费自定义特征?二、设备特征缓存优化6.设备特征缓存优化的背景是什么?原来性能瓶颈在哪里?7.为什么设备特征可以牺牲一部分时效性来换性能?8.为什么从统一 TTL 改成 2 秒 / 10 秒 / 90 秒分层 TTL?9.不同 TTL 档位分别适合哪些设备特征?10.你们是如何通过打点、实验和 A/B 验证优化效果的?三、C++ 智能指针11.你对 C++ 智能指针的理解是什么?12.unique_ptr、shared_ptr、weak_ptr 分别适合什么场景?13.shared_ptr 的引用计数机制是什么?14.weak_ptr 如何解决 shared_ptr 的循环引用问题?四、特征 SQL 复用优化15.端上 SDK 为什么会涉及 SQL 复用优化?16.端上本地数据库里存的是什么,业务方为什么会查它?17.特征 SQL 查询的性能瓶颈是什么?18.为什么这些 SQL 可以模板化、签名化和合并?19.为什么第一版 UNION ALL 优化效果不理想?20.后续“提取时间戳 + 最小时间戳查询 + 应用层分发”的方案是怎么做的?21.SQL 优化最终在单模块和全链路上分别带来了多少收益?五、直播端智能 / ABR 开放题22.你了解 ABR 吗?23.如果要判断用户是“画质敏感型”还是“流畅度敏感型”,你会在端上采集哪些特征?24.你会如何结合设备信息、网络状态、历史行为来设计直播画质 / 流畅度策略?25.端智能场景里,你是否接触过模型推理链路?六、AI 投资分析系统 / Multi-Agent26.介绍一下你的多 Agent 投资分析系统。27.主控 Agent、数据 Agent、新闻 Agent、知识库 Agent、分析 Agent 分别负责什么?28.多 Agent 之间的数据和上下文是怎么流转的?29.相比单 Agent,多 Agent 架构在上下文管理、幻觉控制和问题排查上有什么优势?30.多 Agent 架构会带来哪些复杂度和维护成本?31.真实金融行情数据是如何通过 API 接入系统的?七、Skill / 智能日志分析开放题32.你有没有自己写过 skill?平时如何使用 skill?33.如果要做一个直播播放日志智能分析工具,你会设计成 Agent 还是 Skill?为什么?34.如果有历史文档和代码库说明日志含义,你会如何构建知识库或 RAG?35.用户反馈某个视频播放卡顿时,如何定位、筛选并分析对应播放日志?36.日志分析系统里,工具调用、RAG、意图识别、日志筛选、错误码解释分别怎么设计?37.你会选择 ReAct、Plan-and-Execute,还是其他框架来实现这个日志分析系统?八、计算机网络 / 拥塞控制38.你了解拥塞控制吗?它主要解决什么问题?39.拥塞窗口是如何变化的?40.慢启动、拥塞避免、丢包后的窗口调整分别是怎么回事?九、C++ 基础 / 多态41.说一下 C++ 的多态特性。42.静态多态和动态多态分别是什么?43.动态多态如何通过继承、虚函数、虚函数表实现?十、Git 基础44.你实习开发中常用哪些 Git 指令?45.你平时如何创建分支、提交代码、推送代码、拉取更新?46.遇到 Git 冲突一般怎么处理?十一、算法题:两个有序数组中位数47.用 C++ 实现两个有序数组取中位数。48.先讲一下你的解题思路。49.暴力合并排序方案有什么可以优化的地方?50.既然两个数组本身有序,能否用双指针合并,避免再次 sort?51.有没有更高阶的二分解法?十二、实习时间与岗位匹配52.你本科期间是怎么安排时间去北京字节实习的?53.如果来小红书实习,最早什么时候可以到岗?54.你更倾向上海还是北京 base?55.你对“产品工程师”这个岗位定位的理解是什么?56.你对直播 SDK / 播放器 SDK / 端智能策略方向是否感兴趣?
点赞 评论 收藏
分享
05-04 08:26
东南大学 C++
一、基本情况 / 求职意向1.你先简单做一下自我介绍。2.你现在这段实习,最早什么时候可以到岗?预计能实习多久?3.你之前在北京实习,现在这个岗位在上海,你对 base 地点是怎么规划的?4.你之前实习是研发岗位,现在投递的是质量工程 / 测试开发岗位,这个方向转变你是怎么考虑的?5.你对质量工程、测试开发岗位的理解是什么?6.你长期职业规划是怎样的?未来更偏研发、质量效能,还是 AI 工程方向?7.你怎么看未来研发岗、测试开发岗、客户端岗、后端岗和 AI 的关系?二、字节实习项目:端智能特征平台8.你在字节实习期间主要做了什么事情?9.你们端智能团队的端上特征平台主要解决什么问题?10.端上原始事件是如何被处理成复杂特征并供业务方使用的?11.你在这个项目里主要负责哪些部分?12.你做的 C++ 性能优化、缓存优化、SQL 优化分别是什么?13.你在实习中做过哪些自动化测试相关工作?三、自动化测试 / MCP / Agent 生成用例14.你做的自动化测试主要包含哪些内容?15.你们的自动化测试是完全自动化,还是需要人工触发?16.这个自动化测试主要是针对客户端接口,还是服务端接口?17.这些测试用例是在端上跑的吗?运行环境是什么?18.你做的 MCP 在自动化测试流程中起什么作用?19.这个 Agent 生成测试用例时,依赖哪些信息?20.MCP 更像知识库,还是工具调用?21.用户需要输入什么,Agent 才能生成测试用例?22.为什么你们选择基于新增接口增量生成测试用例,而不是全量生成?23.Agent 如何根据新增接口生成对应的测试用例?24.如果新增接口存在上下游调用链路或依赖关系,Agent 怎么识别和处理?25.如果一个接口必须依赖前置接口返回值才能调用,你会如何设计 Agent / Skill 支持这种测试用例生成?26.接口之间的依赖关系应该放在哪一层?是在工具返回结果、JSON 结构、接口文档,还是系统提示词里?27.如果 A 接口依赖已有的 B、C 接口,这种依赖信息应该在研发测试流程的哪个阶段补充?28.你怎么让 Agent 显式知道“某个参数来自哪个前置接口的哪个字段”?29.如果只依赖模型自己理解调用链,会有什么问题?如何降低对模型能力的依赖?四、自动化测试通知 / 飞书机器人 / 端侧测试环境30.你开发的自动化测试提醒飞书机器人具体做了什么?31.飞书机器人是如何检测版本更新、触发测试并通知结果的?32.这个流程为什么在接入抖音流水线时会遇到困难?33.你们这里说的“端”具体是安卓、iOS、鸿蒙这些客户端吗?34.自动化测试用例是集成在宿主 App 里运行的吗?35.端上自动化测试是通过 API 调用完成,还是会模拟用户点击、按钮操作等真实事件?36.压力测试和接口测试在你们自动化测试体系里分别是什么?37.你当时主要补的是接口测试用例,还是压力测试用例?五、AI 参与开发 / 自动化闭环38.在你整个开发和自动化用例生成过程中,AI 参与度大概有多高?39.AI 主要参与了哪些部分?比如方案设计、代码生成、测试用例生成、调试排查等。40.代码开发中 AI 生成占比大概多少?人工主要负责什么?41.测试用例生成后,如何判断它是否正确?42.如果 AI 生成的测试用例跑不通,你如何判断是用例问题,还是被测接口本身有问题?43.如果要实现“全程无人参与”的 AI 自动化测试闭环,还需要哪些能力?44.现在人工在自动化测试流程中主要参与哪些环节?45.如何让 AI 自动识别新增接口并判断是否需要补测试用例?46.如何让 AI 在本地或模拟环境中自动运行生成的测试用例?47.如何让 AI 消费测试结果,而不是人工消费测试结果?48.测试结果如果要交给 AI 分析,需要具备哪些前提条件?49.测试结果应该如何结构化,才能让 AI 定位失败原因?50.AI 能否根据失败日志定位到对应测试用例、接口、代码位置和调用链路?51.如果进一步让 AI 自动修复问题,你觉得风险和边界在哪里?52.从开发、测试、修复到上线都由 AI 系统参与,这个方向你怎么看?六、模型选择 / 模型能力53.你实习期间主要使用过哪些模型?54.当时用过 Google Gemini、豆包、Kimi 等模型?效果怎么样?55.在自动化测试用例生成场景中,模型能力强弱会影响哪些环节?56.如果模型能力不足,应该通过工具、结构化信息、提示词还是流程约束来补足?七、AI 投资分析系统 / Multi-Agent 项目57.你的 AI 投资分析系统是自己做的项目吗?58.这个系统主要是去公网检索新闻信息并做分析吗?59.这个系统整体架构是什么?60.主控 Agent、数据 Agent、新闻 Agent、知识库 Agent、总分析 Agent 分别负责什么?61.新闻 Agent 是否可以理解为类似“联网搜索 / 爬虫”工具型 Agent?62.这个项目现在效果怎么样?63.你是否做了系统化评测,比如人工测试集、自动评测集、准确率统计?64.从用户角度看,它给出的投资建议准确率大概有值吗?65.你做这个系统的目的,是练手还是自己真实有投资分析需求?66.你有没有按它的分析结果进行真实买入卖出?67.如果后续要提升它的推荐或判断准确度,你会从哪些方面优化?68.是否需要构建历史数据评测集或回测体系来验证它的有效性?69.是否需要引入更专业的量化模型、金融模型或更强的大模型?70.如何让系统既给出有参考价值的建议,又避免过度绝对化、误导用户?八、项目实现 / 技术栈71.你的 AI 投资分析系统是怎么开发的?73.Agent 编排是基于 LangChain 吗?74.News Agent 具体是怎么调用联网搜索并返回结果的?75.你主要熟悉 C++,为什么这个项目用了 Python?76.你怎么看不同开发语言之间的壁垒?九、算法题:用给定数字组成小于目标值的最大数77.给定一个目标数字,比如 249,以及可用数字集合,比如 1、2、3,如何组成一个小于目标值的最大数?78.你讲一下这道题的思路。
点赞 评论 收藏
分享
评论
1
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务