字节跳动校招-校园实习-剪映ai剪辑开发-二面面经

项目架构设计(QtMediaPlayer)
项目整体设计
1. 项目立项时的整体架构如何设计?
2. 项目中的类层次是如何划分的?
3. 为什么采用分层设计?
4. UI层、业务层、网络层、数据层分别负责什么?
5. 如何降低模块之间耦合?
NetworkClient设计
6. 如果不用 Qt,NetworkClient 如何设计?
7. 如何抽象网络层接口?
8. 为什么要定义 INetworkClient?
9. 如何做到业务层不依赖 Qt?
10. Get 接口如何定义?
11. HttpRequest 为什么要单独封装?
12. HttpResponse 为什么要单独封装?
13. 如何支持不同网络库切换?
14. 如何实现依赖倒置原则?
15. 如何实现网络层与业务层解耦?
异步请求设计
16. 异步请求有哪些实现方式?
17. callback 和 future 有什么区别?
18. 为什么项目中选择 callback?
19. Qt 信号槽和 callback 有什么区别?
20. 异步请求如何返回结果?
智能指针与内存管理
21. shared_ptr 原理是什么?
22. shared_ptr 的控制块(Control Block)包含什么?
23. shared_ptr 是否线程安全?
24. shared_ptr 多线程下有哪些风险?
25. 什么是循环引用?
26. weak_ptr 原理是什么?
27. weak_ptr 如何解决循环引用?
28. weak_ptr::lock() 做了什么?
29. unique_ptr 和 shared_ptr 区别?
30. 项目中哪些场景适合 unique_ptr?
31. make_unique 和 new 的区别?
Lambda 与现代 C++
32. Lambda 有哪些捕获方式?
33. [this] 和 [*this] 的区别?
34. Lambda 底层是如何实现的?
35. 编译器如何识别 Lambda?
36. 为什么无捕获 Lambda 可以转换为函数指针?
37. 为什么有捕获 Lambda 不能转换为函数指针?
38. Lambda 在异步回调中有什么风险?
移动语义
39. std::move 本质是什么?
40. 什么是右值引用?
41. 移动构造什么时候触发?
42. 为什么移动构造效率更高?
43. 为什么移动构造通常加 noexcept?
44. move 后对象处于什么状态?
STL
vector
45. vector 底层结构是什么?
46. vector 为什么支持随机访问?
47. vector 扩容机制是什么?
48. vector 扩容流程是什么?
49. vector 扩容时什么时候移动?
50. vector 扩容时什么时候拷贝?
51. noexcept 为什么影响 vector 扩容?
52. vector 与 list 区别?
53. vector 删除元素为什么慢?
map / unordered_map
54. map 底层数据结构是什么?
55. unordered_map 底层数据结构是什么?
56. map 和 unordered_map 区别?
57. unordered_map 如何解决哈希冲突?
58. unordered_map 一定比 map 快吗?
59. unordered_map 在什么情况下退化?
60. rehash 的代价是什么?
面向对象与虚函数
61. 什么是多态?
62. 什么是静态绑定?
63. 什么是 vtable?
64. 什么是 vptr?
65. 虚表什么时候创建?
66. 为什么基类析构函数必须是虚函数?
67. 基类析构函数不是虚函数会发生什么?
68. 对象构造顺序是什么?
69. 构造函数中能调用虚函数吗?
70. 为什么构造函数中不会发生多态?
71. 析构函数中调用虚函数会怎样?
模板
72. 什么情况下使用模板?
73. 模板和虚函数有什么区别?
74. 为什么模板定义放在头文件?
75. 模板实例化过程是什么?
多线程与并发
76. 项目中哪些模块使用了多线程?
77. AI 视频问答为什么需要多线程?
Qt多线程
78. Qt 如何实现异步网络请求?
79. Qt 如何创建线程?
80. QThread 两种使用方式?
81. moveToThread 原理是什么?
82. Qt 信号槽跨线程通信原理?
同步机制
83. 什么是临界区?
84. 什么是 Data Race?
85. std::mutex 如何使用?
86. mutex 底层原理是什么?
87. mutex 为什么会阻塞线程?
88. mutex 底层为什么使用 futex?
89. lock_guard 如何使用?
90. unique_lock 如何使用?
91. unique_lock 和 lock_guard 区别?
92. condition_variable 为什么必须搭配 unique_lock?
93. condition_variable 工作原理?
94. std::atomic 如何实现线程安全?
95. atomic 和 mutex 如何选择?
96. int32 多线程读写一定安全吗?
97. 什么是内存序(memory order)?
98. 如何实现线程安全队列?
99. 生产者消费者模型如何实现?
计算机网络
100. 一个 HTTP GET 请求经历了什么?
101. DNS 解析过程是什么?
TCP
102. TCP 三次握手过程是什么?
103. TCP 如何保证可靠传输?
104. TCP 和 UDP 区别?
105. TCP 四次挥手过程是什么?
106. TIME_WAIT 为什么存在?
107. TCP 哪次握手可以携带数据?
108. TCP Fast Open 是什么?
109. 长连接和短连接区别?
HTTP 与 HTTPS
110. HTTP 请求结构是什么?
111. HTTP 响应结构是什么?
112. HTTP 常见状态码有哪些?
113. HTTP Host 字段作用是什么?
114. HTTPS 比 HTTP 多了什么?
115. TLS 握手过程是什么?
116. 数字证书作用是什么?
117. 非对称加密和对称加密为什么结合使用?
操作系统
118. 进程和线程区别?
119. 用户态和内核态区别?
120. 什么是系统调用?
121. 一个进程的内存布局是什么?
122. 虚拟内存作用是什么?
动态库与程序启动
123. 动态库和静态库区别?
124. Linux 下动态链接如何实现?
125. PLT 和 GOT 是什么?
126. 动态库加载过程是什么?
127. 项目中有没有考虑拆分动态库?
128. 动态库中的全局变量会被多个进程共享吗?
129. 一个程序从启动到 main 发生了什么?
Qt专项
130. Qt 信号槽底层是如何实现的?
131. 信号和槽是如何建立连接的?
132. DirectConnection 和 QueuedConnection 区别?
133. 跨线程信号槽如何实现?
134. Qt 事件循环原理是什么?
135. Qt 网络请求底层是如何实现的?
AI Coding
136. 使用过哪些 AI Coding 工具?
137. 使用过哪些模型?
138. GPT 和 DeepSeek 区别?
139. Cursor 和 Copilot 区别?
140. AI Coding 工作流是什么?
141. 如何利用 AI 阅读项目代码?
142. 如何利用 AI 生成代码?
143. 如何验证 AI 生成代码正确性?
144. 是否使用 AI 自动测试?
145. 是否使用 AI Debug?
146. 如何利用 AI 定位内存泄漏?
147. 如何利用 AI 分析崩溃日志?
148. AI 生成代码有哪些风险?
算法题
删除链表中的某个节点(要求时间复杂度O(1))
----------------------------------------
总结:
依旧是一个人很好的面试官,根本不压力人,问的有的问题我确实不会,也直接和面试官说不太了解或者不知道,面试官也没有压力我,直接就换了个问题。反问环节面试官也很耐心的解答我的问题,整体给人感觉特别贴心和温和。
全部评论
已约三面!!!
点赞 回复 分享
发布于 06-03 20:06 黑龙江

相关推荐

评论
点赞
6
分享

创作者周榜

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