第33周JavaSpringCloud微服务 分布式综合应用
第33周JavaSpringCloud微服务 分布式综合应用
一、分布式综合应用概述
分布式知识体系内容广泛,主要包括分布式事务、分布式锁、RabbitMQ等消息中间件的应用以及跨域问题的解决。
1.1 课程重点内容介绍
-
分布式事务 :在大型项目中普遍存在,是面试中的重要考点。能够全面考虑分布式事务的复杂情况,可以体现候选人的综合技术实力。本课程将详细介绍分布式事务的原理,并通过实操将项目从原本不支持分布式事务升级为支持分布式事务。
- 原理 :分布式事务是指在分布式系统中,为了保证多个操作要么全部成功要么全部失败而采用的一种机制。其核心目标是保证数据的一致性和完整性。
- 难点 :涉及多个服务或数据库,处理复杂,需要全面考虑各种情况,如网络延迟、服务故障等。例如,在微服务架构中,当一个事务涉及多个服务时,如何协调这些服务的事务提交或回滚是一个关键问题。
-
分布式锁 :当项目涉及微服务或多个服务时,普通锁无法满足需求。本课程将介绍分布式锁的原理,主要包括Redis和ZooKeeper两种实现方案,并在学习原理后,在代码中逐步引入并应用分布式锁,测试验证其特点。
- 原理 :分布式锁的目的是在分布式系统中,保证多个服务对共享资源的互斥访问。Redis通过SET NX命令实现分布式锁,ZooKeeper则利用临时顺序节点和监听机制实现分布式锁。
- 难点 :选择合适的实现方案并理解其原理及适用场景,如Redis适合高并发场景,但需要处理锁的过期问题;ZooKeeper适合需要强一致性的场景,但部署和维护相对复杂。
-
RabbitMQ的应用 :介绍RabbitMQ的设计模式,并在项目中应用。重点介绍在Spring Cloud架构中,如何使用MQ实现通信来处理库存问题(如取消订单时库存返还)。
- 原理 :RabbitMQ采用生产者-消费者模式,生产者将消息发送到队列,消费者从队列中获取消息并进行处理。
- 难点 :掌握RabbitMQ的设计模式及在Spring Cloud架构中的通信方式,特别是在微服务架构中如何通过异步通信实现库存返还等业务场景。
-
跨域问题 :在前后端分离的架构中,跨域问题是常见的问题。本课程将使用Docker和Nginx来完成跨域的配置。
- 原理 :跨域问题是由于浏览器的同源策略限制,导致前端页面无法请求其他域名、协议或端口号的资源。通过配置Nginx的请求头,可以解决跨域问题。
- 难点 :了解Docker和Nginx在跨域配置中的作用及具体使用方法,特别是在容器化部署的场景下如何进行跨域配置。
1.2 考点与易混淆点
- 分布式事务与单体事务的区别及复杂性 :分布式事务涉及多个服务或数据库,处理复杂,需全面考虑各种情况。单体事务通常只涉及一个数据库,而分布式事务需要协调多个服务的事务提交或回滚。
- 分布式锁的实现与选择 :Redis和ZooKeeper是常见的分布式锁实现方案,需理解其原理及适用场景。例如,Redis适合高并发场景,但需要处理锁的过期问题;ZooKeeper适合需要强一致性的场景,但部署和维护相对复杂。
- RabbitMQ在分布式系统中的应用 :需掌握RabbitMQ的设计模式及在Spring Cloud架构中的通信方式,特别是在微服务架构中如何通过异步通信实现业务功能。
- 跨域问题的解决方案 :需了解Docker和Nginx在跨域配置中的作用及使用方法,特别是在容器化部署的场景下如何进行跨域配置。
二、分布式事务
2.1 分布式事务章节重点梳理
复习事物的基本概念,包括ACID特性,介绍分布式事务的产生背景、下单流程分析等。
2.1.1 为什么需要分布式事务
随着系统从单体架构升级为微服务架构,数据源从单数据库升级为多数据源,分布式事务应运而生。在下单流程中,涉及两个关键点:一是与商品相关的库存,二是与订单相关的生成订单。这两个点分别属于不同的微服务,传统事务方式无法解决,需分布式事务保证数据一致性和完整性。
- 背景 :微服务架构中,每个微服务通常有自己的数据库,这导致事务的范围不再局限于单个数据库,而是跨越多个服务和数据库。
- 问题 :如果没有分布式事务,在下单过程中,可能会出现库存扣减成功但订单生成失败的情况,导致数据不一致。例如,用户下单成功但库存未正确扣减,可能会导致商品超卖等问题。
2.1.2 2PC理论
两阶段提交协议是分布式事务的经典实践,应用广泛。其成功与失败的表现如下:
- 成功表现 :事务管理器(协调者)逐一询问各服务(如商品服务、订单服务)是否准备好,所有服务均回答 “OK”,事务管理器通知所有服务提交成功。
- 失败表现 :事务管理器询问各服务时,若有服务回答 “否”,则事务管理器发出终止和回滚的指令,所有服务执行回滚操作,恢复事务前的状态。
尽管2PC可以保证分布式事务的原子性,但也存在一些缺点,如性能瓶颈和阻塞问题。性能瓶颈主要体现在事务管理器需要与所有参与事务的服务进行多次通信,增加了网络开销和事务提交的延迟。阻塞问题则是因为在事务的第二阶段,如果某个服务出现故障或网络问题,会导致整个事务被阻塞,无法及时完成。
为了解决这些问题,产生了对2PC的改进方案,如3PC(三阶段提交)。3PC在2PC的基础上进行了优化,引入了超时机制和额外的准备阶段,以避免因网络问题导致的系统卡住。然而,3PC的应用和实践尚不成熟,了解即可。
2.1.3 分布式事务实操
使用Seata框架实现分布式事务的实操,包括引入依赖、配置Seata、数据库操作、订单服务开发、注解修改、抛出异常操作及Postman操作演示等步骤。
2.2 分布式事务原理
分布式事务源于单体应用中的事物概念,在分布式系统中难度增加。重点探讨其原理,包括Seata框架的介绍、主要原理及实现步骤。
2.2.1 Seata介绍
Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。它与微服务场景高度匹配,且满足对简单易用和高性能框架的需求,因此被广泛用于解决分布式事务问题。
- 优势 :Seata具有高性能、易于集成和使用等特点。它可以无缝集成到Spring Cloud等微服务框架中,开发者只需进行简单的配置和注解即可实现分布式事务的功能。
- 应用场景 :适用于需要保证分布式事务一致性的微服务应用,如电商系统中的下单、支付等场景。
2.2.2 Seata主要原理
Seata的内部结构及其原理如下:
-
核心模块 :
- TC(事务协调器) :作为独立服务,维护全局事务状态,为分布式事务奠定基础。它负责协调各个参与事务的服务,确保事务的提交或回滚。
- TM(事务管理器) :位于项目客户端,负责开启整个事务。它向TC请求生成代表全局事务的XID,并将XID传递给各个服务中的RM。
- RM(资源管理器) :管理数据库等资源,如操作订单数据库。它与TC通信并注册,根据TC的指令提交或回滚事务。
-
分布式事务流程 :
- TM开启新事务 :TM启动新事务,并向TC请求生成代表全局事务的XID。
- XID传递 :TM获取XID后,将其逐一传递给各个服务中的RM。
- RM注册至TC :每个RM获取XID后,与TC进行通信并注册。
- 事务决策 :所有服务调用完毕后,TM与TC通信,决定是提交还是回滚事务。
- TC驱动RM操作 :TC根据决策,驱动每个RM提交或回滚其事务。
- 事务完成 :完成上述流程后,分布式事务执行完毕。
2.2.3 Seata实现步骤
要实现对于下单的一个分布式事务的改造,需要经历以下步骤:
- 引入依赖 :引入Spring Cloud的依赖,并根据项目需求调整版本。
- 添加其它配置文件 :在代码中使用properties文件进行配置,或者使用独立服务的默认配置。
- 数据库建表 :在运行时,Seata需要在数据库中创建表来存储事务相关信息。需要手动执行建表语句。
- 启动Seata Server :下载Seata Server的最新版本,解压缩后执行启动脚本。可以使用默认配置,也可以根据需要进行修改。
- 使用Global Transactional :在代码中添加Global Transactional注解,开启分布式事务功能。
三、分布式锁
3.1 什么是分布式锁
分布式锁是在分布式系统环境下的一种锁机制。在单机系统中,锁能够确保在同一服务内资源访问的同步性。然而,在分布式系统中,由于服务部署在不同的节点上,传统的单机锁已无法满足需求,因此引入了分布式锁。
- 主要使用场景 :多个服务需要操作同一共享资源时,且该共享资源具有不允许被同时访问的特性。例如,在高并发场景下,多个服务同时对库存进行扣减操作,需要使用分布式锁保证操作的原子性。
3.2 Redis实现分布式锁
- 获得锁 :使用Redis的SET NX命令。该命令的作用是设置一个值。在Redis中设置值时,若键(key)为空,则设置成功;若键已被设置,则本次SET NX失败,不做任何动作。通过这一原子性操作实现分布式锁的获取。
- 释放锁 :释放锁的操作即删除对应的值。在使用set nx进行标记时,若value设置成功,代表获取锁成功。若要释放锁,直接删除该值即可。
- 过期时间 :在设置分布式锁时,需考虑客户端获取锁后突然故障的风险。若客户端在获取锁后死机,将无法释放锁,导致其他客户端永远无法获取该锁。因此,必须设置锁的超时或过期时间,以避免此类风险。
3.3 ZooKeeper实现分布式锁
分布式锁的实现可以利用ZooKeeper的以下特性:
- 创建临时顺序节点 :这些节点保证有序且自增。
- 监听机制 :当某一节点发生动作时,可以及时监听到。
实现步骤如下:
- 客户端创建顺序节点,创建后判断该节点是否为当前最小节点。
- 若是最小节点,则代表获取锁成功,可执行业务逻辑。执行完业务逻辑后,通过删除该节点来释放锁。
- 若未抢到最小节点,则设置监听机制于上一个节点。当上一个节点被删除时,当前节点被唤醒,尝试获取锁。
四、RabbitMQ的设计模式
4.1 生产者消费者模式
RabbitMQ的设计模式是生产者 - 消费者模式,该模式不仅在面试中常见,而且是RabbitMQ的内在核心逻辑,因此有必要掌握。
4.1.1 代码实现
-
生产者消费者模式 :通过编写生产者、消费者代码来深入理解该模式。
- 主方法 :新建一个BlockingQ实例,它是实现生产者、消费者的核心。BlockingQ实际上是一个具有阻塞功能的队列。当队列满时,再向里面放入元素,会进行等待;如果从队列中取元素,而队列已经为空,取的时候也会进行等待。
- 生产者 :新建一个生产者Producer,它是一个Runnable。生产者通过死循环向队列中放入新的对象,并通过线程启动生产者Runnable。
- 消费者 :新建一个消费者Consumer,它从队列中取数据。消费者也是通过线程启动,并自动从队列中取数据。
-
程序演示 :在代码中,可以看到两种打印输出:生产者已放置和消费者已消费。这两者交替配合,实现了生产者放置数据、消费者消费数据的模式。
4.2 库存返还
库存返还主要在取消订单的时候进行。在单体项目中,可直接调用MA PR实现库存返还。在微服务架构中,无法直接使用MA PR来更新商品库存,因此,考虑使用Fin来实现此功能。通过Fin接口,可以实现与其他模块的通信,从而更新库存。
4.2.1 微服务中MQ方式实现库存返还
实现库存恢复的方式除了传统方法外,还可以通过MQ的方式来实现。本节课将通过MQ异步实现库存更新。
- 取消订单接口分析 :在订单模块中,为订单添加对MQ的依赖。引入spring - boot - starter - amqp的依赖,其group ID是org.springframework.boot。同样,生产者这边也需要引入这个依赖。依赖引入完毕后,进行配置。
- 配置文件配置网络地址 :配置RabbitMQ的地址、用户认证、虚拟机和连接超时设置等。
- 交换机和队列配置 :在项目order中新建一个包,命名为mq。在mq包中新建一个类,命名为MqConfig。在MqConfig类中,指定队列、交换机,并将它们绑定在一起。
- 发送和接收配置 :在MQ的类中,存在发送消息的组件,即message sender。为了发送消息,首先需要引入Amqp Template。定义一个send方法,传入商品ID和库存参数,使用RabbitMQ Template的convertAndSend方法发送消息。在接收端,新建一个包,命名为mq。在该包中,新建一个名为receiver的组件,指定一个listener,并设置rabbit.listener的queue参数。对接收到的消息进行处理,调用product service中的update stock方法更新库存。
五、跨域问题
5.1 跨域概念
跨域的定义包含三个要求:域名要相同、协议要相同、端口号要相同。前端页面在浏览器中可能会请求来自其他网站的内容,这种行为存在安全风险。为了提高安全性,浏览器通常会对跨域进行限制。
- 具体表现 :例如,在im ook网页中请求百度内容,由于域名不同,会被视为跨域;若im ook网页是http协议,而尝试访问https协议的接口,由于协议不同,同样会被视为跨域;若网页端口为80,而尝试访问8080端口,由于端口号不同,也会被判定为跨域。
5.2 实操解决跨域问题
跨域问题的解决实操:需使用docker及Nginx的docker镜像。首先,进入Nginx镜像中进行配置,目的是配置所有请求的返回,并添加请求头以消除跨域问题。
5.2.1 下载nginx镜像
使用docker pull命令下载nginx镜像。若不指定版本,将默认下载最新版本。
5.2.2 启动nginx
使用命令docker run -d -p 8088:80,将本地的8088端口映射到容器内部的80端口。执行后,会生成一个容器ID,表示容器已成功启动。在浏览器中访问localhost:8088,验证是否可以访问到容器内的服务。
5.2.3 进入容器修改配置文件
使用命令docker exec -it 容器ID /bin/bash进入容器内部。
- 装vim :执行APT - get update命令更新包列表,随后使用APT - get install vim命令下载并安装vim编辑器。
- 验证并修改nginx配置文件 :安装完成后,通过执行nginx -t命令测试nginx当前配置文件的正确性。若显示配置文件正确,但不符合预期设置,则需进行修改。使用vim编辑器打开nginx配置文件,定位至文件末尾,发现该配置将特定文件夹下的所有控制文件均加载进来。需进一步进入该文件夹进行配置修改。
5.2.4 修改配置文件
在vim中打开default.conf文件后,定位到location配置区域。针对跨域配置,主要涉及以下三个关键点:
- 添加请求头Access - Control - Allow - Origin :设置为星号(*),表示接受所有来源的请求。
- 配置允许的HTTP方法 :通过Access - Control - Allow - Methods指定,支持的方法包括GET、POST和OPTIONS。
- 设置自定义请求头 :使用Access - Control - Allow - Headers,添加需要允许的请求头,例如jwt token。此外,还可以包含如keep - alive、user - agent等标准请求头。
完成上述配置后,保存配置文件,并使用命令nginx -s reload重新加载配置,以确保配置生效。在重新加载前,需确认当前请求头中未包含刚配置的内容。
5.2.5 重新读取配置文件
按下回车使NGINX重新读取配置文件,并刷新页面,观察是否发生变化。变化后可见,配置中多出了三个请求头:allow headers、allow methods以及allow origin。添加这些请求头后,浏览器会识别并允许跨域,不再进行拦截。
相关文章:
第33周JavaSpringCloud微服务 分布式综合应用
第33周JavaSpringCloud微服务 分布式综合应用 一、分布式综合应用概述 分布式知识体系内容广泛,主要包括分布式事务、分布式锁、RabbitMQ等消息中间件的应用以及跨域问题的解决。 1.1 课程重点内容介绍 分布式事务 :在大型项目中普遍存在,…...
Paramiko 完全指南
目录 Paramiko 概述核心功能与模块框架安装与依赖基础用法与案例详解 SSH 连接与命令执行密钥认证SFTP 文件传输交互式会话端口转发 高级功能与实战技巧常见问题与解决方案总结与资源推荐 1. Paramiko 概述 是什么? Paramiko 是一个纯 Python 实现的 SSHv2 协议库…...
夜莺监控V8(Nightingale)二进制部署教程(保姆级)
夜莺监控部署 前置工作 1. 部署好mysql 2. 部署好redis 3. 部署好prometheus夜莺压缩包下载 本教程基于Centos7系统下的二进制方式部署,先去官网进行压缩包下载 在系统创建/opt/n9etest目录,并将压缩包拖进目录 mkdir /opt/n9etest进入/opt/n9etest࿰…...
鸿蒙应用开发 知识点 官网快速定位表
ArkTS 语言介绍 ArkTS 语言介绍 基础入门 资源分类与访问 添加组件(基础组件) 显示图片 (Image) 按钮 (Button) 单选框 (Radio) 切换按钮 (Toggle) 进度条 (Progress) 视频播放 (Video) 使用文本 文本显示 (Text/Span) 文本输入 (TextInput/TextArea) 使用弹窗 使用弹…...
【神经网络与深度学习】两种加载 pickle 文件方式(joblib、pickle)的差异
引言 从深度学习应用到数据分析的多元化需求出发,Python 提供了丰富的工具和模块,其中 pickle 和 joblib 两种方式在加载数据文件方面表现尤为突出。不同场景对性能、兼容性以及后续处理的要求不尽相同,使得这两种方式各显优势。本文将通过深…...
quickbi finebi 测评(案例讲解)
quickbi & finebi 测评 国产BI中入门门槛比较低的有两个,分别是quickbi和finebi。根据我的经验通过这篇文章做一个关于这两款BI的测评文章。 quickbi分为个人版、高级版、专业版、私有化部署四种。这篇文章以quickbi高级版为例,对quickbi进行分享。…...
vue的生命周期 以及钩子
最早可以在created 时调用后端接口获取数据,因为beforecreated的时候 那个data 都还还是初始化出来 修改数据的时候触发 update 案例1:create 案例2:一进来页面获取搜索框焦点 echarts 饼图渲染 初始化dom后才去准备实例,所以必须要在dom之后…...
Mariadb 防火墙服务器和端口:mysql | 3306
Centos7 Mariadb 理解:Mariadb数据库就类似于我们生活中常见的Excel。 主要工作原理就是我们创造一个数据库其中创造一个数据表再在数据表中输入内容,分为三类。在详细点就是打开Excel(数据库),我们在其中加入…...
爬虫学习笔记(二)--web请求过程
Web请求全过程(重要) 从输入完网址(如输入百度网址)到返回页面以及页面中的数据这一完整的过程发生了什么事情? 服务器端渲染 在服务器端直接把数据和html整合,统一返回给浏览器,在页面源代码…...
开发vue项目所需要安装的依赖包
在开发Vue项目时,通常需要安装以下几个核心依赖包:1、Vue CLI、2、Vue Router、3、Vuex、4、Axios。这些依赖包可以确保你的Vue项目拥有基础的功能和良好的开发体验。接下来,我们将详细介绍每个依赖包的作用、安装方法以及使用案例。 一、VUE…...
Java SE(4)——方法详解
1.方法的概念&使用 1.1 什么是方法? Java中的方法类似于C语言中的函数,是用于执行特定任务的代码块。 那么用方法组织起来的代码块和普通的代码相比有什么优势呢? 1.当代码规模较大且应用场景较为复杂时,方法能够模块化地组…...
网络安全实战指南:从安全巡检到权限维持的应急响应与木马查杀全(命令查收表)
目录 一、安全巡检的具体内容 1. 巡检的频率与目标是什么 2. 巡检的内容是什么以及巡检后如何加固 二、Windows环境下应急响应的主要流程 1. 流程概述及每个步骤详细解释 步骤1:隔离与遏制 步骤2:识别与分析 步骤3:清除与恢复 步骤4…...
Infrared Finance:Berachain 生态的流动性支柱
在加密市场中,用户除了参与一级和二级交易,还有一种低门槛参与的就是空投。从 2021 年 DeFi 成为主流开始,空投一直都是“以小搏大”的机会,通过参与项目早期的链上交互和任务以获取空投奖励,近几年已成为一种广受欢迎…...
Hadoop和Spark大数据挖掘与实战
1.概述 本节将系统讲解大数据分析的完整流程,包括数据采集、预处理、存储管理、分析挖掘与结果可视化等核心环节。与此同时,我们还将对主流数据分析工具进行横向对比,帮助读者根据实际需求选用最合适的工具,提升数据价值挖掘的效…...
TCP vs UDP:核心区别、握手过程与应用场景(附对比图)
🌐 引言 在网络通信中,TCP(传输控制协议)和UDP(用户数据报协议)是两大核心传输层协议。它们各有优劣,适用于不同场景。本文将用图文对比实战示例,帮你彻底理解两者的区别࿰…...
人工智能-深度学习之多层感知器
深度学习 任务任务1任务2任务3 机器学习的弊端多层感知器 (MLP/人工神经网络)MLP实现非线性分类Keras介绍与实战准备Keras or TensorflowKeras建立MLP模型 实战(1): 建立MLP实现非线性二分类实战(2): MLP实…...
Improving Deep Learning For Airbnb Search
解决问题 问题1: 解决推荐酒店与用户实际预定酒店价格存在偏差问题,实际预定比推荐要更便宜: 所以问题为是否更低价格的list更倾向于用户偏好,应该被优先推荐? 1. 该文通过数据分析与模型演进,将模型改造为item sco…...
多模态大型模型,实现以人为中心的精细视频理解
大家看完觉得有帮助记得点赞和关注!!! 抽象 精细理解视频中人类的动作和姿势对于以人为中心的 AI 应用程序至关重要。在这项工作中,我们介绍了 ActionArt,这是一个细粒度的视频字幕数据集,旨在推进以人为中…...
向量数据库Milvus的部署与使用
Milvus介绍 Milvus是一个开源、高性能、高扩展性的向量数据库,Milvus可以用来存储文本、图像、音频等非结构化数据,本质上是用Embeddings将非结构化数据转换成能够捕捉其基本特征的数字向量,然后将这些向量存储在向量数据库中,从…...
1.文档搜索软件Everything 的使用介绍
Everything 是 Windows 文件搜索的效率天花板,通过灵活语法和极速响应,彻底告别「找文件焦虑」。 定位:一款专注于 极速文件名搜索 的 Windows 工具,免费且轻量(安装包仅几 MB)。 核心优势…...
2025系统架构师---论企业集成平台的技术与应用
摘要 本文探讨了企业集成平台的技术与应用,以某商业银行开发的绩效考核平台系统为例,分析了企业集成平台的基本功能及关键技术,并详细阐述了在表示集成、数据集成、控制集成和业务流程集成方面的应用和实施方式。通过异构系统之间的集成,绩效考核平台与其他系统实现了有机…...
STM32Cubemx-H7-16-FreeRTOS-1-创建工程,实现两个灯的基本亮灭
前言 裸机也是开发到一半快要结束了,接下来开始上操作系统,然后先能使用基本的,后面再讲理论。 Cubemx创建工程 基本打开生成就不说了,直接从界面开始 从这里开始吧 1.首先开启外部高速晶振 2.先这样选择 选择HSE时钟环ÿ…...
深入浅出限流算法(二):更平滑的滑动窗口
好的,接续上一篇关于固定窗口计数器的讨论,我们现在来看看它的改进版——滑动窗口算法,它旨在解决固定窗口那个恼人的“临界突变”问题。 在上一篇文章中,我们探讨了最简单的固定窗口计数器限流算法,并指出了它最大的缺…...
纷析云开源财务软件:基于Spring Boot的轻量化财务中台实践
一、技术架构与核心设计 全栈开源技术栈 后端框架:基于Spring Boot 3.x构建,集成MyBatis-Plus作为ORM层,支持JDK 17特性(如虚拟线程并发处理),确保高吞吐与稳定性。 前端框架:采用Vue 3 TypeS…...
软考-软件设计师中级备考 5、数据结构 树和二叉树
1、树的基本概念 节点的度:节点拥有的子树数目。例如,若一个节点有 3 棵子树,其度为 3。树的度:树中节点的最大度数。如树中所有节点的度最大为 4,则树的度是 4。叶子节点:度为 0 的节点,也…...
php 需要学会哪些技术栈,掌握哪些框架
作为一个「野生」程序员,我的学习过程比较急功近利。 我记得自己写的第一个 PHP 程序是留言本。一上来对 PHP 一窍不通,所以直接去网上找了个留言本的源码,下载下来后先想办法让它在自己电脑上运行起来。通过这个过程掌握了 PHP 开发环境的搭…...
短视频矩阵系统贴牌批量剪辑功能开发,支持OEM
一、引言 在短视频行业蓬勃发展的当下,短视频矩阵运营已成为企业和个人实现品牌推广、流量增长的重要策略。然而,面对大量的视频素材和多个运营账号,传统的单个视频剪辑、发布方式效率极低,难以满足矩阵运营的需求。为了提高内容…...
【Java EE初阶】多线程(二)
1.在图中代码,我们调用了start方法,真正让系统调用api创建了一个新线程,而在这个线程跑起来之后,就会自动执行到run。调用start方法动作本身速度非常快,一旦执行,代码就会立即往下走,不会产生任…...
分布式链路追踪理论
基本概念 分布式调用链标准-openTracing Span-节点组成跟踪树结构 有一些特定的变量,SpanName SpanId traceId spanParentId Trace(追踪):代表一个完整的请求流程(如用户下单),由多个Span组成…...
conda和bash主环境的清理
好的!要管理和清理 Conda(或 Bash)安装的包,可以按照以下步骤进行,避免冗余依赖,节省磁盘空间。 📌 1. 查看已安装的包 先列出当前环境的所有安装包,找出哪些可能需要清理ÿ…...
Linux系统管理与编程14:Shell变量及定制bash登录界面
兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 1.准备工作 创建用户wu useradd wu passwd wu 修改权限 chmod uw /etc/sudoers 编辑 visudo 在root行下,添加:“wu ALL……” 图14- 1 恢复文件权限并…...
微信小程序开发笔记
一、首先,下载一个微信开发者工具。前端项目就正常创建,由于本人的前端一塌糊涂,就让AI给我生成了一个我想要的前端项目(包括后面写功能)。 这里开发的时候会用到这个,但是一定注意服务部署到服务器上再本…...
SEO长尾关键词优化核心策略
内容概要 在搜索引擎优化领域,长尾关键词因其精准的流量捕获能力与较低的竞争强度,已成为提升网站自然流量的核心突破口。本文围绕长尾关键词优化的全链路逻辑,系统拆解从需求洞察到落地执行的五大策略模块,涵盖用户搜索意图解析…...
第一节:Linux系统简介
理论知识 Linux的起源与发展:1991 年,芬兰赫尔辛基大学的学生林纳斯托瓦兹受到 Minix 和 Unix 思想的启发,开始编写 Linux 内核。最初,它只是一个个人项目,但随着开源社区的加入,Linux 迅速发展壮大。如今…...
微信聊天机器人搭建 教程/开发
创建标签 简要描述: 添加标签 请求URL: http://域名地址/addContactLabel 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必…...
Ubuntu中C++项目安装二次规划库——qpOASES 库
一、在Ubuntu安装qpOASES 库 步骤 1:更新系统包列表 首先,打开终端,执行以下命令更新系统的包列表,以确保你能获取到最新的软件包信息。 sudo apt update 步骤 2:安装必要的依赖 qpOASES库的编译和安装需要一些基…...
JavaScript-基础语法
前言: 一个网页由三个部分组成: 1.html:超文本标记语言,用于控制网页的结构(页面元素和内容) 2.css:级联样式表,用于控制网页布局,涉及对网页文字,背景,布局进…...
已有 npm 项目,如何下载依赖、编译并运行项目
诸神缄默不语-个人技术博文与视频目录 这篇博文的适用场景是比如说反正你现在有了一个现成的npm项目,然后无论如何,你要把前端挂起来。 文章目录 一、准备工作1. 安装 Node.js 和 npm2. 克隆或获取项目代码 二、安装项目依赖三、了解 npm 脚本命令四、构…...
第四章:Messaging and Memory
Chapter 4: Messaging and Memory 从配置管理到消息记忆:如何让AI记住对话内容? 在上一章的配置管理中,我们已经能让系统记住所有参数设置。但你是否想过:如果用户连续提问“今天天气如何?”和“明天呢?”…...
iPhone闹钟无法识别调休致用户迟到,苹果客服称会记录反馈
iPhone闹钟无法识别调休致用户迟到,苹果客服称会记录反馈 基于 6 个来源 因“五一”劳动节调休,4月27日(周日)本应上班,不少iPhone用户却因闹钟未响迟到,“调休”“当苹果闹钟遇到调休”话题登上热搜。苹…...
npm error code CERT_HAS_EXPIRED
npm error code CERT_HAS_EXPIRED 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主理人 擅长.net、C、python开发, 如果遇到技术问题,即可私…...
C++ 之 【list的简介、list 的构造函数、iterator、容量操作、元素访问、增删查改与迭代器失效】
目录 1.list的介绍 2.list的使用 2.1 构造函数 2.2 iterator 的使用 2.3 容量操作 2.4 元素访问 2.5 增删查改 2.5.1头插头删与尾插尾删 2.5.2 insert 、erase 函数 2.5.3 clear、swap函数 2.5.4 关于find函数 3.迭代器失效 1.list的介绍 (1)list的底层通常实现为带…...
使用手机录制rosbag包
文章目录 简介录制工具录制步骤录制设置设置IMU录制频率设置相机分辨率拍照模式录制模式数据制作获取数据数据转为rosbag查看rosbag简介 ROS数据包(rosbag)是ROS系统中用于记录和回放传感器数据的重要工具,通常用于算法调试、系统测试和数据采集。传统上,rosbag依赖于ROS环…...
使用阿里云 CDN 保护网站真实 IP:完整配置指南
使用阿里云 CDN 保护网站真实 IP:完整配置指南 一、宝塔面板准备工作1. 确认网站部署状态2. 宝塔中检查网站配置 二、配置阿里云 CDN1. 添加域名到 CDN2. 配置 DNS 解析3. 配置成功确认 三、宝塔面板安全加固(隐藏 IP 的关键步骤)1. 禁止通过…...
JAVA-StringBuilder使用方法
JAVA-StringBuilder使用方法 常用方法 append(Object obj) 追加内容到末尾 sb.append(" World"); insert(int offset, Object obj) 在指定位置插入内容 sb.insert(5, “Java”); delete(int start, int end) 删除指定范围的字符 sb.delete(0, 5); replace(int start…...
Milvus(9):字符串字段、数字字段
1 字符串字段 在 Milvus 中,VARCHAR 是用于存储字符串数据的数据类型。定义VARCHAR 字段时,有两个参数是必须的: 将datatype 设置为DataType.VARCHAR 。指定max_length ,它定义了VARCHAR 字段可存储的最大字符数。max_length 的有…...
locust压力测试
安装 pip install locust验证是否安装成功 locust -V使用 网上的教程基本上是前几年的,locust已经更新了好几个版本,有点过时了,在此做一个总结 启动 默认是使用浏览器进行设置的 # 使用浏览器 locust -f .\main.py其他参数 Usage: locust […...
Uniapp:showLoading(等待加载)
目录 一、出现场景二、效果展示三、具体使用一、出现场景 在项目的开发中,我们经常会请求后台接口返回数据,但是每一个接口返回数据的时间不一致,有的快,有的慢,这个时候如果不加一个遮罩层,接口返回慢的时候,非常影响用户体验 二、效果展示 三、具体使用 显示加载框…...
线性代数的本质大白话理解
先一句话总结的如下: 线性代数的本质,就是研究“线性变化”——包括空间中点、向量、矩阵之间如何通过线性规则(加法、数乘)变化和联系,并理解这些变化背后的结构。 1. 向量(Vector)——不是数据…...
【Rust通用集合类型】Rust向量Vector、String、HashMap原理解析与应用实战
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...