秋招复盘—操作系统常问问题

1.进程与线程的区别和联系

2.一个进程可以创建多少线程,和什么有关

3. 一个程序从开始运行到结束的完整过程(四个过程)

  1. 一个程序开始运行,首先进行创建进程,操作系统首先为该程序申请一个空白的PCB,然后向这个PCB中填入一些控制和管理进程的相关信息。然后分配所需要的资源,跳入就绪状态。
  2. 程序进入就绪状态,等待处理机时间片的到来,进程被调度,获得对应的时间片,就由就绪状态跳转到运行状态。注意,时间片完了之后,进程会自动从运行状态跳到就绪状态,等待下一个时间片的到来。
  3. 如果程序运行过程中请求某一个资源,例如IO资源,这个时候IO资源正在忙碌,此时程序主动进入阻塞状态,等待IO资源的空闲。
  4. 当IO资源空闲,会主动由另外一个进程唤醒正在阻塞的进程,这个时候进程转为就绪状态,等待时间片的到来。
  5. 运行完成之后,进行结束状态,操作系统回收一些资源的工作。

4.进程通信方法(Linux和windows下),线程通信方法(Linux和windows下)

  • Linux进程间的通信方式:管道、有名管道、信号量、消息队列、共享内存、信号、socket
  • Windows进程间的通信方式:管道、信号量、消息队列、共享内存、socket
  • Linxu线程间的通信方式:互斥量、条件变量、信号量、信号
  • Windows线程间的通信方式:互斥量、信号量、事件(Event)、临界区(Critical Section)

5.进程调度方法详细介绍

6.页面置换方法详细介绍

7.能否实现一个LRU算法

8.死锁的必要条件(怎么检测死锁,解决死锁问题)

9.哲学家就餐,银行家,读者写者,生产者消费者(怎么加锁解锁,伪代码)

10.海量数据的bitmap使用原理

11.布隆过滤器原理与优点

12.Bloom过滤器处理大规模问题时的持久化,包括内存大小受限、磁盘换入换出问题

13.同步IO和异步IO

14.文件读写使用的系统调用

15.线程池的了解、优点、调度处理方式和保护任务队列的方式

16.怎么回收线程

17. 僵尸进程问题

解决:

  1. 父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。执行wait()或waitpid()系统调用,则子进程在终止后会立即把它在进程表中的数据返回给父进程,此时系统会立即删除该进入点。在这种情形下就不会产生defunct进程。
  2. 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler。在子进程结束后,父进程会收到该信号,可以在handler中调用wait回收。
  3. 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCLD, SIG_IGN)或signal(SIGCHLD, SIG_IGN)通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收,并不再给父进程发送信号
  4. fork两次,父进程fork一个子进程,然后继续工作,子进程fork一个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收还要自己做。

18. 多线程编程

19.memcache了解

  • memcached是一个高性能、分布式的内存对象缓存系统,它实际上就是一个简单的内存服务器,能够为应用程序存储数据提供一个缓存层,从而减轻数据库的负担。存储在memcached中的数据并不持久,这意味着当memcached的服务器关机或者重新启动时,它的内容就消失了。
  • memcached有一个称为最近最少使用(Least Recently Used LRU)的缓存的结构,从而当memcached的存储空间满时,最早存储和刚被访问过的数据将会被更新的内容替换。
  • memcached的服务器只提供一个存储结构,在这个存储结构中,数据按照键值存储,而检索功能则通过使用一个散列查找表来实现。
  • 由于memcached使用内存而不是磁盘来存储数据,因而它存储与检索数据的速度是特别快捷的。

20.异常和中断的区别

21.一般情况下在Linux/windows平台下栈空间的大小

  • Linux 默认8M
  • windows 默认1M

22.线程的5种状态详解

嵌入式软件工程师面试完全指南

面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,3200+订阅,非常适合在找工作面经薄弱的同学,3500+订阅还会涨价到39.9,提前订阅提前享受,持续更新中。

原帖链接:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM

全部评论

相关推荐

前阵子刚结束在上海的实习,马不停蹄地扎进了北京的春招大军。本以为都是大厂云集、灯火辉煌,结果刚落地北京不到一个月,我就在长达两小时的通勤地铁里,深刻体会到了什么叫“地大物博”背后的残酷。如果说沪漂的苦是“精致的消耗”,那北漂的苦就是“粗犷的磨损”。在上海实习那会儿,虽然梅雨季的潮气能让衣服长蘑菇,周末想约个朋友也总被对方的“加班申请”劝退,但起码那里的生活半径是可控的。下了班走在梧桐树影下,几步路就能钻进个便利店或咖啡馆,那种“城市感”是触手可及的补给。到了北京,这种体面瞬间被物理距离给击碎了。最直观的感受就是通勤。在北京,一小时以内的通勤简直叫“近在咫尺”。每天早起像行军,晚上下班像逃难,在换乘通道里挤到怀疑人生时,脑子里全是代码和还没写的日报。这种长距离的拉锯,消耗的不仅是体力,更是下班后想自我提升的那点心气儿。再聊聊房租。上海的房租贵,但起码在老破小里还能求一份“地段”的便利;而在北京,同样的租金,你可能只能在北五环外租到一个合断隔间。那种“钱花光了,人还没住舒坦”的落差感,在交房租的那一刻会达到顶峰。现在的我,觉得北京确实更苦一点。这种苦,是那种干燥空气里透出来的荒凉感,是西二旗天桥上密密麻麻的格子衫背影,是你想找个精致小店回血、却发现周围全是连锁快餐的无奈。如果说上海是在“慢火炖生活”,那北京就是在“快火燎生命”。
沪漂/北漂你觉得哪个更苦...
点赞 评论 收藏
分享
学院本双非硕有一段ai初创实习经历,找暑期太难了,没有约面的,只有小红书约面了,明天面。金山的offer先接了,然后骑驴找马了。下面是面经,发出来攒人品了。1. 自我介绍,尤其是对你的项目内容,就是你的项目经历,或者是你自己比较擅长的领域,可以展开去聊一聊。2. 对于你这个实习或者是项目里面,你觉得哪一个点或者是你印象比较深的,你可以直接展开聊一下。说了 tab 补全那里的链路重构,面试官说我思路很清晰3.  Google Adsign 接入唯一ID,这个唯一 ID 是自我自己生成的吗?【实习】4. 使用 Redis 加 Lua 分布式限流保障邮件发送治理的这个,工作内容可以展开这个聊一下吗?【实习】5. Redis + lua 有什么优势?6. 我们要实现一个微信抢红包这样的功能,你会去怎么实现这个,这个能力?回答用 redis setnx+延迟队列+mq7. 那你这种业务这个方案的话怎么去实现高并发呢?比如说同时有 100 个人抢这一个红包。我:不太会,就回答了加锁,然后说 Redis 的 decr 和 incr只会扣减一,没法保证红包金额(这里一通乱答)面试官:那有没有一种更优化的方案?因为我们按刚刚的方案来说,比如说一个抢红包的一个请求过来,或者是多个抢红包请求过来,那我们一定是要用锁的形式先抢占,所以我先相当于是我抢占了这个锁,我才能去执行抢红包这个逻辑,对不对?那执行抢红包这个逻辑,这会就涉及到一个问题,如果这个逻辑比较复杂,或者是它里面计算时间比较久,就是计算 IO 比较久的话,所有大家都会去等待,有没有方案让我提前去,或者是有没有方案是来减少我这个计算相关的一个时延?我:不太会,回答了线程池(依旧乱答)面试官说:线程池,它也是因为你线程池,无所谓,你创建新线程,还是你拿新的,还是用线程池里面已有的线程来去做执行,它都会要等待,对吧,比如说同时我有 100 个人请求都来了,那你可能就得有 100 个线程,对吧,大家都得去等待,谁拿到这个锁,谁再去执行抢红包这个操作。我说:不太会,不了解 cpu 计算场景怎么优化,只知道 io 密集场景可以用虚拟线程面试官说:比如说我刚刚提到了一个点,就是能不能把 CPU 计算前置。因为我们现在这个业务场景是什么?就比如说一个红包有 100 个 100 元,我要分 10 份。所以说他其实对于第几个人来他其实不在意,就是说现在有或者是有抢没抢?或者是这个现在当突然有多少人来抢?其实对于红包,发红包这个事情来说,或者抢红包这个概念来说,它其实是可以预先知道每个红包分成多少钱,是不是这个事情?我:用 Redis 先做预热。面试官:对,那你比如说这个方案的话,我们要怎么去做呢?有一些哪些实现的细节,或者哪些数据结构呢?我:提前写死金额存在 Redis 里,但每份红包的金额写死不公平(此处省略一堆)面试官:涉及到公平,那你觉得怎么不公平?写死的不公平的原因是什么?======= 后面都是对这个场景设计的探讨,此处省略跳过========8. 了解微服务吗不了解,面试官就跳过了9. 那我们聊一下本地事务加任务补偿怎么去?当时是怎么去实现的?【项目】10. 发散聊一聊对于 vibe coding 相关的一些理解,或者是对于大语言模型,你最近有哪些参与度?或者是有哪些去研究的点吗?我脑子一热回答了 openclaw11. 你觉得它用 Openclaw 或者是龙虾这个东西和我们直接去使用大语言模型最直接的区别有哪些?答了 Agent 和大模型的区别,补充了 skill、mcp、Function call12. 那你自己又玩龙虾,主要是做了哪些?帮你辅助了哪些功能呢?回答写定时任务每天帮我拉 github 的热榜和股票(抄群友 maple 的)13. 那其实在于你实际工作过程中,这个龙虾其实也没有发挥更多的一个所谓的私人助理这个的作用啊?我说想实现在飞书接入龙虾,然后实现 AI 办公14. 你认为的在使用 AI 来进行办公的主要的一个业务场景有哪些呢?我说开周会,可以用龙虾去发通知啥的15. 公司用 golang 进行开发,除了会 Java 还会啥语言我说学习了 go 的语法 和 gorm,但没学完 grpc16. 那你现在的学习路径是怎么样?通过什么样的方式来去学习的?我说看官方文档还有字节和七牛云的开源文档17. 我看你这边游戏经历里面主要是玩 MOBA 类的,然后你还比较有感兴趣的就是他怎么支持百万人同时在线这个问题,那你自己是怎么去考虑的?我说实习的时候调研过将单机设计成联机,用 supabase 的 real time机制18. 对于传统的像英雄联盟也好,王者荣耀也好,它除了在局内对战,它其实还会有更多的一个游戏养成,还有一个社交的一个游戏场景。那它们两个同时支持百万在线,可能它们的一个实现模式会不太一样,这个里面有去有考虑过它们之间的不同吗?我说没考虑过19. 那考虑到同时在百万同时在线的,除了说你刚刚有一个 real time 来实时通信,那还有一个点就是在于它同样的一个单机肯定是不可能支持这么大的一个的用户量了,它一定涉及到一个集群。你对于分布式部署有过相关的一些经验吗?我说没有,只知道 k8s20. 你可以理解为 K8S 作为一个编排容器,它就是来去做动态缩扩容的,但是我们在考虑的是为什么要分布式部署,或者是它主要能应对哪些应用场景?这个事情有了解过吗?我不会,就答了扛流量,通过负载均衡的轮询或者随机策略去访问实例之类的。然后面试官给我讲解了分布式部署,比如垂直分布和纵向分布....(此处省略一百字)反问阶段:1. 表现面试官说:表达很好,准备很充分,思路很清晰,不用太过担心2. 业务面试官说:组内不做鹅鸭杀,做的是小游戏品类,比如说像最近广告特别多的无尽东日,还有之前比较火的什么冒险大作战、寻道大千这一类的游戏,其实它的游戏载体是在微信或者是抖音这样的一个平台去进行一个游玩。(因为我游戏经历里写了 moba 类游戏,面试官又给我讲了和 moba 类游戏的区别)面试官说:对于我们这边的服务器开发的话,就是说从客户端的所有的链路,比如说 Websocket 的建立, Websocket 的一个连接管理,以及所有的客户端的请求的分发处理,以及对于不同的业务模块,比如说它的排行榜模块,它的商城模块,它的匹配模块,还有一些它的所有的养成模块都需要去我们进行一个开发的和介入。面试官说:我们会以项目组的形式来进行开发,对于我们当前的组内的话,主要是人员是在 10 人左右,程序员是目前是在职有4位程序员, 3 位客户端,一位服务器开发。然后除了刚刚提到的我们要开发游戏项目内的业务功能外,同时还要去考虑到对于我们最终的服务的部署,服务的上线以及最终线上的一个问题的定位和快速的修复,就是我们现对于当前的程序员来说,他不仅仅是不会像早些年一样会区分你是一个开发,你还是一个测试,你还是一个所谓的运维。因为现在的话大部分运维就是给你直接提供云服务。给你提供云服务机器,然后对于服务内如何去搭建,如何部署,都是由我们项目内的开发人员来去完成的,所以说在我们这个游戏的或者是项目组内,如果要参与的话,其实你可以认为是从基础到上线运维到问题修复这块,其实是会有一个全面甚至是一个全方位的一个参与度的。面完两分钟后,hr 说下午谈 offer(史上最快.....)
查看18道真题和解析
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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