模拟面试题

一、IO多路复用的原理

        将多个阻塞任务的文件描述符,统一放到一个检测容器中,然后用一个阻塞函数进行管理,如果检测容器有一个或多个文件描述符对应的事件产生,就会解除阻塞,进而去执行相应的函数。

二、实现IO多路复用的方式

select、poll、epol

区别:

select,poll,epoll都是I/O多路复用机制,即能监视多个fd,一旦某fd就绪(读或写就绪),能够通知程序进行相应读写操作。 但select,poll,epoll本质都是同步I/O,因为他们都需在读写事件就绪后,自己负责进行读写,即该读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O实现会负责把数据从内核拷贝到用户空间。

select,poll需自己主动不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但它是设备就绪时,调用回调函数,把就绪fd放入就绪链表,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但select和poll在“醒着”时要遍历整个fd集合,而epoll在“醒着”的时候只需判断就绪链表是否为空,节省大量CPU时间,这就是回调机制带来的性能提升。

select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,且要把current往设备等待队列中挂一次,而epoll只要一次拷贝,且把current往等待队列上挂也只挂一次(在epoll_wait开始,注意这里的等待队列并不是设备等待队列,只是一个epoll内部定义的等待队列)。这也能节省不少开销。

三、数据库操作对应的函数有哪些

sqlite3_open

sqlite3_close

sqlite3_errmsg

sqlite3_errcode

sqlite3_exec

sqlite3_get_table

sqlite3_free_table

四、什么是僵尸进程

子进程退出,父进程不退出,且父进程不回收子进程的资源。此时子进程会变成僵尸进程。

注意:

  1. 僵尸进程本身就死掉的进程,无法再被kill
  2. 僵尸进程是有危害的:占用进程号,占用进程调度块,占用cpu资源等等,,,,,
  3. 僵尸进程必须回收!!!

回收僵尸进程的方式:

  1. 退出僵尸进程的父进程,僵尸进程的资源将由内核自动回收。
  2. wait/waitpid函数回收:阻塞形式会导致父进程无法正常执行自己的任务,非阻塞形式可能会收不到僵尸进程。
  3. 将wait/waitpid函数结合信号的方式回收:当子进程退出后,发送一个信号给父进程,通知父进程收尸

五、什么是孤儿进程

退出父进程,子进程不退出,此时子进程被1号进程(init进程)收养。

  1. 孤儿进程脱离终端控制,运行在后端
  2. ctrl+c无法杀死后端进程,孤儿进程可以用kill -9 killall -9杀死
  3. 孤儿进程是活着的进程,没有危害。

六、消息队列和共享内存的区别

消息队列的特点

  1. 消息队列需要打包,有特定的格式以及消息类型。
  2. 消息队列按照先进先出的原则,但是也可以限制消息类型读取,在限制消息类型后也需要按照先进先出的原则。
  3. 消息队列独立于进程,等进程结束后,消息队列以及其中的内容不会删除,除非重启操作系统或者手动删除。

共享内存的特点

  1. 共享内存可以通过映射,在用户空间直接获取到共享内存的首地址。用户只需要在用户空间通过操作地址,直接访问到共享内存
  2. 共享内存是 最高效的 进程间通信方式。
  3. 多个进程可以同时访问共享内存,修改其中的内容,所以共享内存其实是临界资源,需要注意进程间的同步互斥:
    1. 信号灯集
    2. 互斥锁
    3. 条件变量
    4. 信号灯
  4. 共享内存独立于进程,等进程结束后,共享内存以及其中的内容不会删除,除非重启操作系统或者手动删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/476091.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据表练习

思维导图 面试题答问1、IO多路复用的引入目的和原理 目的:在有操作系统时,可以用多线程和进程完成任务并发执行,没有操作系统的情况下可以使用IO多路复用技术来进行任务并发。 原理:将多个阻塞任务的文件描述符统一放到一个检查容…

大屏动效合集更更更之实现百分比环形

实现效果 参考链接: https://pslkzs.com/demo/pie/demo1.php 写在最后🍒 源码,关注🍥苏苏的bug,🍡苏苏的github,🍪苏苏的码云

MySQL索引的创建与基本用法

MySQL索引 MySQL索引是一种数据结构,用于提高查询数据的效率。MySQL索引可以被看作是数据库表的“目录”。就像书籍的目录帮助我们快速找到特定章节的位置一样,数据库索引帮助数据库快速找到特定数据记录的位置。 MySQL索引的类型与创建方法 MySQL索引…

如何优化前端项目的 SEO

在当今数字化时代,网站对于企业的重要性不言而喻。然而,一个优秀的网站如果在搜索引擎中排名靠后,将无法吸引到足够的流量和用户。因此,优化前端项目的SEO已经成为了网站拓展业务、提升品牌知名度的必经之路。 响应式设计与移动优…

Android14 - AMS之Activity启动过程(1)

Android14 - AMS之Activity启动过程(2)-CSDN博客 ​​​​​​​ Android14 - AMS之Activity启动过程(3)-CSDN博客 我们以Context的startActivity场景(option null, FLAG_ACTIVITY_NEW_TASK)来…

以题为例浅谈双指针算法

什么是双指针算法 双指针是指在遍历元素时,不是使用单个指针进行遍历而是使用两个指针进行访问,从而达到相应目的;注意这个指针不是c语言中那个指向地址的指针; 双指针分类 双指针分为对撞指针和快慢指针; 对撞指针…

ServletConfig和ServletContext

ServletConfig接口 在Servlet运行期间,需要一些配置信息,这些信息都可以在WebServlet注解的属性中配置。当Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用init(ServletConfig config…

手写一个跳表,跪了。。。

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团、蚂蚁、得物的面试资格,遇到很多很重要的相关面试题: 手写一个跳表? redis为什…

蓝桥刷题--四元组问题和肖恩的投球游戏加强版

1.四元组问题 我的这个代码有点问题&#xff0c;我也找不出来&#xff0c;哪位大佬指正一下 // 四元组问题 //思路 // 是否存在 a < b < c < d, 使得nums[d] < nums[c] < nums[a] < nums[b] //分别维护二元组 (a, b) 和 (c, d), 对合法 b 维护前缀 max 的 n…

QT_day2:页面设计使用ui

1、自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面。&#xff08;不要使用课堂上的图片和代码&#xff0c;自己发挥&#xff0c;有利于后面项目的完成&#xff09; 要求&#xff1a; 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件相关设置&#xff0c…

C++多线程都可以对同一个全局变量读写,不设置锁应该没关系吧?

C多线程都可以对同一个全局变量读写&#xff0c;不设置锁应该没关系吧&#xff1f; 是这个意思吗&#xff1a;某个线程只操作一个二进制位&#xff0c;不会有其他线程和它抢着操作同一个二制进位&#xff0c;这种情况下&#xff0c;是否需要锁&#xff1f; 在开始前我有一些资…

openGauss学习笔记-248 openGauss性能调优-使用Plan Hint进行调优-Plan Hint调优概述

文章目录 openGauss学习笔记-248 openGauss性能调优-使用Plan Hint进行调优-Plan Hint调优概述248.1 功能描述248.2 支持范围248.3 注意事项248.4 示例 openGauss学习笔记-248 openGauss性能调优-使用Plan Hint进行调优-Plan Hint调优概述 Plan Hint为用户提供了直接影响执行计…

小白也可以轻松学大模型 RAG:FlagEmbedding 重排序

RAG模型已经取得了显著的进展&#xff0c;但其性能仍然受到排序质量的限制。在实践中&#xff0c;我们发现重排序技术能够有效地改善排序的效果&#xff0c;从而进一步提升RAG模型在问答任务中的表现。 重排序的作用 与传统的嵌入模型不同&#xff0c;重排序器&#xff08;rera…

Tomcat启动报错 因为在清除过期缓存条目后可用空间仍不足

在Tomcat部署路径下的./conf/context.xml配置文件的标签内添加如下内容&#xff1a; <Resources cachingAllowed"true" cacheMaxSize"100000" />

【高频SQL题目进阶版】1440.计算布尔表达式的值

错误答案&#xff1a; 我一开始以为&#xff0c;既然都能拿到值了&#xff0c; 那么把它们合并起来就可以了。后来发现不行。。 1 concat concat(v1.value ,operator ,v2.value) 它不是一个条件&#xff0c;而只是一个字符串 。 而if (condition, true_value, false_value)…

【Leetcode】top 100 链表

基础知识补充 单向链表结构&#xff1a;item存储数据 next指向下一结点地址 head保存首地址 class Node(object): # 创建结点def __init__(self, item): self.item item # item存放数据元素self.next None # next是下一个…

ginblog博客系统/golang+vue

ginblog博客系统 前台&#xff1a; 后台&#xff1a; Gitee的项目地址&#xff0c;点击进入下载 注意&#xff1a; 数据库文件导入在model里面&#xff0c;直接导入即可。 admin和front前后台系统记住修改https里的地址为自己的IP地址&#xff1a; front同上。

考研数学老师怎么选❓看这一篇就够了

张宇、汤家凤、武忠祥、李永乐、杨超、王式安、方浩这些老师都有自己擅长的细分 比如张宇老师&#xff0c;杨超&#xff0c;汤家凤&#xff0c;武忠祥老师的高数讲的很好&#xff0c;李永乐老师是线代的神&#xff0c;王式安、方浩概率论讲的很好&#xff0c;所以对于不同的学…

数据库学习记录(二)多表设计与多表查询

一对多 一对多时候&#xff0c;一张表内的一个数据可能对应着其他表内的多个数据&#xff0c;例如一个部门内有多个员工&#xff0c;但是公司里不只一个部门&#xff0c;也不止一个员工&#xff0c;这个时候就是一对多的情况&#xff0c;这个时候可以绑定一个外键&#xff0c;…