SpringBoot+Redis获取电脑信息

获取电脑信息

测试

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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记小结

redis-cluster集群 redis3.0引入的分布式存储方案 集群由多个node节点组成&#xff0c;redis数据分布在这些节点当中。 在集群之中分为主节点和从节点 集群模式当中&#xff0c;主从一一对应&#xff0c;数据的写入和读取与主从模式一样&#xff0c;主负责写&#xff0c;从…

实时沟通,实时增长:企业使用WhatsApp Business的不二选择

在数字化浪潮中&#xff0c;WhatsApp Business崭露头角&#xff0c;成为企业与客户之间沟通的新利器。今天运营坛将和大家深入探讨WhatsApp Business在2023年为企业带来的机遇&#xff0c;从增长率、客户群体、功能特性以及优势等方面剖析为何企业需要充分利用这一强大工具。 W…

VirtualBox上安装CentOS7

基础环境&#xff1a;宿主机是64位Windows10操作系统&#xff0c;通过无线网访问网络。 macOS可以以类似方式进行安装&#xff0c;不同之处见最后补充。 Step1 安装VirtualBox VirtualBox是一款免费、开源、高性能的虚拟机软件&#xff0c;可以跨平台运行&#xff0c;支持Wi…

突发,合肥一废品回收站发生火灾,富维AI神器助力防灾

昨晚&#xff0c;合肥一废品回收站突发火灾&#xff0c;火光冲天&#xff0c;烟雾蔓延。幸亏及时发现&#xff0c;消防人员迅速到场&#xff0c;控制了火势。这起事件让我们再次认识到火灾报警的重要性。而在这方面&#xff0c;北京富维图像公司的FIS智能图像识别系统就发挥了巨…

1+x中级网络运维实验题

任务 1&#xff1a; 设备命名 为了方便后期维护和故障定位及网络的规范性&#xff0c;需要对网络设备进行规范化命名。请根据 Figure 3-1 实验考试拓扑对设备进行命名。命名规则为&#xff1a;城市-设备的设置地点-设备的功能属性和序号-设备型号。例如&#xff1a;处于杭州校…

基于 Gin 的 HTTP 代理 Demo(2)

一周后勘误&#xff1a; 我这里实现的严格来说还是 HTTP 代理&#xff0c;只不过是通过隧道的方式传输非 HTTP 的流量&#xff0c;这里是 HTTPS 流量。尽管它可以传输 HTTPS 流量&#xff0c;它也不算是 HTTPS 代理。 上次写了 基于 Gin 的 HTTP 代理 Demo 之后&#xff0c;对…

ant design vue3 处理 ant-card-head ant-tabs靠左边对齐之has选择器不生效

火狐浏览器是不支持has的。 解决方法&#xff1a;通过position来解决。

解析编程中的技术迷题:常见挑战与应对策略

前言 在数字化时代的浪潮中&#xff0c;编程已经成为了一项至关重要的技能。无论是在软件开发、数据分析、人工智能还是互联网领域&#xff0c;编程都扮演着不可或缺的角色。作为一种创造性的活动&#xff0c;编程不仅仅是代码的书写&#xff0c;更是一种解决问题和创新的思维方…

软件测试的测试文档怎么编写?

在软件测试中的流程中&#xff0c;测试文档也是一个重要的流程&#xff0c;所以测试人员也需要学习测试文档的编写和阅读。 一定义&#xff1a; 测试文档&#xff08;TestingDocumentation&#xff09;记录和描述了整个测试流程&#xff0c;它是整个测试活动中非常重要的文件。…

【JavaEE初阶】 详解HTTPS协议加密过程

文章目录 &#x1f334;HTTPS协议是什么&#xff1f;&#x1f384;运营商劫持事件&#x1f38b;HTTPS的工作过程&#x1f6a9;对称加密&#x1f6a9;非对称加密&#x1f6a9;引入证书&#x1f6a9;完整流程 &#x1f333;HTTPS加密总结⭕总结 &#x1f334;HTTPS协议是什么&…

基于Netty实现TCP通信

创建一个Maven项目添加下面依赖 <dependencies><!-- 日志依赖 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><dependency><g…

帮亲戚个忙,闲来有事用php写个58商铺出租转让信息抓取

最近亲戚想做点小超市生意&#xff0c;但是又不懂互联网&#xff0c;信息获取有点闭塞。知道我身在互联网大潮中&#xff0c;想让我帮忙看看网上有没有商铺转让的。心想&#xff0c;这不是小菜一碟&#xff0c;大显身手的时候来了&#xff0c;大概去58瞅了瞅&#xff0c;这玩意…

【问题定位】阅读Nacos服务注册与发现的源码解决服务注册异常

问题现象 本地服务启动&#xff0c;发现调用FeignClient的服务&#xff0c;跑的是sit的服务&#xff0c;而本地是uat的环境配置。 问题跟踪 feign.SynchronousMethodHandler#invoke&#xff0c;调用远程服务。 public Object invoke(Object[] argv) throws Throwable {Reque…

信号类型(通信)——高斯最小频率键控(GMSK)

系列文章目录 《信号类型&#xff08;通信&#xff09;——仿真》 《信号类型&#xff08;通信&#xff09;——QAM调制信号》 《信号类型&#xff08;通信&#xff09;——QPSK、OQPSK、IJF_OQPSK调制信号》 《信号类型&#xff08;通信&#xff09;——最小频移键控&…

【秒懂JDK,JRE,JVM的关系】

&#x1f320;作者&#xff1a;TheMythWS. &#x1f387;座右铭&#xff1a;不走心的努力都是在敷衍自己&#xff0c;让自己所做的选择&#xff0c;熠熠发光。 ​ JDK与JRE与JVM的关系 先用一张图来直观感受JDK JRE JVM之间的关系&#xff1a; JDK与JRE的关系 先说JDK和JRE…

卷轴模式:金融领域的新趋势

卷轴模式在金融领域逐渐崭露头角&#xff0c;成为一种新型的投资策略。这种模式基于完成任务或达成特定目标来获取积分&#xff0c;利用这些积分进行投资或获取现实物品。它不同于传统的资金盘&#xff0c;而是以一种更稳健的方式运作&#xff0c;避免了资金盘的风险。 一、卷轴…

替代升级虚拟化 | ZStack Cloud云平台助力中节能镇江公司核心业务上云

数字经济正加速推动各行各业的高质量升级发展&#xff0c;云计算是数字经济的核心底层基础设施。作为云基础软件企业&#xff0c;云轴科技ZStack 坚持自主创新&#xff0c;自研架构&#xff0c;产品矩阵可全面覆盖数据中心云基础设施&#xff0c;针对虚拟化资源实现纳管、替代和…

springboot自定义校验注解的实现

自定义校验注解的实现 通过谷粒商城项目学习了自定义校验器的实现一、编写自定义校验注解二、自定义注解的校验器三、关联自定义的校验器和自定义的校验注解总结 通过谷粒商城项目学习了自定义校验器的实现 近日在学习雷神的谷粒商城项目&#xff0c;其中有一个自定义校验的实…

网络字节序

字节序的概念和示例 CPU向内存保存数据的方式有2种&#xff0c;所以CPU解析数据的方式也分为2种。CPU保存和解析数据的方式叫字节序&#xff0c;分为小端字节序和大端字节序。 大端字节序&#xff1a;高位字节存放到低位地址。 小端字节序&#xff1a;高位字节存放到高位地址。…

2023年第三届中国高校大数据挑战赛思路及代码

比赛时间&#xff1a;2023.12.28 08:00 至 2023.12.31 20:00 赛题方向介绍 1、大数据统计分析方向 涉及内容包含&#xff1a;数据的清洗、数据的预测、数据之间的关联分析、综合评价、分类与判别等 2、文本或图象分析方向 涉及内容包含&#xff1a;计算机视觉基础、特征匹配…