首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
菜鸡码农嘤嘤嘤
东南大学 C++
关注
已关注
取消关注
@Fintech砖:
【37】C++岗位求职面试八股文第三十七篇(操作系统)
系列文章目录第一篇:语言基础第二篇:设计模式第三篇:数据库第四篇:计算机网络第五篇:操作系统第六篇:LInux第七篇:数据结构第八篇:智力题[121]简述socket中select,epoll的使用场景和区别,epoll水平触发与边缘触发的区别?select,epoll的使用场景:都是IO多路复用的机制,应用于高并发的网络编程的场景。I/O多路复用就是通过一种机制,可以监视多个文件描述符,一旦某个文件描述符就绪(一般是读就绪或者写就绪),能够通知应用程序进行相应的读写操作。select,epoll的区别:拷贝、轮询、fd个数(1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大;而epoll保证了每个fd在整个过程中只会拷贝一次。(2)每次调用select都需要在内核遍历传递进来的所有fd;而epoll只需要轮询一次fd集合,同时查看就绪链表中有没有就绪的fd就可以了。(3)select支持的文件描述符数量太小了,默认是1024;而epoll没有这个限制,它所支持的fd上限是最大可以打开文件的数目,这个数字一般远大于2048。epoll水平触发与边缘触发的区别:LT模式(水平触发):,只要这个fd(缓冲区)还有数据可读, epoll_wait就会被调用(他是系统调用,少用为好)而在ET(边缘触发)模式中epoll_wait就会被调用一次,直到下次再有数据流入之前都不会再提示了,无论fd中是否还有数据可读。所以需要设置循环读+非阻塞[122]说说Reactor、Proactor模式 高效的事件处理模式在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,(两种事件处理模式)其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。Reactor模式:Reactor模式应用于同步I/O的场景。Reactor中读操作的具体步骤如下:读取操作:(1)应用程序注册读就需事件和相关联的事件处理器(2)事件分离器等待事件的发生(3)当发生读就需事件的时候,事件分离器调用第一步注册的事件处理器(4)事件处理器首先执行实际的读取操作,然后根据读取到的内容进行进一步的处理主线程只负责监听文件描述符上是否有事件发生,有的话立即将该事件放入任务队列,通知工作线程。工作线程负责读写数据,接受连接,处理请求。Proactor模式:Proactor模式应用于异步I/O的场景。Proactor中读操作的具体步骤如下:(1)应用程序初始化一个异步读取操作,然后注册相应的事件处理器,此时事件处理器不关注读取就绪事件,而是关注读取完成事件,这是区别于Reactor的关键。(2)事件分离器等待读取操作完成事件(3)在事件分离器等待读取操作完成的时候,操作系统调用内核线程完成读取操作,并将读取的内容放入用户传递过来的缓存区中。这也是区别于Reactor的一点,Proactor中,应用程序需要传递缓存区。(4)事件分离器捕获到读取完成事件后,激活应用程序注册的事件处理器,事件处理器直接从缓存区读取数据,而不需要进行实际的读取操作。区别:从上面可以看出,Reactor中需要应用程序自己读取或者写入数据,而Proactor模式中,应用程序不需要用户再自己接收数据,直接使用就可以了,操作系统会将数据从内核拷贝到用户区。Reactor:(感知的是就绪可读可写事件)主线程向epoll内核注册读事件,主线程调用eopll_wait监听变化的fd,将fd放入请求对列;子线程唤醒,读(写)fd数据,处理请求;读完之后向内核注册写事件,之后一致。。。。Proactor:(感知的是已完成的可读可写事件)主线程调用aio_read()向epoll内核注册读事件,主线程调用eopll_wait监听变化的fd,主线程继续处理其他任务,当fd被读入到用户缓冲区后,内核向应用程序发送信号,通知数据已读完,子线程处理请求;读完之后向内核注册写事件,之后一致。。。。[123]IO模型的类型前四种模型--阻塞IO、非阻塞IO、多路复用IO和信号驱动IO都属于同步模式,因为其中真正的IO操作(函数)都将会阻塞进程,只有异步IO模型真正实现了IO操作的异步性1阻塞IO:调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的检查这个函数有没有返回,必须等这个函数返回后才能进行下一步动作。2非阻塞IO:非阻塞等待,每隔一段时间就去检查IO事件是否就绪。没有就绪就可以做其他事情。3信号驱动IO:Linux用套接口进行信号驱动IO,安装一个信号处理函数,进程继续运行并不阻塞,当IO事件就绪,进程收到SIGIO信号,然后处理IO事件。4IO多路复用:Linux用select/poll函数实现IO复用模型,这两个函数也会使进程阻塞,但是和阻塞IO所不同的是这两个函数可以同时阻塞多个IO操作。而且可以同时对多个读操作、写操作的IO函数进行检查。知道有数据可读或可写时,才真正调用IO操作函数。5异步IO:Linux中,可以调用aio_read函数告诉内核描述字缓冲区指针和缓冲区的大小、文件偏移及通知的方式,然后立即返回,当内核将数据拷贝到缓冲区后,再通知应用程序。用户可以直接去使用数据。[124]同步与异步的区别,阻塞与非阻塞的区别?同步与异步的区别:同步:是所有的操作都做完,才返回给用户结果。即写完数据库之后,再响应用户,用户体验不好。异步:不用等所有操作都做完,就响应用户请求。即先响应用户请求,然后慢慢去写数据库,用户体验较好。阻塞与非阻塞的区别:阻塞:调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的检查这个函数有没有返回,必须等这个函数返回后才能进行下一步动作。非阻塞:非阻塞等待,每隔一段时间就去检查IO事件是否就绪。没有就绪就可以做其他事情。[125]BIO、NIO有什么区别?BIO(Blocking I/O):阻塞IO。调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的检查这个函数有没有返回,必须等这个函数返回后才能进行下一步动作。NIO(New I/O):同时支持阻塞与非阻塞模式,NIO的做法是叫一个线程不断的轮询每个IO的状态,看看是否有IO的状态发生了改变,从而进行下一步的操作。[126]socket网络编程中客户端和服务端用到哪些函数?服务器端函数:(1)socket创建一个套接字(2)bind绑定ip和port(3)listen使套接字变为可以被动链接(4)accept等待客户端的链接(5)write/read接收发送数据(6)close关闭连接客户端函数:(1)创建一个socket,用函数socket()(2)连接服务器,用函数connect()(3)收发数据,用函数send()和recv(),或read()和write()(4)close关闭连接、[127]网络七层参考模型,每一层的作用?[128]程序动态加载的过程1内核加载:定义全局描述符后(GDT)后,将内核代码从硬盘读到内存中2. 在内核中执行加载和执行用户程序[129]链接过程• 链接是指将目标文件最终链接为可执行程序• 根据链接方式的不同,链接过程可以分为o 静态链接:目标文件直接链接进入可执行程序o 动态链接:在程序启动后才动态加载目标文件[130]os内存分配算法:伙伴算法伙伴算法[131]Linux内核Linux内核的主要模块(或组件)分以下几个部分:具备五大模块化功能,其中包括:进程管理、内存管理、文件系统管理、设备控制和网络管理[132]Linux架构Shell是一种特殊的应用程序(图形化界面),它提供接口来运行其他的应用程序[133]乐观锁和悲观锁区别都是用于解决并发场景下的数据竞争问题乐观锁:在访问共享资源时,不⽤先加锁,修改完共享资源后,再验证这段时间内有没有发⽣冲突,如果没有其他线程在修改资源,那么操作完成,如果发现有其他线程已经修改过这个资源,就放弃本次操作乐观锁适用于多读的应用类型,这样可以提高吞吐量,乐观锁的实现⽅式主要有两种:CAS机制和版本号机制悲观锁:悲观的认为每次去拿数据的时候,别人会修改。所以每次在拿数据的时候都会上锁。如行锁,表锁等,读锁,写锁等。多写的场景下用悲观锁就比较合适[134]调度[135]缺页中断和一般中断[136]软链接和硬链接起别名方式硬链接就是一个文件的一个或多个文件名。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。[137]阻塞,非阻塞,多路复用、异步驱动IO图解阻塞IO:上下都阻塞非阻塞IO:下阻塞多路复用IO:下阻塞 (IO多路复用同步)本身阻塞,阻塞时间看参数异步IO:上下都不阻塞上面是阻塞非阻塞(系统调用),下面是同步异步(数据从内核态拷贝到用户态)[138]Linux网络协议栈接收流程单进程打开的文件描述符个数最大是 1024每个进程都有一个文件描述符表,表示这个进程打开的所有文件。里面的每一条项目都对应一个打开的文件。对于一个进程而言,每一个文件描述符会与一个打开文件相对应,同时,不同的文件描述符也可以指向同一个文件。相同的文件可以被不同的进程打开也可以在同一个进程中被多次打开[139]TCP最大连接数服务器IP、监听·端口一般固定,所以看客户端端口和IP[140]Select、poll、EpollIO多路复用:多个请求复用了一个线程,只使⽤⼀个线程来维护多个 Socket (为每个请求分配⼀个进程/线程的⽅式不合适,)Epollepoll_wait 返回时,是将数据从内核共享内存映射到⽤户空 间。[141]高性能网络模式 Reactor 和 ProactorReactor是⾮阻塞同步⽹络模式常⻅的开源软件很多都采⽤了这个⽅案,⽐如 Redis、 Nginx、Netty 等等单 Reactor 单线程 / 单进程单 Reactor 多线程 / 多进程多 Reactor 多进程 / 线程两个开源软件 Netty 和 Memcache 都采⽤了「多 Reactor 多线程」的⽅案。采⽤了「多 Reactor 多进程」⽅案的开源软件是 Nginx第⼀种⽅案单 Reactor 单进程 / 线程,不⽤考虑进程间通信以及数据同步的问题,因此实现起来⽐较简 单,这种⽅案的缺陷在于⽆法充分利⽤多核 CPU,⽽且处理业务逻辑的时间不能太⻓,否则会延迟响应, 所以不适⽤于计算机密集型的场景,适⽤于业务处理快速的场景,⽐如 Redis 采⽤的是单 Reactor 单进程 的⽅案。第⼆种⽅案单 Reactor 多线程,通过多线程的⽅式解决了⽅案⼀的缺陷,但它离⾼并发还差⼀点距离,差 在只有⼀个 Reactor 对象来承担所有事件的监听和响应,⽽且只在主线程中运⾏,在⾯对瞬间⾼并发的场 景时,容易成为性能的瓶颈的地⽅。第三种⽅案多 Reactor 多进程 / 线程,通过多个 Reactor 来解决了⽅案⼆的缺陷,主 Reactor 只负责监听 事件,响应事件的⼯作交给了从 Reactor,Netty 和 Memcache 都采⽤了「多 Reactor 多线程」的⽅案, Nginx 则采⽤了类似于 「多 Reactor 多进程」的⽅案。Redis:单reactor单线程Nginx:多reactor多进程Proactor异步⽹络模式[142]Linux性能指标以 4 个指标来衡量⽹络的性能,分别是带宽、延时、吞吐率、包转发[续]C++岗位求职面试八股文第三十八篇(综合+智力题)更多关于算法题解、软件开发面经、机器学习算法面经、各企业面试问题记录,关注Fintech砖,持续更新中。https://www.nowcoder.com/users/873777317企业面试记录专栏https://www.nowcoder.com/creation/manager/columnDetail/0YBWnm机器学习面经专栏https://www.nowcoder.com/creation/manager/columnDetail/j8nNy0软件开发面经专栏https://www.nowcoder.com/creation/manager/columnDetail/0aXKaM更多校园招聘常见面试问题(开发、算法、编程题目)参见CSDN博客:http://t.csdn.cn/V4qbH欢迎关注、收藏、点赞后进行问题咨询及秋招建议
点赞 7
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
不愿透露姓名的神秘牛友
05-28 18:40
已编辑
比较真是偷走幸福的贼
真是没办法平衡了,同学买了个项目,包装了简历,现在春招签约了个薪资待遇都不错的公司,为什么别人运气就那么好,我真是破防了!!为什么自己春招这么不顺利 有口头offer还被鸽了 买简历真的不会被发现吗?
芒果豆浆:
包装简历 面试问题也得答出来才能过呀
你觉得今年春招回暖了吗
点赞
评论
收藏
分享
05-28 11:27
华为_产品经理(准入职员工)
你们大一坐第一排的同学拿到顶级offer了吗?
最近临近毕业季,跟很多朋友、同学都在交流去向问题,谈到此话题。根据很多朋友身边的示例来看,许多看上去所谓很卷的同学,并没有拿到很好的offer和去向。大学生这个群体及其庞大,里面的人群抽象得抽象的不得了。楼主就是准大一的时候说:我会去读研的。这种人。好家伙,大一的时候,除了高数、线代会坐第一排,就连思想政治这种课,也会坐到第一排。不过嘛,楼主的状态是这样的:认真听完第一节课,上下眼皮疯狂打架,极度犯困。课间玩手机或者睡着,玩手机真的就停不下来了,第二节课基本上都在玩或者犯困。听到老师某个阶段,会认真个5-10分钟,但是又想玩手机。最后还是只有靠期末冲刺面前不挂科。“想不明白没保研资格,卷绩点有...
永不遗忘:
没有,大一坐第一排的同学连工作都找不到,转去考研了,但研也没考上🤣
牛友故事会
牛客激励计划
点赞
评论
收藏
分享
04-08 10:53
已编辑
东南大学 Java
985 硕简历被挂麻了!后端简历求指点!🙏
小红书:简历挂 2 次快手:简历挂三次🌚百度:简历挂 1 次字节:简历挂 2次淘天:简历挂1 次感觉 BG 也还可以,但是怎么老是简历挂啊家人们,面试的时候也感觉面试官对我的项目没啥问的欲望😮💨哪位好心鼠鼠能给出一些建议呀,谢谢大家了~
牛客655736190号:
这个安全实习可以不写,和你找到开发不怎么对口
投递快手等公司10个岗位
应届生简历当中,HR最关注哪些?
简历被挂麻了,求建议
点赞
评论
收藏
分享
04-21 21:33
江苏财经职业技术学院 网络工程师
简历一直在优化,为什么越优越少
Cherrycola01:
0实习 0项目 约等于啥也没有啊 哥们儿这简历认真的吗
点赞
评论
收藏
分享
05-26 23:05
IntelliJ IDEA 中有什么让你相见恨晚的技巧?
一、条件断点循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。参考上图,在断点的位置,右击断点旁边的小红点,会出来一个界面,在Condition这里填入断点条件即可,这样调试时,就会自动停在i=10的位置二、回到"上一步"该技巧最适合特别复杂的方法套方法的场景,好不容易跑起来,一不小心手一抖,断点过去了,想回过头看看刚才的变量值,如果不知道该技巧,只能再跑一遍。参考上图,method1方法调用method2,当前断点的位置j=100,点击上图红色箭头位置的Drop Frame图标后,时间穿越了回到了method1刚开始调用的时候,变量i变成了...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
我的校园恋爱正式结束了
1.3W
2
...
这次是真的告别了!
1.1W
字节暑期补捞
热聊中
3
...
极限春招小结
8681
4
...
坐我后面的妹妹被拉走了!!
7460
5
...
找工作找到厌倦了,晒一下毕业照吧!
7460
6
...
从后端的角度聊一聊:2728届想要搞开发的同学现在最应该干什么?
7403
7
...
毕业照和春招结束代表着我的学生时代落幕了
6323
8
...
26届找不到暑期实习也不必太焦虑!!!!
5990
9
...
实习生崩溃瞬间
5752
10
...
第一次给了美团
5209
创作者周榜
更多
正在热议
更多
#
写给毕业5年后的自己
#
3155次浏览
58人参与
#
海信求职进展汇总
#
64215次浏览
356人参与
#
华泰证券Fintech星战营
#
167441次浏览
190人参与
#
职场捅娄子大赛
#
314854次浏览
3237人参与
#
HR问:你期望的薪资是多少?如何回答
#
39366次浏览
524人参与
#
华为求职进展汇总
#
4640034次浏览
28240人参与
#
如果今天是你的last day,你会怎么度过?
#
22009次浏览
197人参与
#
当下环境,你会继续卷互联网,还是看其他行业机会
#
107613次浏览
779人参与
#
好好告别我的学生时代
#
37533次浏览
773人参与
#
晒晒我司的端午福利
#
14277次浏览
99人参与
#
实习/项目/竞赛奖项,哪个对找工作更重要?
#
82281次浏览
1108人参与
#
参加完秋招的机械人,还参加春招吗?
#
47274次浏览
544人参与
#
金融财经春招备战日记
#
19171次浏览
127人参与
#
视觉/交互/设计百问百答
#
42685次浏览
427人参与
#
晒一下我的毕业照
#
29094次浏览
310人参与
#
如何缓解求职过程中的焦虑?
#
6286次浏览
93人参与
#
上班苦还是上学苦呢?
#
222039次浏览
1326人参与
#
记录实习开销
#
22505次浏览
171人参与
#
如果中了500万,你会离职吗?
#
81482次浏览
649人参与
#
工作两年想退休了
#
119236次浏览
1115人参与
#
金融银行面经
#
73511次浏览
519人参与
牛客网
牛客企业服务