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编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

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

相关推荐

上周组里招人,我面了六个候选人,回来跟同事吃饭的时候聊起一个让我挺感慨的现象。前三个候选人,算法题写得都不错。第一道二分查找,五分钟之内给出解法,边界条件也处理得干净。第二道动态规划,状态转移方程写对了,空间复杂度也优化了一版。我翻他们的简历,力扣刷题量都在300以上。后三个呢,就有点参差不齐了。有的边界条件没处理好,有的直接说这道题没刷过能不能换个思路讲讲。其中有一个女生,我印象特别深——她拿到题之后没有马上写,而是先问我:“面试官,我能先跟你确认一下我对题目的理解吗?”然后她把自己的思路讲了一遍,虽然最后代码写得不是最优解,但整个沟通过程非常顺畅。这个女生的代码不是最优的,但当我问她“如果这里是线上环境,你会怎么设计’的时候,她给我讲了一套完整的方案——异常怎么处理、日志怎么打、怎么平滑发布。她对这是之前在实习的时候踩过的坑。”我在想LeetCode到底在筛选什么?我自己的经历可能有点代表性。我当年校招的时候,也是刷了三百多道题才敢去面试。那时候大家都刷,你不刷就过不了笔试关。后来工作了,前三年基本没再打开过力扣。真正干活的时候,没人让你写反转链表,也没人让你手撕红黑树。更多的是:这个接口为什么慢了、那个服务为什么OOM了、线上数据对不上了得排查一下。所以后来我当面试官,慢慢调整了自己的评判标准。算法题我还会出,但目的变了。我出算法题,不是想看你能不能背出最优解。而是想看你拿到一个陌生问题的时候,是怎么思考的。你会先理清题意吗?你会主动问边界条件吗?你想不出来的时候会怎么办?你写出来的代码,变量命名乱不乱、结构清不清楚?这些才是工作中真正用得到的能力。LeetCode是一个工具,不是目的。它帮你熟悉数据结构和常见算法思路,这没问题。但如果你刷了三百道题,却说不清楚自己的项目解决了什么问题、遇到了什么困难、你是怎么解决的,那这三百道题可能真的白刷了。所以还要不要刷LeetCode?要刷,但别只刷题。刷题的时候,多问自己几个为什么:为什么用这个数据结构?为什么这个解法比那个好?如果换个条件,解法还成立吗?把刷题当成锻炼思维的方式,而不是背答案的任务。毕竟面试官想看到的,从来不是一台背题机器,而是一个能解决问题的人。
国企上岸了的向宇同桌...:最害怕答非所问了,但是频繁反问确定意思又害怕面试官觉得我笨
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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