3.25 OPPO 底软开发 一面 感觉要凉

看了一圈好像没看到比我更快的,我自己也觉得快。我今天下午五点回学校的路上突然接到HR的电话,问我能不能今晚七点半面试,我想想觉得面就面吧,就接了。

本人双偏上9,但是本科不是计算机的。研究生对操作系统和嵌入式都感兴趣,因此做的一个手搓操作系统的项目,一个是C51检测氢气和温度的项目。

面试官看起来人还不错,说话比较好听。

1.自我介绍,我稍微说了一下我的bg和爱好,他小声说了一下我本科(我本科不是计算机),问我既然本科不是计算机的,有没有学过计算机的一些基本的书籍,我说有(确实有)。
2.问我对哪些语言比较熟悉,我说我C、C++都比较熟悉,实验室横向也用Python比较多。

于是这里开始问C语言的基本题目:

3.问我i++和++i的区别,出了一道a = i++,a的值。
4.问我数组和链表的区别,我回答主要是连续内存分配上。他问我那什么时候用数组什么时候用链表,我说如果要求连续分配(比如随机访问)用数组。
5.问我栈和队列的区别,我说先进后出和先进先出(这里有点乌龙,我嘴快说反了,然后纠正),接着问我用栈来实现队列,我提出的是双栈方法。
6.然后问我操作系统进程和线程的区别,我说简单来说就是进程是资源分配最小单位,线程是执行调度最小单位,线程会共享进程的资源,然后也有自己的独立的栈用来保存局部变量函数调用之类的。
7.问我现在有一个进程里面有一个变量a,有两个线程分别对这个a++(执行100次),最后的结果是多少。我说大概是200,因为量比较少,可能不会有很明显的竞态。如果量很大(比如10w次)且不上锁,得到的结果就小于20w。

操作系统到这里结束,然后就是拷打项目。

8.首先问我觉得哪个项目最能体现自己的能力,能说服他让我通过面试,我说那就问我操作系统的项目吧。但是因为问的太杂,我没回答到他的点子上。于是他换了个问题,问我这个操作系统项目最难的是什么,我说是debug,因为本身不是用户态软件可以用断点来debug,因此遇到问题就只能逐行删除编译,或者print方法。我也补充应该还有dbg方法可以用(但是我自己确实连不上)
9.问我中断,问我怎么实现的中断。我说是先写stvec,把中断代码入口放进去。有中断的时候就进入这个入口,然后把重要寄存器sepc、sstatus和x0-x31之类的保存,然后调用实际的中断句柄,用scause里的值来判断是哪种中断。我以syscall为例解释了一下整个流程。
10.让我解释一下我这个操作系统的定时器中断下,两个进程之间的上下文切换。我说将cpu的需要保存的信息(如sepc、sp、tx)之类的保存到自己的内核栈里面去,然后将下一个进程的内核栈中保存的这些数据还原到cpu内,这样就完成了上下文切换。
11.问我怎么实现的虚拟地址到实地址的转换,我解释了一下我自己实现的riscv的rv39机制。

反问:
我问他OPPO这个岗位更看重的是什么?
他的回答是这个岗位看中的是实习生的潜力,他们都把实习生当成一张白纸,如果有潜力,进去之后再培养。毕竟是实习生又不是社招(类似的话)。

总的来说今天的面试我有点忐忑, 因为面的实在是太基础了,我以为会问我比较细节的嵌入式八股或者操作系统细节,结果C语言的问题给我把脑子干懵了。

目前还是已完成面试,先放一个害怕在这,怕kpi更怕一眼觉得不行水时长
#0offer互助地##投递几十家公司,到现在0offer,大家都一样吗##投递几十家公司,到现在0offer,大家都一样吗#
全部评论
我靠,感觉问的也太简单了,哥们复筛直接挂了
1 回复 分享
发布于 昨天 20:44 上海
czhyyds
点赞 回复 分享
发布于 昨天 21:08 四川
窝趣还问这些啊 哥们基础知识贼差 明天面😂
点赞 回复 分享
发布于 昨天 21:09 四川
哥,看下状态码,可以看到自己过没过
点赞 回复 分享
发布于 昨天 21:18 陕西
纯聊天
点赞 回复 分享
发布于 昨天 21:24 黑龙江
哥一共几面啊
点赞 回复 分享
发布于 昨天 22:59 上海
哦哦谢谢
点赞 回复 分享
发布于 今天 13:02 上海
我的复筛也直接挂,感觉卡本科学历
点赞 回复 分享
发布于 今天 13:08 陕西
老哥,请问需要开摄像头和共享屏幕吗?
点赞 回复 分享
发布于 今天 14:16 浙江
老哥怎么样了 有更新吗 我下午面的也是已完成
点赞 回复 分享
发布于 今天 18:20 辽宁
我昨天底软二面过了,约的周五HR面,好奇面试官是怎么耐心的听完你讲rcore的,我也是这个项目,面试官直接说rcore和xv6都是toy项目,企业里用不到,一面时无数次打断我,二面的时候我就吸取教训只说Linux下的实现了,感觉讲rcore面试官听不懂也不愿意听,只能拿来当跳板去讲Linux。
点赞 回复 分享
发布于 今天 19:12 陕西

相关推荐

##暑期实习#自我介绍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_LOCALsocketpair(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 跨主机socketAndroid 系统进程通信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配图神器#反问
查看8道真题和解析
点赞 评论 收藏
分享
评论
7
12
分享

创作者周榜

更多
牛客网
牛客企业服务