操作系统一些面试
你这个请求队列是属于一写多读对吧,怎么解决冲突的?
可以采用双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的设计 界面是这样的:…...
3.goLand基础语法
目录 概述语法for常量与变量数组切片 slice切片问题问题1问题2 Make 和 New结构体和指针结构体标签 结束 概述 从 java 转来学 go ,在此记录,方便以后翻阅。 语法 for package mainimport "fmt"func main() {for i : 0; i < 3; i {fmt.…...
计算机硬件 5.2组装整机
第二节 组装整机 一、准备工作 1.常用工具:中号十字螺丝刀、尖嘴钳、软毛刷、防静电手环等。 2.组装原则: ①按“先小后大”“从里到外”的顺序进行,不遗漏每一环节,不“带病”进行下一环节。 ②合理使用工具器材,…...
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国内站点,支持设计稿转代码:https://www.atalk-ai.com 在 Vue 3 中,.sync 修饰符已经被移除。在 Vue 2 中,.sync 修饰符是一个语法糖,用于简化子组件和父组件之间的双向数据绑定。在 Vue 3 中&#x…...
设计模式⑦ :简单化
文章目录 一、前言二、Facade 模式1. 介绍2. 应用3. 总结 三、Mediator 模式1. 介绍2. 应用3. 总结 一、前言 有时候不想动脑子,就懒得看源码又不像浪费时间所以会看看书,但是又记不住,所以决定开始写"抄书"系列。本系列大部分内容…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
