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_ptrshared_ptrweak_ptr

并发库,如 threadmutexcondition_variable

如果结合工程实践去讲,会更有说服力,比如智能指针能减少内存泄漏风险,移动语义能提升性能。

6. 智能指针一般有哪些,各自作用是什么

常见的智能指针主要有三种:unique_ptrshared_ptrweak_ptr

un 表示独占所有权,一个对象同一时间只能被一个指针管理,不能拷贝但可以移动,适合资源归属明确的场景。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论
暑期还是春招啊?
点赞 回复 分享
发布于 04-18 16:49 广东

相关推荐

评论
点赞
1
分享

创作者周榜

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