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

Centos Ubuntu RedOS系统类型下查看系统信息

在这里插入图片描述

文章目录

  • 一、项目背景
  • 二、页面
  • 三、说明
  • 四、代码
    • 1.SysInfo
    • 2.EmsSysConfig
    • 3.HostInformationController
    • 4.HostInfo

一、项目背景

公司项目想展示当前部署系统的:操作系统,软件版本、IP、主机名。

二、页面

在这里插入图片描述

三、说明

说明点1:查询系统类型及IP实际流程是,程序执行linux命令获取结果信息的过程。

说明点2:查询系统类型命令

hostnamectl | awk -F': +' '/Static hostname|Operating System/ {printf "%s,", $2}' | sed 's/,$//'

说明点3:目前项目支持查询3种不同类型的系统:Centos、Ubuntu、Res OS

说明点4:其中ip、os和hostname是从服务器查询出来的;version是从配置文件或者适配包读取的;

说明点5:IP其实是从网络接口中获取的信息,比如linux执行iFconfig即可获取网络接口信息,在每个接口的输出中,inet 行表示该接口的 IPv4 地址,inet6 行表示 IPv6 地址

CentOS 系统

  • 常见命名
    • 传统上使用 ethX(如 eth0, eth1)
    • 新版本(如 CentOS 7 及以上)可能使用 enoX 或 ensX 这样的命名方式。

Ubuntu 系统

  • 常见命名:
    • 新版本的 Ubuntu 通常使用 enpX(如 enp0s3, enp0s8)。

Red Hat 系统

  • 常见命名:
    • 新版本的 Red Hat 和 Fedora 系统通常使用 ensX(如 ens33, ens160)。

结论:

  • 对于 CentOS,你可以检查 eth, eno, 和 ens 开头的接口。
  • 对于 Ubuntu,检查 enp 开头的接口。
  • 对于 Red Hat 和 Fedora,检查 ens 开头的接口。

这种方式可以确保你能够捕获到常见的网络接口命名,并获取相应的 IPv4 地址。

四、代码

1.SysInfo

package com.hero.lte.ems.sysconf.model;import javax.xml.bind.annotation.XmlAttribute;/*** ems系统基本信息** @author w17231* @date 2017年4月13日*/
public class SysInfo {/*** ems对外通信IP*/private String emsCommIp;/*** ems系统IP*/private String emsSysIp;/*** 系统语言*/private String locale;/*** 产品名称*/private String productName;/*** 进程名称*/private String processName;/*** 产品版本*/private String productVersion;private String ftpRootPath;private String ftpUploadPath;private String verification;private String ftpPatchPath;/*** 制造商*/private String manufacturer;/*** 产品描述*/private String description;private String systemVersion;private String systemRoot;public String getEmsCommIp() {return emsCommIp;}public void setEmsCommIp(String emsCommIp) {this.emsCommIp = emsCommIp;}public String getEmsSysIp() {return emsSysIp;}public void setEmsSysIp(String emsSysIp) {this.emsSysIp = emsSysIp;}public String getLocale() {return locale;}public void setLocale(String locale) {this.locale = locale;}public String getProductName() {return productName;}public void setProductName(String productName) {this.productName = productName;}@XmlAttributepublic String getProductVersion() {return productVersion;}public void setProductVersion(String productVersion) {this.productVersion = productVersion;}public String getManufacturer() {return manufacturer;}public void setManufacturer(String manufacturer) {this.manufacturer = manufacturer;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public String getProcessName() {return processName;}public void setProcessName(String processName) {this.processName = processName;}public String getFtpRootPath() {return ftpRootPath;}public void setFtpRootPath(String ftpRootPath) {this.ftpRootPath = ftpRootPath;}public String getFtpUploadPath() {return ftpUploadPath;}public void setFtpUploadPath(String ftpUploadPath) {this.ftpUploadPath = ftpUploadPath;}public String getVerification() {return verification;}public void setVerification(String verification) {this.verification = verification;}public String getSystemVersion() {return systemVersion;}public void setSystemVersion(String systemVersion) {this.systemVersion = systemVersion;}public String getSystemRoot() {return systemRoot;}public void setSystemRoot(String systemRoot) {this.systemRoot = systemRoot;}public String getFtpPatchPath() {return ftpPatchPath;}public void setFtpPatchPath(String ftpPatchPath) {this.ftpPatchPath = ftpPatchPath;}@Overridepublic String toString() {return "SysInfo{" +"emsCommIp='" + emsCommIp + '\'' +", emsSysIp='" + emsSysIp + '\'' +", locale='" + locale + '\'' +", productName='" + productName + '\'' +", processName='" + processName + '\'' +", productVersion='" + productVersion + '\'' +", ftpRootPath='" + ftpRootPath + '\'' +", ftpUploadPath='" + ftpUploadPath + '\'' +", ftpPatchPath='" + ftpPatchPath + '\'' +", verification='" + verification + '\'' +", manufacturer='" + manufacturer + '\'' +", description='" + description + '\'' +", systemVersion='" + systemVersion + '\'' +", systemRoot='" + systemRoot + '\'' +'}';}
}

2.EmsSysConfig

package com.hero.lte.ems.configuration;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hero.lte.ems.sysconf.model.InstallInfo;
import com.hero.lte.ems.sysconf.model.SysInfo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;@Configuration
public class EmsSysConfig {@Bean(name = "sysInfo")public SysInfo getSysInfo() {SysInfo sysInfo = new SysInfo();DynamicConfig dynamicConfig = DynamicConfigLoader.load("server.properties");sysInfo.setEmsCommIp(dynamicConfig.getString("system.transport.ip"));sysInfo.setEmsSysIp(dynamicConfig.getString("service.host"));sysInfo.setProcessName(dynamicConfig.getString("service.name"));sysInfo.setProductName(dynamicConfig.getString("service.productName"));sysInfo.setSystemVersion(dynamicConfig.getString("service.version"));sysInfo.setFtpRootPath(dynamicConfig.getString("system.ftprootpath"));sysInfo.setFtpUploadPath(dynamicConfig.getString("system.uploadpath"));sysInfo.setFtpPatchPath(dynamicConfig.getString("system.ftppatchpath"));sysInfo.setLocale(dynamicConfig.getString("system.language"));sysInfo.setVerification(dynamicConfig.getString("verification"));sysInfo.setSystemRoot(dynamicConfig.getString("system.root"));return sysInfo;}

3.HostInformationController

package com.hero.lte.ems.sysmanager.resources;import com.hero.lte.ems.common.spring.SpringContextHolder;
import com.hero.lte.ems.sysconf.model.SysInfo;
import com.hero.lte.ems.sysmanager.entity.HostInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RestController
@RequestMapping(value = "lte/ems/sysmanager/host")
@Api(value = "HostInformationController",tags={"系统信息"})
public class HostInformationController {private static Logger logger = LoggerFactory.getLogger(HostInformationController.class);public static String CENTOS_SYSTEM = "CentOS";public static String UBUNTU_SYSTEM = "Ubuntu";public static String REDOS_SYSTEM = "RED OS";@RequestMapping(value = "info", method = RequestMethod.GET)@ApiOperation("系统信息")public HostInfo getMailConfig() throws Exception{SysInfo sysInfo = SpringContextHolder.getBean(SysInfo.class);List<String> list = getAllHostIp();final StringBuilder ip = new StringBuilder("");if(list!=null&&list.size()>0){list.forEach(o->{ip.append(o+"/");});ip.deleteCharAt(ip.length()-1);}HostInfo hostInfo = new HostInfo();//hostInfo.setIp(sysInfo.getEmsCommIp());Map<String, String> map = getHostnameAndSystem();hostInfo.setIp(ip.toString());hostInfo.setVersion(sysInfo.getSystemVersion());hostInfo.setHostname(map.get("hostname").equals("n/a") ? "localhost" : map.get("hostname"));hostInfo.setOs(map.get("os"));return hostInfo;}public Map<String, String> getHostnameAndSystem() {Map<String, String> map = new HashMap<>();InputStream in = null;BufferedReader read = null;Process pro = null;String cmd = "hostnamectl | awk -F': +' '/Static hostname|Operating System/ {printf \"%s,\", $2}' | sed 's/,$//'";String[] cmds = null;try {String result = getSingleResult(cmd, cmds, pro, in, read);logger.info("result:{}", result);String[] split = result.split(",");map.put("hostname", split[0]);map.put("os", split[1]);} catch (IOException | InterruptedException e) {logger.error("-getHostnameAndSystem-Exception:{}", e);return null;} finally {try {if (pro != null) {pro.destroy();}if (read != null) {read.close();}if (in != null) {in.close();}} catch (IOException e) {logger.error("-getHostnameAndSystem-finally-IOException:{}", e);}}return map;}public static String getSingleResult(String cmd, String[] cmds, Process pro, InputStream in, BufferedReader read) throws IOException, InterruptedException {cmds = new String[]{"/bin/sh", "-c", cmd};logger.info("-cmd:{}", cmd);pro = Runtime.getRuntime().exec(cmds);if (pro.waitFor() == 0) {String line = "";in = pro.getInputStream();read = new BufferedReader(new InputStreamReader(in));while ((line = read.readLine()) != null) {logger.info("-line:{}", line);return line;}}return null;}/*** 获取该主机上所有网卡的ip*/public static ArrayList<String> getAllHostIp(){ArrayList<String> hostAddress = new ArrayList<>();try{String systemType = createSystemMonitor();// 获得本机的所有网络接口Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces();while (nifs.hasMoreElements()) {NetworkInterface nif = nifs.nextElement();//查询Centos系统参数if(systemType.equals(CENTOS_SYSTEM) && nif.getName().startsWith("eth") || nif.getName().startsWith("eno")) {// 获得与该网络接口绑定的 IP 地址,一般只有一个Enumeration<InetAddress> addresses = nif.getInetAddresses();while (addresses.hasMoreElements()) {InetAddress addr = addresses.nextElement();if (addr instanceof Inet4Address) { // 只关心 IPv4 地址hostAddress.add(addr.getHostAddress());}}} else if(systemType.equals(UBUNTU_SYSTEM) && nif.getName().startsWith("enp")) {//查询ubuntu系统参数,获得与该网络接口绑定的 IP 地址,一般只有一个Enumeration<InetAddress> addresses = nif.getInetAddresses();while (addresses.hasMoreElements()) {InetAddress addr = addresses.nextElement();if (addr instanceof Inet4Address) { // 只关心 IPv4 地址hostAddress.add(addr.getHostAddress());}}} else if(systemType.equals(REDOS_SYSTEM) && nif.getName().startsWith("ens")) {logger.info("nif.getName():{}", nif.getName());//查询redos系统参数,获得与该网络接口绑定的 IP 地址,一般只有一个Enumeration<InetAddress> addresses = nif.getInetAddresses();while (addresses.hasMoreElements()) {InetAddress addr = addresses.nextElement();if (addr instanceof Inet4Address) {hostAddress.add(addr.getHostAddress());}}}}}catch(Exception e){e.printStackTrace();}return hostAddress;}public static String createSystemMonitor() {String systemType = "";InputStream in = null;BufferedReader read = null;Process pro = null;String cmd = "hostnamectl | awk -F': +' '/Static hostname|Operating System/ {printf \"%s,\", $2}' | sed 's/,$//'";String[] cmds = null;try {String result = getSingleResult(cmd, cmds, pro, in, read);String[] split = result.split(",");String os = split[1];if (os.contains(CENTOS_SYSTEM)) {systemType = CENTOS_SYSTEM;} else if (os.contains(UBUNTU_SYSTEM)) {systemType = UBUNTU_SYSTEM;} else if (os.contains(REDOS_SYSTEM)) {systemType = REDOS_SYSTEM;}} catch (IOException | InterruptedException e) {logger.error("-createSystemMonitor-Exception:{}", e);return null;} finally {try {if (pro != null) {pro.destroy();}if (read != null) {read.close();}if (in != null) {in.close();}} catch (IOException e) {logger.error("-createSystemMonitor-finally-IOException:{}", e);}}return systemType;}}

4.HostInfo

package com.hero.lte.ems.sysmanager.entity;public class HostInfo {private String os = "CentOS Linux release 7.7.1908 (Core)";;private String version;private String ip;private String hostname = "localhost.localdomain";public String getOs() {return os;}public void setOs(String os) {this.os = os;}public String getVersion() {return version;}public void setVersion(String version) {this.version = version;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public String getHostname() {return hostname;}public void setHostname(String hostname) {this.hostname = hostname;}@Overridepublic String toString() {return "HostInfo{" +"os='" + os + '\'' +", version='" + version + '\'' +", ip='" + ip + '\'' +", hostname='" + hostname + '\'' +'}';}
}

相关文章:

Centos Ubuntu RedOS系统类型下查看系统信息

文章目录 一、项目背景二、页面三、说明四、代码1.SysInfo2.EmsSysConfig3.HostInformationController4.HostInfo 一、项目背景 公司项目想展示当前部署系统的&#xff1a;操作系统&#xff0c;软件版本、IP、主机名。 二、页面 三、说明 说明点1&#xff1a;查询系统类型及…...

【Hive入门】Hive高级特性:视图与物化视图

在大数据分析中&#xff0c;Hive作为Hadoop生态系统中的重要组件&#xff0c;提供了强大的数据查询和管理能力。除了基本表的操作&#xff0c;Hive还支持 视图和 物化视图&#xff0c;这两种特性在数据管理和查询优化中扮演着重要角色。本文将深入探讨视图的创建与性能影响&…...

特征工程四-2:使用GridSearchCV 进行超参数网格搜索(Hyperparameter Tuning)的用途

1. GridSearchCV 的作用 GridSearchCV&#xff08;网格搜索交叉验证&#xff09;用于&#xff1a; 自动搜索 给定参数范围内的最佳超参数组合。交叉验证评估 每个参数组合的性能&#xff0c;避免过拟合。返回最佳模型&#xff0c;可直接用于预测或分析。 2. 代码逐行解析 (1…...

【Hive入门】Hive函数:内置函数与UDF开发

Apache Hive作为Hadoop生态系统中的重要组件&#xff0c;为大数据分析提供了强大的SQL-like查询能力。Hive不仅支持丰富的内置函数&#xff0c;还允许用户开发自定义函数&#xff08;UDF&#xff09;以满足特定需求。本文将深入探讨Hive的内置函数&#xff08;包括数学函数、字…...

HTML Picture标签详细教程

HTML Picture标签详细教程 简介 <picture>标签是HTML5中引入的一个强大元素&#xff0c;它为开发者提供了更灵活的图像资源管理方式。该标签主要用于让浏览器根据不同条件&#xff08;如设备屏幕大小、分辨率或支持的图像格式&#xff09;选择最适合当前显示环境的图像…...

Html1

一&#xff0c;HTML概述 网页开发需要学习的知识&#xff1a; html css javaScript 两个框架 VUE.js ElementUI UI user interface 用户界面 HTML xml 可扩展标记语言-->存储数据 Markup Language标签语言都会提供各种标…...

runpod team 怎么设置自己的ssh key呢?

生成 ed25519 公钥密钥 ssh-keygen -t ed25519 -C "yourqq.com"然后在pod容器配置key以及启动方式 选择edit pod 添加启动代码 启动代码可以参考官方给的内容&#xff1a; https://docs.runpod.io/pods/configuration/use-ssh bash -c apt update;DEBIAN_FRONT…...

Flutter:组件10、倒计时

import dart:async; import package:flutter/material.dart;class CountdownTimer extends StatefulWidget {final int seconds;final double? fontSize;final Color? textColor;final bool showDays;final bool showHours;final bool showMinutes;final bool showSeconds;fi…...

存储器分类

按宏观分类 内部存储&#xff1a;用于临时存储当前程序运行所需要的数据外部存储&#xff1a;指硬盘&#xff0c;用于存储需要保存下的数据 按存储功能分 磁盘存储器(Disk)&#xff0c;如机械硬盘非易失性存储器&#xff08;Flash memory&#xff09;&#xff0c;分为固态硬…...

案例解析:基于量子计算的分子对接-QDOCK(Quantum Docking)

分子对接&#xff08;Moleculardocking&#xff09;在药物发现中具有重要意义&#xff0c;但对接的计算速度和准确率始终难以平衡&#xff0c;其巨大解搜索空间对传统计算机来说异常艰巨。 本文通过引入网格点匹配&#xff08;GPM, Grind point matching&#xff09;和特征原子…...

人工智能和机器学习在包装仿真中的应用与价值

引言 随着包装成为消费品关键的差异化因素&#xff0c;对智能设计、可持续性和高性能的要求比以往任何时候都更高 。为了满足这些复杂的期望&#xff0c;公司越来越多地采用先进的仿真方法&#xff0c;而现在人工智能 (AI) 和机器学习 (ML) 又极大地增强了这些方法 。本文探讨…...

系统的环境变量

目录 基本概念 用途之一 环境变量表 命令行参数表 理解 更多的环境变量 基本概念 环境变量(environmentvariables)⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数。环境变量通常具有某些特殊⽤途&#xff0c;还有在系统当中通常具有全局特性 用途之一 我们看…...

css3伸缩盒模型第一章(主轴以及伸缩盒模型)

css3伸缩盒模型第一章(主轴) 一、伸缩盒模型简介 2009 年&#xff0c; W3C 提出了一种新的盒子模型 —— Flexible Box &#xff08;伸缩盒模型&#xff0c;又称&#xff1a;弹性盒 子&#xff09;。它可以轻松的控制&#xff1a;元素分布方式、元素对齐方式、元素视觉顺序 ……...

【MySQL】(9) 视图

一、什么是视图 视图是一张虚拟表&#xff0c;是表、其它视图的查询结果集。它本身不像基础表&#xff08;物理表&#xff09;一样存储数据&#xff0c;而是将 SQL 查询语句包装起来&#xff0c;通过执行查询语句动态生成数据。 二、视图的作用 当我们需要频繁使用一条查询语句…...

day10 python机器学习全流程实践

在机器学习的实践中&#xff0c;数据预处理与模型构建是极为关键的环节。本文将回顾数据预处理的全流程&#xff0c;并基于处理后的数据完成简单的机器学习建模与评估&#xff0c;暂不涉及复杂的调参过程。 一、预处理流程回顾 机器学习的成功&#xff0c;很大程度上依赖于高…...

Rust Ubuntu下编译生成环境win程序踩坑指南

前言&#xff1a; 1&#xff0c;公司要给一线搞一个升级程序&#xff0c;需要在win下跑。 之前都是找开发总监帮忙&#xff0c;但是他最近比较忙。就让我自己搞。有了下文.。说来惭愧&#xff0c;之前写过一篇ubuntu下编译windows的文章。里面的demo就一句话 fuck world。依赖…...

2025年- H12-Lc119-56.合并区间(普通数组)---java版

1.题目描述 2.思路 思路参考了代码随想录&#xff1a; 按照左边界从小到大排序之后&#xff0c;如果 intervals[i][0] < intervals[i - 1][1] 即intervals[i]的左边界 < intervals[i - 1]的右边界&#xff0c;则一定有重叠。&#xff08;本题相邻区间也算重贴&#xff…...

合并两个有序链表

题目&#xff1a;21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#x…...

rsync命令详解与实用案例

rsync命令详解与实用案例 rsync是一款功能强大的Linux文件同步工具&#xff0c;通过高效的增量传输算法&#xff0c;能够显著减少数据传输量和时间&#xff0c;是备份、镜像和跨平台文件同步的理想选择。其核心价值在于只传输文件的差异部分&#xff0c;而非全量复制&#xff…...

gitee 如何修改提交代码的邮箱

gitee 如何修改提交代码的邮箱 1. 修改全局提交邮箱2. 修改特定仓库的提交邮箱3. 修改已提交记录的邮箱 4. 可能遇到的问题git filter-repo 拒绝执行解决办法方法一&#xff1a;使用 --force 参数 &#xff08;亲测有效&#xff09;方法二&#xff1a;创建一个全新的克隆仓库 注…...

MATLAB画一把伞

% 伞的参数num_ribs 5; % 伞骨数量修改为5R 1; % 伞的半径height 0.5; % 伞的高度handle_length 2; % 伞柄长度semicircle_radius 0.26; % 伞柄末端半圆的半径% 生成伞叶网格theta linspace(0, 2*pi, 100);phi linspace(0, pi/2, 50);[Theta, Phi] meshgrid(theta, phi…...

vue 实现文件流下载功能 前端实现文件流下载

首先场景就是,一般的文件下载是通过后端返回的文件地址下载文件,但当后端返回的是文件流的时候,下载要做特殊处理 案例截图: 下载成功: 代码处理,首先就是要在接口封装的地方加上 在 Vue 前端开发中实现文件流下载与普通文件下载的核心区别在于 数据处理方式。文件流…...

[Android]导航栏中插入电源菜单

1. 新增 frameworks/base/packages/SystemUI/res/layout/power.xml <?xml version"1.0" encoding"utf-8"?> <com.android.systemui.navigationbar.buttons.KeyButtonView xmlns:android"http://schemas.android.com/apk/res/android"…...

VSCode Verilog环境搭建

VSCode Verilog环境搭建 下载Iverilog安装Iverilog验证安装VS Code安装插件 下载Iverilog 官网下载Iverilog 安装Iverilog 一定要勾选这两项 建议勾选这两项 验证安装 运行Windows PowerShell输入命令&#xff1a;iverilog输入命令&#xff1a;Get-Command gtkwave …...

Hadoop 和 Spark 生态系统中的核心组件

通过jps命令&#xff0c;可以看到如下进程名&#xff0c;请解释一下它们各自是哪个命令产生的&#xff0c;有什么作用&#xff1f;一、Worker 1.来源&#xff1a;Spark 集群的 工作节点&#xff08;Worker Node&#xff09;&#xff0c;由 start-worker.sh 启动 2.作用&#…...

MySQL多表操作

熟能生巧&#xff0c;全部代码在最后&#xff01;&#xff01;&#xff01; 一、多表关系 一对一关系、一对多关系、多对多关系 注意多对多关系必须有中间表进行关联 多对多的关系就相当于是两个一对多关系 二、创建外键约束 专门用于多表操作的一种约束方式 控制的那个表…...

WPF TextBlock控件性能优化指南

WPF TextBlock控件性能优化指南 1. 引言 TextBlock作为WPF中最基础且使用最广泛的文本显示控件&#xff0c;其性能优化对整个应用程序的响应速度和资源占用有着重要影响。尽管TextBlock是一个轻量级控件&#xff0c;但在大型应用或需要显示大量文本的场景中&#xff0c;不恰当…...

DotNet 入门:(一) 环境安装

一、前言 本想用 Go 语言实现一个通过小爱同学操作电脑的&#xff0c;比如我对着手机说打开音乐&#xff0c;或调小音乐&#xff0c;电脑能做相应的处理。奈何我一时间没看懂&#xff0c;就想着用.Net 来试一下&#xff0c;于是就有了下面这篇文章。 二、安装.Net 环境 1. 下…...

初识Redis · 分布式锁

目录 前言&#xff1a; 分布式锁 setnx lua脚本和看门狗 redlock算法 Redlock 的加锁流程&#xff08;5 步&#xff09; 前言&#xff1a; 到了分布式锁这一章之后&#xff0c;我们首先能联想到的问题就是线程安全的问题&#xff0c;线程安全指的是多个线程在并发执行的…...

使用 OpenCV 实现图像中心旋转

在图像处理中&#xff0c;围绕中心点旋转图像是一个常见的需求。无论是为了数据增强、视觉效果&#xff0c;还是图像对齐&#xff0c;旋转图像都是一项基础且重要的操作。本文将详细介绍如何使用 OpenCV 实现围绕图像中心旋转的功能&#xff0c;并深入探讨其背后的数学原理。 一…...

云钥科技红外短波工业相机

云钥科技的红外短波相机是一款基于短波红外&#xff08;SWIR&#xff0c;波长范围约1-3微米&#xff09;技术的成像设备&#xff0c;专为高精度检测、全天候成像及特殊场景应用设计。以下从核心技术、性能参数、应用场景及产品优势等方面进行详细介绍&#xff1a; ​​一、核心…...

npm如何安装pnpm

在 npm 中安装 pnpm 非常简单,你可以通过以下步骤完成: 1. 使用 npm 全局安装 pnpm 打开终端(命令行工具),运行以下命令: npm install -g pnpm2. 验证安装 安装完成后,可以检查 pnpm 的版本以确保安装成功: pnpm --version如果正确显示版本号(如 8.x.x),说明安…...

GTC Taipei 2025 医疗域前瞻:从AI代理到主权生态,解码医疗健康与生命科学的未来图景

引言 2025年,全球医疗健康领域正经历一场由人工智能、机器人技术与分布式计算驱动的范式转移。随着NVIDIA及其生态伙伴在GTC Taipei 2025大会上的深度布局,医疗行业的核心趋势愈发清晰:AI代理程序(Digital AI Agents)赋能临床协作、医疗大数据与精准医学加速落地、医学影…...

【AI学习】李宏毅新课《DeepSeek-R1 这类大语言模型是如何进行「深度思考」(Reasoning)的?》的部分纪要

针对推理模型&#xff0c;主要讲了四种方法&#xff0c;两种不需要训练模型&#xff0c;两种需要。 对于reason和inference&#xff0c;这两个词有不同的含义&#xff01; 推理时计算不是新鲜事&#xff0c;AlphaGo就是如此。 这张图片说明了将训练和推理时计算综合考虑的关系&…...

npm打包内存不足- JavaScript heap out of memory

直接贴出报错信息 <--- Last few GCs --->[30904:0000010F60FE58E0] 22090 ms: Scavenge 2037.4 (2069.4) -> 2036.4 (2074.2) MB, 2.5 / 0.0 ms (average mu 0.228, current mu 0.216) allocation failure [30904:0000010F60FE58E0] 22101 ms: Scavenge 2…...

【最新 MCP 战神手册 08】工具使用详解:实现 AI 行动

文章目录 1. 开始啦!2. 第一部分:设计高效且安全的工具3. 第二部分:定义工具蓝图——参数、输出与约束条件4. 第三部分:弥合差距:LLM 兼容性(函数调用)5. 第四部分:实施与测试的最佳实践1. 开始啦! 在前几章中,我们将工具介绍为 AI 模型在 MCP 客户端引导下向 MCP 服…...

开发iOS App时,我常用的一款性能监控小工具分享

开发iOS App时&#xff0c;我常用的一款性能监控小工具分享 最近在做一个iOS应用的性能优化&#xff0c;频繁遇到内存泄露、界面卡顿和网络请求超时的问题。平时用Xcode Instruments虽然专业&#xff0c;但流程繁琐&#xff0c;临时排查问题不够灵活。 于是开始找有没有轻量一…...

如何防止 ES 被 Linux OOM Killer 杀掉

当 Linux 系统内存不足时&#xff0c;内核会找出一个进程 kill 掉它释放内存&#xff0c;旨在保障整个系统不至于崩溃。如果 ES 按照最佳实践去实施部署&#xff0c;会保留一半的内存&#xff0c;不至于发生此类事情。但事情总有例外&#xff0c;有的朋友可能 ES 和其他的程序部…...

Windows权限与icacls命令详解

在Windows操作系统中&#xff0c;权限管理是确保系统安全和资源访问控制的核心机制。特别是在使用NTFS&#xff08;New Technology File System&#xff09;文件系统的环境中&#xff0c;访问控制列表&#xff08;ACL&#xff09;用于定义哪些用户或组可以对文件、文件夹或其他…...

5.4.2 MVVM例2-用户控件的使用(水在水管中流动的实例)

本文以一个例子介绍用户控件的使用(UserControl),下图所示: 一、主要技术点 1.MainViewModel使用CommunityToolkit.Mvvm 这个Nuget包 2.LinearGradientBrush使用,下面代码可以产生如下的效果 <LinearGradientBrush x:Key="HorizontalBackground" …...

PHP代码-服务器下载文件页面编写

内部环境的服务资源下载页面有访问需求&#xff0c;给开发和产品人员编写一个简洁的下载页面提供资源下载。直接用nginxphp的形式去编写了&#xff0c;这里提供展示index.php文件代码如下&#xff1a; <?php // 配置常量 define(BASE_DIR, __DIR__); // 当前脚本所在目录作…...

51单片机快速入门之 SPI通信 2025年4月29日09:26:32

SPI通信 : SPI&#xff08;Serial Peripheral Interface&#xff09;通信是一种同步串行数据传输协议&#xff0c;主要用于嵌入式系统内部设备之间的通信。它由Motorola公司在2000年提出&#xff0c;广泛应用于微控制器、传感器、存储设备等之间的数据传输。 SPI通信的主要特点…...

SpringMVC再复习1

一、三层架构 表现层&#xff08;WEB 层&#xff09; 定义 &#xff1a;是应用程序与客户端进行交互的最外层&#xff0c;主要负责接收用户的请求&#xff0c;并将处理结果显示给用户。 作用 &#xff1a;在 Spring MVC 中&#xff0c;表现层通常采用 MVC 设计模式来构建。 技…...

音视频之H.265/HEVC网络适配层

H.265/HEVC系列文章&#xff1a; 1、音视频之H.265/HEVC编码框架及编码视频格式 2、音视频之H.265码流分析及解析 3、音视频之H.265/HEVC预测编码 4、音视频之H.265/HEVC变换编码 5、音视频之H.265/HEVC量化 6、音视频之H.265/HEVC环路后处理 7、音视频之H.265/HEVC熵编…...

01_微服务常见问题

文章目录 微服务常见问题一、常见问题概要一、问题详解1.1 服务拆分1.2 服务通信1.3 服务注册与发现1.4 服务治理1.5 数据一致性1.6 故障隔离与容错处理1.7 数据库设计1.8 性能测试与调优 微服务常见问题 一、常见问题概要 ‌服务拆分‌&#xff1a;如何合理地拆分服务&#…...

Python在自动驾驶仿真环境中的应用:构建智能驾驶的虚拟世界

Python在自动驾驶仿真环境中的应用:构建智能驾驶的虚拟世界 引言 随着自动驾驶技术的迅速发展,仿真环境的构建变得愈发重要。传统的测试方法依赖物理车辆和道路进行验证,但这种方式不仅成本高昂,还存在一定的风险。为了加速自动驾驶技术的研发,仿真环境成为了一个必不可…...

【统计方法】交叉验证:Resampling, nested 交叉验证等策略 【含R语言】

Resampling (重采样方法) 重采样方法是从训练数据中反复抽取样本&#xff0c;并在每个&#xff08;重新&#xff09;样本上重新调整模型&#xff0c;以获得关于拟合模型的附加信息的技术。 两种主要的重采样方法 Cross-Validation (CV) 交叉验证 &#xff1a; 用于估计测试误…...

海外App数据隐私架构实战:构建GDPR、CCPA合规的全栈解决方案

一、隐私合规的架构范式转变 从“数据收集”到“数据最小化”传统模式&#xff1a;尽可能收集数据 → 导致合规风险隐私原生模式&#xff1a;默认不收集 → 按需申请 → 自动过期kotlin// Android权限动态申请示例&#xff08;GDPR兼容&#xff09; val request PermissionRe…...

Prometheus监控

1、docker - prometheusgrafana监控与集成到spring boot 服务_grafana spring boot-CSDN博客 2、【IT运维】普罗米修斯基本介绍及监控平台部署&#xff08;PrometheusGrafana&#xff09;-CSDN博客 3、Prometheus监控SpringBoot-CSDN博客 4、springboot集成普罗米修斯-CSDN博客…...

Vue3 Echarts 3D圆形柱状图实现教程以及封装一个可复用的组件

文章目录 前言一、实现原理二、series ——type: "pictorialBar" 简介2.1 常用属性 三、代码实战3.1 封装一个echarts通用组件 echarts.vue3.2 首先实现一个基础柱状图3.3 添加上下2个椭圆面3.4 进阶封装一个可复用的3D圆形柱状图组件 总结 前言 在前端开发的数据可视…...