当前位置: 首页 > news >正文

操作系统一些面试

你这个请求队列是属于一写多读对吧,怎么解决冲突的?

可以采用双buffer或者说双缓冲区,一个缓冲区用来写,一个缓冲区用来读,采用交换指针的方法来进行缓存区的交换,这样交换效率是O(1)的,但是交换指针的时候仍然需要自旋锁,具体的话可以采用共享指针来进行操作,因为共享指针的引用计数是原子性的,当需要切换指针的时候先看现在读的指针的引用计数是不是等于1(代表只有目前的你切换指针的这个线程在用这个读指针),这个时候就表示读缓冲区的数据读完了,可以切换指针了。(但切换指针这里仍要要加自旋锁)当然这样子还有延时性的问题,就是读的线程读不到最新的数据,要考虑对数据实时性要求的影响。

读写模型有没有了解过?

多写一读模型:
多个线程写,一个线程读,这个时候不建议用自旋锁,因为多线程写的时候对数据要求的实时性比较高。而且多写的情况你也要等写缓存区一直没有线程占用的时候再切换,然后还要等读缓存区一直没有线程占用的情况切换,在数据频繁更新的情况下很可能数据的实时性效果很差

你的意思是epoll模型客户端不需要拷贝进内核吗?

需要拷贝

那那个链表空间在哪里?

用户态

那客户端从内核态到用户态不用拷贝吗?

需要拷贝

所以是拷贝一次还是两次?

两次

那epoll可以无限的承载这些socket请求吗?

不可以,因为一个进程最多打开1024个文件描述符。

可能客户端跟你tcp连接的时候客户端断开连接了嘛,然后这个socket还在你的队列里面,怎么把它删掉?

采用定时器小根堆,非活跃连接定期检测

socket在什么情况下是可以读的?

建立连接并且有数据到来

accept之后就永远可以读吗,就是你调用read函数之后一直都可以读吗?

read等于0的时候就说明客户端正常关闭了

read函数会阻塞吗?

可以设置成非阻塞
1.在Linux上,可以通过使用fcntl函数或者ioctl函数给创建的socket增加O_NONBLOCK标志来将socket设置为非阻塞模式
2.Linux上的socket函数也可以在创建时将socket设置为非阻塞模式,只要给type参数增加一个SOCK_NONBLOCK标志即可
3.在Linux上利用accept函数返回的代表与客户端通信的socket也提供了一个扩展函数accept,直接将accept函数返回的socket设置为非阻塞的,只需要将accept函数最后一个参数设置为SOCK_NONBLOCK即可。

如果现在read阻塞,对方客户端异常关闭这种情况会发生什么,还是一直阻塞死循环了?

read会返回负数

那现在是可读的情况还是异常之外的情况?

异常之外的

那epoll可以解决这种情况吗,可以识别这种情况吗?

可以,epoll事件中有epollrdhub,epollhub,epollerr表示这些情况。注意对方客户端异常发出的信号都是对方操作系统发出的,假如对方直接断电停机是不会发出异常信号的,只能是定时器检测非活跃连接。

那你知道在linux下一个进程创建线程是时候它是怎么做的吗,因为线程它是共享资源的嘛,那怎么让他实现共享资源的?

共享虚拟地址空间,任何线程都能访问这个虚拟地址空间,所以所有东西本质上都能共享。

那你刚刚说了线程有自己的栈嘛,那这个栈是放到哪里的知道吗,是进程的栈区还是独立于进程外的栈区?

线程(非主线程)的栈的大小是固定的,其会在空闲的堆(堆顶附近自顶向下分配)或者是空闲栈(栈底附近自底向上分配),因此线程栈局部函数中分配的变量是存放到各自分配的栈空间,因此可以说是线程私有的,又因为该线程栈的边界是设定好的,因此该线程栈的大小的固定的。

那你知道协程吗?

协程(Coroutine)是一种用户态的轻量级线程,协程不同于操作系统内核管理的线程和进程,而是由用户程序自行管理和调度,因此可以在单线程模型下完成并发任务。协程本质上是一种函数调用机制,可以看作是一种特殊的函数,其执行可以被中断和恢复,具备切换执行上下文的能力。

协程可以实现对复杂的任务进行分解,将大型任务分解为多个步骤,每个步骤作为一个协程运行,使用协程可以极大地简化代码逻辑,避免函数嵌套过深的问题,提高代码可读性和复用性。

协程的特点包括:

协程是在用户空间中实现的,不需要调用操作系统内核的函数,因此创建与切换协程的代价比线程要小得多,节约了系统资源,提高了代码执行效率。

协程具有分步执行的能力,可以在多个点挂起和恢复执行。协程间的切换不需要借助内核调度,只需要通过代码自身的语法控制,避免了线程切换的上下文保存和寄存器备份等操作,也就避免了线程切换时的开销,提高了执行效率。

协程更加灵活高效,可以在协程中使用传统的同步和异步编程模型,可以方便地处理 I/O 操作、计算密集型任务等多种场景。

现在要做缓存服务嘛,那本地要做一个缓存嘛,那你本地量越来越大的时候本地肯定顶不住嘛,那你就得布好几台机器处理这个缓存,可能同一个东西缓存记录到机器A去了,然后又记录到B 去了,那可能最后每台机器都存了全部的数据,可能每个缓存元素的存活时间非常短,那有什么办法解决这种问题吗?

一致性哈希+集群,先哈希到一个虚拟节点,这个节点代表一个集群,然后再在集群里随机哈希找一台机器。

相关文章:

操作系统一些面试

你这个请求队列是属于一写多读对吧,怎么解决冲突的? 可以采用双buffer或者说双缓冲区,一个缓冲区用来写,一个缓冲区用来读,采用交换指针的方法来进行缓存区的交换,这样交换效率是O(1)的,但是交…...

大语言模型

概念 大语言模型(Large Language Model,简称LLM)是一种基于人工智能技术的自然语言处理模型,是指在大量数据上训练的高级人工智能算法,以自上文推理词语概率为核心任务。它通过在海量文本数据上进行训练,学…...

php反序列化之pop链构造(基于重庆橙子科技靶场)

常见魔术方法的触发 __construct() //创建类对象时调用 __destruct() //对象被销毁时触发 __call() //在对象中调用不可访问的方法时触发 __callStatic() //在静态方式中调用不可访问的方法时触发 __get() //调用类中不存在变量时触发(找有连续箭头的…...

k8s---对外服务 ingress

目录 目录 目录 ingress与service ingress的组成 ingress-controller: ingress暴露服务的方式 2.方式二:DaemonSethostnetworknodeSelector DaemonSethostnetworknodeSelector如何实现 3.deploymentNodePort: 虚拟主机的方式实现http代…...

最优解-最长公共子序列

问题描述 最长公共子序列(Longest Common Subsequence,LCS)即求两个序列最长的公共子序列(可以不连续)。比如3 2 1 4 5和1 2 3 4 5两个序列,最长公共子序列为2 4 5 长度为3。解决这个问题必然要使用动态规划。既然要用到动态规划,就要知道状…...

el-tree获取当前选中节点及其所有父节点的id(包含半选中父节点的id)

如下图,我们现在全勾中的有表格管理及其下的子级,而半勾中的有工作台和任务管理及其子级 现在点击保存按钮后,需要将勾中的节点id及该节点对应的父节点,祖先节点的id(包含半选中父节点的id)也都一并传给后端,那这个例子里就应该共传入9个id,我们可以直接将getCheckedK…...

新上线一个IT公司微信小程序

项目介绍 项目背景: 一家IT公司,业务包含以下六大块: 1、IT设备回收 2、IT设备租赁 3、IT设备销售 4、IT设备维修 5、IT外包 6、IT软件开发 通过小程序,提供在线下单,在线制单,在线销售,业务介绍,推广,会员 项目目的: 业务介绍: 包含企业业务介绍 客户需…...

MCAL配置-PWM(EB23.0)

PWM配置项的介绍 一、General 1、PwmDeInitApi 从代码中添加/删除Pwm_17_GtmCcu6_Delnit() API。 TRUE:Pwm_17_GtmCcu6_Delnit() API可供用户使用。 FALSE:Pwm_17_GtmCcu6_Delnit() API对用户不可用。 注意:默认情况下禁用Pwm_17_GtmCcu6_Delnit() …...

v-if和v-for哪个优先级更高?

v-if和v-for哪个优先级更高? 结论: vue2输出的渲染函数是先执行循环,在看条件判断,如果将v-if和v-for写在一个标签内,哪怕只渲染列表中的一小部分,也要重新遍历整个列表,无形造成资源浪费。vu…...

Mapstruct 常用案例(持续更新.).

将A转换为B Mapper(componentModel "spring") public interface DemoConvert {B A2B(A a); }将List转换为List 注意:以下两个都不可缺少,需要先声明单个和集合的同时生命才可 Mapper(componentModel "spring") public interface …...

QT基础篇(10)QT5网络与通信

QT5网络与通信是指在QT5开发环境中使用网络进行数据传输和通信的相关功能和技术。 QT5提供了一套完善的网络模块,包括了TCP、UDP、HTTP等协议的支持,可以方便地在QT应用程序中进行网络通信。通过QT5的网络模块,开发者可以实现客户端和服务器…...

【Leetcode】269.火星词典(Hard)

一、题目 1、题目描述 现有一种使用英语字母的火星语言,这门语言的字母顺序与英语顺序不同。 给你一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。 请你根据该词典还原出此语言中已知的字母顺序,并 按字母递增顺序…...

opencv_模型训练

文件夹 opencv训练文件 xml negdataposdata 说明 negdata目录: 放负样本的目录 posdata目录: 放正样本的目录 xml目录: 新建的一个目录,为之后存放分类器文件使用 neg.txt: 负样本路径列表 pos.txt: 正样本路径列表 pos.vec: 后续自动生成…...

python PyQt5的学习

一、安装与配置 1、环境: python3.7 2、相关模块 pip install pyqt5 pyqt5-tools pyqt5designer 可以加个镜像 -i https://pypi.tuna.tsinghua.edu.cn/simple3、配置设计器 python的pyqt5提供了一个设计器,便于ui的设计 界面是这样的&#xff1a…...

3.goLand基础语法

目录 概述语法for常量与变量数组切片 slice切片问题问题1问题2 Make 和 New结构体和指针结构体标签 结束 概述 从 java 转来学 go &#xff0c;在此记录&#xff0c;方便以后翻阅。 语法 for package mainimport "fmt"func main() {for i : 0; i < 3; i {fmt.…...

计算机硬件 5.2组装整机

第二节 组装整机 一、准备工作 1.常用工具&#xff1a;中号十字螺丝刀、尖嘴钳、软毛刷、防静电手环等。 2.组装原则&#xff1a; ①按“先小后大”“从里到外”的顺序进行&#xff0c;不遗漏每一环节&#xff0c;不“带病”进行下一环节。 ②合理使用工具器材&#xff0c;…...

Docker搭建MySQL主从数据库-亲测有效

1、测试环境概述 1、使用MySQL5.7.35版本 2、使用Centos7操作系统 3、使用Docker20版本 案例中描述了整个测试的详细过程 2、安装Docker 2.1、如果已经安装docker,可以先卸载 yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-l…...

PyTorch 中的距离函数深度解析:掌握向量间的距离和相似度计算

目录 Pytorch中Distance functions详解 pairwise_distance 用途 用法 参数 数学理论公式 示例代码 cosine_similarity 用途 用法 参数 数学理论 示例代码 输出结果 pdist 用途 用法 参数 数学理论 示例代码 总结 Pytorch中Distance functions详解 pair…...

【Vue技巧】vue3中不支持.sync语法糖的解决方案

海鲸AI-ChatGPT4.0国内站点&#xff0c;支持设计稿转代码&#xff1a;https://www.atalk-ai.com 在 Vue 3 中&#xff0c;.sync 修饰符已经被移除。在 Vue 2 中&#xff0c;.sync 修饰符是一个语法糖&#xff0c;用于简化子组件和父组件之间的双向数据绑定。在 Vue 3 中&#x…...

设计模式⑦ :简单化

文章目录 一、前言二、Facade 模式1. 介绍2. 应用3. 总结 三、Mediator 模式1. 介绍2. 应用3. 总结 一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书"系列。本系列大部分内容…...

Python使用DrissionPage实现自动化处理的简单入门指南

在Python自动化领域&#xff0c;Selenium和Requests是两个常用工具&#xff0c;但各有局限。DrissionPage巧妙结合了两者优势&#xff0c;既能用浏览器自动化处理动态页面&#xff0c;又能通过HTTP请求提升效率。本文将带你从零开始&#xff0c;用10分钟掌握DrissionPage的核心…...

2025平航杯电子取证实战:从木马溯源到服务器渗透的完整链条分析

1. 木马溯源&#xff1a;从可疑流量到攻击者定位 2025年4月&#xff0c;杭州滨江警方接到一起特殊报案。市民刘晓倩&#xff08;化名倩倩&#xff09;发现自己的手机出现异常发热、电量消耗过快等现象&#xff0c;怀疑设备被人监控。这个看似普通的个人隐私案件&#xff0c;最终…...

QGIS中高效集成天地图:从注册到加载的完整指南

1. 天地图与QGIS的完美结合 第一次接触天地图是在一个城市规划项目里&#xff0c;当时需要高精度的底图作为参考。天地图作为国内权威的地理信息服务&#xff0c;不仅数据更新及时&#xff0c;而且完全免费&#xff0c;这对我们这些搞GIS开发的人来说简直是福音。不过刚开始用的…...

免费开源甘特图工具GanttProject:从任务混乱到清晰可视化的完整解决方案

免费开源甘特图工具GanttProject&#xff1a;从任务混乱到清晰可视化的完整解决方案 【免费下载链接】ganttproject Official GanttProject repository 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject 还在为项目管理中的任务混乱、进度模糊而烦恼吗&#x…...

Kandinsky-5.0-I2V-Lite-5s短视频质量控制:5秒内关键帧稳定性与抖动抑制技巧

Kandinsky-5.0-I2V-Lite-5s短视频质量控制&#xff1a;5秒内关键帧稳定性与抖动抑制技巧 1. 引言&#xff1a;为什么需要关注短视频质量 当你使用Kandinsky-5.0-I2V-Lite-5s生成短视频时&#xff0c;是否遇到过这些问题&#xff1a;画面突然跳变、主体运动不连贯、镜头移动卡…...

AI编程实战:工具选型、效率提升与代码优化技巧

2026年&#xff0c;AI编程已进入“自动驾驶时代”&#xff0c;据行业数据显示&#xff0c;AI编程工具可使开发者效率提升30%-70%&#xff0c;中小企业开发成本降低70%&#xff0c;个人开发者可快速实现产品落地。对于开发者而言&#xff0c;熟练运用AI编程工具&#xff0c;不是…...

Matlab GUI计时器:自动更新的数字时钟与恢复/暂停功能的定时器对象实现

Matlab图形用户界面计时器&#xff1a;使用定时器对象自动更新的MatlabGUI&#xff0c;一个数字时钟&#xff0c;作为显示基本组件的快速演示&#xff0c;带有一个按钮&#xff0c;用于恢复/暂停执行更新 实验室配了新酶标仪孵箱但总有人&#xff08;比如同组摸鱼的小师妹顺便…...

Graphormer参数详解:property-guided checkpoint模型结构与推理逻辑

Graphormer参数详解&#xff1a;property-guided checkpoint模型结构与推理逻辑 1. Graphormer模型概述 Graphormer是一种基于纯Transformer架构的图神经网络&#xff0c;专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB(Open Graph Benchmark)和PCQM…...

OpenClaw健康监测:用Phi-3-mini-128k-instruct分析智能手表数据

OpenClaw健康监测&#xff1a;用Phi-3-mini-128k-instruct分析智能手表数据 1. 为什么选择OpenClaw处理健康数据&#xff1f; 去年体检报告上的几项异常指标让我开始关注日常健康监测。虽然手环和智能手表能记录睡眠、心率等数据&#xff0c;但原始数据报表就像一本天书——我…...

花小钱办大事!微调Nova Lite,实现Pro级视觉检测效果

本文介绍了在Amazon Bedrock上对Amazon Nova Lite 1.0进行微调的两个实际应用案例&#xff0c;展示了在专业计算机视觉任务中&#xff0c;如何在保持成本效益的同时显著提升性能。通过对航拍视角检测和低光照监控场景的系统性评估&#xff0c;本例以最小的训练成本实现了增强的…...