OPPO 嵌入式软件开发 一面 面经
1. 请先做一个简短的自我介绍
可以从学校背景、技术栈、项目经历和岗位匹配度几个方面来介绍,尽量控制在 1 分钟左右。
回答示例:
面试官您好,我叫 XX,本科/硕士就读于 XX 专业,主修过操作系统、计算机网络、数据结构、嵌入式系统等课程。
我主要学习和实践的方向是嵌入式软件开发,比较熟悉 C/C++、Linux 基础、进程线程、网络通信,也做过 STM32 或 Linux 相关项目。
在项目中我主要负责过底层模块开发、通信协议处理、驱动适配和问题排查优化。
我对底层软件和系统方向比较感兴趣,这次也希望能加入 OPPO,在嵌入式软件开发岗位上继续深入积累。
2. 说一下 TCP 和 UDP 之间的主要区别
TCP 和 UDP 都属于传输层协议,但两者的设计目标不同。
TCP 是面向连接的,通信前需要先建立连接,能够保证数据可靠、有序到达,并且具备确认应答、超时重传、流量控制和拥塞控制等机制。
UDP 是无连接的,发送前不需要建立连接,不保证数据一定到达,也不保证顺序,因此开销更小、传输效率更高。
简单来说:
TCP 更强调可靠性,适合文件传输、网页访问这类场景。
UDP 更强调实时性,适合音视频、直播、语音通话这类场景。
3. 为什么 TCP 建立连接需要三次握手
TCP 三次握手的核心目的是让通信双方都确认收发能力正常,并同步初始序列号。
第一次握手,客户端发送 SYN,请求建立连接。
第二次握手,服务端返回 SYN + ACK,表示自己收到了客户端请求,并且同意建立连接。
第三次握手,客户端再返回 ACK,表示自己也收到了服务端的确认。
如果只有两次握手,服务端无法确认自己发出的确认信息是否被客户端收到。
所以三次握手可以保证双方都明确连接已经建立,避免无效连接和历史报文带来的问题。
4. 你怎么理解 HTTP 协议
HTTP 是应用层协议,主要用于客户端和服务器之间传输请求和响应数据。
它规定了请求方法、状态码、请求头、响应头和消息体等内容。
HTTP 本身不负责底层的可靠传输,它通常运行在 TCP 之上,由 TCP 来保证数据可靠送达。
如果是 HTTPS,则是在 HTTP 基础上加入 TLS/SSL,实现数据加密和身份认证。
常见请求方法有 GET、POST、PUT、DELETE。
常见状态码有 200、404、500 等。
5. C++11 中你比较熟悉哪些新特性
C++11 常用新特性很多,面试里可以重点说几个自己熟悉的。
比如:
auto,用于自动类型推导。
nullptr,替代 NULL,避免二义性。
范围 for 循环,让遍历容器更方便。
lambda 表达式,适合写简单匿名函数。
右值引用和移动语义,用来减少不必要的拷贝。
智能指针,如 unique_ptr、shared_ptr、weak_ptr。
并发库,如 thread、mutex、condition_variable。
如果结合工程实践去讲,会更有说服力,比如智能指针能减少内存泄漏风险,移动语义能提升性能。
6. 智能指针一般有哪些,各自作用是什么
常见的智能指针主要有三种:unique_ptr、shared_ptr 和 weak_ptr。
un 表示独占所有权,一个对象同一时间只能被一个指针管理,不能拷贝但可以移动,适合资源归属明确的场景。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

查看10道真题和解析