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

性能优化-如何提高cache命中率

本文主要介绍性能优化领域常见的cache的命中率问题,旨在全面的介绍提高cache命中率的方法,以供大家编写出性能友好的代码,并且可以应对性能优化领域的面试问题。

🎬个人简介:一个全栈工程师的升级之路!
📋个人专栏:高性能算法开发优化
🎀CSDN主页 发狂的小花
🌄人生秘诀:学习的本质就是极致重复!

目录

前言

1 Cache基本原理与概念

1.1 Cache定义及作用

1.2 Cache结构与工作原理

1.3 Cache一致性问题

2 影响Cache命中率因素分析

2.1 数据访问局部性原理

2.1.1 时间局部性

2.1.2 空间局部性

2.1.3 顺序局部性

2.2 Cache容量与配置

2.2.1 Cache容量

2.2.2 Cache行大小

2.2.3 Cache替换策略

2.3 数据存储方式及策略

2.3.1 数据存储方式

2.3.2 数据预取策略

2.3.3 数据压缩与加密

3 优化数据访问模式策略

3.1 顺序访问优化方法

3.2 循环访问优化方法

3.3 分块存储和预取技术

4 提升Cache替换算法效率

4.1 常见替换算法介绍及比较

4.2 基于预测模型动态调整替换策略

4.3 实现自适应替换算法

5 多级缓存设计与应用实践

5.1 多级缓存概念及优势

5.2 多级缓存设计原则和方法

5.3 典型应用场景分析

5.3.1 Web应用性能优化

5.3.2 大数据处理场景

5.3.3 移动应用性能优化

6 监控、诊断与调优工具介绍

6.1 常用监控工具简介

6.2 问题诊断方法和步骤

6.3 调优建议和最佳实践


前言

        我们都知道现代CPU的处理速度极其的快,主频不断的提高,不考虑功耗的前提下,编写的程序应该速度是无限接近CPU的处理速度的。但是,似乎我们发现程序在运行时并不能达到CPU的处理速度。这是由于数据存储在内存上,内存的处理速度很低,CPU访问内存的数据,需要耗费时间,这在性能优化领域称为内存墙。内存的存取速度与CPU的运算速度的差距导致我们不能完全发挥出CPU的高速度运算。由此我们引入了cache,一种介于CPU寄存器和内存之间的存储介质,利用程序数据的局部性原理,取数据时将一部分数据从内存取到cache,下次取数据可以直接从cache上拿,这样就避开了访存的低速度问题。当数据在cache拿不到的时候再去内存取,这里涉及到cache的命中率和缓存一致性的问题。由于cache的价格比内存高很多,我们无法给电脑配备大量的cache,因此在有限的cache下,如何让程序的运行尽可能的减少访存频次,提高cache的命中率就显得尤为重要了。这是本文命题的主要来源。

       对于代码的简洁与性能问题,切记,非必要不优化,优化容易出问题,需要更高深的技术,能系统性解决的不要去过分优化代码

1 Cache基本原理与概念

1.1 Cache定义及作用

        定义:

        Cache是位于CPU与主存之间的高速缓冲存储器,它用高速SRAM组成,其存取速度与CPU相当。

        作用:

        由于CPU的速度远高于主存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。

1.2 Cache结构与工作原理

        结构:

        Cache通常分为L1 Cache(一级缓存)、L2 Cache(二级缓存)和L3 Cache(三级缓存),它们分别位于CPU内部、CPU外部但靠近CPU以及主存与CPU之间。三级Cache的大小L1->L2-L3逐渐增大,速度逐渐减小,价格逐渐降低。

        工作原理:

        当CPU要读取一个数据时,首先从L1 Cache中查找,如果没找到就从L2 Cache中查找,如果还是没找到就从L3 Cache或内存中查找。一般来说,L1 Cache的命中率最高,因为它的容量小且靠近CPU。这里涉及到几种Cache映射,后续会推出Cache设计相关的文章。

1.3 Cache一致性问题

        在多处理器系统中,每个处理器都有自己的Cache,当多个处理器访问同一内存位置时,就可能出现Cache一致性问题。

        为了解决Cache一致性问题,通常采用MESI协议或MOESI协议等。这些协议通过维护一个状态机来跟踪每个Cache行的状态,并根据状态机的变化来更新Cache行的数据。

        Cache一致性问题一般不需要程序员自己去处理,Soc在设计时就提供了。

2 影响Cache命中率因素分析

2.1 数据访问局部性原理

2.1.1 时间局部性

        近期被访问过的数据很可能在不久的将来再次被访问。

2.1.2 空间局部性

        被访问数据附近的数据也有可能在不久的将来被访问。

2.1.3 顺序局部性

        按照某种顺序访问的数据,后续访问也会按照相同的顺序进行。    

2.2 Cache容量与配置

2.2.1 Cache容量

          Cache容量越大,能够存储的数据越多,命中率越高。

2.2.2 Cache行大小

        Cache行大小与数据块大小匹配时,Cache利用率最高。     

2.2.3 Cache替换策略

        不同的替换策略会对Cache命中率产生影响,如LRU(Least Recently Used)和LFU(Least Frequently Used)等。 

2.3 数据存储方式及策略

2.3.1 数据存储方式

        数据的存储方式(如按块存储、按对象存储等)会影响Cache的命中率和效率。

2.3.2 数据预取策略

        通过预测未来可能被访问的数据,提前将其加载到Cache中,可以提高命中率。

2.3.3 数据压缩与加密

        对数据进行压缩和加密处理,可以在有限的空间内存储更多数据,但可能会增加访问时间和处理开销。

3 优化数据访问模式策略

3.1 顺序访问优化方法

        (1)空间局部性原理

                将相邻的数据块存储在连续的内存空间中,利用Cache的空间局部性原理提高命中率。

        (2)预取技术

                通过分析数据访问模式,预测未来可能被访问的数据块,并提前将其加载到Cache中。

        (3)增大Cache容量

                通过增加Cache的容量,可以存储更多的数据块,从而提高命中率。但需要权衡成本和性能。

3.2 循环访问优化方法

        (1)循环展开

                将循环体内的操作展开,减少循环次数,从而降低Cache的失效次数。 

        (2)循环交换

                改变循环嵌套的顺序,使得内层循环访问的数据更有可能被Cache命中。

        (3)循环合并

                将多个循环合并为一个循环,减少循环控制开销和Cache失效次数。   

3.3 分块存储和预取技术

        (1)分块存储

                将数据按照一定的大小分成块,并存储在连续的内存空间中。这样可以利用Cache的空间局部性原理提高命中率。

        (2)预取技术

                通过分析数据访问模式,预测未来可能被访问的数据块,并提前将其加载到Cache中。预取技术可以进一步提高Cache的命中率。

        (3) 多级Cache       

                采用多级Cache结构,使得不同级别的Cache分别存储不同粒度的数据块。这样可以充分利用各级Cache的优势,提高整体命中率。

4 提升Cache替换算法效率

4.1 常见替换算法介绍及比较

        (1)LRU(Least Recently Used)算法

                将最近最少使用的数据块替换出Cache,适用于数据访问具有时间局部性的场景。

        (2)LFU(Least Frequently Used)…

                将访问频率最低的数据块替换出Cache,适用于数据访问具有频率局部性的场景。

        (3)FIFO(First In First Out)算法

                按照数据块进入Cache的时间顺序进行替换,不考虑访问频率和时间局部性。

4.2 基于预测模型动态调整替换策略

        (1)基于时间序列分析的预测模型

                利用历史访问数据建立时间序列模型,预测未来数据访问模式,并据此调整替换策略。

        (2)基于机器学习的预测模型

                利用机器学习算法对历史访问数据进行训练,得到数据访问模式的分类器或回归模型,并据此动态调整替换策略。

4.3 实现自适应替换算法

        (1)自适应LRU算法

                     结合LRU算法和访问频率信息,动态调整数据块在Cache中的位置,使得更常用的数据块能够更长时间地停留在Cache中。

        (2)自适应LFU算法

                在LFU算法的基础上引入时间衰减因子,使得长时间未被访问的数据块逐渐降低其访问频率,从而更容易被替换出Cache。         

        (3)自适应FIFO算法

                对FIFO算法进行改进,当Cache空间不足时,优先替换出最早进入Cache且长时间未被访问的数据块。    

5 多级缓存设计与应用实践

5.1 多级缓存概念及优势

        定义:

        多级缓存是指在计算机系统中采用不同层级、不同速度和容量的缓存组合,以优化数据访问性能。

        优势分析:

        多级缓存能够减少访问延迟,提高数据访问速度;同时减轻对后端存储系统的压力,提升系统整体性能。

5.2 多级缓存设计原则和方法

      (1) 缓存一致性:

        确保各级缓存中数据的一致性,避免数据不一致导致的问题。

     (2)缓存容量规划:

        根据业务需求合理规划各级缓存的容量,避免缓存溢出或浪费资源。

     (3)访问性能优化:

        优先使用快速、高效的缓存层级,减少数据访问延迟。

     (4)分层设计:

        将数据按照访问频率、重要性等因素进行分层存储,高频访问数据放在前端缓存,低频访问数据放在后端缓存。

     (5) 缓存淘汰策略:

        制定合理的缓存淘汰策略,如LRU、LFU等,以充分利用缓存空间。   

     (6)缓存预热与懒加载:

         通过缓存预热提前加载热点数据,采用懒加载方式延迟加载非热点数据,提高缓存命中率。    

5.3 典型应用场景分析

5.3.1 Web应用性能优化

        在Web应用中,多级缓存可以有效缓解数据库压力,提高页面加载速度。例如,使用CDN作为第一级缓存,将静态资源缓存在离用户最近的节点上;使用Redis等内存数据库作为第二级缓存,存储热点数据和会话信息等;最后使用数据库作为持久化存储。

5.3.2 大数据处理场景

        在大数据处理场景中,多级缓存可以减少对HDFS等分布式文件系统的访问次数,提高数据处理速度。例如,使用本地内存作为第一级缓存存储中间计算结果;使用分布式缓存如Redis Cluster作为第二级缓存共享数据;最终将处理结果写入HDFS等持久化存储系统。

5.3.3 移动应用性能优化

        在移动应用中,多级缓存可以减少网络请求次数和响应时间,提升用户体验。例如,在客户端本地使用SQLite等轻量级数据库作为第一级缓存存储用户数据;使用服务器端的Redis等内存数据库作为第二级缓存共享数据;最终将数据持久化到MySQL等关系型数据库中。  


6 监控、诊断与调优工具介绍

6.1 常用监控工具简介

        Cache监控工具:

        用于实时监控Cache的命中率、响应时间、缓存数据量等关键指标,帮助开发人员及时发现问题。

        应用性能监控工具:

        能够监控整个应用系统的性能表现,包括Cache的使用情况,从而定位性能瓶颈。    

        日志分析工具:

        通过对系统日志的深入挖掘和分析,可以发现Cache使用的异常情况和潜在问题。

6.2 问题诊断方法和步骤

        观察监控数据:

        通过监控工具收集的数据,观察Cache命中率、响应时间等指标的变化趋势,初步判断是否存在问题。

        分析日志信息:

        利用日志分析工具,对系统日志进行挖掘和分析,找出与Cache相关的异常信息和错误记录。

        重现问题场景:

        尝试重现问题场景,模拟用户请求和操作,以便更深入地了解问题发生的原因和过程。

6.3 调优建议和最佳实践

        调整缓存大小:

        根据监控数据和业务需求,适当调整Cache的大小,以平衡命中率和资源消耗。

        定期清理无效缓存:

        定期清理过期或无效的缓存数据,避免占用宝贵的缓存空间,同时减少Cache失效的可能性。

        合理设置缓存策略:

        根据业务需求和数据特点,选择合适的缓存策略,如LRU、LFU等,以提高Cache命中率。

        优化数据结构和算法:

        优化数据结构和算法可以降低Cache的查找和替换时间,从而提高Cache命中率。                                      

🌈我的分享也就到此结束啦🌈
如果我的分享也能对你有帮助,那就太好了!
若有不足,还请大家多多指正,我们一起学习交流!
📢未来的富豪们:点赞👍→收藏⭐→关注🔍,如果能评论下就太惊喜了!
感谢大家的观看和支持!最后,☺祝愿大家每天有钱赚!!!

相关文章:

性能优化-如何提高cache命中率

本文主要介绍性能优化领域常见的cache的命中率问题,旨在全面的介绍提高cache命中率的方法,以供大家编写出性能友好的代码,并且可以应对性能优化领域的面试问题。 🎬个人简介:一个全栈工程师的升级之路! &am…...

分布式【4. 什么是 CAP?】

什么是 CAP? C 代表 Consistency,一致性,是指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。 A 代表 Availability,可用性,是指系统提…...

<软考高项备考>《论文专题 - 39采购管理(3) 》

3 过程2-实施采购 3.1 问题 4W1H过程做什么获取卖方应答、选择卖方并授予合同的过程作用:选定合格卖方并签署关于货物或服务交付的法律协议。本过程的最后成果是签订的协议,包括正式合同。为什么做实际进行采购谁来做组织中的职能部门或项目经理什么时…...

Java在SpringCloud中自定义Gateway负载均衡策略

Java在SpringCloud中自定义Gateway负载均衡策略 一、前言 spring-cloud-starter-netflix-ribbon已经不再更新了,最新版本是2.2.10.RELEASE,最后更新时间是2021年11月18日,详细信息可以看maven官方仓库:org.springframework.clou…...

前端 js 基础(1)

js 结果输出 &#xff08;点击按钮修改文字 &#xff09; <!DOCTYPE html> <html> <head></head><body><h2>Head 中的 JavaScript</h2><p id"demo">一个段落。</p><button type"button" onclic…...

Android : 使用GestureOverlayView进行手势识别—简单应用

示例图&#xff1a; GestureOverlayView介绍&#xff1a; GestureOverlayView 是 Android 开发中用于识别和显示手势的视图组件。它允许用户在屏幕上绘制手势&#xff0c;并且应用程序可以检测和响应这些手势。以下是关于 GestureOverlayView 的主要特点&#xff1a; 手势识别…...

API集群负载统计 (100%用例)C卷 (JavaPythonNode.jsC语言C++)

某个产品的RESTful API集合部署在服务器集群的多个节点上, 近期对客户端访问日志进行了采集,需要统计各个API的访问频次, 根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。 RESTful API的由多个层级构成,层级之间使用/连接,如/A/B/C/D这个地址…...

小梅哥Xilinx FPGA学习笔记18——专用时钟电路 PLL与时钟向导 IP

目录 一&#xff1a;IP核简介&#xff08;具体可参考野火FPGA文档&#xff09; 二&#xff1a; 章节导读 三&#xff1a;PLL电路原理 3.1 PLL基本实现框图 3.2 PLL倍频实现 3.3 PLL分频实现 四: 基于 PLL 的多时钟 LED 驱动设计 4.1 配置 Clocking Wizard 核 4.2 led …...

低代码平台在金融银行中的应用场景

随着数字化转型的推进&#xff0c;商业银行越来越重视技术在业务发展中的作用。在这个背景下&#xff0c;白码低代码平台作为一种新型的开发方式&#xff0c;正逐渐受到广大商业银行的关注和应用。白码低代码平台能够快速构建各类应用程序&#xff0c;提高开发效率&#xff0c;…...

Css基础内容

<!DOCTYPE html> <html> <head> <meta charset"UTF-8" /> <title>CSS</title> <!-- <link rel"stylesheet" href"Html5与Css3\CSS\my.css"> --> <!-- link引入外部样式表&#xff1a;rel&…...

微服务(11)

目录 51.pod的重启策略是什么&#xff1f; 52.描述一下pod的生命周期有哪些状态&#xff1f; 53.创建一个pod的流程是什么&#xff1f; 54.删除一个Pod会发生什么事情&#xff1f; 55.k8s的Service是什么&#xff1f; 51.pod的重启策略是什么&#xff1f; 可以通过命令kub…...

连锁门店管理需要信息化系统

连锁门店管理的信息化系统可以提供以下功能&#xff0c;以满足连锁企业日常管理的需求&#xff1a; 1. 连锁线下收银&#xff1a;信息化系统可以提供线下收银功能&#xff0c;包括商品扫码、价格结算、支付方式选择等。通过系统记录每笔交易数据&#xff0c;方便对销售情况进行…...

UTF-8编码:打破字符编码的国界

UTF-8编码&#xff1a;打破字符编码的国界 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一同探讨编程世界中一项至关重要的技术——“UTF-…...

HTML进阶

列表、表格、表单 文章目录 列表、表格、表单01-列表无序列表有序列表定义列表 02-表格表格结构标签-了解合并单元格 03-表单input 标签input 标签占位文本单选框上传文件多选框下拉菜单文本域label 标签按钮 04-语义化无语义的布局标签有语义的布局标签 05-字符实体 01-列表 …...

基于策略模式和简单工厂模式实现zip、tar、rar、7z四种压缩文件格式的解压

推荐语 这篇技术文章深入探讨了基于策略模式和简单工厂模式实现四种常见压缩文件格式的解压方法。通过阅读该文章&#xff0c;你将了解到如何利用这两种设计模式来实现灵活、可扩展的解压功能&#xff0c;同时适应不同的压缩文件格式。如果你对设计模式和文件处理感兴趣或刚好…...

修改jenkins的目录(JENKINS_HOME)

默认JENKINS_HOME是/var/lib/jenkins/ 现要修改为/home/jenkins_data/jenkins 最开始 sudo cp -a /var/lib/jenkins/ /home/jenkins_data/ 然后如下操作&#xff1a; 1、首先 /etc/sysconfig/jenkins&#xff1a;jenkins配置文件&#xff0c;“端口”&#xff0c;“JENKIN…...

Bytebase:统一数据库 CI/CD 解决方案 | 开源日报 No.128

bytebase/bytebase Stars: 7.9k License: NOASSERTION Bytebase 是一个数据库 CI/CD 解决方案&#xff0c;为开发人员和 DBA 提供统一的工具来管理不同数据库系统的开发生命周期。其主要功能包括标准化操作流程、SQL 代码审查、GitOps 集成以及数据访问控制等。关键特性和核心…...

History对象常用方法

文章目录 一、什么是History对象二、使用History对象 一、什么是History对象 history 对象来保存浏览器历史记录信息&#xff0c;也就是用户访问的页面。浏览器的前进与后退功能本质上就是 history 的操作。history 对象记录了用户浏览过的页面&#xff0c;通过该对象提供的 A…...

修改源码,element的el-table合并,处理合并产生的hover样式问题

1、确认自己element-ui的版本号 2、此element-ui下的lib包是修改过hover样式的包,如何替换自己文件下的node_modules中的包 修改后将lib文件夹中文件替换你项目中/node_module/element-ui/Lib中的文件问题??如果替换开发环境中的node_module的包无法升级到测试环境,因为nod…...

IoT 物联网常用协议

物联网协议是指在物联网环境中用于设备间通信和数据传输的协议。根据不同的作用&#xff0c;物联网协议可分为传输协议、通信协议和行业协议。 传输协议&#xff1a;一般负责子网内设备间的组网及通信。例如 Wi-Fi、Ethernet、NFC、 Zigbee、Bluetooth、GPRS、3G/4G/5G等。这些…...

使用java备份和恢复SQLServer表数据

需求 近来工作中遇到一个问题&#xff0c;内网办公系统中的数据需要导出到外网中进行查询&#xff0c;外网的数据库中还有一些表存储外网的数据&#xff0c;因此无法使用全库备份恢复功能来满足需求。即只从内网数据库中导出若干表的内容至外网数据库的对应表。 其他解决方案…...

27 UVM queue

uvm_queue类构建一个动态队列&#xff0c;该队列将按需分配并通过引用传递。 uvm_queue类声明&#xff1a; class uvm_queue #( type T int ) extends uvm_object 1 uvm_queue class hierarchy 2 uvm_queue class Methods 3 UVM Queue Example 在下面的示例中&#xff0c;…...

聊聊自动化测试的分层实践

技术群里&#xff0c;有同学聊起了各自在实践自动化测试时遇到的各种问题&#xff0c;最典型的就是落地难度和投入产出比。毕竟在当前这个时间节点&#xff0c;单纯的技术实践如果不能带来实际可见的业务价值&#xff0c;确实很影响个人绩效和团队产出。 这篇文章&#xff0c;…...

LVS那点事

LVS 原理 IPVS LVS 的 IP 负载均衡技术是通过 IPVS 模块来实现的&#xff0c;IPVS 是 LVS 集群系统的核心软件&#xff0c;它的主要作用是&#xff1a;安装在 Director Server 上&#xff0c;同时在 Director Server 上虚拟出一个 IP 地址&#xff0c;用户必须通过这个虚拟的…...

2022-2023年度广东省职业院校学生专业技能大赛“软件测试”赛项接口测试训练题目

接口测试 新增接口脚本编写和执行测试,并执行脚本。 (1)商品单位添加接口描述如下: 接口功能:提供商品单位新增处理。 接口地址(根据实际系统IP及端口自行替换): http://XX.XX.XX.XX:XXXX/prod-api/manager/category/add。 请求方式:POST。 请求参数:...

[Python][LeetCode]28. 找出字符串中第一个匹配项的下标

给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入&#xff1a;haystack &quo…...

Prometheus监控mysql

docker-compose.yml 创建mysql mkdir/data/mysql -pcat > /data/mysql/docker-compose.yml << EOF version: 3.1 services:db:image: mysql:8.0restart: alwayscontainer_name: mysqlenvironment:TZ: Asia/ShanghaiLANG: en_US.UTF-8MYSQL_ROOT_PASSWORD: 123456comm…...

骑砍战团MOD开发(30)-游戏大地图map.txt

骑砍1战团mod开发-大地图制作方法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1rz4y1c7wH/ 一.骑砍游戏大地图 骑砍RTS视角游戏大地图 大地图静态模型(map.txt) 军团/城镇图标(module_parties.py). 骑砍大地图的战争迷雾和天气通过API进行管理和控制: # Weather-h…...

关于 bringup sensor 时,曝光时间异常的问题排查

1、问题背景 这两天在配置 sc223a 这颗 sensor 的驱动&#xff0c;按 datasheet 的要求配置 sensor 的曝光后&#xff0c;发现最大曝光时间增加了一倍&#xff0c; sensor setting 用的是30fps &#xff0c;理论上最大的绝对曝光时间应该是 33ms 才正确&#xff0c;但实际用 …...

linux用户态与内核态通过字符设备交互

linux用户态与内核态通过字符设备交互 简述 Linux设备分为三类&#xff0c;字符设备、块设备、网络接口设备。字符设备只能一个字节一个字节读取&#xff0c;常见外设基本都是字符设备。块设备一般用于存储设备&#xff0c;一块一块的读取。网络设备&#xff0c;Linux将对网络…...

如何高效查询文件:Linux 下的多种方法详解

如何高效查询文件&#xff1a;Linux 下的多种方法详解 在日常工作中&#xff0c;我们经常需要查找文件&#xff0c;无论是寻找特定的代码文件、配置文件还是其他文档。Linux 提供了多种强大的命令和工具&#xff0c;通过巧妙地使用管道符&#xff0c;我们可以将这些命令组合起来…...

记矩阵基础概念

转自up&#xff1a;Naruto_Qcsdn&#xff1a;三维空间几何变换矩阵 先贴个站里分享的基础概念。 learn form 肥猫同学VFX b站&#xff1a;会用transform就会用矩阵 移动 旋转 缩放 1.transofrm ——输出变化矩阵 可以移动transform查看变化去理解 位移 缩放 旋转 由此—…...

用html,js和layui写一个简单的点击打怪小游戏

介绍&#xff1a; 一个简单的打怪小游戏&#xff0c;点击开始游戏后&#xff0c;出现攻击按钮&#xff0c;击败怪物后可以选择继续下一关和结束游戏。 继续下一个怪兽的血量会增加5点&#xff0c;攻击按钮会随机变色。 效果图&#xff1a; html代码&#xff1a; <!DOCTYPE…...

[线代]不挂科猴博士

行列式的性质 行列式的计算及应用 矩阵的运算上(加减,相乘,取行列式) 矩阵的运算下(转置,逆,秩) 向量组与线性空间 解方程组...

扩散式过滤器 水泵角通除污器 0阻力过滤器直角过滤器工作原理

​ 1&#xff1a;扩散式除污器过滤器介绍 扩散除污器是一种在多个领域都有应用的设备&#xff0c;例如在泵站中用于拦截介质中的杂质&#xff0c;净化介质&#xff0c;保护管路&#xff0c;提高水泵效率&#xff0c;延长水泵寿命等。它还可以方便地进行变径处理&#xff0c;可以…...

MetalLB:本地Kubernetes集群的LoadBalancer负载均衡利器

背景 在本地集群进行测试时&#xff0c;我们常常面临一个棘手的问题&#xff1a;Service Type不支持LoadBalancer&#xff0c;而我们只能选择使用NodePort作为替代。这种情况下&#xff0c;我们通常会配置Service为NodePort&#xff0c;并使用externalIPs将流量导入Kubernetes…...

C++判定终端ip和目标ip是否在同一局域网内

程序如下&#xff1a;用于判断给定的终端 IP、子网掩码和目标 IP 是否在同一局域网内。请注意&#xff0c;这个程序假设 IP 地址是用整数表示的。 #include <iostream> #include <sstream> #include <vector> #include <bitset>// Function to check …...

深入解析 可空值类型

前言&#xff1a; 问&#xff1a;为什么会有可空值类型的诞生&#xff1f; 答&#xff1a;应对在某些特定场景中获取的信息可能是不完整的。 C# 1中的可空值类型 在C#1中没有对应的表示Null值的方法。当时普遍都是采用其他方式。第一种在数据缺失的情况下给其一个默认值。第…...

esp32idf使用thingscloud例程

对于不同的消息类型&#xff0c;API 如下&#xff1a; 消息类型 HTTP Method HTTP URL 设备上报属性 POST /device/v1//attributes 设备获取属性 GET /device/v1//attributes 设备上报事件 POST /device/v1//event/report 您只需要将以上的 HTTP URL 和接入点拼接即可获得最终…...

记一次应急响应练习(Linux)

记一次应急响应练习(Linux) Linux&#xff1a; 请提交攻击者的IP地址 答&#xff1a; 192.168.31.132 思路&#xff1a; 通过查看历史命令和开放的8080端口看到这台主机上运行的是Tomcat服务。并且在历史命令中看到了Tomcat的安装路径。那么就算是找到了日志的查看点了&#x…...

Pandas教程(四)—— 分层索引及数据联合

1.分层索引 分层索引就是在一个轴上拥有多个&#xff08;两个及以上&#xff09;索引级别&#xff0c;能以低维度形式处理高维度数据。 行索引有两层 1.1 分层索引的创建 1.1.1 方式一&#xff1a;直接设置 1&#xff09;在创建series、dataframe或读取文件时时&#xff0c;行…...

小梅哥Xilinx FPGA学习笔记16——FSM(状态机)的学习

目录 一、 状态机导读 1.1 理论学习 1.2 状态机的表示 1.3 状态机编码 1.4 状态机描述方式 二 、实战演练一&#xff08;来自野火&#xff09; 2.1 实验目标 2.2 模块框图 2.3 状态转移图绘制 2.4 设计文件 2.5 仿真测试文件 2.6 仿真结果 三、 实战演练二&…...

vol----学习随记!!!

目录 一、代码生成1.先新建一个功能的对应的代码配置各项解释&#xff1a; 2.后设置配置菜单3.再点保存&#xff0c;生成vue页面&#xff0c;生成model&#xff0c;生成业务类4.再通过菜单设置编写系统菜单 一、代码生成 1.先新建一个功能的对应的代码配置 各项解释&#xff…...

HarmonyOS4.0系统性深入开发10卡片事件能力说明

卡片事件能力说明 ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互&#xff0c;当前支持router、message和call三种类型的事件&#xff0c;仅在卡片中可以调用。 接口定义&#xff1a;postCardAction(component: Object, action: Object): void 接口…...

openGauss学习笔记-181 openGauss 数据库运维-升级-升级流程

文章目录 openGauss学习笔记-181 openGauss 数据库运维-升级-升级流程 openGauss学习笔记-181 openGauss 数据库运维-升级-升级流程 本章介绍升级到该版本的主要升级过程。 图 1 升级流程图 说明&#xff1a; 本文档中描述的时间仅供参考&#xff0c;实际操作时间以现场情况…...

提前应对威胁

通过新的《2023-2028 年荷兰国际网络安全战略》&#xff0c;荷兰政府在面对国家和犯罪分子持续构成的网络威胁时展现了责任和机构。它渴望将民主、人权和规范放在首位&#xff0c;并寻求维护全球开放、自由和安全的互联网。该战略明确了政府在国内实施打击的意愿和能力&#xf…...

C语言与人生:数组交换和二分查找

少年们&#xff0c;大家好。我是博主那一脸阳光&#xff0c;今天和分享数组交换和二分查找。 前言&#xff1a;探索C语言中的数组交换操作与二分查找算法 在计算机编程领域&#xff0c;特别是以C语言为代表的低级编程语言中&#xff0c;对数据结构的理解和熟练运用是至关重要的…...

Python实现【亚马逊商品】数据采集

前言 亚马逊公司&#xff0c;是美国最大的一家网络电子商务公司&#xff0c;位于华盛顿州的西雅图 是网络上最早开始经营电子商务的公司之一&#xff0c;亚马逊成立于1994年 今天教大家用Python批量采集亚马逊平台商品数据&#xff08;完整代码放在文末&#xff09; 地址&#…...

Git使用教程 gittutorial

该教程对该文章的翻译&#xff1a;https://git-scm.com/docs/gittutorial 本文介绍怎用使用 Git 导入新的工程、修改文件及如何其他人同步开发。 首先&#xff0c; 可以使用以下指令获取文档帮助 git help log笔者注&#xff1a;不建议看这个文档&#xff0c;标准的语法介绍…...

有了向量数据库,我们还需 SQL 数据库吗?

“除了向量数据库外&#xff0c;我是否还需要一个普通的 SQL 数据库&#xff1f;” 这是我们经常被问到的一个问题。如果除了向量数据以外&#xff0c;用户还有其他标量数据信息&#xff0c;那么其业务可能需要在进行语义相似性搜索前先根据某种条件过滤数据&#xff0c;例如&a…...