SpringBoot+Redis获取电脑信息

news2024/11/23 9:53:06

获取电脑信息

测试

System.getProperties();

System: 是Java中的一个内置类,用于提供与系统相关的功能和信息。这个类中包含了一些静态方法和常量,可以让您方便地访问和操作系统级别的资源。

getProperties(): 是一个静态方法,它返回一个表示当前系统属性的Properties对象。这个方法可以用于获取系统相关的属性和信息,例如系统的操作系统、Java版本、路径分隔符等。、

package com.sin;

import com.sun.management.OperatingSystemMXBean;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.nio.file.FileStore;
import java.nio.file.Files;
import java.util.Properties;

@SpringBootTest
class GetComputerMessages {

    Properties props = System.getProperties();
    OperatingSystemMXBean osBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();

    /**
     * 获取Java信息
     */
    @Test
    public void javaMessage() {
        System.out.println("Java的运行环境版本:" + props.getProperty("java.version"));
        System.out.println("Java的运行环境供应商:" + props.getProperty("java.vendor"));
        System.out.println("Java的运行环境供应商URL:" + props.getProperty("java.vendor.url"));
        System.out.println("Java的安装路径:" + props.getProperty("java.home"));
        System.out.println("Java的虚拟机规范名称:" + props.getProperty("java.vm.specification.name"));
        System.out.println("Java的虚拟机实现版本:" + props.getProperty("java.vm.version"));
        System.out.println("Java的虚拟机实现供应商:" + props.getProperty("java.vm.vendor"));
        System.out.println("Java的虚拟机实现名称:" + props.getProperty("java.vm.name"));
        System.out.println("Java的类格式版本号:" + props.getProperty("java.class.version"));
        System.out.println("Java的类路径:" + props.getProperty("java.class.path"));
        System.out.println("加载库时搜索的路径列表:" + props.getProperty("java.library.path"));
        System.out.println("默认的临时文件路径:" + props.getProperty("java.io.tmpdir"));
        System.out.println("一个或多个扩展目录的路径:" + props.getProperty("java.ext.dirs"));
        System.out.println("操作系统的名称:" + props.getProperty("os.name"));
        System.out.println("操作系统的构架:" + props.getProperty("os.arch"));
        System.out.println("操作系统的版本:" + props.getProperty("os.version"));
        System.out.println("分件分隔符:" + props.getProperty("file.separator"));// 在 unix 系统中是"/"
        System.out.println("路径分隔符:" + props.getProperty("path.separator"));// 在 unix 系统中是":"
        System.out.println("行分隔符:" + props.getProperty("line.separator"));// 在 unix 系统中是"/n"
        System.out.println("用户的账户名称:" + props.getProperty("user.name"));
        System.out.println("用户的主目录:" + props.getProperty("user.home"));
        System.out.println("用户的当前工作主目录:" + props.getProperty("user.dir"));
    }

    /**
     * 获取jvm信息
     */
    @Test
    public void jvmMessage() {
        // 获取java虚拟机信息
        Runtime runtime = Runtime.getRuntime();

        long totalMemoryBytes = runtime.totalMemory(); // JVM的总内存(字节)
        long freeMemoryBytes = runtime.freeMemory(); // JVM的空闲内存(字节)
        long maxMemoryBytes = runtime.maxMemory(); // JVM的最大可用内存(字节)

        long totalMemoryMB = totalMemoryBytes / (1024 * 1024); // 转换为兆字节
        long freeMemoryMB = freeMemoryBytes / (1024 * 1024); // 转换为兆字节
        long maxMemoryMB = maxMemoryBytes / (1024 * 1024); // 转换为兆字节

        System.out.println("JVM的总内存:" + totalMemoryMB + "MB");
        System.out.println("JVM的空闲内存:" + freeMemoryMB + "MB");
        System.out.println("JVM的最大可用内存:" + maxMemoryMB + "MB");
    }

    /**
     * 获取cpu信息
     */
    @Test
    public void cpuMessage() {
        String cpuArch = System.getProperty("os.arch"); // CPU架构
        int cpuCores = Runtime.getRuntime().availableProcessors(); // CPU核心数
        String cpuName = System.getenv("PROCESSOR_IDENTIFIER"); // CPU名称
        System.out.println("CPU架构:" + cpuArch);
        System.out.println("CPU名称:" + cpuName);
        System.out.println("CPU核心数:" + cpuCores);

        double systemLoadAverage = osBean.getSystemLoadAverage(); // 系统平均负载
        double processCpuLoad = osBean.getProcessCpuLoad(); // 当前进程的CPU负载
        double systemCpuLoad = osBean.getSystemCpuLoad(); // 系统的CPU负载
        System.out.println("系统平均负载:" + systemLoadAverage);
        System.out.println("当前进程的CPU负载:" + processCpuLoad);
        System.out.println("系统的cpu负载:" + systemCpuLoad);

        double userCpuLoad = osBean.getProcessCpuTime() / 1000000.0; // 用户态CPU时间
        double systemCpuTime = osBean.getSystemCpuLoad() * osBean.getAvailableProcessors(); // 系统态CPU时间
        double idleCpuTime = (1 - osBean.getSystemCpuLoad()) * osBean.getAvailableProcessors(); // 空闲CPU时间

        System.out.println("用户使用率:" + userCpuLoad);
        System.out.println("系统使用率:" + systemCpuTime);
        System.out.println("当前空闲率:" + idleCpuTime);
    }

    /**
     * 内存信息
     */
    @Test
    public void memoryMessage() {
        // 获取内存
        long totalPhysicalMemorySize = osBean.getTotalPhysicalMemorySize(); // 物理内存总量
        long freePhysicalMemorySize = osBean.getFreePhysicalMemorySize(); // 空闲物理内存量
        long totalSwapSpaceSize = osBean.getTotalSwapSpaceSize(); // 交换空间总量
        long freeSwapSpaceSize = osBean.getFreeSwapSpaceSize(); // 空闲交换空间量

        System.out.println("物理内存总量:" + totalPhysicalMemorySize / (1024 * 1024) + " MB");
        System.out.println("空闲物理内存量:" + freePhysicalMemorySize / (1024 * 1024) + " MB");
        System.out.println("交换空间总量:" + totalSwapSpaceSize / (1024 * 1024) + " MB");
        System.out.println("空闲交换空间量:" + freeSwapSpaceSize / (1024 * 1024) + " MB");

        long totalMemorySize = osBean.getTotalPhysicalMemorySize(); // 总内存大小
        long freeMemorySize = osBean.getFreePhysicalMemorySize(); // 空闲内存大小
        long usedMemorySize = totalMemorySize - freeMemorySize; // 已用内存大小
        double memoryUsage = (double) usedMemorySize / totalMemorySize * 100; // 内存使用率

        System.out.println("总内存:" + formatMemorySize(totalMemorySize));
        System.out.println("已用内存:" + formatMemorySize(usedMemorySize));
        System.out.println("剩余内存:" + formatMemorySize(freeMemorySize));
        System.out.println("内存使用率:" + String.format("%.2f", memoryUsage) + "%");
    }

    /**
     * 获取磁盘信息
     */
    @Test
    public void diskMessage() {
        File[] roots = File.listRoots();
        for (File root : roots) {
            String path = root.getAbsolutePath();
            long totalSpace = root.getTotalSpace(); // 总容量
            long usableSpace = root.getUsableSpace(); // 可用容量
            double usage = (double) (totalSpace - usableSpace) / totalSpace * 100; // 使用率

            System.out.println("磁盘路径:" + path);
            System.out.println("总容量:" + formatMemorySize(totalSpace));
            System.out.println("可用容量:" + formatMemorySize(usableSpace));
            System.out.println("使用率:" + String.format("%.2f", usage) + "%");

            try {
                FileStore store = Files.getFileStore(root.toPath());
                String fsType = store.type();
                String fsName = store.name();
                System.out.println("文件系统类型:" + fsType);
                System.out.println("文件系统名称:" + fsName);
            } catch (IOException e) {
                e.printStackTrace();
            }

            System.out.println();
        }
    }


    /**
     * 格式化容量大小
     *
     * @param bytes
     * @return
     */
    private static String formatMemorySize(long bytes) {
        double kiloBytes = bytes / 1024.0; // 将字节数转换为千字节
        double megaBytes = kiloBytes / 1024.0; // 将千字节转换为兆字节
        double gigaBytes = megaBytes / 1024.0; // 将兆字节转换为千兆字节

        if (gigaBytes >= 1) { // 如果容量大于等于1GB
            return String.format("%.2f GB", gigaBytes); // 格式化输出千兆字节容量,并带有两位小数的GB单位
        } else if (megaBytes >= 1) { // 如果容量大于等于1MB
            return String.format("%.2f MB", megaBytes); // 格式化输出兆字节容量,并带有两位小数的MB单位
        } else if (kiloBytes >= 1) { // 如果容量大于等于1KB
            return String.format("%.2f KB", kiloBytes); // 格式化输出千字节容量,并带有两位小数的KB单位
        } else { // 如果容量小于1KB
            return String.format("%d B", bytes); // 格式化输出字节数
        }
    }
}

java信息

在这里插入图片描述

内存信息

在这里插入图片描述

磁盘信息

在这里插入图片描述

jvm信息

在这里插入图片描述

CPU信息

在这里插入图片描述

整合Redis进行存储信息

package com.sin.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.sin.utils.RedisUtil;
import com.sun.management.OperatingSystemMXBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.nio.file.FileStore;
import java.nio.file.Files;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * @createTime 2023/11/30 11:52
 * @createAuthor SIN
 * @use
 */
@RestController
public class RedisTestController {

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private RedisUtil redisUtil;

    Properties properties = System.getProperties();

    OperatingSystemMXBean osBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();


    /**
     * java信息
     * @return
     */
    @PostMapping("/setJavaMessage")
    public String setJavaMessage(){
        Map<String,Object>  javaPropertiesMap = new HashMap<String,Object>();
        javaPropertiesMap.put("Java版本:" , properties.getProperty("java.version"));
        javaPropertiesMap.put("Java安装日期:" , properties.getProperty("java.version.date"));
        javaPropertiesMap.put("Java运行环境提供商:" , properties.getProperty("java.vendor"));
        javaPropertiesMap.put("Java安装路径:" , properties.getProperty("java.home"));
        javaPropertiesMap.put("Java虚拟机规范名称:" , properties.getProperty("java.vm.specification.name"));
        javaPropertiesMap.put("Java虚拟机版本:" , properties.getProperty("java.vm.version"));
        javaPropertiesMap.put("Java虚拟机提供商" , properties.getProperty("java.vm.vendor"));
        javaPropertiesMap.put("Java虚拟机实现名称" , properties.getProperty("java.vm.name"));
        javaPropertiesMap.put("Java类的格式版本号" , properties.getProperty("java.class.version"));
        javaPropertiesMap.put("Java类路径" , properties.getProperty("java.class.path"));
        javaPropertiesMap.put("加载库时搜索的路径列表:" , properties.getProperty("java.library.path"));
        javaPropertiesMap.put("默认的临时文件路径:" , properties.getProperty("java.io.tmpdir"));
        javaPropertiesMap.put("操作系统的名称:" , properties.getProperty("os.name"));
        javaPropertiesMap.put("操作系统的架构" , properties.getProperty("os.arch"));
        javaPropertiesMap.put("操作系统的版本" , properties.getProperty("os.version"));
        javaPropertiesMap.put("文件分隔符:" , properties.getProperty("file.separator"));// unix文件分割符 "/"
        javaPropertiesMap.put("路径分隔符:" , properties.getProperty("path.separator"));// unix系统分隔符 ":"
        javaPropertiesMap.put("行分隔符" , properties.getProperty("line.separator"));    // unix系统 "/n"
        javaPropertiesMap.put("用户的账户名称:" , properties.getProperty("user.name"));
        javaPropertiesMap.put("用户的主目录:" , properties.getProperty("user.home"));
        javaPropertiesMap.put("用户当前工作主目录:" , properties.getProperty("user.dir"));
        /**
         * java_message : hash姓名
         * javaPropertiesMap : hash键值对
         * 60 : 该数据存活60秒
         */
        redisUtil.hmset("java_message",javaPropertiesMap,60);
        return "set success";
    }

    /**
     * jvm信息
     * @return
     */
    @PostMapping("/setJVMMessage")
    public String setJVMMMessage(){
        Map<String,Object>  jvmPropertiesMap = new HashMap<String,Object>();
        Runtime runtime = Runtime.getRuntime();

        long totalMemoryBytes = runtime.totalMemory(); // JVM的总内存(字节)
        long freeMemoryBytes = runtime.freeMemory(); // JVM的空闲内存(字节)
        long maxMemoryBytes = runtime.maxMemory(); // JVM的最大可用内存(字节)
        long totalMemoryMB = totalMemoryBytes / (1024 * 1024); // 转换为兆字节
        long freeMemoryMB = freeMemoryBytes / (1024 * 1024); // 转换为兆字节
        long maxMemoryMB = maxMemoryBytes / (1024 * 1024); // 转换为兆字节

        jvmPropertiesMap.put("JVM的总内存:", totalMemoryMB + "MB");
        jvmPropertiesMap.put("JVM的空闲内存:" , freeMemoryMB + "MB");
        jvmPropertiesMap.put("JVM的最大可用内存:" , maxMemoryMB + "MB");

        /**
         * java_message : hash姓名
         * javaPropertiesMap : hash键值对
         * 60 : 该数据存活60秒
         */
        redisUtil.hmset("jvm_message",jvmPropertiesMap,60);
        return "set success";
    }

    /**
     * cpu信息
     * @return
     */
    @PostMapping("/cpuMessage")
    public String cpuMessage(){
        Map<String,Object>  cpuPropertiesMap = new HashMap<String,Object>();

        String cpuArch = System.getProperty("os.arch"); // CPU架构
        int cpuCores = Runtime.getRuntime().availableProcessors(); // CPU核心数
        String cpuName = System.getenv("PROCESSOR_IDENTIFIER"); // CPU名称
        cpuPropertiesMap.put("CPU架构:" , cpuArch);
        cpuPropertiesMap.put("CPU名称:" , cpuName);
        cpuPropertiesMap.put("CPU核心数:" , cpuCores);

        double systemLoadAverage = osBean.getSystemLoadAverage(); // 系统平均负载
        double processCpuLoad = osBean.getProcessCpuLoad(); // 当前进程的CPU负载
        double systemCpuLoad = osBean.getSystemCpuLoad(); // 系统的CPU负载
        cpuPropertiesMap.put("系统平均负载:" ,systemLoadAverage);
        cpuPropertiesMap.put("当前进程的CPU负载:" , processCpuLoad);
        cpuPropertiesMap.put("系统的cpu负载:" , systemCpuLoad);

        double userCpuLoad = osBean.getProcessCpuTime() / 1000000.0; // 用户态CPU时间
        double systemCpuTime = osBean.getSystemCpuLoad() * osBean.getAvailableProcessors(); // 系统态CPU时间
        double idleCpuTime = (1 - osBean.getSystemCpuLoad()) * osBean.getAvailableProcessors(); // 空闲CPU时间

        cpuPropertiesMap.put("用户使用率:" , userCpuLoad);
        cpuPropertiesMap.put("系统使用率:" , systemCpuTime);
        cpuPropertiesMap.put("当前空闲率:" , idleCpuTime);

        redisUtil.hmset("cpu_message",cpuPropertiesMap);
        return "set success";
    }

    @PostMapping("/memoryMessage")
    public String memoryMessage(){

        Map<String,Object>  cpuPropertiesMap = new HashMap<String,Object>();
        // 获取内存
        long totalPhysicalMemorySize = osBean.getTotalPhysicalMemorySize(); // 物理内存总量
        long freePhysicalMemorySize = osBean.getFreePhysicalMemorySize(); // 空闲物理内存量
        long totalSwapSpaceSize = osBean.getTotalSwapSpaceSize(); // 交换空间总量
        long freeSwapSpaceSize = osBean.getFreeSwapSpaceSize(); // 空闲交换空间量

        cpuPropertiesMap.put("物理内存总量:" , totalPhysicalMemorySize / (1024 * 1024) + " MB");
        cpuPropertiesMap.put("空闲物理内存量:" ,freePhysicalMemorySize / (1024 * 1024) + " MB");
        cpuPropertiesMap.put("交换空间总量:" , totalSwapSpaceSize / (1024 * 1024) + " MB");
        cpuPropertiesMap.put("空闲交换空间量:" , freeSwapSpaceSize / (1024 * 1024) + " MB");

        long totalMemorySize = osBean.getTotalPhysicalMemorySize(); // 总内存大小
        long freeMemorySize = osBean.getFreePhysicalMemorySize(); // 空闲内存大小
        long usedMemorySize = totalMemorySize - freeMemorySize; // 已用内存大小
        double memoryUsage = (double) usedMemorySize / totalMemorySize * 100; // 内存使用率

        cpuPropertiesMap.put("总内存:" , formatMemorySize(totalMemorySize));
        cpuPropertiesMap.put("已用内存:" , formatMemorySize(usedMemorySize));
        cpuPropertiesMap.put("剩余内存:" , formatMemorySize(freeMemorySize));
        cpuPropertiesMap.put("内存使用率:" , String.format("%.2f", memoryUsage) + "%");
        redisUtil.hmset("memory_essage",cpuPropertiesMap);

        return "set success";
    }

    @PostMapping("/diskMessage")
    public String diskMessage(){

        Map<String,Object>  diskPropertiesMap = new HashMap<String,Object>();
        
        File[] roots = File.listRoots();
        for (File root : roots) {
            String path = root.getAbsolutePath();
            long totalSpace = root.getTotalSpace(); // 总容量
            long usableSpace = root.getUsableSpace(); // 可用容量
            double usage = (double) (totalSpace - usableSpace) / totalSpace * 100; // 使用率

            diskPropertiesMap.put("磁盘路径:" , path);
            diskPropertiesMap.put("总容量:" , formatMemorySize(totalSpace));
            diskPropertiesMap.put("可用容量:" , formatMemorySize(usableSpace));
            diskPropertiesMap.put("使用率:" , String.format("%.2f", usage) + "%");

            try {
                FileStore store = Files.getFileStore(root.toPath());
                String fsType = store.type();
                String fsName = store.name();
                diskPropertiesMap.put("文件系统类型:" , fsType);
                diskPropertiesMap.put("文件系统名称:" , fsName);
                redisUtil.hmset("disk_message"+fsName , diskPropertiesMap);
            } catch (IOException e) {
                e.printStackTrace();
            }

        }


        return "diskMessage set success";
    }

    /**
     * 格式化容量大小
     *
     * @param bytes
     * @return
     */
    private static String formatMemorySize(long bytes) {
        double kiloBytes = bytes / 1024.0; // 将字节数转换为千字节
        double megaBytes = kiloBytes / 1024.0; // 将千字节转换为兆字节
        double gigaBytes = megaBytes / 1024.0; // 将兆字节转换为千兆字节

        if (gigaBytes >= 1) { // 如果容量大于等于1GB
            return String.format("%.2f GB", gigaBytes); // 格式化输出千兆字节容量,并带有两位小数的GB单位
        } else if (megaBytes >= 1) { // 如果容量大于等于1MB
            return String.format("%.2f MB", megaBytes); // 格式化输出兆字节容量,并带有两位小数的MB单位
        } else if (kiloBytes >= 1) { // 如果容量大于等于1KB
            return String.format("%.2f KB", kiloBytes); // 格式化输出千字节容量,并带有两位小数的KB单位
        } else { // 如果容量小于1KB
            return String.format("%d B", bytes); // 格式化输出字节数
        }
    }



   

}

获取Redis数据

@GetMapping("/getMessage/{message}")
public Map<String, Object> getMessage(@PathVariable("message") String message) throws JsonProcessingException {
    // 获取 Hash 操作对象
    HashOperations<String, String, Object> hashOperations = redisTemplate.opsForHash();

    Map<String, Object> hashData = hashOperations.entries(message);

    return hashData;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:理解文件重定向

文章目录 文件内核对象fd的分配问题重定向的现象dup2 重定向的使用标准输出和标准错误 前面对于文件有了基本的认知&#xff0c;那么基于前面的认知&#xff0c;本篇总结的是文件重定向的含义极其本质 文件内核对象 首先理解一下file内核对象是什么&#xff0c;回顾一下下面这…

菜鸟学习日记(Python)——基本数据类型

Python 中的变量不需要声明。每个变量在使用前都必须赋值&#xff0c;变量赋值以后该变量才会被创建。 在 Python 中&#xff0c;变量就是变量&#xff0c;它没有类型&#xff0c;我们所说的"类型"是变量所指的内存中对象的类型。 等号&#xff08;&#xff09;用来…

Netty Review - 探索Channel和Pipeline的内部机制

文章目录 概念Channel Pipeline实现原理分析详解 Inbound事件和Outbound事件演示Code 概念 Netty中的Channel和Pipeline是其核心概念&#xff0c;它们在构建高性能网络应用程序时起着重要作用。 Channel&#xff1a; 在Netty中&#xff0c;Channel表示一个开放的连接&#xff…

【VScode】超详细图片讲解下载安装、环境配置、编译执行、调试

这里是目录 VScode是什么&#xff1f;VScode的下载和安装环境介绍安装中文插件 配置VScodeC/C开发环境下载和配置MinGW-w64 编译器套件下载&#xff1a;配置&#xff1a; 安装C/C插件在VScode上编写代码设置C/C编译选项创建执行任务编译执行如果想写其他代码在同一个文件夹在不…

【双向链表的实现】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1. 双向链表的结构 2. 双向链表的实现 2.1 头文件 ——双向链表的创建及功能函数的定义 2.2 源文件 ——双向链表的功能函数的实现 2.3 源文件 ——双向链表功能的…

SS6811H38V/1.6A 两通道 H 桥驱动芯片

SS6811H 为舞台灯光和其它电机一体化应用 提供一种双通道集成电机驱动方案。SS6811H 有 两路 H 桥驱动&#xff0c;每个 H 桥可提供最大输出电流 1.6A (在 24V 和 Ta 25C 适当散热条件下)&#xff0c;可驱 动两个刷式直流电机&#xff0c;或者一个双极步进电机&#xff0c;或 …

ssm+java车辆售后维护系统 springboot汽车保养养护管理系统+jsp

以前汽车维修人员只是在汽车运输行业中从事后勤保障工作,随着我国经济的发展,汽车维修行业已经从原来的从属部门发展成了如今的功能齐备的独立企业。这种结构的转变,给私营汽修企业和个体汽修企业的发展带来了契机,私营企业和个体维修企业的加入也带动了整个汽修行业的整体水平…

[c++]—string类___深度学习string标准库成员函数与非成员函数

要相信别人能做出来自己一定可以做出来&#xff0c;只不过是时间没到而已 目录 &#x1f6a9;string类对象capacity操作 &#x1f4bb;reserve()保留 &#x1f4bb;resize() &#x1f6a9;string类对象元素访问操作 &#x1f4bb;operator[]和at() &#x1f4bb;operator…

Kubernetes 安全最佳实践:保护您的秘密

Kubernetes 是一个可用于微服务的开源容器编排平台。当我们想要部署容器化应用程序、自动化管理和扩展应用程序时&#xff0c;Kubernetes 非常有用。 在容器中运行单个微服务而不是在同一虚拟机中运行多个进程几乎总是更安全。每当我们在 Kubernetes 中启动任何 pod 时&#x…

「黄钊的AI日报·第二季」早鸟票,最后48小时~

每天5条AI内容点&#xff1a;不是新闻汇总&#xff0c;而是站在11年AI产品经理的视角&#xff0c;将原AI信息中的干货认知&#xff0c;提炼成我自己的文字、展示“what I see”。 做社群“AI产品经理大本营”6年以来&#xff0c;我都是在非常用心的输出AI干货&#xff1b;这份“…

vue3随机生成8位字母+数字

// 随机生成8位字母数字 export const autoPassword: any () > {// console.log("自动生成");//可获取的字符串const chars ABCDEFGHIJKLMNOPQRSTUVWSYZabcdefghijklmnopqrstuvwsyz0123456789;const list [];//通过随机获取八个字符串的索引下标for (let i 0;…

力扣11题 盛最多水的容器 双指针算法

11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明 你不能倾斜容器. 示…

【开源】基于Vue.js的超市账单管理系统的设计和实现

项目编号&#xff1a; S 032 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S032&#xff0c;文末获取源码。} 项目编号&#xff1a;S032&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3…

操作系统进程与线程篇

目录 一、进程 1.1、进程状态 1.2、进程的控制结构 1.3、进程的控制 1.4、进程的上下文切换 二、线程 2.1.线程是什么 2.2、线程与进程的比较 2.3、线程的上下文切换 2.4、线程的实现 2.5、轻量级线程 三、进程间的通信方式 3.1、管道 3.2、消息队列 3.3、共享内…

Linux--系统结构与操作系统

文章目录 冯诺依曼体系结构为什么要有内存&#xff1f;场景一 操作系统何为管理&#xff1f; 冯诺依曼体系结构 冯诺依曼体系结构是计算机体系结构的基本原理之一。它将程序和数据都以二进制形式存储&#xff0c;以相同的方式处理和存取。 上图是冯诺依曼体系结构的五大组成部…

Neo4j 数据库管理 数据备份与恢复(头歌)

文章目录 第1关&#xff1a;数据备份与恢复任务描述相关知识数据备份数据导入 编程要求测试说明答案测试前准备Cypher 代码数据备份与导入 第1关&#xff1a;数据备份与恢复 任务描述 本关任务&#xff1a;熟练掌握数据备份与恢复。 相关知识 为了完成本关任务&#xff0c;…

Jvm常见问题

1. 为什么用元空间替换永久代 避免OOM异常&#xff1a;永久代中存放了很多JVM需要的类信息&#xff0c;这些数据大多数是不会被清理的&#xff0c;所以Full GC往往无法回收多少空间。但在元空间模型中&#xff0c;由于字符串常量池已移至堆外&#xff0c;且元空间的大小不受JV…

Elasticsearch:使用 ILM 示例运行降采样 (downsampling)

如果你对降采样还不是很熟的话&#xff0c;请阅读之前的文章 “Elasticsearch&#xff1a;对时间序列数据流进行降采样&#xff08;downsampling)”。这是一个简化的示例&#xff0c;可让你快速了解降采样如何作为 ILM 策略的一部分来减少一组采样指标的存储大小。 该示例使用典…

LeetCode | 二叉树的最大深度

LeetCode | 二叉树的最大深度 OJ链接 这里需要注意的一点是每次有返回值&#xff0c;需要定义变量来保存上一次的值最后取最高的一方加1 int maxDepth(struct TreeNode* root) {if(root NULL)return NULL;int left maxDepth(root->left);int right maxDepth(root->r…

C语言中一些有关字符串的常见函数的使用及模拟实现(1)

在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了⽅便操作字符和字符串&#xff0c;C语⾔标准库中提供了 ⼀系列库函数&#xff0c;接下来我们就学习⼀下这些函数。 文章目录 strlen函数的使用及模拟实现strcmp函数的使用及模拟实现strcpy函数的使用及代…