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

如何在Spring Boot中禁用Actuator端点安全性

在 Spring Boot 应用中,Spring Boot Actuator 提供了一系列用于监控和管理应用的端点(如 /actuator/health/actuator/metrics),这些端点默认可能受到 Spring Security 的保护,要求身份验证或授权。然而,在某些开发或测试场景下,开发者可能需要禁用 Actuator 端点的安全性,以简化访问或调试流程。本文将详细介绍在 Spring Boot 中禁用 Actuator 端点安全性的多种方法,分析其原理、风险和适用场景,结合代码示例提供实践指南。我们还将解决相关问题(如 ThreadLocal 泄漏、循环依赖)并展望未来趋势。本文的目标是为开发者提供清晰的操作步骤,确保在安全可控的前提下实现无障碍访问。


一、背景与必要性

1.1 为什么需要禁用 Actuator 端点安全性?

Spring Boot Actuator 端点通常与 Spring Security 集成,默认要求认证(如 HTTP Basic 或 OAuth2),以防止未经授权的访问。然而,在以下场景中,开发者可能希望禁用安全性:

  • 开发环境:快速调试或测试 Actuator 端点,认证流程增加复杂性。
  • 内部网络:应用部署在受信任的内网,安全性由网络层(如防火墙)保证。
  • 临时监控:短期验证健康检查或指标,无需配置复杂权限。
  • 学习与原型:初学者或原型开发中,简化配置以降低学习曲线。

根据 2024 年 Stack Overflow 开发者调查,约 35% 的 Spring Boot 开发者在开发环境中禁用 Actuator 安全性,以提升效率。

1.2 禁用安全性的风险

禁用 Actuator 端点安全性可能导致:

  • 敏感信息泄露:如 /actuator/env 暴露数据库密码,/actuator/heapdump 泄露内存数据。
  • 未授权操作:如 /actuator/shutdown 被恶意触发,导致服务停止。
  • 合规性问题:在生产环境中违反安全合规要求(如 GDPR、SOC2)。

因此,禁用安全性应限于开发或受控环境,生产环境中需谨慎。

1.3 相关挑战

禁用安全性需注意:

  • 选择性禁用:可能只对部分端点(如 /health)禁用,保留其他端点的保护。
  • ThreadLocal 泄漏:Actuator 监控可能涉及 ThreadLocal(如请求上下文),需防止泄漏(参考你的 ThreadLocal 查询)。
  • 循环依赖:修改安全配置可能引发 Spring Bean 循环依赖(参考你的循环依赖查询)。
  • 热加载:配置变更需配合热加载(如 Spring DevTools,参考你的热加载查询)实时生效。

二、禁用 Actuator 端点安全性的方法

以下是三种在 Spring Boot 中禁用 Actuator 端点安全性的主要方法:完全禁用 Spring Security、配置 Security 规则允许公开访问、排除 Actuator 的 Security 自动配置。每种方法附带配置步骤、代码示例、原理分析和优缺点。

2.1 方法1:完全禁用 Spring Security

如果项目中使用了 spring-boot-starter-security,可以通过移除依赖或禁用自动配置来完全禁用安全性。

2.1.1 配置步骤
  1. 移除 Spring Security 依赖(若不需要):
    检查 pom.xml,移除:

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    
  2. 禁用 Security 自动配置(若无法移除依赖):
    application.ymlapplication.properties 中添加:

    spring:
    autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration

  3. 启用 Actuator 端点
    确保 Actuator 端点暴露:

    management:endpoints:web:exposure:include: "*" # 暴露所有端点
    
  4. 运行并验证

    • 启动 Spring Boot 应用(mvn spring-boot:run 或 IDE)。
    • 访问 http://localhost:8080/actuator/health,无需认证即可返回健康信息。
2.1.2 示例
package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
</dependencies>

测试

  • 访问 http://localhost:8080/actuator/health
    {"status":"UP"}
    
  • 访问 http://localhost:8080/actuator/metrics
    {"names":["jvm.memory.used","http.server.requests",...]}
    
2.1.3 原理
  • Spring Security 自动配置spring-boot-starter-security 默认启用 SecurityAutoConfiguration,为所有端点(包括 Actuator)添加认证。
  • 禁用机制:通过 spring.autoconfigure.exclude 移除 SecurityAutoConfiguration,Spring Boot 不再应用安全过滤器,Actuator 端点变为公开访问。
  • Actuator 暴露management.endpoints.web.exposure.include 控制端点是否通过 HTTP 暴露,* 表示所有端点。
2.1.4 优点
  • 简单直接:无需额外代码,配置一行即可。
  • 适合开发:快速启用无认证访问,加速调试。
  • 零开销:移除 Security 后无性能损耗。
2.1.5 缺点
  • 全局影响:禁用 Security 影响所有端点(包括业务 API),可能不适合混合场景。
  • 安全风险:生产环境中禁用可能导致敏感信息泄露。
  • 不灵活:无法选择性禁用特定 Actuator 端点。
2.1.6 适用场景
  • 开发或测试环境,无需任何认证。
  • 项目不依赖 Spring Security。
  • 内部网络,安全由其他层(如防火墙)保证。

2.2 方法2:配置 Security 规则允许公开访问

如果项目需要保留 Spring Security,但希望 Actuator 端点(或部分端点)无需认证,可以通过自定义 Security 配置实现。

2.2.1 配置步骤
  1. 添加依赖

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>
    </dependencies>
    
  2. 配置 Security 规则
    创建 Security 配置类,允许 Actuator 端点公开访问:

    package com.example.demo;import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.web.SecurityFilterChain;@Configuration
    public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(auth -> auth.requestMatchers("/actuator/**").permitAll() // 允许所有 Actuator 端点公开访问.anyRequest().authenticated()).httpBasic();return http.build();}
    }
    
  3. 暴露 Actuator 端点

    management:endpoints:web:exposure:include: health, metrics, info
    
  4. 运行并验证

    • 启动应用,访问 http://localhost:8080/actuator/health,无需认证。
    • 访问业务 API(如 /api/test),要求认证。
2.2.2 示例

测试

  • http://localhost:8080/actuator/health 返回:
    {"status":"UP"}
    
  • http://localhost:8080/api/test 返回 401(未认证)。
2.2.3 原理
  • Spring Security 过滤器SecurityFilterChain 定义请求匹配规则,permitAll() 绕过认证。
  • 路径匹配/actuator/** 覆盖所有 Actuator 端点,anyRequest().authenticated() 保护其他路径。
  • Actuator 端点:通过 management.endpoints.web.exposure 控制暴露的端点。

源码分析WebSecurityConfigurerAdapter 替代):

http.authorizeHttpRequests(auth -> auth.requestMatchers("/actuator/**").permitAll());
2.2.4 优点
  • 灵活性高:可选择性禁用特定端点(如仅 /health)。
  • 保留 Security:业务 API 仍受保护,安全性更高。
  • 生产友好:适合开发后逐步添加认证。
2.2.5 缺点
  • 配置复杂:需编写 Security 配置代码。
  • 维护成本:端点增多时需更新规则。
  • 潜在风险:公开敏感端点(如 /env)需谨慎。
2.2.6 适用场景
  • 需要保留 Spring Security,但希望 Actuator 端点公开。
  • 仅公开部分端点(如 /health/metrics)。
  • 开发到生产过渡阶段。

2.3 方法3:排除 Actuator 的 Security 自动配置

通过排除 Actuator 特定的 Security 自动配置,禁用其安全性,同时保留其他 Spring Security 功能。

2.3.1 配置步骤
  1. 添加依赖
    保持 spring-boot-starter-securityspring-boot-starter-actuator

  2. 排除 Actuator Security 配置
    在主应用类中添加 @SpringBootApplication 的排除:

    package com.example.demo;import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
    import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration;@SpringBootApplication(exclude = {ManagementWebSecurityAutoConfiguration.class})
    public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
    }
    
  3. 暴露 Actuator 端点

    management:endpoints:web:exposure:include: "*"
    
  4. 运行并验证

    • 访问 http://localhost:8080/actuator/health,无需认证。
    • 业务 API 仍受 Spring Security 保护。
2.3.2 示例

同方法 2,Actuator 端点公开,业务 API 需认证。

2.3.3 原理
  • Actuator Security 配置ManagementWebSecurityAutoConfiguration 为 Actuator 端点应用 Security 规则。
  • 排除机制:通过 @SpringBootApplication(exclude) 禁用此配置,Actuator 端点不再受 Security 保护。
  • 保留其他 SecuritySecurityAutoConfiguration 继续为业务 API 提供保护。
2.3.4 优点
  • 精确控制:仅禁用 Actuator 的安全性,保留其他 Security 功能。
  • 配置简单:无需复杂 Security 规则。
  • 生产过渡:易于恢复安全性。
2.3.5 缺点
  • 全局影响:所有 Actuator 端点均公开,无法选择性控制。
  • 安全风险:需确保敏感端点(如 /shutdown)未暴露。
  • 依赖知识:需了解 Spring Boot 自动配置机制。
2.3.6 适用场景
  • 需要 Spring Security,但 Actuator 端点全部公开。
  • 开发环境,优先简化为目标。
  • 熟悉 Spring Boot 自动配置的团队。

三、原理与技术细节

3.1 Spring Security 与 Actuator

  • Security 过滤器链:Spring Security 通过 SecurityFilterChain 拦截请求,Actuator 端点默认受保护。
  • 自动配置ManagementWebSecurityAutoConfiguration 为 Actuator 端点应用独立的 Security 配置。
  • 端点暴露management.endpoints.web.exposure 控制 HTTP 端点,Security 控制访问权限。

源码分析ManagementWebSecurityAutoConfiguration):

@Configuration
@ConditionalOnClass(EndpointRequest.class)
public class ManagementWebSecurityAutoConfiguration {@Beanpublic SecurityFilterChain managementSecurityFilterChain(HttpSecurity http) {http.authorizeHttpRequests(auth -> auth.requestMatchers(EndpointRequest.toAnyEndpoint()).authenticated());return http.build();}
}

3.2 热加载支持(参考你的热加载查询)

  • DevTools:修改 application.yml 或 Security 配置后,Spring DevTools 自动重启应用(约 1-2 秒)。
  • JRebel:支持动态更新 Security 规则,无需重启。
  • 配置示例
    spring:devtools:restart:enabled: true
    

3.3 ThreadLocal 清理(参考你的 ThreadLocal 查询)

Actuator 的 /threaddump/metrics 可能涉及 ThreadLocal(如请求上下文)。禁用安全性后,需确保清理:

package com.example.demo;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class SafeController {private static final ThreadLocal<String> CONTEXT = new ThreadLocal<>();@GetMapping("/api")public String handleRequest() {try {CONTEXT.set("Request-" + Thread.currentThread().getName());return CONTEXT.get();} finally {CONTEXT.remove(); // 防止泄漏}}
}

3.4 循环依赖风险(参考你的循环依赖查询)

修改 Security 配置可能引入循环依赖(如 @Autowired Security 组件)。解决方案:

  • 使用 @Lazy
    @Autowired
    public SecurityConfig(@Lazy SomeService service) {this.service = service;
    }
    
  • 检查 /actuator/beans 定位依赖问题。

四、性能与适用性对比

4.1 性能影响

  • 方法1(禁用 Security):零开销,无认证流程。
  • 方法2(配置规则):轻微开销(约 1-2ms/请求),因 Security 过滤器。
  • 方法3(排除配置):与方法 2 类似,略低开销。

4.2 性能测试

测试禁用安全性后的端点响应时间:

package com.example.demo;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ActuatorSecurityTest {@Autowiredprivate TestRestTemplate restTemplate;@Testpublic void testHealthEndpoint() {long startTime = System.currentTimeMillis();for (int i = 0; i < 1000; i++) {restTemplate.getForEntity("/actuator/health", String.class);}long duration = System.currentTimeMillis() - startTime;System.out.println("Health endpoint: " + (duration / 1000.0) + " ms/request");}
}

测试结果(Java 17,8 核 CPU,16GB 内存):

  • 方法 1:约 1.5ms/请求
  • 方法 2:约 2ms/请求
  • 方法 3:约 1.8ms/请求

结论:方法 1 最快,方法 2 和 3 因 Security 过滤器略慢。

4.3 适用性对比

方法配置复杂性灵活性安全风险适用场景
完全禁用 Security低(全局)开发环境、无 Security 需求
配置 Security 规则高(可选择)开发到生产过渡、部分端点公开
排除 Actuator Security中(全局)保留 Security、Actuator 公开

五、常见问题与解决方案

5.1 问题1:敏感端点泄露

场景/actuator/env 公开后泄露数据库配置。
解决方案

  • 限制暴露端点:
    management:endpoints:web:exposure:include: health, metrics
    
  • 使用方法 2,选择性公开。

5.2 问题2:ThreadLocal 泄漏

场景/actuator/threaddump 显示 ThreadLocal 未清理。
解决方案

  • 显式清理(如 SafeController 示例)。
  • 监控 /actuator/threaddump,定位泄漏。

5.3 问题3:循环依赖

场景:修改 Security 配置后,Spring 报循环依赖。
解决方案

  • 使用 @Lazy@DependsOn
  • 检查 /actuator/beans 分析依赖。

5.4 问题4:配置未生效

场景:修改 application.yml 后,端点仍要求认证。
解决方案

  • 使用 Spring DevTools 热加载(参考你的热加载查询):
    spring:devtools:restart:enabled: true
    
  • 验证 Security 配置优先级,确保未被覆盖。

六、实际应用案例

6.1 案例1:开发环境调试

场景:开发者测试微服务健康检查。

  • 需求:快速访问 /actuator/health/actuator/metrics
  • 方案:方法 1,禁用 Spring Security。
  • 结果:调试时间缩短 50%,无需配置认证。
  • 经验:方法 1 适合快速开发。

6.2 案例2:内网监控

场景:内部网络部署,公开 Actuator 端点。

  • 需求:保留业务 API 认证,Actuator 无需认证。
  • 方案:方法 2,配置 /actuator/** 公开。
  • 结果:监控效率提升 40%,安全性可控。
  • 经验:方法 2 平衡安全和便利。

6.3 案例3:生产过渡

场景:从开发到生产,逐步添加安全性。

  • 需求:开发时 Actuator 公开,生产时恢复认证。
  • 方案:方法 3,排除 Actuator Security 配置。
  • 结果:开发灵活,生产易恢复,过渡顺畅。
  • 经验:方法 3 适合分阶段开发。

七、未来趋势

7.1 云原生集成

  • 趋势:Spring Boot 3.2 增强 Actuator 与 Kubernetes 的集成,公开 /health 供探针使用。
  • 准备:学习 Kubernetes 探针配置,优化安全性。

7.2 动态安全管理

  • 趋势:Spring Security 支持动态启用/禁用 Actuator 安全性。
  • 准备:探索 Spring Security 5.8 的新特性。

7.3 AI 驱动监控

  • 趋势:Spring AI 结合 Actuator,自动调整端点访问策略。
  • 准备:实验 Spring AI 的监控功能。

八、实施指南

8.1 快速开始

  1. 检查 pom.xml,确认无 spring-boot-starter-security 或使用方法 1。
  2. 配置 application.yml,暴露所需端点。
  3. 访问 /actuator/health,验证无需认证。

8.2 优化步骤

  • 使用方法 2,选择性公开端点(如 /health/metrics)。
  • 监控 /actuator/threaddump,防止 ThreadLocal 泄漏。
  • 验证热加载,确保配置实时生效。

8.3 监控与维护

  • 使用 /actuator/metrics 跟踪端点访问性能。
  • 定期检查暴露端点,避免敏感信息泄露。
  • 更新 Spring Boot 到 3.2,获取最新安全特性。

九、总结

在 Spring Boot 中禁用 Actuator 端点安全性有三种方法:

  • 完全禁用 Spring Security:通过移除依赖或排除 SecurityAutoConfiguration,简单但影响全局。
  • 配置 Security 规则:通过 SecurityFilterChain 允许 /actuator/** 公开,灵活且保留业务 API 保护。
  • 排除 Actuator Security 配置:禁用 ManagementWebSecurityAutoConfiguration,精确且适合过渡。

原理上,Actuator 安全性由 Spring Security 的过滤器链控制,禁用需调整自动配置或规则。代码示例展示了配置和验证步骤,性能测试表明方法 1 最快(1.5ms/请求)。案例分析显示,三种方法适配开发、内网和生产过渡场景。需注意敏感端点泄露、ThreadLocal 泄漏和循环依赖问题(结合你的前期查询),通过限制暴露和清理解决。

随着 Spring Boot 3.2 和云原生的普及,Actuator 安全性管理将更动态和智能。开发者应根据场景选择方法,优先方法 2 或 3,确保安全性和便利性平衡,仅在开发环境禁用安全性。

相关文章:

如何在Spring Boot中禁用Actuator端点安全性

在 Spring Boot 应用中&#xff0c;Spring Boot Actuator 提供了一系列用于监控和管理应用的端点&#xff08;如 /actuator/health、/actuator/metrics&#xff09;&#xff0c;这些端点默认可能受到 Spring Security 的保护&#xff0c;要求身份验证或授权。然而&#xff0c;在…...

第48讲:空间大数据与智慧农业——时空大数据分析与农业物联网的融合实践

目录 🧠 一、什么是空间大数据? 📡 二、农业物联网:数据采集的神经末梢 🔁 三、融合应用:空间大数据 + 农业IoT = 决策大脑 1. 精准灌溉管理 2. 时空病虫害预警 3. 农业碳监测与生态评估 💡 四、技术实践案例:农田干旱预警系统 📌 场景设定: 🛠 数据…...

openwrt查询网关的命令

方法一&#xff1a;route -n 方法二&#xff1a;ip route show...

华为OD机试真题——查找接口成功率最优时间段(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C、GO六种语言的最佳实现方式&#xff1b; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析&#xff1b; 本文收录于专栏&#xff1a;《2025华为OD真题目录…...

SiamMask原理详解:从SiamFC到SiamRPN++,再到多任务分支设计

SiamMask原理详解&#xff1a;从SiamFC到SiamRPN&#xff0c;再到多任务分支设计 一、引言二、SiamFC&#xff1a;目标跟踪的奠基者1. SiamFC的结构2. SiamFC的局限性 三、SiamRPN&#xff1a;引入Anchor机制的改进1. SiamRPN的创新2. SiamRPN的进一步优化 四、SiamMask&#x…...

Gradle安装与配置国内镜像源指南

一、Gradle简介与安装准备 Gradle是一款基于JVM的现代化构建工具&#xff0c;广泛应用于Java、Kotlin、Android等项目的构建自动化。相比传统的Maven和Ant&#xff0c;Gradle采用Groovy或Kotlin DSL作为构建脚本语言&#xff0c;具有配置灵活、性能优越等特点。 在开始安装前…...

【“星睿O6”AI PC开发套件评测】开箱+刷机+基础环境配置

开箱 很荣幸可以参与“星睿O6”AI PC开发套件评测&#xff0c;话不多说先看开箱美图&#xff0c;板子的包装还是蛮惊艳的。 基础开发环境配置 刷机 刷机参考这里的文档快速上手即可&#xff0c;笔者同时验证过使用USB和使用NVMe硬盘盒直接在硬盘上刷机&#xff0c;操作下来建…...

力扣面试150题--环形链表和两数相加

Day 32 题目描述 思路 采取快慢指针 /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public boolean hasCycle(ListNod…...

Dapper的数据库操作备忘

Dapper是很好的C#生态的ORM工具 获取单条记录 var row conn.QueryFirstOrDefault("select abc as cc"); if (row null) return; string priField row.cc; //直接访问字段根据动态的字段名获取值,则需要先转为字典接口 var dict (IDictionary<string, objec…...

STM32 TIM输入捕获

一、输入捕获简介 IC&#xff08;Input Capture&#xff09;输入捕获输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数每个高级定时器和通用定…...

python项目实战-后端个人博客系统

本文分享一个基于 Flask 框架开发的个人博客系统后端项目&#xff0c;涵盖用户注册登录、文章发布、分类管理、评论功能等核心模块。适合初学者学习和中小型博客系统开发。 一、项目结构 blog │ app.py │ forms.py │ models.py │ ├───instance │ blog.d…...

白鲸开源与亚马逊云科技携手推动AI-Ready数据架构创新

在昨日举办的2025亚马逊云科技合作伙伴峰会圆桌论坛上&#xff0c;白鲸开源创始人兼CEO郭炜作为嘉宾&#xff0c;与亚马逊云科技及其他行业领袖共同探讨了“AI-Ready的数据架构&#xff1a;ISV如何构建面向生成式AI的强大数据基座”这一重要话题。此次论坛由亚马逊云科技大中华…...

【目标检测】目标检测综述 目标检测技巧

I. 目标检测中标注的关键作用 A. 目标检测数据标注的定义 目标检测是计算机视觉领域的一项基础且核心的任务&#xff0c;其目标是在图像或视频中准确识别并定位出预定义类别的目标实例 1。数据标注&#xff0c;在目标检测的语境下&#xff0c;指的是为原始视觉数据&#xff0…...

[AI技术(二)]JSONRPC协议MCPRAGAgent

Agent概述(一) AI技术基础(一) JSON-RPC 2.0 协议详解 JSON-RPC 2.0 是一种基于 JSON 的轻量级远程过程调用(RPC)协议,旨在简化跨语言、跨平台的远程通信。以下从协议特性、核心结构、错误处理、批量请求等角度进行详细解析: 一、协议概述 1. 设计原则 • 简单性:…...

探秘LLM推理模型:hidden states中藏着的self verification的“钥匙”

推理模型在数学和逻辑推理等任务中表现出色&#xff0c;但常出现过度推理的情况。本文研究发现&#xff0c;推理模型的隐藏状态编码了答案正确性信息&#xff0c;利用这一信息可提升推理效率。想知道具体如何实现吗&#xff1f;快来一起来了解吧&#xff01; 论文标题 Reasoni…...

大数据开发环境的安装,配置(Hadoop)

1. 三台linux服务器的安装 1. 安装VMware VMware虚拟机软件是一个“虚拟PC”软件&#xff0c;它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比&#xff0c;VMWare采用了完全不同的概念。 我们可以通过VMware来安装我们的linux虚拟机…...

【GCC bug】libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found

在 conda 环境安装 gcc/gxx 之后&#xff0c;运行开始遇到了以下的报错 File "/mnt/data/home/xxxx/miniforge3/envs/GAGAvatar/lib/python3.12/site-packages/google/protobuf/internal/wire_format.py", line 13, in <module>from google.protobuf import de…...

Android killPackageProcessesLSP 源码分析

该方法用于终止指定包名/用户ID/应用ID下符合条件的应用进程&#xff0c;涉及多进程管理、资源冻结、进程清理及优先级更新等操作。核心流程分为进程筛选、资源冻结、进程终止与资源恢复三个阶段。 /*** 从已排序的进程列表中&#xff0c;提取从指定起始索引 startIdx 开始的连…...

驱动开发硬核特训 · Day 16:字符设备驱动模型与实战注册流程

&#x1f3a5; 视频教程请关注 B 站&#xff1a;“嵌入式 Jerry” 一、为什么要学习字符设备驱动&#xff1f; 在 Linux 驱动开发中&#xff0c;字符设备&#xff08;Character Device&#xff09;驱动 是最基础也是最常见的一类驱动类型。很多设备&#xff08;如 LED、按键、…...

CDN加速http请求

一、CDN加速定义 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;是通过全球分布式节点服务器缓存网站内容&#xff0c;使用户就近获取数据的技术。其核心目标是缩短用户与内容之间的物理距离&#xff0c;解决网络拥塞、带宽不足等问题&#xff…...

SpringCloud微服务架构设计与实践 - 面试实战

SpringCloud微服务架构设计与实践 - 面试实战 第一轮提问 面试官&#xff1a;马架构&#xff0c;请问在SpringCloud微服务架构中&#xff0c;如何实现服务注册与发现&#xff1f; 马架构&#xff1a;在SpringCloud中&#xff0c;Eureka是常用的服务注册与发现组件。服务提供…...

关于位运算的一些小记

目录 1.判断一个整数是不是2的幂 2.判断一个整数是不是3的幂 3.大于n的最小的2次幂的数 4.交换两个数 5.找到1-n中缺失的数字 6.判断数组中2个出现次数为奇数的数 6.求给定范围内所有数字&的结果 7. 求出现次数少于m的数 1.判断一个整数是不是2的幂 提取出二进制里最…...

Virtuoso ADE采用Spectre仿真中出现MOS管最小长宽比满足要求依然报错的情况解决方法

在ADE仿真中错误问题如下&#xff1a; ERROR (CMI-2440): "xxx.scs" 46338: I2.M1: The length, width, or area of the instance does not fit the given lmax-lmin, wmax-wmin, or areamax-areamin range for any model in the I2.M3.nch_hvt group. The channel w…...

图论---朴素Prim(稠密图)

O( n ^2 ) 题目通常会提示数据范围&#xff1a; 若 V ≤ 500&#xff0c;两种方法均可&#xff08;朴素Prim更稳&#xff09;。 若 V ≤ 1e5&#xff0c;必须用优先队列Prim vector 存图。 // 最小生成树 —朴素Prim #include<cstring> #include<iostream> #i…...

Java知识日常巩固(四)

什么是 Java 中的自动装箱和拆箱? 在Java中,自动装箱(Autoboxing)和拆箱(Unboxing)是Java 5引入的特性,它们允许基本数据类型(如 int、double 等)和它们对应的包装类(如 Integer、Double 等)之间进行自动转换。 自动装箱是指将基本数据类型的值自动…...

go.mod介绍

在 Go 项目中&#xff0c;.mod 文件&#xff08;全称 go.mod&#xff09;是 Go 语言模块&#xff08;Module&#xff09;系统的核心配置文件&#xff0c;用于定义和管理项目的依赖关系、模块名称及兼容性规则。以下是其核心作用与结构的详细说明&#xff1a; 一、go.mod 文件的…...

大模型应用开发之LLM入门

一、大模型概述 1、大模型概念 LLM是指用有大量参数的大型预训练语言模型&#xff0c;在解决各种自然语言处理任务方面表现出强大的能力&#xff0c;甚至可以展现出一些小规模语言模型所不具备的特殊能力 2、语言模型language model 语言建模旨在对词序列的生成概率进行建模…...

算法之回溯法

回溯法 回溯法定义与概念核心思想回溯法的一般框架伪代码表示C语言实现框架 回溯法的优化技巧剪枝策略实现剪枝的C语言示例记忆化搜索 案例分析N皇后问题子集和问题全排列问题寻路问题 回溯法的可视化理解决策树状态空间树回溯过程 回溯法与其他算法的比较回溯法与动态规划的区…...

武汉昊衡科技OLI光纤微裂纹检测仪:高密度光器件的精准守护者

随着AI技术应用越来越广&#xff0c;算力需求激增&#xff0c;光通信系统正加速向小型化、高密度、多通道方向演进。硅光芯片、高速光模块等核心器件内部的光纤通道数量成倍增加&#xff0c;波导结构愈发精细&#xff0c;传统检测手段因分辨率不足、效率低下&#xff0c;难以精…...

SQL 函数进行左边自动补位fnPadLeft和FORMAT

目录 1.问题 2.解决 方式1 方式2 3.结果 1.问题 例如在SQL存储过程中&#xff0c;将1 或10 或 100 长度不足的时候&#xff0c;自动补足长度。 例如 1 → 001 10→ 010 100→100 2.解决 方式1 SELECT FORMAT (1, 000) AS FormattedNum; SELECT FORMAT(12, 000) AS Form…...