操作系统页面置换算法Java实现(LFU,OPT,LRU,LFU,CLOCK)
FIFO先进先出算法
```java import java.util.LinkedList; import java.util.Queue;public class Main {
//先进先出的思想 是 用一个队列去模拟数据 如果当前不存在就是发生缺页中断了 就需要添加 如果已经满了 将队头的元素出队 即可
//先进先出 就是一个数组 frameCount
public static int FIFO(int[] pages, int frameCount) {
Queue queue = new LinkedList<>();
int pagesFaults = 0; //页面终端的次数
for (int page : pages) {
if (!queue.contains(page)) {
//不存在就缺页了
pagesFaults++;
// 如果页面框架已满,则移除最早进入的页面
if (queue.size() == frameCount) {
queue.poll(); // 移除最早的页面)
}
queue.add(page);
}
System.out.println("页面: " + page + " -> 内存框架: " + queue);
}
return pagesFaults;
}
public static void main(String[] args) {int arr1[] = {3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4};System.out.println(FIFO(arr1, 3));System.out.println("验证bleady现象");int arr2[] = {3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4};System.out.println(FIFO(arr2, 4));
}
}
<h3 id="OikGZ">OPT最佳置换算法</h3>
选择淘汰以后永远不使用的页面或者在最长时间内不再被使用的页面。双层for 循环当前的页面内元素,找到一个不存在或者位置最后的```java
import java.util.LinkedList;
import java.util.Queue;public class Main {public static int OPT(int[] pages, int frameCount) {Queue<Integer> queue = new LinkedList<>();int pageFaults = 0;int n = pages.length;for (int i = 0; i < n; i++) {if (!queue.contains(pages[i])) {pageFaults++; //发生页面中断了if (queue.size() == frameCount) {//考虑淘汰谁出去int page = findPage(queue, pages, i); //往后看queue.remove(page); // 删除需要置换的页面}queue.add(pages[i]);}System.out.println("页面: " + pages[i] + " -> 内存框架: " + queue);}return pageFaults;}private static int findPage(Queue<Integer> pageFrames, int[] pages, int currentIndex) {int farthestIndex = -1;int pageToReplace = -1;// 遍历当权的queuefor (int page : pageFrames) {int nextUseIndex = Integer.MAX_VALUE; //假设最远的位置// 找出页面下次访问的索引位置for (int j = currentIndex + 1; j < pages.length; j++) {if (pages[j] == page) {nextUseIndex = j;break;}}// 找到下次使用最远的页面if (nextUseIndex > farthestIndex) {farthestIndex = nextUseIndex;pageToReplace = page;}}return pageToReplace;}public static void main(String[] args) {int[] a = {7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1};System.out.println(OPT(a, 3));}
}

LRU缓存算法
```java import java.util.LinkedList; import java.util.Queue;public class Main {
public static int LRU(int[] pages, int frameCount) {Queue<Integer> queue = new LinkedList<>();int frageCount = 0;int n = pages.length;for (int i = 0; i < n; i++) {int page = pages[i];boolean flag=false;if (!queue.contains(page)) {flag=true;frageCount++;//移除头部 添加到末尾去if (queue.size() == frameCount) {queue.poll(); //弹出最久没有使用的}queue.add(page);} else {//先移除queue.remove(page);//再加到末尾queue.add(page);}System.out.print("页面: " + page + " -> 内存框架: " + queue);if (flag==true){System.out.println(" 发生缺页中断");}else{System.out.println();}}return frageCount;
}public static void main(String[] args) {int[] a = {7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1};System.out.println("一共发生"+LRU(a, 3)+"缺页中断");
}
}
<h3 id="AZw5J">Clock时钟算法</h3>
<h3 id="e0704aae">**Clock算法的步骤**</h3>
1. **初始化**:- 为每个页面框架分配一个**使用位**,初始为0。- 设置一个指针(通常称为“手”)指向第一个页面框架。
2. **页面访问**:- 当一个页面被访问时:* **如果页面已经在内存中,设置其使用位为1。*** **如果页面不在内存中,发生页面缺失:**+ **如果有空闲的页面框架,直接将页面加载到空闲框架中,并设置使用位为1。**+ **如果没有空闲框架,启动页面置换过程。**
3. **页面置换**:- 检查指针指向的页面的使用位:* **使用位为0**:将该页面置换出去,加载新页面到该位置,并将使用位设置为1。然后将指针移动到下一个页面框架。* **使用位为1**:将使用位重置为0,指针移动到下一个页面框架,继续检查。- 重复上述过程,直到找到一个使用位为0的页面进行置换。```java
package 操作系统代码.页面置换算法.clock时钟算法;import java.util.Arrays;public class Main {//要构建成一个循环的 指针 通过取模来实现public static int CLOCK(int[] pages, int fragmeCount) {int[] pageFrames = new int[fragmeCount]; //创建一共循环块Arrays.fill(pageFrames, -1); //刚开始的框架boolean[] useBits = new boolean[fragmeCount]; //访问位int current = 0; //当前所在int pageFaults = 0;//页面确实for (int page : pages) {boolean flag=false;boolean isExist = false;int frameIndex = -1;//如果存在 访问为变为truefor (int i = 0; i < fragmeCount; i++) {if (pageFrames[i] == page) {frameIndex = i;isExist = true;break;}}if (isExist) {useBits[frameIndex] = true;} else {pageFaults++;flag=true;while (true) {if (!useBits[current]) { //当前访问位为0 也就是false1了 将当前的移除pageFrames[current] = page;useBits[current] = true;current = (current + 1) % fragmeCount;break;} else {useBits[current] = false;current = (current + 1) % fragmeCount;}}}System.out.print("页面: " + page + " -> 内存框架: " + Arrays.toString(pageFrames));if (flag==true){System.out.println(" 发生缺页中断");}else{System.out.println();}}return pageFaults;}public static void main(String[] args) {int[] a = {7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1};int frameCount = 4; // 页面框架数量int totalPageFaults = CLOCK(a, frameCount);System.out.println("总页面缺失数: " + totalPageFaults);}
}

LFU算法
LFU(**Least Frequently Used**,**最不经常使用**)算法是一种页面置换策略,旨在通过替换使用频率最低的页面来优化内存管理。这种算法基于一个假设:那些在过去较少被访问的页面,在未来也可能不常被访问,因此更适合被置换出去。### **LFU算法的基本思想**LFU算法选择那些在当前内存中被访问次数最少的页面进行置换。与其他算法(如FIFO、LRU)主要关注页面的时间特性不同,LFU关注的是页面的频率特性。具体来说,当需要置换页面时,LFU会:1. **统计每个页面的访问频率**:记录每个页面在内存中被访问的次数。
2. **选择访问频率最低的页面**:当内存已满且需要置换页面时,选择访问频率最少的页面进行置换。
3. **处理频率相同的页面**:如果有多个页面具有相同的最低访问频率,可以采用其他策略(如FIFO)来决定具体置换哪个页面。### **LFU算法的工作步骤**1. **初始化**:- 创建一个数据结构(通常是哈希表)来存储当前内存中的页面及其对应的访问频率。- 设置页面框架的数量(即内存中可以同时容纳的页面数量)。2. **页面访问**:- **页面命中**(Page Hit):如果访问的页面已经在内存中,增加该页面的访问频率。- **页面缺失**(Page Fault):如果访问的页面不在内存中,发生页面缺失。- 如果内存中还有空闲页面框架,直接将新页面加载到空闲框架中,并将其访问频率设置为1。- 如果内存已满,选择访问频率最低的页面进行置换,将新页面加载到该位置,并将新页面的访问频率设置为1。3. **频率更新**:- 每次页面被访问时,更新其访问频率。- 在某些实现中,可能需要周期性地调整频率计数器以防止频率数值无限增大。### **LFU算法的优缺点**#### **优点**1. **高效的频率管理**:LFU算法能够有效地管理页面的访问频率,减少那些经常被访问的页面被置换的可能性。
2. **适用于频繁访问模式**:在某些应用场景中,如缓存系统,LFU算法能够保持热点数据在内存中,提高系统性能。#### **缺点**1. **实现复杂**:相比FIFO和LRU,LFU需要维护额外的频率计数器,增加了实现的复杂性。
2. **不适应动态访问模式**:如果某些页面的访问频率在一段时间后突然下降,LFU可能仍然保留这些页面,导致新热点页面被频繁置换。
3. **频率数值膨胀**:频率计数器可能随着时间的推移而变得非常大,需要定期重置或使用其他技术来管理频率数值。### **LFU算法的示例**假设有3个页面框架,页面访问序列为:`[1, 2, 3, 2, 4, 1, 5, 2, 1, 2, 3, 4, 5]`#### **步骤解析**| 步骤 | 访问页面 | 页面框架状态 | 访问频率(页面:频率) | 页面缺失 |
|------|----------|-----------------------|-----------------------|----------|
| 1 | 1 | [1, -, -] | {1:1} | 是 |
| 2 | 2 | [1, 2, -] | {1:1, 2:1} | 是 |
| 3 | 3 | [1, 2, 3] | {1:1, 2:1, 3:1} | 是 |
| 4 | 2 | [1, 2, 3] | {1:1, 2:2, 3:1} | 否 |
| 5 | 4 | [1, 2, 4] | {1:1, 2:2, 4:1} | 是(置换页面3)|
| 6 | 1 | [1, 2, 4] | {1:2, 2:2, 4:1} | 否 |
| 7 | 5 | [5, 2, 4] | {5:1, 2:2, 4:1} | 是(置换页面1)|
| 8 | 2 | [5, 2, 4] | {5:1, 2:3, 4:1} | 否 |
| 9 | 1 | [5, 2, 1] | {5:1, 2:3, 1:1} | 是(置换页面4)|
| 10 | 2 | [5, 2, 1] | {5:1, 2:4, 1:1} | 否 |
| 11 | 3 | [5, 2, 3] | {5:1, 2:4, 3:1} | 是(置换页面1)|
| 12 | 4 | [5, 2, 4] | {5:1, 2:4, 4:2} | 是(置换页面3)|
| 13 | 5 | [5, 2, 4] | {5:2, 2:4, 4:2} | 否 |**总页面缺失数:8**#### **解释**1. **步骤1-3**:加载页面1、2、3到内存,均发生页面缺失。
2. **步骤4**:页面2已在内存中,更新其频率。
3. **步骤5**:页面4缺失,选择频率最低的页面3进行置换(页面1和3的频率均为1,但假设选择了页面3)。
4. **步骤6**:页面1已在内存中,更新其频率。
5. **步骤7**:页面5缺失,选择频率最低的页面1进行置换。
6. **步骤8**:页面2已在内存中,更新其频率。
7. **步骤9**:页面1缺失,选择频率最低的页面4进行置换。
8. **步骤10**:页面2已在内存中,更新其频率。
9. **步骤11**:页面3缺失,选择频率最低的页面1进行置换。
10. **步骤12**:页面4缺失,选择频率最低的页面3进行置换。
11. **步骤13**:页面5已在内存中,更新其频率。### **LFU算法的实现示例(Java)**以下是一个简单的Java实现示例,展示如何使用LFU算法进行页面置换:```java
import java.util.*;public class LFUPageReplacement {public static int LFU(int[] pages, int frameCount) {// 用于存储当前内存中的页面及其频率Map<Integer, Integer> pageFrequency = new HashMap<>();// 用于存储页面的插入顺序(用于处理频率相同的页面,FIFO)Map<Integer, Integer> pageTime = new HashMap<>();int pageFaults = 0;int currentTime = 0;for (int page : pages) {currentTime++;if (!pageFrequency.containsKey(page)) {// 页面缺失pageFaults++;if (pageFrequency.size() == frameCount) {// 找到最不常使用的页面int lfuPage = -1;int minFreq = Integer.MAX_VALUE;int oldestTime = Integer.MAX_VALUE;for (Map.Entry<Integer, Integer> entry : pageFrequency.entrySet()) {int p = entry.getKey();int freq = entry.getValue();if (freq < minFreq) {minFreq = freq;lfuPage = p;oldestTime = pageTime.get(p);} else if (freq == minFreq) {// 频率相同,选择最早插入的页面if (pageTime.get(p) < oldestTime) {lfuPage = p;oldestTime = pageTime.get(p);}}}// 移除LFU页面pageFrequency.remove(lfuPage);pageTime.remove(lfuPage);}// 添加新页面pageFrequency.put(page, 1);pageTime.put(page, currentTime);} else {// 页面命中,增加频率pageFrequency.put(page, pageFrequency.get(page) + 1);}System.out.println("页面: " + page + " -> 当前内存: " + pageFrequency);}return pageFaults;}public static void main(String[] args) {int[] pages = {1, 2, 3, 2, 4, 1, 5, 2, 1, 2, 3, 4, 5};int frameCount = 3;int faults = LFU(pages, frameCount);System.out.println("总页面缺失数: " + faults);}
}
代码解释
-
数据结构:
pageFrequency:存储每个页面的访问频率。pageTime:记录每个页面第一次被加载到内存中的时间,用于处理频率相同的页面置换(FIFO)。
-
页面访问处理:
- 页面缺失:
- 增加页面缺失计数。
- 如果内存已满,找到频率最低且最早加载的页面进行置换。
- 将新页面添加到内存中,初始化其频率为1,并记录加载时间。
- 页面命中:
- 增加该页面的访问频率。
- 页面缺失:
-
输出:
- 每次页面访问后,打印当前内存中所有页面及其访问频率。
- 最终输出总的页面缺失次数。
LFU算法的优缺点总结
优点:
- 有效的频率管理:能够保留那些被频繁访问的页面,减少页面缺失次数。
- 适用于特定场景:在一些访问模式中(如热点数据频繁访问),LFU表现优异。
缺点:
- 实现复杂:需要维护额外的数据结构(频率计数器和时间戳),增加了实现的复杂性。
- 频率衰减问题:某些实现中,频率计数器可能会无限增大,需定期重置或采用其他衰减策略。
- 不适应动态访问模式:如果某些页面的访问频率突然下降,LFU可能仍然保留这些页面,导致新热点页面被频繁置换。
- 缓存污染:对于一次性访问的页面,频率会被计入,可能导致其他需要长期缓存的页面被置换。
总结
LFU(最不经常使用)算法通过跟踪每个页面的访问频率,选择访问次数最少的页面进行置换,从而优化内存管理。尽管LFU在某些场景下表现出色,但其实现复杂性和对动态访问模式的不适应性使其在实际操作系统中的应用受到一定限制。为了解决这些问题,研究人员提出了多种改进版的LFU算法,如LFU-K、LFU with Dynamic Aging等,以提升算法的性能和适应性。
LFU(Least Frequently Used,最不经常使用)是一种缓存替换算法。该算法根据数据的使用频率决定其被替换的优先级,优先淘汰使用频率最低的数据,保留那些被频繁访问的数据。LFU 算法适用于频繁访问的缓存项有较大概率被再次访问的场景。<h3 id="216c1668">LFU算法原理</h3>
LFU算法会为每个缓存项维护一个计数器,记录其被访问的次数。当缓存空间满了需要替换数据时,算法会选择访问频率最少的项进行淘汰。+ **频率计数**:每次缓存项被访问时,计数器会增加。
+ **淘汰策略**:当缓存满了,需要替换数据时,优先选择那些计数器值最小的项。如果有多个频率相同的项,通常会使用FIFO(先进先出)策略来选择最早进入缓存的项进行替换。<h3 id="eb40924e">实现要点</h3>
1. **哈希表+最小堆**:可以使用一个哈希表存储每个缓存项的访问频率,以及一个最小堆来管理频率最小的项。
2. **哈希表+双向链表**:用一个哈希表存储缓存项,另一个哈希表存储不同频率的双向链表,以实现按频率访问的组织结构,便于在相同频率时使用先进先出原则。
3. **计数器更新**:每次访问缓存项时,更新计数器,并将该项移动到相应频率的链表中。<h3 id="1a63ac23">示例</h3>
假设缓存容量为3:1. 缓存初始为空。
2. 访问数据`A`,缓存变为`[A:1]`。
3. 访问数据`B`,缓存变为`[A:1, B:1]`。
4. 访问数据`C`,缓存变为`[A:1, B:1, C:1]`。
5. 再次访问数据`A`,缓存变为`[A:2, B:1, C:1]`。
6. 访问数据`D`,缓存已满,需要淘汰一个数据。`B`和`C`频率相同,按照FIFO策略淘汰`B`,缓存变为`[A:2, C:1, D:1]`。<h3 id="78102351">优缺点</h3>
+ **优点**:适合访问频率较高的数据项。
+ **缺点**:对于某些在一段时间内频繁访问但后续不再访问的数据,可能会造成缓存命中率下降(“缓存污染”现象)。相关文章:
操作系统页面置换算法Java实现(LFU,OPT,LRU,LFU,CLOCK)
FIFO先进先出算法 java import java.util.LinkedList; import java.util.Queue; public class Main { //先进先出的思想 是 用一个队列去模拟数据 如果当前不存在就是发生缺页中断了 就需要添加 如果已经满了 将队头的元素出队 即可 //先进先出 就是一个数组 frameCount publi…...
Request和Response
前言 这一节主要讲的是Request和Response还有一些实例 1. 介绍 就是这两个参数 WebServlet("/demo7") public class ServletDemo7 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletExcepti…...
【青牛科技】GC8549替代LV8549/ONSEMI在摇头机、舞台灯、打印机和白色家电等产品上的应用分析
引言 在现代电子产品中,控制芯片的性能直接影响到设备的功能和用户体验。摇头机、舞台灯、打印机和白色家电等领域对控制精度、功耗和成本等方面的要求日益提高。LV8549/ONSEMI等国际品牌的芯片曾是这些产品的主要选择,但随着国内半导体技术的进步&…...
(十二)JavaWeb后端开发——MySQL数据库
目录 1.数据库概述 2.MyQSL 3.数据库设计 DDL 4.MySQL常见数据类型 5.DML 1.数据库概述 数据库:DataBase(DB),是存储和管理数据的仓库 数据库管理系统:DataBase ManagementSystem(DBMS),操纵和管理数据库的大型软件 SQL&a…...
pnpm管理多工作区依赖
pnpm是一个支持多包仓库的一个包管理工具,那么怎么可以在项目根目录下执行pnpm install的时候,也能同步让所有的工作区都能够通安装依赖呢? 方式一,在执行pnpm install指令的时候,添加recursive参数: pnpm install --recursive 方式二,在项目的根目录下通过pnpm的配置文件p…...
如何在本地Linux服务器搭建WordPress网站结合内网穿透随时随地可访问
文章目录 前言1. 安装WordPress2. 创建WordPress数据库3. 安装相对URL插件4. 安装内网穿透发布网站4.1 命令行方式:4.2. 配置wordpress公网地址 5. 配置WordPress固定公网地址 前言 本文主要介绍如何在Linux Ubuntu系统上使用WordPress搭建一个本地网站,…...
二、应用层,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》
文章目录 零、前言一、应用层协议原理1.1 网络应用的体系结构1.1.1 客户-服务器(C/S)体系结构1.1.2 对等体(P2P)体系结构1.1.3 C/S 和 P2P体系结构的混合体 1.2 进程通信1.2.1 问题1:对进程进行编址(addressing)&#…...
面粉直供系统|基于java和小程序的食品面粉直供系统设计与实现(源码+数据库+文档)
面粉直供系统 目录 基于java和小程序的食品面粉直供系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&#x…...
十四:java web(6)-- Spring Spring MVC
目录 Spring MVC 1.1 Spring MVC 概述 1.1.1 什么是 MVC 模式 1.1.2 Spring MVC 工作原理 1.2 Spring MVC 核心组件 1.2.1 DispatcherServlet 1.2.2 控制器(Controller) 1.2.3 请求映射(RequestMapping) 1.2.4 视图解析器…...
Java代码实现策略模式处理支付付款业务
1.需求:因为付款功能集成的第三方支付SDK越来越来多不好维护,改用策略模式实现,来代替代码中多余的if else 判断。 2.什么是策略模式? 策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时选择算法的行为。该模式将不同的算法封装成独立的策略类,并使这些…...
unity3d————四元数概念
一、定义与表示 四元数是由一个实数部分和三个虚数部分组成,通常表示为q w xi yj zk,其中w是实数,x、y、z是实数系数,i、j、k是虚数单位,满足以下关系: i j k -1ij k,ji -kjk i&…...
spring相关的面试题
Spring 框架是 Java 开发中最常用的框架之一,因此在面试中经常会被问到与 Spring 相关的问题。以下是一些常见的 Spring 面试题及其答案。 基础概念 什么是 Spring 框架? Spring 框架是一个开源的 Java 平台,用于构建企业级应用程序。它提供…...
STM32外设之SPI的介绍
### STM32外设之SPI的介绍 SPI(Serial Peripheral Interface)是一种高速的,全双工,同步的通信总线,主要用于EEPROM、FLASH、实时时钟、AD转换器等外设的通信。SPI通信只需要四根线,节约了芯片的管脚&#x…...
二十三、Mysql8.0高可用集群架构实战
文章目录 一、MySQL InnoDB Cluster1、基本概述2、集群架构3、搭建一主两从InnoDB集群3.1、 安装3个数据库实例3.2、安装mysqlrouter和安装mysqlshell3.2.1、安装mysql-router3.2.2、安装mysql-shell 3.3、InnoDB Cluster 初始化3.3.1、参数及权限配置预需求检测3.3.2、初始化I…...
docker file 精简规则
在编写 Dockerfile 时,精简规则不仅有助于减小镜像大小,还能提高构建速度和可维护性。以下是一些常见的精简 Dockerfile 规则: 1. 尽量合并 RUN 指令 每个 RUN 指令会产生一个新的镜像层,因此多个命令可以合并为一个 RUN 指令&a…...
前端加密方式详解与选择指南
在当今数字化时代,前端数据安全的重要性日益凸显。本文将深入探讨前端加密的多种方式,为你提供选择适合项目加密方式的实用策略,并分享一些实际案例及相应代码。 一、前端加密方式汇总 (一)HTTPS 加密 HTTPS 是在 H…...
【React】条件渲染——逻辑与运算符
条件渲染——逻辑与&&运算符 你会遇到的另一个常见的快捷表达式是 JavaScript 逻辑与(&&)运算符。在 React 组件里,通常用在当条件成立时,你想渲染一些 JSX,或者不做任何渲染。 function Item({ nam…...
MATLAB中eig函数用法
目录 语法 说明 示例 矩阵特征值 矩阵的特征值和特征向量 排序的特征值和特征向量 左特征向量 不可对角化(亏损)矩阵的特征值 广义特征值 病态矩阵使用 QZ 算法得出广义特征值 一个矩阵为奇异矩阵的广义特征值 eig函数的功能是求取矩阵特征值…...
Chrome(谷歌浏览器中文版)下载安装(Windows 11)
目录 Chrome_10_30工具下载安装 Chrome_10_30 工具 系统:Windows 11 下载 官网:https://chrome.google-zh.com/,点击立即下载 下载完成(已经下过一遍所以点了取消) 安装 解压,打开安装包 点击下一步…...
Linux 配置JDK
文章目录 一、下载Oracle-JDK1.1、如何正确的下载JDK 二、配置JDK环境变量2.1 环境变量配置2.1.1、修改vim /etc/profile 添加jdk的路径 一、下载Oracle-JDK 1.1、如何正确的下载JDK 首先我要安装的是oracle-jdk,这个时候什么地方都不要去,就去oracle的…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
