Spring Cloud与Service Mesh集成:Istio服务网格实践
文章目录
- 引言
- 一、Spring Cloud与Service Mesh概述
- 二、Istio服务网格架构
- 三、Spring Cloud与Istio集成的基础设施准备
- 四、服务发现与负载均衡
- 五、流量管理与弹性模式
- 六、安全通信与认证授权
- 七、可观测性集成
- 八、配置管理集成
- 总结
引言
微服务架构已成为现代分布式系统的主流设计模式。Spring Cloud作为Java生态系统中的微服务框架,提供了丰富的工具集用于构建分布式应用。而Service Mesh(服务网格)作为下一代微服务架构,通过将服务通信基础设施从应用代码中分离出来,实现了业务逻辑与通信逻辑的解耦。本文将探讨如何将Spring Cloud与Istio服务网格进行集成,以充分发挥两者的优势,构建更加健壮、可观测且易于管理的微服务系统。
一、Spring Cloud与Service Mesh概述
Spring Cloud是基于Spring Boot构建的微服务框架,提供了服务发现、配置管理、断路器、API网关等功能组件。Service Mesh则是一个基础设施层,用于处理服务间通信,提供服务发现、负载均衡、流量管理、安全通信等能力。Istio是目前最流行的开源Service Mesh实现之一,它通过控制平面和数据平面的结构,为微服务提供了全方位的治理能力,而无需修改应用代码。
Spring Cloud与Service Mesh并非竞争关系,而是可以协同工作的技术栈。Spring Cloud专注于应用层面的微服务框架和开发模式,而Service Mesh更关注基础设施层面的服务间通信和治理。将两者结合,可以取长补短,构建更加完善的微服务生态系统。
以下是Spring Boot应用的基本配置示例:
// 一个简单的Spring Boot应用示例
@SpringBootApplication
public class MicroserviceApplication {public static void main(String[] args) {// 启动Spring Boot应用SpringApplication.run(MicroserviceApplication.class, args);}@Beanpublic RestTemplate restTemplate() {// 创建用于服务间通信的RestTemplatereturn new RestTemplate();}
}
二、Istio服务网格架构
Istio服务网格由控制平面和数据平面两部分组成。控制平面包含Istiod,负责服务发现、配置管理和证书管理;数据平面则由部署在每个服务旁的Envoy代理(sidecar)组成,负责处理所有进出服务的网络流量。
Istio的核心功能包括流量管理、安全通信、策略执行和可观测性。通过Istio,可以实现细粒度的流量控制、服务间的TLS加密通信、访问控制策略,以及服务调用的全链路追踪和监控。Istio的这些功能都是通过配置实现的,无需修改应用代码。
以下是Istio中定义虚拟服务的示例配置:
# Istio VirtualService配置示例
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: order-servicenamespace: default
spec:hosts:- order-service # 服务名称http:- route:- destination:host: order-servicesubset: v1 # 路由到v1版本weight: 90 # 90%的流量- destination:host: order-servicesubset: v2 # 路由到v2版本weight: 10 # 10%的流量
三、Spring Cloud与Istio集成的基础设施准备
要将Spring Cloud应用与Istio集成,需要先准备好Kubernetes集群并安装Istio。Kubernetes是容器编排平台,为Istio提供了运行环境。Istio可以通过Istioctl命令行工具或Helm图表进行安装。
在Kubernetes集群中部署Spring Cloud应用时,需要将应用容器化,创建Deployment和Service资源。通过添加特定的注解,可以让Istio自动注入Envoy代理到应用Pod中。这样,应用的所有网络流量都会被Envoy代理拦截和处理,从而实现Istio的各种功能。
以下是Spring Boot应用的Dockerfile示例:
# Spring Boot应用的Dockerfile示例
FROM openjdk:11-jdk
WORKDIR /app
COPY target/microservice-0.0.1-SNAPSHOT.jar app.jar
# 暴露应用端口
EXPOSE 8080
# 启动应用
ENTRYPOINT ["java", "-jar", "app.jar"]
下面是Kubernetes部署配置示例:
# Kubernetes Deployment配置示例
apiVersion: apps/v1
kind: Deployment
metadata:name: order-servicelabels:app: order-service
spec:replicas: 2selector:matchLabels:app: order-servicetemplate:metadata:labels:app: order-serviceannotations:sidecar.istio.io/inject: "true" # 启用Istio Sidecar自动注入spec:containers:- name: order-serviceimage: myregistry/order-service:1.0.0ports:- containerPort: 8080
四、服务发现与负载均衡
Spring Cloud通常使用Eureka或Consul进行服务发现,而在与Istio集成时,可以利用Kubernetes的服务发现机制和Istio的智能路由能力。Spring Cloud应用可以通过Kubernetes Service进行服务注册,Istio则负责服务发现和负载均衡。
在这种架构下,Spring Cloud应用可以简化配置,不再需要启用Eureka客户端或配置Ribbon。应用可以通过Kubernetes Service名称直接访问其他服务,Istio会自动处理服务发现、负载均衡和重试逻辑。
以下是Spring Cloud应用配置示例:
# application.yml配置示例
spring:application:name: order-servicecloud:kubernetes:enabled: true # 启用Spring Cloud Kubernetesdiscovery:enabled: true # 启用Kubernetes服务发现
在服务调用代码中,可以直接使用服务名称:
// 使用RestTemplate进行服务调用
@Service
public class ProductService {private final RestTemplate restTemplate;public ProductService(RestTemplate restTemplate) {this.restTemplate = restTemplate;}public Product getProductById(Long id) {// 直接使用Kubernetes服务名称访问String url = "http://product-service/api/products/" + id;return restTemplate.getForObject(url, Product.class);}
}
五、流量管理与弹性模式
Istio提供了强大的流量管理能力,包括请求路由、流量分割、超时控制和重试策略等。这些功能可以替代Spring Cloud中的Ribbon和Hystrix组件。通过Istio的VirtualService和DestinationRule资源,可以实现细粒度的流量控制。
Istio的断路器功能可以替代Spring Cloud Hystrix,提供服务间调用的弹性能力。此外,Istio还支持故障注入,用于测试服务的弹性。这些功能都是通过配置实现的,无需修改应用代码。
以下是Istio断路器配置示例:
# Istio DestinationRule断路器配置
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:name: product-service
spec:host: product-servicetrafficPolicy:connectionPool:tcp:maxConnections: 100 # 最大连接数http:http1MaxPendingRequests: 10 # 最大待处理请求数maxRequestsPerConnection: 10 # 每个连接的最大请求数outlierDetection:consecutive5xxErrors: 5 # 连续5次5xx错误触发断路interval: 5s # 检测间隔baseEjectionTime: 30s # 最小驱逐时间maxEjectionPercent: 50 # 最大驱逐比例
六、安全通信与认证授权
Spring Cloud通常使用Spring Security实现应用层面的安全控制,而Istio则提供了服务网格层面的安全能力。Istio可以自动为服务间通信启用mTLS(双向TLS),确保通信安全。Istio还支持基于JWT的身份验证和基于角色的访问控制。
将Spring Security与Istio结合使用,可以实现从应用到基础设施的全面安全保障。Spring Security负责用户认证和应用内授权,Istio负责服务间的安全通信和访问控制。
以下是Spring Security配置示例:
// Spring Security配置示例
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/api/public/**").permitAll() // 公开API.antMatchers("/api/admin/**").hasRole("ADMIN") // 管理员API.anyRequest().authenticated() // 其他请求需要认证.and().oauth2ResourceServer().jwt(); // 使用OAuth2/JWT认证}
}
以下是Istio认证策略配置示例:
# Istio认证策略配置
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:name: defaultnamespace: default
spec:mtls:mode: STRICT # 强制服务间通信使用mTLS
七、可观测性集成
Spring Cloud提供了Spring Boot Actuator用于应用监控,而Istio则提供了服务网格层面的可观测性能力,包括分布式追踪、指标收集和日志管理。通过将Spring Boot Actuator与Istio的可观测性组件集成,可以实现从应用到基础设施的全面监控。
Spring Boot应用可以集成OpenTracing或OpenTelemetry,与Istio的分布式追踪系统(如Jaeger或Zipkin)对接。Prometheus可以收集应用和Istio的指标,Grafana用于可视化,Kiali用于服务网格的可视化和管理。
以下是Spring Boot应用集成OpenTracing的示例:
// Spring Boot集成OpenTracing示例
@Configuration
public class TracingConfig {@Beanpublic Tracer jaegerTracer() {// 配置Jaeger Tracerreturn new Configuration("order-service").withSampler(new Configuration.SamplerConfiguration().withType("const").withParam(1)).withReporter(new Configuration.ReporterConfiguration().withLogSpans(true)).getTracer();}
}// 在服务方法中使用Tracer
@Service
public class OrderService {private final Tracer tracer;public OrderService(Tracer tracer) {this.tracer = tracer;}public Order createOrder(OrderRequest request) {// 创建SpanSpan span = tracer.buildSpan("createOrder").start();try (Scope scope = tracer.scopeManager().activate(span)) {// 添加标签span.setTag("userId", request.getUserId());// 业务逻辑Order order = new Order();// ...return order;} finally {span.finish();}}
}
八、配置管理集成
Spring Cloud Config提供了统一的配置管理,而Kubernetes ConfigMap和Secret也提供了配置管理能力。在与Istio集成时,可以使用Spring Cloud Kubernetes来访问Kubernetes的配置资源,实现配置的统一管理。
Istio还提供了EnvoyFilter资源,用于自定义Envoy代理的配置。通过EnvoyFilter,可以实现更加细粒度的流量控制和安全策略。这些配置的变更不需要重启应用,Istio会自动将配置下发到Envoy代理。
以下是Spring Cloud Kubernetes配置示例:
// 使用Spring Cloud Kubernetes读取ConfigMap
@Configuration
@ConfigurationProperties(prefix = "app")
public class AppConfig {private String property1;private String property2;// Getter和Setter方法// ...
}
对应的Kubernetes ConfigMap:
# Kubernetes ConfigMap示例
apiVersion: v1
kind: ConfigMap
metadata:name: order-service
data:application.yml: |app:property1: value1property2: value2
总结
Spring Cloud与Istio服务网格的集成为微服务架构带来了新的可能性。Spring Cloud专注于应用层面的微服务框架和开发模式,提供了丰富的开发工具和编程模型。Istio则关注基础设施层面的服务间通信和治理,提供了强大的流量管理、安全通信和可观测性能力。将两者结合,可以构建更加健壮、可观测且易于管理的微服务系统。在实践中,可以保留Spring Cloud的编程模型和开发便利性,同时利用Istio提供的服务网格能力。开发人员可以专注于业务逻辑开发,而将服务通信、安全和可观测性交给Istio处理。这种方式既降低了开发复杂度,又提高了系统的可管理性和可靠性。
相关文章:
Spring Cloud与Service Mesh集成:Istio服务网格实践
文章目录 引言一、Spring Cloud与Service Mesh概述二、Istio服务网格架构三、Spring Cloud与Istio集成的基础设施准备四、服务发现与负载均衡五、流量管理与弹性模式六、安全通信与认证授权七、可观测性集成八、配置管理集成总结 引言 微服务架构已成为现代分布式系统的主流设…...
Day109 | 灵神 | 148.排序链表 | 归并排序
Day109 | 灵神 | 148.排序链表 | 归并排序 148. 排序链表 - 力扣(LeetCode) 以下是灵神的题解,笔者认为这题只要可以看懂就好了 两种方法:分治和迭代 文章目录 Day109 | 灵神 | 148.排序链表 | 归并排序前置题目方法一&#x…...
[更新完毕]2025东三省C题深圳杯C题数学建模挑战赛数模思路代码文章教学: 分布式能源接入配电网的风险分析
完整内容请看文章最下面的推广群 分布式能源接入配电网的风险分析 摘要 随着可再生能源渗透率的不断提升,分布式光伏发电在配电网中的大规模接入给传统电力系统运行带来了新的挑战。光伏发电固有的间歇性和波动性特征,加之配电网拓扑结构的复杂性&…...
ActiveMQ 集群搭建与高可用方案设计(二)
五、高可用方案设计与优化 (一)Zookeeper 在 ActiveMQ 集群中的应用 作用:在 ActiveMQ 集群中,Zookeeper 扮演着至关重要的角色。它主要用于选举 Master 节点,通过其内部的选举机制,从众多的 ActiveMQ Br…...
多协议 Tracker 系统架构与传感融合实战 第六章 多传感器时钟同步与数据对齐
第六章 多传感器时钟同步与数据对齐 摘要 本章围绕多源传感融合系统中——尤其是 IMU 与 UWB——的时钟同步与数据对齐问题展开,系统介绍: 硬件时钟源类型及漂移特性 软件校准策略:NTP/PTP 与自定义心跳同步 多源时钟同步算法:两阶段对齐与漂移补偿 数据缓冲与双队列对齐架…...
【算法基础】插入排序算法 - JAVA
一、算法基础 1.1 什么是插入排序 插入排序是一种简单直观的排序算法,它的工作原理类似于我们打牌时整理手牌的过程。插入排序的核心思想是将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的适当位置。 1.…...
#Paper Reading# DeepSeek-R1
论文题目: DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 论文地址: https://arxiv.org/pdf/2501.12948 论文发表于: arXiv 2025年1月 论文所属单位: DeepSeek 论文大体内容 本文提出DeepSeek-R1模型,主要是以DeepSeek-V3[…...
HTML与CSS实现风车旋转图形的代码技术详解
在前端开发中,HTML和CSS是构建网页的基础技术。通过巧妙运用HTML的结构搭建和CSS的样式控制,我们能够实现各种精美的视觉效果。本文将对一段实现旋转图形效果的HTML和CSS代码进行详细解读,剖析其中的技术要点。 一、运行效果 HTML与CSS实现风…...
AWS在跨境电商中的全场景实践与未来生态构建
AWS在跨境电商中的全场景实践与未来生态构建 一、核心应用场景与技术赋能 1. AI驱动运营效率革命 • 智能选品与市场分析:通过Amazon SageMaker机器学习平台,跨境电商企业可构建精准选品模型。陕西自贸试验区案例显示,AI对亚马逊等平台销…...
AWS云服务深度技术解析:架构设计与最佳实践
作为全球市场份额占比32%的云服务提供商(Synergy Research 2023数据),AWS的技术体系已成为企业级应用架构的标杆。本文将深入剖析AWS核心技术组件的实现原理,并附可落地的架构设计范式。 AWS云服务器:中国企业出海的“…...
130. 被围绕的区域
题目链接:130. 被围绕的区域 思路:使用两遍dfs,第一遍找到可以被替换区域的可进入点并记录,第二遍就从所有的可进入点入手遍历区域内所有点并替换。 这是我的思路,感觉还是挺新颖的(应该很少有人这样想我…...
【Linux】进程优先级与进程切换理解
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、进程优先级 1. 什么是进程优先级 2. 为什么有进程优先级 3. 进程优先级的作用 4. Linux进程优先级的本质 5. 修改进程优先级 二、进…...
数据分析与可视化实战:从鸢尾花到乳腺癌数据集
数据分析是现代数据科学中不可或缺的一部分,它帮助我们理解数据、发现模式并做出明智的决策。本文将分享两个实战案例:鸢尾花数据集分析和乳腺癌数据集预处理,展示如何使用Python进行数据探索和可视化。 鸢尾花数据集分析 数据加载与基本统…...
怎样提升社交机器人闲聊能力
怎样提升社交机器人闲聊能力 本文聚焦社交机器人闲聊能力,指出闲聊在社交中意义重大,当前大语言模型(LLMs)驱动社交机器人闲聊存在不足。通过实验评估ChatGPT-3.5、Gemini Pro和LLaMA-2等LLMs闲聊表现,发现其与人类闲聊存在差异。 为此提出基于观察者模型的反馈重定向方…...
图论之幻想迷宫
题目描述: 幻象迷宫可以认为是无限大的,不过它由若干个 NM 的矩阵重复组成。矩阵中有的地方是道路,用 . 表示;有的地方是墙,用 # 表示。LHX 和 WD 所在的位置用 S 表示。也就是对于迷宫中的一个点(x,y),如…...
数学实验Matlab
一、Matlab语言环境和线性代数实验 1.Matlab语言环境 Matlab简介 Matlab:Matrix Laboratry 矩阵实验室 Matlab 提供了强大的科学计算、灵活的程序设计流程、高质量的图形可视化与界面设计等功能,被广泛应用于科学计算、控制系统、信息处理等领域的分…...
AI日报 · 2025年5月03日|Perplexity 集成 WhatsApp,苹果传与 Anthropic 合作开发 Xcode
1、Perplexity AI 功能更新:新增 WhatsApp 集成与多项优化 Perplexity 于 5 月 2 日发布其每周更新摘要,重点包括新增 WhatsApp 集成,用户现可直接在 WhatsApp 内与 Perplexity AI 交互,显著提升了信息获取的便捷性 [1]。此次更新…...
Maven 实现多模块项目依赖管理
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
【JavaScript-Day 2】开启 JS 之旅:从浏览器控制台到 `<script>` 标签的 Hello World 实践
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
Windows 中使用dockers创建指定java web 为镜像和运行容器
以下是在 Windows 中使用 Docker 创建 Java Web 应用镜像并运行容器的分步指南: 步骤 1:安装 Docker 下载并安装 Docker Desktop for Windows启动 Docker Desktop,确保使用 WSL 2 后端(推荐)或 Hyper-V。 步骤 2&…...
机器人--MCU
MCU MCU(Microcontroller Unit,微控制器) 是机器人的“神经末梢”,负责 实时控制、传感器接口、低层通信 等关键任务。 作用 MCU的核心作用 功能具体任务示例实时控制电机PWM生成、PID调节、紧急制动机械臂关节控制、无人机电调…...
从融智学视域快速回顾世界历史和主要语言文字最初历史证据(列表对照分析比较)
融智学视域下世界历史与语言文字起源对照分析表 以下从融智学五个基本范畴(物、意、文、道、理义法),梳理主要古代文明的文字起源,及其历史证据,并进行跨文明比较: 文明/文字 物(载体…...
JavaScript性能优化实战(8):缓存策略与离线优化
前言 在Web应用中,性能优化不仅仅是关于代码执行速度,还与资源获取和数据持久化密切相关。合理的缓存策略可以显著减少网络请求,提升应用响应速度,同时有效降低服务器负载和用户流量消耗。离线优化则进一步解决了网络不稳定或断网场景下的用户体验问题,为Web应用提供类似…...
quantization-大模型权重量化简介
原文地址 https://towardsdatascience.com/introduction-to-weight-quantization-2494701b9c0c/ https://towardsdatascience.com/4-bit-quantization-with-gptq-36b0f4f02c34/ 权重量化简介 大型语言模型(LLM) 以其庞大的计算需求而闻名。通常,模型的大小是通过将参…...
unity ScriptObject的使用
1.先定义一个类数据类型 [Serializable] public class FoodItemData { public int foodID; // 食物唯一ID public string foodName; // 食物名称 [TextArea(3, 10)] // 多行文本输入 public string description; // 食物描述 pu…...
广义线性模型三剑客:线性回归、逻辑回归与Softmax分类的统一视角
文章目录 广义线性模型三剑客:线性回归、逻辑回归与Softmax分类的统一视角引言:机器学习中的"家族相似性"广义线性模型(GLMs)基础三位家族成员的统一视角1. 线性回归(Linear Regression)2. 逻辑回归(Logistic Regression)3. Softmax分类(Softm…...
Linux时钟与时间API
深入理解 Linux 时钟与时间 API 时间是计算领域的基础概念之一。在 Linux 系统中,精确可靠的时间管理对于系统日志记录、任务调度、网络通信、性能分析、文件系统操作乃至应用程序的正确运行都至关重要。本文将深入探讨 Linux 中的时钟类型、相关的 C API、使用示例…...
闭包(Closure)及其作用和影响
一、闭包是什么 闭包(Closure)指的是一个函数能够记住并访问其词法作用域(lexical scope),即使该函数在其词法作用域之外执行。换句话说,闭包让函数可以“记住”它被创建时的环境。 闭包的核心特…...
toLua笔记
基本 LuaState luaStatenew LuaState(); luaState.Start(); luaState.DoString("xxx"); luaState.DoFile("yyy.lua"); luaState.Require("zzz");//不要加.lua后缀 luaState.CheckTop();//检查解析器栈顶为空 luaState.Dispose(); luaStatenull;…...
20:深度学习-多层感知器原理
深度学习-多层感知器的原理 ------------------常州龙熙机器视觉培训班-课程资料 1.单层感知机 多层感知机是由感知机推广而来,感知机学习算法(PLA: Perceptron Learning Algorithm)用神经元的结构进行描述的话就是一个单独的。 首先了解下单层感知机: b--常量 …...
高频数据冲击数据库的技术解析与应对方案
目录 前言一、问题现象与影响分析1.1 典型场景表现1.2 核心问题分类 二、失效根源深度剖析2.1 架构设计缺陷2.2 缓存策略缺陷 三、解决方案与最佳实践3.1 缓存架构设计3.1.1 分层缓存架构3.1.2 热点数据识别 3.2 缓存策略优化3.2.1 动态过期时间算法3.2.2 缓存更新策略对比 3.3…...
(37)VTK C++开发示例 ---纹理地球
文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 将图片纹理贴到球体上,实现3D地球的效果。 该代码使用了 VTK (Visualization Toolkit) 库来创建一个纹理…...
LeetCode - 1137.第N个泰波那契数
目录 题目 解法 动态规划解法 核心思想 执行流程 具体例子 时间复杂度和空间复杂度 代码 题目 1137. 第 N 个泰波那契数 - 力扣(LeetCode) 解法 动态规划解法 核心思想 动态规划是一种通过将复杂问题分解为更小子问题来解决的算法方法。我将…...
智能决策支持系统的系统结构:四库架构与融合范式
前文我们已经了解了智能决策支持系统的基本概念以及基本构件,接下来我们了解一下系统结构。 有关“智能决策支持系统的基本概念”的内容,可看我文章:智能决策支持系统的基本概念与理论体系-CSDN博客 有关“智能决策支持系统的基本构建”的…...
单片机裸机环境下临界区保护
目录 1、直接中断屏蔽法 2、嵌套计数优化法 3、BASEPRI寄存器应用 4、动态优先级调整策略 5、LDREX/STREX指令应用 6、位带别名区原子访问 7、上下文感知保护 8、中断延迟优化技术 在嵌入式系统开发中,临界区保护是确保系统可靠性的关键技术。本文以ARM Cor…...
【数字电路】第六章 时序逻辑电路
一、时序逻辑电路概述 1.逻辑电路的分类 2.时序逻辑电路的一般结构形式 3.时序逻辑电路的描述方法 4.时序逻辑电路按触发器动作特点分类 5.时序逻辑电路按输出信号特点分类 6.常用时序逻辑电路 二、同步时序逻辑电路的分析 1.同步时序逻辑电路的分析方法 TTL触发器允许输入端…...
Spring Boot的GraalVM支持:构建低资源消耗微服务
文章目录 引言一、GraalVM原生镜像技术概述二、Spring Boot 3.x的GraalVM支持三、适配GraalVM的关键技术点四、构建原生镜像微服务实例五、性能优化与最佳实践总结 引言 微服务架构已成为企业应用开发的主流模式,但随着微服务数量的增加,资源消耗问题日…...
MySQL中的窗口函数
深入理解窗口函数(Window Functions) 窗口函数确实经常用于分组后为行分配序号(如1,2,3…),但它的功能远不止于此。窗口函数是SQL中极其强大的分析工具,可以让你在不减少行数的情况下进行复杂计算。 窗口函…...
WITH在MYSQL中的用法
WITH 子句(也称为公共表表达式,Common Table Expression,简称 CTE)是 SQL 中一种强大的查询构建工具,它可以显著提高复杂查询的可读性和可维护性。 一、基本语法结构 WITH cte_name AS (SELECT ... -- 定义CTE的查询…...
人工智能:如何快速筛选出excel中某列存在跳号的单元格位置?
前提: 电脑上必须提前安装好了【office AI】软件工具 方法如下: 1、打开要操作的excel表格,点击上方的【officeAI】,再点击左边的【右侧面板】按钮,就会出现如下右侧的【OfficeAI助手】 2、在OfficeAI助手的聊天框…...
动态功耗与静态功耗
0 英文缩写 SOI(Silicon on Insulator)绝缘体上硅FET(Field-Effect Transistor)场效应管CMOS(Complementary Metal Oxide Semiconductor)互补金属氧化物半导体 1 功耗分类 CMOS电路功耗主要可以通过如下…...
Webug4.0靶场通关笔记10- 第14关链接注入
目录 第14关 链接注入 1.打开靶场 2.源码分析 3.渗透实战 (1)方法1:跳转外部网页 (2)方法2:获取cookie 4.漏洞防御 本文通过《webug靶场第14关 链接注入》来进行渗透实战。 第14关 链接注入 链接注…...
PyTorch_指定运算设备 (包含安装 GPU 的 PyTorch)
PyTorch默认会将张量创建在 CPU 控制的内存中,即:默认的运算设备为 CPU。我们也可以将张量创建在 GPU 上,能够利用对于矩阵计算的优势加快模型训练。 将张量移动到 GPU 上有两种方法: 使用 cuda 方法直接在 GPU 上创建张量使用 …...
Pytorch-CUDA版本环境配置
Pytorch-CUDA版本环境配置 电脑如果是Windows平台下的Nvidia GPU的用户,需配置Pytorch的CUDA版本,分为三步: 1. 安装或更新NVIDA显卡驱动 官方驱动下载地址: https://www.nvidia.cn/Download/index.aspx?langcn 2. 安装CUDA To…...
力扣:24两两交换链表的节点
目录 1.题目描述: 2.算法思路: 3.代码展示: 1.题目描述: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能…...
SETNX的存在问题和redisson进行改进的原理
首先分布式锁的原理就是当锁不存在时则创建,创建到锁的线程则执行业务。但是在这些操作中会有一些问题,下面是redis命令setNX设置锁的代码片段 if(缓存中有){返回缓存中的数据 }else{获取分布式锁if(获取锁成功){try{查询数据库}finally{释放…...
抽象工厂模式(Abstract Factory Pattern)
很好!你现在已经开始接触设计模式了,而**抽象工厂模式(Abstract Factory Pattern)是一种常用于“创建一系列相关产品”**的经典设计模式。 我会一步步帮你理解: 🧠 一句话解释 抽象工厂模式:提…...
AVIOContext 再学习
这个目前阶段用的不多,暂时不要花费太多精力。 url 的格式不同,使用的传输层协议也不同。这块看代码还没看到自己想的这样。 目前看的信息是:avformatContext 的 io_open 回调函数 在默认情况下叫 io_open_default,在解复用的 av…...
Power Query精通指南1:查询结构设计、数据类型、数据导入与迁移(平面文件、Excel、Web)
文章目录 零、Power Query简介0.1 Power Query 主要功能0.2 Power Query 的优势0.3 Power Query 组件 一、Power Query数据处理基本流程1.1 前期准备1.2 提取1.3 转换1.3.1 Power Query 编辑器界面1.3.2 默认转换1.3.3 自定义转换 1.4 加载1.4.1 自动检测数据类型1.4.2 重命名查…...
Linux 内核升级问题
一、内核升级后启动失败 原因:initramfs 镜像未正确生成或 GRUB 配置错误。 处理步骤如下: 1、进入旧内核启动系统。 2、重新生成 initramfs: sudo dracut -f --regenerate-all 3、更新 GRUB 配置: sudo grub2-mkconfig -o /boo…...