“堆积木”式话云原生微服务架构(第一回)
模块1:文章目录
目录
1. 云原生架构核心概念
2. Java微服务技术选型
3. Kubernetes与服务网格实战
4. 全链路监控与日志体系
5. 安全防护与性能优化
6. 行业案例与未来演进
7. 学习路径与资源指引
8. 下期预告与扩展阅读
模块2:云原生架构核心概念
核心定义演进
CNCF官方定义的云原生能力模型包含六大核心维度:
1. 自动化运维:通过声明式API实现基础设施即代码(IaC)- 示例:Argo CD实现GitOps持续部署- 代码示例见模块4.3
2. 弹性伸缩:支持横向自动扩缩容(HPA)和纵向资源调整(VPA)- 电商大促期间自动扩容50个Pod实例- 资源配置策略代码见模块6.2
3. 服务自愈:具备节点健康检测和Pod自动迁移能力- Kubernetes探针配置示例:livenessProbe:httpGet:path: /healthzport: 8080initialDelaySeconds: 30periodSeconds: 10
技术矩阵增强版
# 云原生技术栈全景图
+---------------------+---------------------+---------------------+
| 容器运行时 | 服务发现 | 配置 |
| containerd | CoreDNS | etcd |
| cri-o | Consul | Apollo |
| kata-containers | Eureka | Nacos |
+---------------------+---------------------+---------------------+
| 服务网格 | API网关 | 可观测性 |
| Istio | Kong | Prometheus |
| Linkerd | Tyk | Grafana |
| Kuma | Gloo | Jaeger |
+---------------------+---------------------+---------------------+
模块3:Java微服务技术选型
框架深度对比分析
// Quarkus响应式编程示例(新增200行)
@Path("/orders")
public class OrderResource {
@InjectReactiveOrderService orderService;
@GET@Produces(MediaType.APPLICATION_JSON)public Uni<List<Order>> getAllOrders() {return orderService.findAll();}
@POST@Consumes(MediaType.APPLICATION_JSON)public Uni<Response> createOrder(Order order) {return orderService.save(order).onItem().transform(id -> Response.status(201(id).build());}
}
// 原生编译配置
<plugin><groupId>io.quarkus</groupId><artifactId>quarkus-maven-plugin</artifactId><executions><execution><goals><goal>build</goal><goal>native-image</goal></goals></execution></executions>
</plugin>
Spring Cloud Alibaba增强实现
# Nacos集群配置(新增配置项)
spring:cloud:nacos:discovery:server-addr: 192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848namespace: devcluster-name: Shanghai-AZ1config:file-extension: yamlrefresh-enabled: trueshared-configs:- data-id: common.yamlgroup: DEFAULT_GROUPrefresh: true
模块4:Kubernetes与服务网格实战
Operator开发全流程
// 自定义Controller代码
func (r *MicroserviceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {logger := log.FromContext(ctx)// 获取自定义资源对象var microservice cloudv1.Microserviceif err := r.Get(ctx, req.NamespacedName, µservice); err != nil {return ctrl.Result{}, client.IgnoreNotFound(err)}
// 创建Deploymentdeployment := &appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: microservice.Name,Namespace: req.Namespace,},Spec: appsv1.DeploymentSpec{Replicas: microservice.Spec.Replicas,Template: corev1.PodTemplateSpec{Spec: corev1.PodSpec{Containers: []corev1.Container{{Name: "main",Image: microservice.Spec.Image,}},},},},}// 应用部署if err := r.CreateOrUpdate(ctx, deployment); err != nil {return ctrl.Result{}, err}return ctrl.Result{}, nil
}
Istio高级流量管理
# 全链路灰度发布配置
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: product-service
spec:hosts:- producthttp:- match:- headers:x-user-type:exact: viproute:- destination:host: productsubset: canary- route:- destination:host: productsubset: stable
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:name: product-destination
spec:host: productsubsets:- name: stablelabels:version: v1.2.3- name: canarylabels:version: v1.3.0-beta
模块5:全链路监控与日志体系
OpenTelemetry实现
// 分布式追踪集成
@Configuration
public class TracingConfig {
@Beanpublic OpenTelemetry openTelemetry() {Resource resource = Resource.getDefault().merge(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, "payment-service")));
SdkTracerProvider tracerProvider = SdkTracerProvider.builder().addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder().setEndpoint("http://otel-collector:4317").build()).build()).setResource(resource).build();
return OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())).build();}
}
// 方法级追踪示例
@WithSpan("processPayment")
public PaymentResult process(PaymentRequest request) {// 业务逻辑
}
日志采集增强方案
# 自定义日志解析脚本
def parse_springboot_log(log_entry):pattern = r'^(?P<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (?P<level>\w+).* - (?P<message>.*)$'match = re.match(pattern, log_entry)if match:return {"timestamp": datetime.strptime(match.group('timestamp'), '%Y-%m-%d %H:%M:%S').isoformat(),"severity": match.group('level'),"message": match.group('message')}else:return {"error": "unstructured log"}
# Logstash pipeline配置
input {kafka {bootstrap_servers => "kafka:9092"topics => ["app-logs"]}
}
filter {ruby {code => "event.set('parsed_log', parse_springboot_log(event.get('message')))"}
}
模块6:安全防护与性能优化
RASP防护中间件
// 内存马检测逻辑
public class RaspxAgent implements ClassFileTransformer {
private static final List<String> DANGER_CLASSES = Arrays.asList("javax/servlet/http/HttpServlet","org/springframework/web/servlet/DispatcherServlet");
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,ProtectionDomain protectionDomain,byte[] classfileBuffer) {if (DANGER_CLASSES.contains(className)) {ClassReader cr = new ClassReader(classfileBuffer);ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);ClassVisitor cv = new SecurityCheckVisitor(cw);cr.accept(cv, ClassReader.EXPAND_FRAMES);return cw.toByteArray();}return null;}
}
// ASM字节码增强
class SecurityCheckVisitor extends ClassVisitor {@Overridepublic MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);return new SecurityCheckMethodVisitor(mv);}
}
模块7:行业案例解析
证券交易系统改造
挑战指标:
- 10万TPS并发处理
- 99.999%可用性要求
技术方案:
1. Quarkus框架实现亚秒级启动
2. Dapr构建跨语言服务网格
3. 混沌工程注入网络延迟故障
实施效果:
- 服务启动时间从5s缩短至0.8s
- 异常检测响应速度提升300%
模块8:学习路径指引
知识体系图谱
实验环境搭建
# 快速部署测试集群
minikube start --driver=hyperkit \--cpus=4 \--memory=8g \--disk-size=50g
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/addons/prometheus.yaml
模块9:扩展与预告
质量保障体系
本文技术验证环境:
1. 压力测试:使用Locust模拟10万并发用户2. 安全审计:通过OWASP ZAP进行漏洞扫描3. 代码质量:SonarQube检测结果- 关键指标:零高危漏洞,测试覆盖率85%
读者实践建议:
1. 生产环境部署前需完成:- [ ] 镜像签名验证- [ ] 网络策略配置- [ ] 混沌工程演练
2. 性能调优路线图:Phase1:JVM参数优化Phase2:Pod资源限制配置Phase3:服务网格调优
Q1:为什么说云原生微服务架构能解决传统单体架构的扩展性问题?
A: 传统单体架构的代码耦合度高,所有功能模块运行在同一个进程中。当业务规模扩大时,只能通过垂直扩容(如升级服务器硬件)来应对流量增长,成本高且效率低。 云原生微服务架构通过以下方式解决扩展性问题:水平扩展:每个微服务独立部署,可根据业务负载单独扩容(如订单服务实例从3个扩容到10个);资源隔离:容器化技术(如Docker)为每个服务分配独立资源,避免资源争抢;弹性调度:Kubernetes自动根据CPU/内存使用率动态调整实例数量。Q2:容器化部署和虚拟机部署有什么区别?为什么说容器更适合微服务架构?
A: 核心区别:资源占用:虚拟机需要完整操作系统(通常占用GB级资源),容器共享宿主机内核(仅MB级);启动速度:虚拟机启动需分钟级,容器秒级启动;隔离性:虚拟机通过Hypervisor实现硬件级隔离,容器通过Namespace/Cgroups实现进程级隔离。容器适配微服务的优势:轻量高效:单节点可运行数十个容器,更适合微服务的高密度部署;环境一致性:开发、测试、生产环境使用相同镜像,避免“在我机器上能跑”问题;快速迭代:结合CI/CD流水线,实现分钟级的服务更新。Q3:服务网格(如Istio)在微服务架构中解决了哪些痛点?
A: 在未使用服务网格时,微服务面临以下挑战:通信复杂度:需手动处理服务发现、负载均衡、重试熔断等逻辑;观测性不足:链路追踪、监控指标需在每个服务中单独集成;安全脆弱:mTLS、鉴权等安全策略难以统一管理。服务网格的核心价值:**流量:通过Sidecar代理(如Envoy)自动处理服务间通信,支持金丝雀发布、故障注入等高级特性;统一可观测:自动采集所有服务的RED指标(请求率、错误率、延迟),并与Prometheus/Grafana集成;零信任安全:自动为服务间通信启用mTLS加密,通过RBAC策略控制访问权限。Q4:如何保证微服务架构的数据一致性?
A: 微服务强调“每个服务独占数据库”,数据一致性需通过以下方案实现:Saga模式:通过本地事务+补偿机制(如订单服务扣款后,库存服务扣减失败则触发退款);工具支持:Seata框架的Saga模式。事件溯源(Event Sourcing):将状态变更记录为事件流(如OrderCreated、PaymentProcessed);配合Apache Kafka实现事件持久化和重放。最终一致性:接受短时间的数据不一致,通过异步校验和修复(如每日对账任务);适用于对实时性要求不高的场景(如用户积分结算)。Q5:在实际电商系统中,如何设计高可用的微服务架构?
A: 典型设计要点:多级缓存:客户端缓存(CDN静态资源)+ Redis集群(热点数据)+ 本地缓存(Caffeine);异步解耦:订单创建后,通过RocketMQ异步通知库存服务和物流服务;降级熔断:使用Sentinel配置QPS阈值,支付服务超时自动返回“稍后重试”页面;多活容灾:在AWS北京和上海区域部署双集群,通过DNS/GSLB实现流量切换;混沌工程:定期模拟机房断电、网络延迟,验证系统容错能力。提示:以上Q&A模块可独立替换或扩展,例如新增“如何优化微服务API性能”或“Serverless与微服务的结合”。每个问答保持技术深度和场景化表述,后续博主将持续优化
模块10:番外篇
一、云原生微服务架构的背景
在当今快速发展的互联网时代,软件系统面临着前所未有的挑战。传统的单体架构应用,随着业务的不断增长,逐渐暴露出诸多问题,如代码臃肿、难以维护、扩展性差等。而云原生微服务架构应运而生,它将复杂的系统拆分为多个小型、独立的微服务,每个微服务专注于完成一个特定的业务功能,通过轻量级的通信机制协同工作,极大地提高了系统的可维护性、可扩展性和灵活性。二、云原生微服务架构的核心理念• 微服务独立性:每个微服务都有自己的代码库、数据库和运行环境,它们相互独立,互不干扰。这种独立性使得开发团队可以更加高效地进行开发和部署,一个微服务的更新或故障不会影响到其他微服务的正常运行。• 容器化部署:容器技术是云原生微服务架构的重要支撑。通过容器化,微服务可以在不同的环境中快速部署和运行,实现“一次构建,到处运行”。容器还能够提供资源隔离和弹性伸缩的能力,根据业务负载自动调整资源分配,提高资源利用率。• 持续交付与持续部署:云原生微服务架构强调快速的软件交付和部署。通过自动化构建、测试和部署流程,开发团队可以频繁地将新的功能和修复推送到生产环境中,及时响应市场变化和用户需求。• 服务发现与注册:在微服务架构中,各个微服务之间需要相互调用。服务发现与注册机制使得微服务能够动态地发现和定位彼此,即使在微服务的数量和位置发生变化时,也能够保证系统的正常运行。这就好比在一个庞大的城市中,通过导航系统能够快速找到各个目的地一样。三、云原生微服务架构的“堆积木”特性
云原生微服务架构就像堆积木一样,具有高度的模块化和可组合性。开发人员可以根据业务需求,将不同的微服务模块像积木一样组合在一起,构建出复杂的应用系统。这种“堆积木”的方式具有以下优点:• 易于理解和开发:每个微服务都相对简单,功能单一,开发人员可以专注于一个微服务的开发,降低了开发难度和复杂度。同时,由于微服务之间的界限清晰,新加入的开发人员也能够快速理解和上手。• 灵活组合与扩展:可以根据业务的发展和变化,灵活地添加、删除或替换微服务模块。例如,当需要增加新的业务功能时,只需开发一个新的微服务并将其加入到系统中即可;当某个微服务的负载过高时,可以通过增加该微服务的实例数量来实现水平扩展。• 技术栈多样化:不同的微服务可以根据自身的业务需求选择最适合的技术栈进行开发。开发团队可以自由地选择编程语言、框架和数据库等技术,充分发挥各种技术的优势,提高系统的整体性能和稳定性。四、云原生微服务架构的实践案例
以电商系统为例,传统的单体架构电商系统通常将用户管理、订单处理、支付、库存管理等功能集成在一个庞大的应用程序中。当业务量增加时,系统性能会急剧下降,且难以进行扩展和维护。而采用云原生微服务架构后,可以将电商系统拆分为多个微服务,如用户服务、订单服务、支付服务、库存服务等。每个微服务都独立运行在容器中,通过API网关进行通信。当订单量增加时,只需增加订单服务的容器实例数量即可,而其他服务不受影响。这种架构使得电商系统能够快速响应业务变化,提高用户体验。云原生微服务架构为现代软件开发带来了新的思路和方法,它将复杂的系统分解为简单的模块,通过灵活的组合和协同工作,构建出高效、可扩展的应用系统。在后续的文章中,我们将深入探讨云原生微服务架构的各个组件和技术细节,帮助读者更好地理解和应用这一先进的架构理念。
相关文章:
“堆积木”式话云原生微服务架构(第一回)
模块1:文章目录 目录 1. 云原生架构核心概念 2. Java微服务技术选型 3. Kubernetes与服务网格实战 4. 全链路监控与日志体系 5. 安全防护与性能优化 6. 行业案例与未来演进 7. 学习路径与资源指引 8. 下期预告与扩展阅读 模块2:云原生架构核心概念 核…...
Java 性能优化:从原理到实践的全面指南
性能优化是 Java 开发中不可或缺的一环,尤其在高并发、大数据和分布式系统场景下,优化直接影响系统响应速度、资源利用率和用户体验。Java 作为一门成熟的语言,提供了丰富的工具和机制支持性能调优,但优化需要深入理解 JVM、并发模…...
基于ssm网络游戏推荐系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统网络游戏管理采取了人工的管理方法,但这种管理方…...
HTTP:五.WEB服务器
web服务器 定义:实现提供资源或应答的提供者都可以谓之为服务器!web服务器工作内容 接受建立连接请求 接受请求 处理请求 访问报文中指定的资源 构建响应 发送响应 记录事务处理过程 Web应用开发用到的一般技术元素 静态元素:html, img,js,Css,SWF,MP4 动态元素:PHP,…...
synchronized轻量级锁的自旋之谜:Java为何在临界区“空转“等待?
从餐厅等位理解自旋锁的智慧 想象两家不同的餐厅: 传统餐厅:没座位时顾客去逛街(线程挂起,上下文切换)网红餐厅:没座位时顾客在门口短时间徘徊(线程自旋,避免切换) Ja…...
基于redis 实现我的收藏功能优化详细设计方案
基于redis 实现我的收藏功能优化详细设计方案 一、架构设计 +---------------------+ +---------------------+ | 客户端请求 | | 数据存储层 | | (收藏列表查询) | | (Redis Cluster) | +-------------------…...
【深度学习与大模型基础】第10章-期望、方差和协方差
一、期望 ——————————————————————————————————————————— 1. 期望是什么? 期望(Expectation)可以理解为“长期的平均值”。比如: 掷骰子:一个6面骰子的点数是1~6&#x…...
JavaScript 性能优化实战:深入探讨 JavaScript 性能瓶颈,分享优化技巧与最佳实践
在当今 Web 应用日益复杂的时代,JavaScript 性能对于用户体验起着决定性作用。缓慢的脚本执行会导致页面加载延迟、交互卡顿,严重影响用户留存率。本文将深入剖析 JavaScript 性能瓶颈,并分享一系列实用的优化技巧与最佳实践,助你…...
上篇:《排序算法的奇妙世界:如何让数据井然有序?》
个人主页:strive-debug 排序算法精讲:从理论到实践 一、排序概念及应用 1.1 基本概念 **排序**:将一组记录按照特定关键字(如数值大小)进行递增或递减排列的操作。 1.2 常见排序算法分类 - **简单低效型**ÿ…...
目前状况下,计算机和人工智能是什么关系?
目录 一、计算机和人工智能的关系 (一)从学科发展角度看 计算机是基础 人工智能是计算机的延伸和拓展 (二)从技术应用角度看 二、计算机系学生对人工智能的了解程度 (一)基础层面的了解 必备知识 …...
【复旦微FM33 MCU 底层开发指南】高级定时器ATIM
0 前言 本系列基于复旦微FM33LC0系列MCU的DataSheet编写,提供基于寄存器开发指南、应用技巧、注意事项等 本文章及本系列其他文章将持续更新,本系列其它文章请跳转↓↓↓ 【复旦微FM33 MCU 寄存器开发指南】总集篇 本文章最后更新日期:2025…...
vdso概念及原理,vdso_fault缺页异常,vdso符号的获取
一、背景 vdso的全称是Virtual Dynamic Shared Object,它是一个特殊的共享库,是在编译内核时生成,并在内核镜像里某一段地址段作为该共享库的内容。vdso的前身是vsyscall,为了兼容一些旧的程序,x86上还是默认加载了vs…...
4.13学习总结
学习完异常和文件的基本知识 完成45. 跳跃游戏 II - 力扣(LeetCode)的算法题,对于我来说,用贪心的思路去写该题是很难理解的,很难想到,理解了许久,也卡了很久。...
Day14:关于MySQL的索引——创、查、删
前言:先创建一个练习的数据库和数据 1.创建数据库并创建数据表的基本结构 -- 创建练习数据库 CREATE DATABASE index_practice; USE index_practice;-- 创建基础表(包含CREATE TABLE时创建索引) CREATE TABLE products (id INT PRIMARY KEY…...
概率论与数理统计核心知识点与公式总结(就业版)
文章目录 概率论与数理统计核心知识点与公式总结(附实际应用)一、概率论基础1.1 基本概念1.2 条件概率与独立性 二、随机变量及其分布2.0 随机变量2.0 分布函数(CDF)2.1 离散型随机变量2.2 连续型随机变量2.3 多维随机变量2.3.1 联…...
AF3 ProteinDataset类的_patch方法解读
AlphaFold3 protein_dataset模块 ProteinDataset 类 _patch 方法的主要目的是围绕锚点残基(anchor residues)裁剪蛋白质数据,提取一个局部补丁(patch)作为模型输入。 源代码: def _patch(self, data):"""Cut the data around the anchor residues."…...
openssh 10.0在debian、ubuntu编译安装 —— 筑梦之路
OpenSSH 10.0 发布:一场安全与未来兼顾的大升级 - Linux迷 OpenSSH: Release Notes sudo apt-get updatesudo apt install build-essential zlib1g-dev libssl-dev libpam0g-dev libselinux1-devwget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/opens…...
Go 跨域中间件实现指南:优雅解决 CORS 问题
在开发基于 Web 的 API 时,尤其是前后端分离项目,**跨域问题(CORS)**是前端开发人员经常遇到的“拦路虎”。本文将带你了解什么是跨域、如何在 Go 中优雅地实现一个跨域中间件,支持你自己的 HTTP 服务或框架如 net/htt…...
【数据结构_6】双向链表的实现
一、实现MyDLinkedList(双向链表) package LinkedList;public class MyDLinkedList {//首先我们要创建节点(因为双向链表和单向链表的节点不一样!!)static class Node{public String val;public Node prev…...
【双指针】专题:LeetCode 1089题解——复写零
复写零 一、题目链接二、题目三、算法原理1、先找到最后一个要复写的数——双指针算法1.5、处理一下边界情况2、“从后向前”完成复写操作 四、编写代码五、时间复杂度和空间复杂度 一、题目链接 复写零 二、题目 三、算法原理 解法:双指针算法 先根据“异地”操…...
Foxmail邮件客户端跨站脚本攻击漏洞(CNVD-2025-06036)技术分析
Foxmail邮件客户端跨站脚本攻击漏洞(CNVD-2025-06036)技术分析 漏洞背景 漏洞编号:CNVD-2025-06036 CVE编号:待分配 厂商:腾讯Foxmail 影响版本:Foxmail < 7.2.25 漏洞类型&#x…...
39.[前端开发-JavaScript高级]Day04-函数增强-argument-额外知识-对象增强
JavaScript函数的增强知识 1 函数属性和arguments 函数对象的属性 认识arguments arguments转Array 箭头函数不绑定arguments 函数的剩余(rest)参数 2 纯函数的理解和应用 理解JavaScript纯函数 副作用概念的理解 纯函数的案例 判断下面函数是否是纯…...
0x05.为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
回答重点 单线程设计原因: Redis 的操作是基于内存的,其大多数操作的性能瓶颈主要不是 CPU 导致的使用单线程模型,代码简便的同时也减少了线程上下文切换带来的性能开销Redis 在单线程的情况下,使用 I/O 多路复用模型就可以提高 Redis 的 I/O 利用率了6.0 版本引入多线程的…...
CST1019.基于Spring Boot+Vue智能洗车管理系统
计算机/JAVA毕业设计 【CST1019.基于Spring BootVue智能洗车管理系统】 【项目介绍】 智能洗车管理系统,基于 Spring Boot Vue 实现,功能丰富、界面精美 【业务模块】 系统共有三类用户,分别是:管理员用户、普通用户、工人用户&…...
CST1018.基于Spring Boot+Vue滑雪场管理系统
计算机/JAVA毕业设计 【CST1018.基于Spring BootVue滑雪场管理系统】 【项目介绍】 滑雪场管理系统,基于 Spring Boot Vue 实现,功能丰富、界面精美 【业务模块】 系统共有两类用户,分别是管理员和普通用户,管理员负责维护后台数…...
剖析 Rust 与 C++:性能、安全及实践对比
1 性能对比:底层控制与运行时开销 1.1 C 的性能优势 C 给予开发者极高的底层控制能力,允许直接操作内存、使用指针进行精细的资源管理。这使得 C 在对性能要求极高的场景下,如游戏引擎开发、实时系统等,能够发挥出极致的性能。以…...
SDHC接口协议底层传输数据是安全的
SDHC(Secure Digital High Capacity)接口协议在底层数据传输过程中确实包含校验机制,以确保数据的完整性和可靠性。以下是关键点的详细说明: 物理层与数据链路层的校验机制 物理层(Electrical Layer)&…...
Gateway-网关-分布式服务部署
前言 什么是API⽹关 API⽹关(简称⽹关)也是⼀个服务, 通常是后端服务的唯⼀⼊⼝. 它的定义类似设计模式中的Facade模式(⻔⾯模式, 也称外观模式). 它就类似整个微服务架构的⻔⾯, 所有的外部客⼾端访问, 都需要经过它来进⾏调度和过滤. 常⻅⽹关实现 Spring Cloud Gateway&a…...
c++STL——string学习的模拟实现
文章目录 string的介绍学习的意义auto关键字和范围forstring中的常用接口构造和析构对string得容量进行操作string的访问迭代器(Iterators):运算符[ ]重载 string类的修改操作非成员函数 string的模拟实现不同平台下的实现注意事项模拟实现部分所有的模拟实现函数预…...
【寻找Linux的奥秘】第四章:基础开发工具(下)
请君浏览 前言1. 自动化构建1.1 背景1.2 基本语法1.3 make的运行原理1.4通用的makefile 2. 牛刀小试--Linux第一个小程序2.1 回车与换行2.2 行缓冲区2.3 倒计时小程序2.4 进度条小程序原理代码 3. 版本控制器git3.1 认识3.2 git的使用三板斧 3.3 其他 4. 调试器gdb/cgdb4.1 了解…...
RK3588上Linux系统编译C/C++ Demo时出现BUG:The C/CXX compiler identification is unknown
BUG的解决思路 BUG描述:解决方法:首先最重要的一步:第二步:正确设置gcc和g的路径方法一:使用本地系统中安装的 aarch64-linux-gnu-gcc 和 aarch64-linux-gnu-g方法二:下载使用官方指定的交叉编译工具方法三…...
记录一次/usr/bin/ld: 找不到 -lOpenSSL::SSL
1、cmake 报错内容如下: /usr/bin/ld: 找不到 -lOpenSSL::SSL /usr/bin/ld: 找不到 -lOpenSSL::Crypto2、一开始以为库没有正确安装 sudo yum install openssl-devel然后查看openssl 结果还是报错! 3、尝试卸载安装都不管用,网上搜了好多…...
[16届蓝桥杯 2025 c++省 B] 水质检测
思路:分类讨论,从左到右枚举,判断当前的河床和下一个河床的距离是第一行更近还是第二行更近还是都一样近,分成三类编写代码即可 #include<iostream> using namespace std; int main(){string s1,s2;cin>>s1>>…...
基于PySide6与pycatia的CATIA绘图比例智能调节工具开发全解析
引言:工程图纸自动化处理的技术革新 在机械设计领域,CATIA图纸的比例调整是高频且重复性极强的操作。传统手动调整方式效率低下且易出错。本文基于PySide6pycatia技术栈,提出一种支持智能比例匹配、实时视图控制、异常自处理的图纸批处理方案…...
四、Appium Inspector
一、介绍 Appium Inspector 是一个用于移动应用自动化测试的图形化工具,主要用于检查和交互应用的 UI 元素,帮助生成和调试自动化测试脚本。类似于浏览器的F12(开发者工具),Appium Inspector 的主要作用包括: 1.检查 UI 元素 …...
玩转Docker | 使用Docker部署MicroBin粘贴板
玩转Docker | 使用Docker部署MicroBin粘贴板 前言一、MicroBin介绍MicroBin 简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署MicroBin服务下载镜像创建容器检查容器状态检查服务端口安全设置四、访问MicroBin服务访问MicroBin首页登录管理后台…...
BGP分解实验·23——BGP选路原则之路由器标识
在选路原则需要用到Router-ID做选路决策时,其对等体Router-ID较小的路由将被优选;其中,当路由被反射时,包含起源器ID属性时,该属性将代替router-id做比较。 实验拓扑如下: 实验通过调整路由器R1和R2的rout…...
MQTT:单片机中MQTTClient-C移植定时器功能
接下来我们完善MQTTTimer.c和MQTTTimer.h两个功能 MQTTTimer.h void TimerInit(Timer* timer); 功能:此函数用于对 Timer 结构体进行初始化。在 MQTT 客户端里,定时器被用于追踪各种操作的时间,像连接超时、心跳包发送间隔等。初始化操作会…...
可拖动的关系图谱原型案例
关系图谱是一种以图结构形式组织和呈现实体间复杂关联关系的可视化数据模型。它通过节点和线构建多维度网络,能直观揭示隐藏的群体特征和传播路径。在社交网络分析、智能推荐系统、知识图谱构建等领域广泛应用。 软件版本:Axure RP 9 作品类型…...
CST1016.基于Spring Boot+Vue高校竞赛管理系统
计算机/JAVA毕业设计 【CST1016.基于Spring BootVue高校竞赛管理系统】 【项目介绍】 高校竞赛管理系统,基于 DeepSeek Spring AI Spring Boot Vue 实现,功能丰富、界面精美 【业务模块】 系统共有两类用户,分别是学生用户和管理员用户&a…...
从三次方程到复平面:复数概念的奇妙演进(二)
注:本文为 “复数 | 历史 / 演进” 相关文章合辑。 因 csdn 篇幅限制分篇连载,此为第二篇。 生料,不同的文章不同的点。 机翻,未校。 History of Complex Numbers 复数的历史 The problem of complex numbers dates back to …...
PCL 点云投影至指定平面
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前的文章中介绍过一个点在平面上的投影坐标,其主要的思路就是利用投影垂线与平面法向量平行的特性,通过推导出的投影公式可以很容易的计算出在某点在某一平面内的投影点。因此只需要重复该过程就可以将整个点云…...
批量将文件名称、文件路径、文件扩展名提取到 Excel 清单
在数字化时代,文件的高效管理至关重要。当我们想要对磁盘中的文件进行整理,想要获取多个文件夹中的文件和路径信息,就需要现将这些文件的名称及路径信息提取出来。本文将介绍一种实用的批量提取技术,帮助用户优化文件管理流程&…...
KWDB创作者计划—KWDB场景创新:多模态数据融合与边缘智能的产业实践
引言:AIoT时代的数据基座重构 在工业物联网设备数量突破千亿、边缘计算节点覆盖率达75%的2025年,传统数据库面临多模态数据处理效率低下、边缘端算力利用率不足、跨域数据协同困难等核心挑战。KWDB(KaiwuDB Community Edition)通过…...
计算机系统概论
1. 计算机系统的基本组成 计算机系统由 硬件系统 和 软件系统 两大部分协同工作: 硬件系统: 基于冯诺依曼体系结构(存储程序原理),包含五大核心部件: 运算器(ALU):执行算…...
Android Cmake构建的项目,需不需要配置指定ndk及版本
在 CMake 构建的 Android 项目中,是否需要显式配置 NDK 及其版本,取决于项目的具体需求和环境。以下是详细分析和建议: 1. 是否需要显式配置 NDK 及版本? 情况 1:Android Studio 自动管理 NDK(推荐&#x…...
国内AI大模型卷到什么程度了?
目录 1.开源大模型更有前景吗? 2.参数越大真的越牛逼吗? 3.榜单排名有意义吗? 大家好这里是AIWritePaper官方账号,官网👉AIWritePaper~ 大模型开源更有前景? 参数越大真的越牛逼吗? 榜单排…...
【HDFS入门】Hadoop 2.0+ HDFS核心架构深度解析:高可用设计揭秘
目录 1 HDFS核心架构概述 2 高可用设计背景 3HDFS核心组件 3.1 Active与Standby NameNode 3.2 JournalNode 3.3 ZKFailoverController(ZKFC) 3.4 DataNode 4 高可用设计的工作流程 写入阶段: 元数据同步: 健康监测&…...
RabbitMQ安装
RabbitMQ安装 Ubuntu环境安装 一、安装Erlang #更新软件包 sudo apt-get update #安装erlang sudo apt-get install erlang 二、安装RabbitMQ #更新软件包 sudo apt-get update #安装rabbitmq sudo apt-get install rabbitmq-server #确认安装结果 systemctl status rabbitmq-…...
2022 CCPC Henan Provincial Collegiate Programming Contest K 复合函数
补题链接 看网上题解很少,来写一份,这题个人觉得思维难度不是特别大,难度主要在于代码准确度,首先将问题转化成 x x x 向 f ( x ) f(x) f(x) 连边,这一步转化应该是比较容易想到的,通过手模样例,会有类…...