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信息*/@Testpublic 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信息*/@Testpublic 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信息*/@Testpublic 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);}/*** 内存信息*/@Testpublic 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) + "%");}/*** 获取磁盘信息*/@Testpublic 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) { // 如果容量大于等于1GBreturn String.format("%.2f GB", gigaBytes); // 格式化输出千兆字节容量,并带有两位小数的GB单位} else if (megaBytes >= 1) { // 如果容量大于等于1MBreturn String.format("%.2f MB", megaBytes); // 格式化输出兆字节容量,并带有两位小数的MB单位} else if (kiloBytes >= 1) { // 如果容量大于等于1KBreturn String.format("%.2f KB", kiloBytes); // 格式化输出千字节容量,并带有两位小数的KB单位} else { // 如果容量小于1KBreturn 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 {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate 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) { // 如果容量大于等于1GBreturn String.format("%.2f GB", gigaBytes); // 格式化输出千兆字节容量,并带有两位小数的GB单位} else if (megaBytes >= 1) { // 如果容量大于等于1MBreturn String.format("%.2f MB", megaBytes); // 格式化输出兆字节容量,并带有两位小数的MB单位} else if (kiloBytes >= 1) { // 如果容量大于等于1KBreturn String.format("%.2f KB", kiloBytes); // 格式化输出千字节容量,并带有两位小数的KB单位} else { // 如果容量小于1KBreturn 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.mzph.cn/news/188385.shtml

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

相关文章

【Azure 架构师学习笔记】- Azure Databricks (1) - 环境搭建

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 前言 Databricks 已经成为了数据科学的必备工具&#xff0c;今时今日你已经很难抛开它来谈大数据&#xff0c;它常用于做复杂的ETL中的T&#xff0c; 数据分析&#xff0c;数据挖掘等&#xff0c;…

TA-Lib学习研究笔记(二)——Overlap Studies下

TA-Lib学习研究笔记&#xff08;二&#xff09;——Overlap Studies下 &#xff08;11&#xff09;SAR - Parabolic SAR 抛物线指标 函数名&#xff1a;SAR 名称&#xff1a; 抛物线指标 简介&#xff1a;抛物线转向也称停损点转向&#xff0c;是利用抛物线方式&#xff0c;随…

在Android上搭建一个NDK项目

首先New Project&#xff0c;选择Native C&#xff0c;点击Next。 填入项目名称和包名&#xff0c;点击Next。 这里我们选择Cmake默认的C版本。 创建好的项目目录&#xff0c;里面比我们正常的Android项目多了一个cpp目录 打开MainActivity。里面定义了一个jni方法stringFromJN…

ubantu配置网卡ip

1.ifconfig查看网卡 2. vi /etc/network/interfaces auto ens33 # 网卡名 iface ens33 inet static # 注意网卡名 address 192.168.43.10 # 配置ip地址 netmask 255.255.255.0 # 掩码 gateway 192.168.43.1 # 网关 3.重启网卡 ifconfig ens33 down ifco…

如何判断数据库慢 SQL 查询?

慢 SQL 查询通常指执行时间较长或者消耗大量系统资源的查询。要判断一个 SQL 查询是否慢&#xff0c;可以考虑以下几个方面&#xff1a; 执行时间&#xff1a; 观察查询执行所需的时间。如果一个查询花费了相对较长的时间才能返回结果&#xff0c;可能就是慢查询的一个指标。通…

visual Studio MFC 平台实现图像增强中Gray-level slicing,Bit-plane slicing,对比度拉伸三种方法

MFC 实现图像增强–分段式变换 本文使用visual Studio MFC 平台实现图像增强中的第三大类分段式变换中的三种方法&#xff0c;包括Gray-level slicing&#xff0c;Bit-plane slicing&#xff0c;对比度拉伸&#xff0e; 关于其他MFC单文档工程可参考 01-Visual Studio 使用MFC …

【性能测试】性能分析和调优——步骤及案例

文章目录 性能测试瓶颈分析常见的性能瓶颈分析性能调优性能调优步骤 性能调优案例案例一——CPU案例二——网络案例三——SQL查询案例四——JVM内存溢出 阅读前建议先了解前一篇文章&#xff1a;【性能测试】性能测试监控关键指标 性能测试瓶颈分析 常见的性能瓶颈分析 1、服…

Excel导入操作

<template><el-dialogwidth"500px"title"员工导入":visible"showExcelDialog"close"$emit(update:showExcelDialog, false)"><el-row type"flex" justify"center"><div class"upload-e…

css 三栏布局的实现

三栏布局在前端页面设计中是一个常见的布局方式&#xff0c;通常包含左侧、中间和右侧三个部分。这种布局方式在多种场景中都很受欢迎&#xff0c;例如博客、新闻网站和企业官网。本文将详细介绍三栏布局的实现方法&#xff0c;包括用法、代码、深入理解&#xff0c;以及配合高…

目标检测——Mask R-CNN算法解读

论文&#xff1a;Mask R-CNN 作者&#xff1a;Kaiming He Georgia Gkioxari Piotr Dollar Ross Girshick 链接&#xff1a;https://arxiv.org/abs/1703.06870 代码&#xff1a;https://github.com/facebookresearch/Detectron R-CNN系列其他文章&#xff1a; R-CNN算法解读SPP…

List集合,遍历,数据结构

一.List常见的方法&#xff1a; 二. List集合的遍历方式 除了 迭代器遍历 增强for遍历 Lambda表达式遍历&#xff0c;还有自己独有的普通for遍历&#xff0c;列表迭代器遍历 1.迭代器遍历 2.增强for遍历 3.Lambda表达式遍历 4.普通for遍历 5.列表迭代器遍历 列表迭代器相对于…

CCFCSP试题编号:202009-2试题名称:风险人群筛查

#include <iostream> using namespace std;//判断是否在区域 bool isIn(int xl, int yd, int xr, int yu, int x, int y) {if ((x > xl && x < xr) && (y > yd && y < yu)){return true;}return false; }struct position {int a, b;…

HashMap底层实现原理详解

一、HashMap重要知识点 HashMap是无序且不安全的数据结构。HashMap 是以key–value对的形式存储的&#xff0c;key值是唯一的&#xff08;可以为null&#xff09;&#xff0c;一个key只能对应着一个value&#xff0c;但是value是可以重复的。HashMap 如果再次添加相同的key值&…

管理Windows资产新方式:SSH协议

配置默认shell&#xff0c;需要管理员权限运行powershell执行下面命令&#xff1a; New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -F…

安卓小程序与编译抓包

APK小程序渗透测试 查找bp的证书 在浏览器中打开bp代理&#xff0c;然后在网页中搜索hppps://burp 点击高级——接受风险并继续 拿到证书 将浏览器信任证书 打开设置 搜索证书——查看证书 点击导入——导入证书 证书验证成功后&#xff0c;访问网页&#xff08;吾爱破解&a…

iOS 开发高效率工具包:10 大必备工具

​ 作为 iOS 开发人员&#xff0c;拥有合适的工具可以极大地提高您的工作效率和工作质量。无论您是刚刚起步还是已经开发 iOS 应用程序多年&#xff0c;以下是每个 iOS 开发人员都应该了解的 10 大必备工具。 让我们开始 Xcode Xcode 是用于 iOS 开发的官方 IDE&#xff08;…

【Windows】内网穿透实现hMailServer远程发送邮件

目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网…

Python 进阶(十二):随机数(random 模块)

《Python入门核心技术》专栏总目录・点这里 文章目录 1. 导入random库2. 常用随机数函数2.1 生成随机浮点数2.2 生成随机整数2.3 从序列中随机选择2.4 随机打乱序列3. 设置随机数种子4. 应用实例4.1 游戏开发4.2 数据分析4.3 加密与安全4.4 模拟实验

【方案】智慧林业:如何基于EasyCVR视频能力搭建智能林业监控系统

随着人类进程的发展。城市化范围的扩大&#xff0c;森林覆盖率越来越低&#xff0c;为保障地球环境&#xff0c;保护人类生存的净土&#xff0c;森林的保护与监管迫在眉睫。TSINGSEE青犀智慧林业智能视频监控系统方案的设计&#xff0c;旨在利用现代科技手段提高林业管理的效率…

设计模式---第二篇

系列文章目录 文章目录 系列文章目录前言一、抽象工厂模式二、装饰器模式是什么三、代理模式和装饰器模式有什么区别前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。…