OPPO系统工程师暑期实习一面

##暑期实习#自我介绍3min
简历从上问到下。涉及项目的八股文;
1.常见的进程间通信的方式
进程间通信(IPC) 是指两个或多个进程之间交换数据或消息的一种机制,目的是实现协同工作。

📦 一、常见的 IPC 方式总览表
通信方式是否共享内存是否跨主机特点
管道(pipe)❌❌简单、方向单一、适合父子进程
命名管道(FIFO)❌❌可用于无亲缘关系进程
消息队列(message queue)❌❌消息格式通信,可靠性好
共享内存(shared memory)✅❌速度最快,需同步机制
信号量(semaphore)✅/❌❌控制同步/互斥,不用于数据传输
套接字(socket)❌✅支持网络通信,本地也可用
信号(signal)❌❌通知事件,数据能力弱
内存映射文件(mmap)✅❌利用文件映射共享内存
D-Bus / Binder(高层)❌❌高层封装,适合桌面/Android

🔍 二、各方式详细解释与示例

1️⃣ 管道(pipe)
•特点:半双工(单向),仅限父子进程。
•使用函数:pipe(fd)
•示例:
int fd[2];
pipe(fd); // fd[0] 读,fd[1] 写

2️⃣ 命名管道(FIFO)
•特点:路径名形式存在,可用于无血缘关系进程。
•使用函数:mkfifo()、open()、read()、write()

3️⃣ 消息队列(msg queue)
•特点:结构化数据传输,带消息类型,支持异步收发。
•接口函数:msgget()、msgsnd()、msgrcv()

4️⃣ 共享内存(shared memory)
•特点:最快!但需要加锁机制(如信号量)来保证数据一致性。
•接口函数:shmget()、shmat()、shmdt()

5️⃣ 信号量(semaphore)
•特点:用于控制访问共享资源的同步机制,不传数据。
•分为 System V 和 POSIX 两种接口

6️⃣ 套接字(socket)
•特点:最强大!可用于网络通信、跨主机通信。
•本地通信常用 UNIX 域套接字:AF_UNIX 或 AF_LOCAL
socketpair(AF_UNIX, SOCK_STREAM, 0, fd); // 本地双向通信

7️⃣ 信号(signal)
•特点:用于异步事件通知,如 SIGINT、SIGTERM 等。
•用于告知进程某个事件发生,不适合传输大量数据。

8️⃣ 内存映射文件(mmap)
•特点:将文件映射到内存地址空间,不需要读写系统调用。
•多进程可通过映射同一个文件实现共享。

9️⃣ 高层机制(D-Bus、Binder)
•D-Bus:Linux 桌面系统中用于服务之间通信。
•Binder:Android 专用 IPC 框架,高性能支持远程调用。

✅ 总结对比表(按用途和性能)
方式性能是否支持多进程通信方向特点
管道中父子进程单向简单
FIFO中任意单向命名管道
消息队列中任意双向结构化、可阻塞
共享内存高任意任意最快,但需同步
信号量–任意控制同步适合同步控制
socket低-中任意/跨主机双向网络、本地皆可
signal低任意异步事件数据量极小
mmap高任意双向文件映射共享
D-Bus/Binder中高层服务通信双向高级封装
🛠 应用建议:
场景推荐方式
进程共享大块内存共享内存 + 信号量
父子进程简单通信pipe
网络通信 or 跨主机socket
Android 系统进程通信Binder
实时系统内核态/用户态通信自定义 ring buffer / RPMSG
微内核服务模块通信高性能 IPC + 端口调度机制
2.共享内存的优缺点
共享内存是一种允许多个进程访问同一块物理内存区域的机制。
这意味着两个(或多个)进程可以“看见”同一块数据区域,不用通过内核反复读写,只要写进内存,另一个进程立马就能读到。
📌 在 Linux 中,常见通过 shmget(System V)或 mmap(POSIX)创建共享内存。

✅ 二、共享内存的优点
优点说明
🚀 性能极高不需要内核在中间传递数据,多个进程直接访问同一块内存,速度远快于管道、消息队列
📦 支持大数据传输适合频繁、大块数据传输,比如音视频流、传感器数据等
🔁 双向通信简便不区分谁读谁写,天然支持双向通信(不像 pipe 一定是单向)
🧠 内存可持续使用可以多次 attach/detach,有效控制生命周期
🤝 可跨进程共享结构体不只是字节数组,可以共享复杂数据结构(需注意同步)

❌ 三、共享内存的缺点
缺点说明
🧵 缺乏同步机制多个进程同时访问时,必须借助信号量、互斥锁等机制来同步,避免数据冲突或脏读
🧩 编程复杂度高相比消息队列、socket,开发者需要手动管理内存结构、同步机制,容易出错
🧹 资源管理麻烦如果进程异常退出可能导致共享内存段未释放(需要手动 ipcrm 清理)
🔐 权限安全问题进程间共享内存段可能被其他进程 attach,如果没有权限控制,容易泄露或被恶意访问
🏷 难以调试调试时很难追踪多个进程对同一块内存的读写行为,容易出现并发 bug
🛠 四、适用场景
场景推荐使用共享内存
实时系统数据共享(如传感器数据)✅
视频/音频流处理(高吞吐)✅
微内核/虚拟化中的 IPC✅(常与中断配合)
简单命令传递/控制信息❌(pipe、socket 更简单)
网络分布式通信(跨主机)❌(用 socket)
📌 五、总结一句话
共享内存优点是“快”,缺点是“难控制”。
3.讲一下相关项目分工,项目中遇到的困难,以及困难是如何解决的。
4.实习经历相关的问题,主要工作是做了什么
5.常见的排序算法有哪些,讲讲他们的具体实现方式
6.在学校里学的最难的一门课程,如何学习的,从中收获了什么?
7.比赛相关问题#牛客AI配图神器#
反问
全部评论
请问有收到二面的信息吗?
点赞 回复 分享
发布于 03-25 18:14 湖北

相关推荐

### 3.25一面- 本科学的不是计科,主要是什么原因- 本科的时候接触过计科的课程吗?学过什么相关的课- 目前为止觉得挑战最大的一门课是什么?是如何解决的?- 在项目中遇到的最大挑战是什么?是如何解决的?- 有没有做过嵌入式相关的一些项目?具体有哪些?- 有没有接触过arm的板子?- 有没有在单片机上进行过开发?- 有没有学过微机原理?数电模电?- 对于linux的了解深吗?有没有学过内核相关的知识?- 讲一下项目的背景,为什么要做这个项目?- 这个项目框架有点大,除此之外有没有做过更小的一些项目?#### 反问环节部门加班强度大吗?**前几年比较大,这两年好一些**大概的上班时间?**早上9点半,6点下班,晚上最多加班到9点左右,但不强制加班,周末双休**暑期转正的hc多不多?**不卡暑期转正名额,只要符合要求都可以转正**部门晋升路径如何?**刚进公司都是O13工资,最高可以升到O19(专家级),主要看绩效,不和工龄绑定**对于我的建议:**多学习一下linux内核,选一个具体的方向进行钻研一堆问题我都回答说没有,本来以为要挂了,结果还能进二面### 3.28二面自我介绍介绍项目背景项目架构,项目部件(某些功能是怎么实现的)项目看起来很大,你的工作是哪部分?有没有做过一些优化的工作?讲一下另外一个大模型的项目(可能不是他的领域,就没怎么问)### 没有八股,直接反问环节**部门对实习生的培养:** 根据base和岗位分配一个合适的方向,分配导师,两个月做一个小项目**部门转正率:** 没法回答我,因为可能分配到不同部门,每个部门不一样**面试表现以及技术栈建议:** 两个项目有点极端,一个很工程一个很研究,建议能把ai和底软结合起来**对实习生的要求:** 没什么要求,能把自己做的东西说明白就行**后续流程推进:** 两周内会有结果(感觉应该用不了这么久)### 4.3 hr面自我介绍一下本科是其他专业的,为什么要转计算机?高考的时候选专业是怎么想的?本科的专业,对你学习计算机有什么帮助吗?考研还是保研?分享一下考研的时候的一些经验对考研取得的成绩满意吗?中间gap了一年是怎么想的?考公和考研是怎么选择的?如何说服爸妈支持你的决定?考研一共花了多长时间?读研后遇到的最大的困难是什么?怎么解决的?哪个项目最满意?为什么?职业规划是怎么样的?手上有几个offer?不同offer如何选择?对于实习薪资的预期是多少?#### 反问环节oppo对实习生的培养规划大概多久能出结果?**两周内,结果到了4.26了还在泡池子,网站还是显示hr面试已完成**
点赞 评论 收藏
分享
评论
7
37
分享

创作者周榜

更多
牛客网
牛客企业服务