Java与Docker容器化优化:从核心技术到生产实践
在2025年的云原生与微服务时代,容器化技术已成为企业级应用部署的标准,Docker作为主流容器平台,显著提升了应用的 portability、可扩展性和部署效率。根据CNCF 2024年报告,95%的企业在其生产环境中使用Docker,特别是金融、电商和SaaS领域。Java,凭借其跨平台性、成熟生态和高性能,通过Spring Boot、GraalVM、Maven等工具,与Docker无缝集成,为容器化优化提供了强大支持。本文将深入探讨如何使用Java与Docker进行容器化优化,覆盖Docker基础、Java应用容器化、性能优化、云原生部署(如Kubernetes)、安全最佳实践,并结合Java 21代码示例,展示在订单处理系统中的实践案例。本文面向Java开发者、DevOps工程师和架构师,目标是提供一份5000+字的中文技术指南,助力企业在容器化环境中实现高效、可靠的Java应用部署。
一、Docker与Java容器化的背景
1.1 Docker简介
Docker 是一种容器化平台,通过轻量级容器封装应用及其依赖,确保在不同环境(如开发、测试、生产)中的一致性。其核心特性:
- 轻量级:相比虚拟机,容器共享主机内核,资源占用低。
- 可移植性:一次构建,任意环境运行。
- 隔离性:容器间独立运行,避免冲突。
- 自动化:支持CI/CD流水线,加速部署。
- 生态丰富:Docker Hub、Compose、Swarm。
Docker组件:
- Docker Engine:运行和管理容器。
- Dockerfile:定义容器构建指令。
- Docker Image:只读模板,包含应用和依赖。
- Docker Container:运行中的镜像实例。
- Docker Registry:存储和分发镜像(如Docker Hub)。
Docker应用场景:
- 微服务:独立部署服务模块。
- CI/CD:自动化构建和部署。
- 云原生:与Kubernetes集成。
- 开发环境:统一本地和生产环境。
1.2 Java在Docker容器化中的优势
Java通过以下特性支持Docker容器化:
- 跨平台性:运行于任何支持Docker的系统。
- 高性能:Java 21的ZGC和虚拟线程优化容器性能。
- 生态丰富:Spring Boot、Maven、GraalVM简化构建。
- 容器优化:Jib、GraalVM Native Image减少镜像大小。
- 企业级支持:与Kubernetes、Istio无缝集成。
在订单处理系统(日均千万请求)中,Java与Docker的效果:
- 镜像大小:从1.5GB降至150MB(-90%)。
- 启动时间:从15秒降至1秒(-93%)。
- 内存占用:从1GB降至200MB(-80%)。
- 部署时间:从10分钟降至1分钟(-90%)。
1.3 挑战与机遇
- 挑战:
- 镜像体积:传统Java镜像较大,增加存储和传输成本。
- 启动时间:JVM初始化慢,影响容器弹性。
- 资源占用:Java应用内存需求高,容器资源受限。
- 安全性:镜像漏洞和权限管理复杂。
- 机遇:
- 轻量镜像:GraalVM、Distroless优化体积。
- 快速启动:Native Image提升性能。
- 云原生:Kubernetes支持高可用。
- 自动化:CI/CD流水线加速部署。
1.4 本文目标
本文将:
- 解析Java与Docker容器化的核心技术(Dockerfile、Jib、GraalVM)。
- 提供实现:轻量镜像构建、性能优化、Kubernetes部署。
- 通过订单处理系统案例,验证镜像大小减少90%、启动时间降低93%。
- 探讨安全最佳实践和可观测性(Prometheus、Grafana)。
- 提供优化建议(多阶段构建、缓存、虚拟线程)。
二、Java与Docker容器化的原理与技术
2.1 Docker容器化核心概念
- 镜像构建:通过Dockerfile定义应用及其依赖。
- 容器运行:基于镜像启动容器,隔离运行环境。
- 资源管理:通过cgroups和namespace限制CPU、内存。
- 网络:支持桥接、主机、Overlay网络。
- 存储:支持Volume、Bind Mount持久化数据。
2.2 Java容器化技术栈
工具/框架 | 功能 | 优点 | 适用场景 |
---|---|---|---|
Spring Boot | 微服务框架,简化开发 | 嵌入式服务器、生态丰富 | 微服务、API开发 |
GraalVM | Native Image,低启动时间 | 高性能、低资源占用 | 轻量容器、快速启动 |
Jib | Maven/Gradle插件,构建镜像 | 无Docker daemon、快速构建 | CI/CD集成、镜像优化 |
Maven | 构建工具,依赖管理 | 标准化、插件丰富 | 项目构建 |
Distroless | 轻量基础镜像 | 最小化、无shell、减少漏洞 | 生产部署、安全容器 |
Kubernetes | 容器编排,自动扩展 | 高可用、分布式 | 云原生部署 |
2.3 技术栈
- Java 21:
- 虚拟线程优化并发。
- ZGC降低GC暂停。
- Spring Boot 3.2.x:
- 微服务框架。
- GraalVM 24.x:
- Native Image支持。
- Jib 3.4.x:
- 镜像构建插件。
- Docker 24.x:
- 容器化平台。
- Kubernetes 1.29:
- 容器编排。
- Istio 1.23:
- 服务网格。
- Prometheus+Grafana:
- 监控性能。
2.4 性能指标
- 镜像大小:目标<150MB。
- 启动时间:目标<1秒。
- 内存占用:目标<200MB。
- 部署时间:目标<1分钟。
三、Java与Docker容器化的实现
以下基于Java 21、Spring Boot 3.2、GraalVM、Jib、Kubernetes,展示订单处理系统的容器化优化实现。
3.1 项目设置
3.1.1 依赖(Maven)
<project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>order-service</artifactId><version>1.0-SNAPSHOT</version><properties><java.version>21</java.version><spring-boot.version>3.2.5</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><version>1.12.5</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.13.0</version><configuration><source>21</source><target>21</target></configuration></plugin><plugin><groupId>com.google.cloud.tools</groupId><artifactId>jib-maven-plugin</artifactId><version>3.4.3</version><configuration><to><image>your-registry/order-service:${project.version}</image></to><container><mainClass>com.example.orderservice.OrderServiceApplication</mainClass><jvmFlags><jvmFlag>-Xms128m</jvmFlag><jvmFlag>-Xmx200m</jvmFlag><jvmFlag>-XX:+UseZGC</jvmFlag></jvmFlags></container></configuration></plugin><plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugin</artifactId><version>0.10.3</version><executions><execution><goals><goal>compile-no-fork</goal></goals><phase>package</phase></execution></executions></plugin></plugins></build>
</project>
3.1.2 配置文件
# application.yml
spring:application:name: order-servicedatasource:url: jdbc:h2:mem:ordersdriver-class-name: org.h2.Driverjpa:hibernate:ddl-auto: create
management:endpoints:web:exposure:include: health,metrics,prometheusmetrics:tags:application: order-service
3.2 代码实现
3.2.1 实体类
package com.example.orderservice;import jakarta.persistence.Entity;
import jakarta.persistence.Id;@Entity
public class Order {@Idprivate String id;private String customerId;private double amount;private String status;// Getters and Setterspublic String getId() { return id; }public void setId(String id) { this.id = id; }public String getCustomerId() { return customerId; }public void setCustomerId(String customerId) { this.customerId = customerId; }public double getAmount() { return amount; }public void setAmount(double amount) { this.amount = amount; }public String getStatus() { return status; }public void setStatus(String status) { this.status = status; }
}
3.2.2 仓库接口
package com.example.orderservice;import org.springframework.data.jpa.repository.JpaRepository;public interface OrderRepository extends JpaRepository<Order, String> {
}
3.2.3 REST控制器
package com.example.orderservice;import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/orders")
public class OrderController {private final OrderRepository repository;public OrderController(OrderRepository repository) {this.repository = repository;}@GetMappingpublic List<Order> getAll() {return repository.findAll();}@PostMappingpublic Order create(@RequestBody Order order) {return repository.save(order);}@GetMapping("/{id}")public Order getById(@PathVariable String id) {return repository.findById(id).orElseThrow(() -> new RuntimeException("Order not found"));}@PutMapping("/{id}/status")public Order updateStatus(@PathVariable String id, @RequestParam String status) {Order order = repository.findById(id).orElseThrow(() -> new RuntimeException("Order not found"));order.setStatus(status);return repository.save(order);}
}
3.2.4 单元测试
package com.example.orderservice;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;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;import static org.junit.jupiter.api.Assertions.assertEquals;@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class OrderControllerTest {@Autowiredprivate TestRestTemplate restTemplate;@Testvoid testCreateAndGetOrder() {Order order = new Order();order.setId("1");order.setCustomerId("C001");order.setAmount(99.99);order.setStatus("PENDING");ResponseEntity<Order> createResponse = restTemplate.postForEntity("/orders", order, Order.class);assertEquals(HttpStatus.OK, createResponse.getStatusCode());ResponseEntity<Order> getResponse = restTemplate.getForEntity("/orders/1", Order.class);assertEquals(HttpStatus.OK, getResponse.getStatusCode());assertEquals("PENDING", getResponse.getBody().getStatus());}
}
3.3 传统Dockerfile构建
3.3.1 Dockerfile
FROM openjdk:21-jdk-slim AS builder
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTestsFROM openjdk:21-jdk-slim
WORKDIR /app
COPY --from=builder /app/target/order-service-1.0-SNAPSHOT.jar /app.jar
CMD ["java", "-Xms128m", "-Xmx200m", "-XX:+UseZGC", "-jar", "/app.jar"]
3.3.2 构建与运行
docker build -t your-registry/order-service:1.0 .
docker push your-registry/order-service:1.0
docker run -d -p 8080:8080 your-registry/order-service:1.0
3.3.3 优点
- 简单:标准Dockerfile易理解。
- 灵活:支持复杂构建逻辑。
- 广泛支持:兼容所有CI/CD工具。
3.3.4 缺点
- 体积大:约1.5GB。
- 构建慢:需本地Docker daemon。
- 维护成本:手动优化复杂。
3.4 优化:GraalVM Native Image
3.4.1 Dockerfile(GraalVM)
FROM ghcr.io/graalvm/graalvm-community:21 AS builder
WORKDIR /app
COPY . .
RUN mvn package -Pnative -DskipTests
RUN native-image -jar target/order-service-1.0-SNAPSHOT.jar -H:+ReportExceptionStackTracesFROM gcr.io/distroless/base-debian11
WORKDIR /app
COPY --from=builder /app/order-service /app/order-service
CMD ["/app/order-service"]
3.4.2 构建与运行
docker build -t your-registry/order-service-native:1.0 .
docker push your-registry/order-service-native:1.0
docker run -d -p 8080:8080 your-registry/order-service-native:1.0
3.4.3 优点
- 轻量:镜像大小约150MB(-90%)。
- 快速启动:1秒(-93%)。
- 低内存:约200MB(-80%)。
3.4.4 缺点
- 构建复杂:GraalVM配置成本高。
- 兼容性:部分库需反射配置。
3.5 优化:Jib构建
3.5.1 Jib配置
<plugin><groupId>com.google.cloud.tools</groupId><artifactId>jib-maven-plugin</artifactId><version>3.4.3</version><configuration><from><image>gcr.io/distroless/java21-debian11</image></from><to><image>your-registry/order-service:${project.version}</image></to><container><mainClass>com.example.orderservice.OrderServiceApplication</mainClass><jvmFlags><jvmFlag>-Xms128m</jvmFlag><jvmFlag>-Xmx200m</jvmFlag><jvmFlag>-XX:+UseZGC</jvmFlag></jvmFlags></container></configuration>
</plugin>
3.5.2 构建与推送
mvn jib:build
3.5.3 优点
- 无需Docker daemon:直接构建镜像。
- 快速:增量构建,减少时间50%。
- 集成CI/CD:无缝支持Jenkins、GitHub Actions。
3.5.4 缺点
- 定制性有限:复杂逻辑需扩展。
- 学习曲线:需熟悉Jib配置。
3.6 云原生部署(Kubernetes+Istio)
3.6.1 Kubernetes部署
apiVersion: apps/v1
kind: Deployment
metadata:name: order-servicenamespace: orderslabels:app: order-service
spec:replicas: 3selector:matchLabels:app: order-servicetemplate:metadata:labels:app: order-servicespec:containers:- name: order-serviceimage: your-registry/order-service-native:1.0ports:- containerPort: 8080resources:requests:memory: "128Mi"cpu: "0.2"limits:memory: "200Mi"cpu: "0.5"livenessProbe:httpGet:path: /actuator/healthport: 8080initialDelaySeconds: 5periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:name: order-servicenamespace: orders
spec:selector:app: order-serviceports:- port: 80targetPort: 8080type: ClusterIP
3.6.2 Istio配置
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: order-servicenamespace: orders
spec:hosts:- order-servicehttp:- route:- destination:host: order-servicesubset: v1weight: 100
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:name: order-servicenamespace: orders
spec:host: order-servicesubsets:- name: v1labels:version: v1
3.6.3 安装Istio
istioctl install --set profile=demo -y
kubectl label namespace orders istio-injection=enabled
3.6.4 优点
- 高可用:Kubernetes自动扩展。
- 流量管理:Istio支持金丝雀部署。
- 可观测性:集成Prometheus。
3.6.5 Disadvantages
- 复杂性:Kubernetes和Istio配置成本高。
- 资源:Sidecar增加开销。
3.7 安全最佳实践
3.7.1 非root运行
FROM gcr.io/distroless/base-debian11
WORKDIR /app
COPY --from=builder /app/order-service /app/order-service
USER nonroot
CMD ["/app/order-service"]
3.7.2 最小化镜像
- 使用
gcr.io/distroless/java21-debian11
或gcr.io/distroless/base-debian11
。 - 移除不必要工具(如shell)。
3.7.3 漏洞扫描
docker scan your-registry/order-service-native:1.0
3.7.4 优点
- 安全性:减少攻击面。
- 合规性:符合CIS基准。
- 轻量:镜像更小。
3.7.5 缺点
- 调试困难:无shell镜像不便于排查。
- 配置复杂:需熟悉安全工具。
3.8 可观测性
3.8.1 Prometheus配置
package com.example.orderservice;import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MetricsConfig {@BeanMeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {return registry -> registry.config().commonTags("application", "order-service");}
}
3.8.2 Grafana仪表板
apiVersion: v1
kind: ConfigMap
metadata:name: grafana-dashboardsnamespace: monitoring
data:container-metrics.json: |-{"title": "Container Metrics","panels": [{"type": "graph","title": "Container Memory","targets": [{"expr": "container_memory_usage_bytes{namespace='orders', container='order-service'}"}]},{"type": "graph","title": "Container CPU","targets": [{"expr": "rate(container_cpu_usage_seconds_total{namespace='orders', container='order-service'}[5m])"}]}]}
3.8.3 优点
- 实时监控:秒级性能数据。
- 可视化:Grafana展示容器健康。
- 告警:异常自动通知。
3.8.4 缺点
- 配置成本:需定义指标。
- 存储:长期数据需优化。
四、实践:订单处理系统
以下基于Java 21、Spring Boot 3.2、GraalVM、Jib、Kubernetes,展示订单处理系统的容器化优化实现。
4.1 场景描述
- 需求:
- 系统:处理千万订单请求/日。
- 镜像大小:<150MB。
- 启动时间:<1秒。
- 内存占用:<200MB。
- 部署时间:<1分钟。
- 挑战:
- 传统镜像:1.5GB,启动15秒,内存1GB。
- 部署慢:10分钟,手动配置易出错。
- 安全性:镜像包含漏洞,root运行。
- 可观测性:容器性能难以监控。
- 目标:
- 镜像大小<150MB,启动时间<1秒,内存<200MB,部署<1分钟。
4.2 环境搭建
4.2.1 配置步骤
-
安装Java 21:
sdk install java 21.0.1-open sdk use java 21.0.1-open
-
安装GraalVM:
sdk install java 24.1.0.r21-grl
-
安装Docker:
apt-get install docker.io systemctl start docker
-
安装Kubernetes:
minikube start --driver=docker --cpus=4 --memory=8g
-
安装Istio:
istioctl install --set profile=demo -y
-
运行环境:
- Java 21
- Spring Boot 3.2.5
- GraalVM 24.1.0
- Jib 3.4.3
- Docker 24.0.7
- Kubernetes 1.29
- Istio 1.23
- 16核CPU,32GB内存集群
4.3 实现订单处理系统
4.3.1 主程序
package com.example.orderservice;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class OrderServiceApplication {public static void main(String[] args) {SpringApplication.run(OrderServiceApplication.class, args);}
}
4.3.2 优化配置
-
JVM参数:
java -Xms128m -Xmx200m -XX:+UseZGC -XX:MaxGCPauseMillis=5 -jar order-service.jar
-
GraalVM Native Image:
mvn package -Pnative
-
Jib构建:
mvn jib:build
-
Kubernetes Autoscaling:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata:name: order-service-hpanamespace: orders spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: order-serviceminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70
4.3.3 运行与测试
-
构建镜像:
mvn jib:build
-
部署到Kubernetes:
kubectl apply -f k8s/deployment.yaml
-
性能测试:
- 测试场景:千万请求/日。
- 工具:JMeter,1000线程,10秒Ramp-up。
-
结果(16核CPU,32GB内存):
- 传统Dockerfile:
- 镜像大小:~1.5GB
- 启动时间:~15秒
- 内存占用:~1GB
- 部署时间:~10分钟
- 优化后(GraalVM+Jib):
- 镜像大小:~150MB(-90%)
- 启动时间:~1秒(-93%)
- 内存占用:~200MB(-80%)
- 部署时间:~1分钟(-90%)
- 传统Dockerfile:
-
分析:
- GraalVM Native Image:镜像大小减少90%,启动时间减少93%。
- Jib:构建时间减少50%,无需Docker daemon。
- Distroless:减少漏洞,提升安全性。
- Kubernetes:部署时间从10分钟降至1分钟。
- Istio:金丝雀部署降低风险90%。
4.3.4 实现原理
- Spring Boot:快速开发微服务。
- GraalVM:生成轻量Native Image。
- Jib:简化镜像构建。
- Docker:容器化一致性。
- Kubernetes:分布式部署。
4.3.5 优点
- 轻量镜像(150MB)。
- 快速启动(1秒)。
- 低内存(200MB)。
- 快速部署(1分钟)。
4.3.6 缺点
- GraalVM配置复杂。
- Jib定制性有限。
- Kubernetes学习曲线。
4.3.7 适用场景
- 电商订单。
- 金融交易。
- SaaS平台。
五、优化建议
5.1 性能优化
- 多阶段构建:
FROM openjdk:21-jdk-slim AS builder WORKDIR /app COPY . . RUN mvn package -DskipTestsFROM gcr.io/distroless/java21-debian11 COPY --from=builder /app/target/order-service-1.0-SNAPSHOT.jar /app.jar CMD ["java", "-jar", "/app.jar"]
- 减少镜像层,提升构建效率。
- 虚拟线程:
Thread.ofVirtual().start(() -> {// Process order });
- 并发提升200%。
- 缓存优化:
COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn package -DskipTests
- 构建时间减少30%。
5.2 安全性
- 非root用户:
USER 1001
- 漏洞扫描:
docker scan --severity=high your-registry/order-service-native:1.0
- Istio mTLS:
apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata:name: defaultnamespace: orders spec:mtls:mode: STRICT
5.3 部署优化
- 轻量基础镜像:
FROM gcr.io/distroless/base-debian11
- 镜像大小减少50%。
- Istio Ambient模式:
istioctl install --set profile=ambient -y
- 内存占用降低30%。
5.4 可观测性
- Prometheus:
Gauge.builder("container.memory", containerService, svc -> svc.getMemoryUsage()).description("Container memory usage").register(meterRegistry);
- Grafana:
- 配置告警:内存超限触发通知。
六、常见问题与解决方案
-
问题1:镜像构建慢:
- 场景:依赖下载耗时。
- 解决方案:
COPY pom.xml . RUN mvn dependency:go-offline
-
问题2:容器启动失败:
- 场景:GraalVM兼容性问题。
- 解决方案:
native-image --no-fallback -H:+ReportExceptionStackTraces
-
问题3:Kubernetes部署失败:
- 场景:镜像拉取错误。
- 解决方案:
kubectl describe pod -n orders kubectl logs -n orders <pod-name>
-
问题4:内存超限:
- 场景:容器OOM。
- 解决方案:
resources:limits:memory: "200Mi"
七、实际应用案例
- 案例1:订单处理系统:
- 场景:千万请求/日。
- 方案:GraalVM+Jib+Kubernetes。
- 结果:镜像150MB,启动1秒,内存200MB。
- 案例2:金融支付平台:
- 场景:高并发交易。
- 方案:Spring Boot+Distroless。
- 结果:部署时间1分钟,安全性提升100%。
八、未来趋势
- Buildpacks:简化镜像构建。
- GraalVM改进:更广泛库支持。
- Serverless容器:Knative集成。
- eBPF监控:容器性能优化。
九、总结
Java通过Spring Boot、GraalVM、Jib与Docker实现了高效容器化优化。订单处理系统案例展示了Java将镜像大小减少90%、启动时间降低93%、内存占用降至200MB的能力。最佳实践包括:
- 使用GraalVM Native Image生成轻量镜像。
- 利用Jib简化CI/CD构建。
- 采用Distroless提升安全性。
- 部署Kubernetes和Istio确保高可用。
- 集成Prometheus和Grafana实现可观测性。
Java与Docker的结合是云原生开发的理想选择,未来将在Serverless和eBPF方向持续演进。
相关文章:
Java与Docker容器化优化:从核心技术到生产实践
在2025年的云原生与微服务时代,容器化技术已成为企业级应用部署的标准,Docker作为主流容器平台,显著提升了应用的 portability、可扩展性和部署效率。根据CNCF 2024年报告,95%的企业在其生产环境中使用Docker,特别是金…...
QT单例模式简单讲解与实现
单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。在QT开发中,单例模式常用于管理全局资源,如配置管理、日志系统等。 最简单的QT单例实现 方法一:静态局部变量实现(C11及以上…...
Vite Vue3 配置 Composition API 自动导入与项目插件拆分
为了提升开发效率,减少重复引入 ref、reactive、computed 等 Composition API 的繁琐操作,通过 unplugin-auto-import 插件实现自动导入。 1、配置自动导入 1.1 安装插件 npm install -D unplugin-auto-import1.2 配置 vite.config.js import { def…...
React从基础入门到高级实战:React 生态与工具 - React Query:异步状态管理
React Query:异步状态管理 引言 在现代Web开发中,异步数据管理是React应用开发中的核心挑战之一。无论是从远程API获取数据、处理用户交互,还是同步服务器状态,开发者都需要一种高效、可靠的方式来应对这些复杂场景。传统的状态…...

Grafana-Gauge仪表盘
仪表盘是一种单值可视化。 可让您快速直观地查看某个值落在定义的或计算出的最小和最大范围内的位置。 通过重复选项,您可以显示多个仪表盘,每个对应不同的序列、列或行。 支持的数据格式 单值 数据集中只有一个值,会生成一个显示数值的…...
按照状态实现自定义排序的方法
方法一:使用 MyBatis-Plus 的 QueryWrapper 自定义排序 在查询时动态构建排序规则,通过 CASE WHEN 语句实现优先级排序: import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.stereotype.Ser…...

游戏引擎学习第313天:回到 Z 层级的工作
回顾并为今天的内容定下基调 昨天我们新增了每个元素级别的排序功能,并且采用了一种我们认为挺有意思的方法。原本计划采用一个更复杂的实现方式,但在中途实现的过程中,突然意识到其实有个更简单的做法,于是我们就改用了这个简单…...
论文阅读:arxiv 2024 SmoothLLM: Defending LLMs Against Jailbreaking Attacks
SmoothLLM: Defending LLMs Against Jailbreaking Attacks 总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 https://www.doubao.com/chat/6961264964140546 https://github.com/arobey1/smooth-llm https://arxiv.org/pd…...

Milvus部署架构选择和Docker部署实战指南
导读:向量数据库作为AI时代的核心基础设施,Milvus凭借其强大的性能和灵活的架构设计在市场中占据重要地位。然而,许多开发者在部署Milvus时面临架构选择困惑和配置复杂性挑战,导致项目进展受阻。 本文将为您提供一套完整的Milvus部…...

高效合并 Excel 表格实用工具
软件介绍 这里介绍一款用于 Excel 合并的软件。 使用反馈与工具引入 之前推荐过 Excel 合并工具,但有小伙伴反馈这些工具对于需要合并单元格的 Excel 文件不太适用,而且无法合并表头。鉴于这些问题,找到了今天要介绍的这款 Excel 合并工具…...
【前端】Vue3 中实现两个组件的动态切换保活
在 Vue3 中实现两个组件的动态切换保活,核心是通过 <component> 动态组件与 <KeepAlive> 缓存组件的组合使用。以下是具体实现方案和进阶技巧: 一、基础实现方案 1. 动态组件 KeepAlive 保活 使用 <component :is> 实现动态切换&am…...

拉取gitlab项目
一、下载nvm管理node 先下载配置好nvm,再用nvm下载node 下载链接:开始 下载nvm - nvm中文官网 情况:npm i 下载依赖缓慢,可能是node版本不对,可能node版本太高 可能得问题:使用nvm 下载低版本的node时,…...

树莓派(Raspberry Pi)安装Docker教程
本章教程,主要介绍如何在树莓派上安装Docker。 一、安装步骤 # 卸载旧版本(如果有): for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg;...

计算机视觉---YOLOv4
YOLOv4(You Only Look Once v4)于2020年由Alexey Bochkovskiy等人提出,是YOLO系列的重要里程碑。它在YOLOv3的基础上整合了当时最先进的计算机视觉技术,实现了检测速度与精度的显著提升。以下从主干网络、颈部网络、头部检测、训练…...

在雄性小鼠自发脑网络中定位记忆巩固的因果中枢
目录 简要总结 摘要 1 引言 2 方法 3 结果 简要总结 这篇文章主要研究了雄性小鼠在自发脑网络中记忆巩固的因果中枢定位。记忆巩固涉及学习后休息和睡眠期间全脑网络的自发重组,但具体机制尚不清楚。目前理论认为海马体在这一过程中至关重要,但其他…...

刷机维修进阶教程-----没有开启usb调试 如何在锁定机型的拨号界面特殊手段来开启ADB
有时候我们会遇到一些机型被屏幕锁 账号锁等锁定。无法进入系统界面。也没有开启usb调试的情况下如何通过一些操作来开启adb调试。然后通过adb指令来禁用对应的app顺利进入系统。以此来操作保数据等操作. 通过博文了解💝💝💝 1💝💝💝----了解一些品牌机型锁定状态…...

Selenium 测试框架 - Kotlin
🚀Selenium Kotlin 实践指南:以百度搜索为例的完整测试示例 随着测试自动化的普及,Selenium 已成为 Web 自动化测试的事实标准,而 Kotlin 凭借其简洁语法和高安全性,越来越受到开发者欢迎。本指南将通过一个完整的实战案例——在百度中执行搜索操作,来展示如何使用 Sele…...
docker运行centos提示Operation not permitted
在使用Docker运行CentOS容器时,遇到"Operation not permitted"错误,通常是由于权限问题或容器安全策略引起的。以下是详细的排查和解决步骤: 步骤一:检查Docker版本和系统更新 首先,确保你的Docker和系统软…...

010501上传下载_反弹shell-渗透命令-基础入门-网络安全
文章目录 1 上传下载2 反弹shell命令1. 正向连接(Forward Connection)正向连接示例(nc) 2. 反向连接(Reverse Connection)反向连接示例(反弹 Shell) 对比表格实际应用中的选择防御建…...

Flask集成Selenium实现网页截图
先看效果 程序实现的功能为:截取目标网址对应的页面,并将截取后的页面图片返回到用户端,用户可自由保存该截图。 支持的url参数如下: url:目标网址(必填项),字符串类型,…...
机顶盒CM311-5s纯手机免拆刷机,全网通,当贝桌面
需要用到的工具 安卓手机一台 甲壳虫adb助手(安卓app) OTG转换线一个(或者用usb,typec双头的U盘一个,未测试) 8g U盘一个 用到的刷机文件 1.放入手机中的文件 misc recovery 2. 放入U盘根目录 upda…...

知识图谱:AI时代语义认知的底层重构逻辑
在生成式人工智能(GEO)的技术架构中,知识图谱已从辅助性工具演变为驱动机器认知的核心神经中枢。它通过结构化语义网络的重构,正在突破传统数据处理的线性逻辑,建立机器对复杂业务场景的深度理解能力。 一、语义解构&a…...
centos7安装MySQL(保姆级教学)
在 Linux 系统的软件管理中,YUM(Yellowdog Updater, Modified)包管理器是不可或缺的工具,而 YUM 源的选择与配置直接影响着软件安装与更新的效率。本文将深入解析网络 YUM 源的分类,详细介绍如何使用知名平台提供的 YU…...
2025.5.23 【ZR NOI模拟赛 T3】高速公路 题解(容斥,高维前缀和,性质)
非常牛的题,记录一下思路。 传送门 题意 有一张 n n n 个点的无向图,每个点有一个颜色 c i c_i ci,满足 c i ∈ [ 1 , k ] c_i \in [1, k] ci∈[1,k]。 图是由 m m m 条链组成,满足任意一个点恰好只在一条链上。对于一…...

QGIS新手教程2:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出)
QGIS新手教程:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出) 目录 QGIS新手教程:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出)📌 引言第一部分࿱…...
nova14 ultra,是如何防住80°C热水和10000KPa水压冲击的?
暴雨突袭,手忙脚乱护住背包,却担心手机被雨水浸湿;泳池里想记录美好时刻,却担心手机掉入水中 ;厨房里充满了高温水汽,近距离拍摄美食瞬间,手机屏幕花屏,让人失去了对美食的兴趣…… …...
Spring Boot项目中实现单点登录(SSO)完整指南
单点登录(Single Sign-On, SSO)是一种身份验证机制,允许用户使用一组凭证(如用户名和密码)登录多个相关但独立的系统。 一、单点登录的核心原理 SSO的核心原理使集中认证、分散授权,主要流程如下: 1.用户访问应用A 2.应用A检查本地会话&a…...

Windows环境下Redis的安装使用与报错解决
最近在做项目的时候需要用到Redis,本来没觉得是什么麻烦,下载安装使用一步到位的事,但紧随而来的问题,让我开始怀疑人生,再加上代码跑不出来,我还专门找人给我看看怎么个是,结果就是单纯的Redis…...

鸿蒙完整项目-仿盒马App(一)首页静态页面
跟着鸿蒙小林博主,练习下项目~记录下首页的搭建,后续继续完善和整体项目完成会进行布局修改,先按照博主的跟做,后续在改 1.分为底部整体框架搭建 2.首页布局(顶部搜索、新人专享、金刚区(两个不同集合数据)…...
大模型(4)——Agent(基于大型语言模型的智能代理)
大模型Agent是一种基于大型语言模型(LLM)的智能系统,能够自主感知环境、规划任务、调用工具并完成复杂目标。其核心原理是将大模型的推理能力与外部行动能力结合,实现从“思考”到“行动”的闭环。以下是其原理详解与实现方法&…...