- 博客(123)
- 资源 (10)
- 收藏
- 关注
原创 异步任务@Async在多线程场景下的问题
在实际项目中,经常有出现如下场景:前台发起Http请求到后台,后台执行任务时间特别长,页面迟迟收不到后台服务执行结果而会出现卡住情况,操作人无法得知任务真正的执行结果。2、deleteReportDataAsync任务执行时间很长,采用异步任务。1、页面发起Http请求到:evidence/delete/report。注意事项:在异步操作完成后必须调用。,否则会导致多个线程的上下文混淆。
2025-10-23 13:48:48
241
原创 Git命令
8、将当前的工作进度保存到一个 stash 中,并重置工作目录到最近的提交状态。9、将最近的 stash 应用到当前工作目录,并从 stash 列表中移除它。git commit -m "提交说明"4、添加全部修改到暂存区。
2025-09-25 08:37:32
217
原创 应用监控工具Skywalking
Apache Skywalking是一个开源的应用性能监控(Application Performance Monitoring,APM)工具,它提供了实时的、端到端的、基于跟踪的应用程序性能监测。Apache Skywalking是一个跨语言、跨平台的解决方案,支持Java、.NET、Go、Node.js等多种语言,可以在各种不同的部署环境中使用。
2025-08-11 17:15:40
904
原创 Web3.0、区块链、比特币概述
由于有奖励机制,会有大量的人充当记账角色,记账的标准采用:一定时间内只有1个人可以记账成功,通过解决复杂的密码学难题获得记账权(工作量证明),解决密码学难题有一定的随机性和高难度,需要比较强大的计算机资源加上记账可以获得奖励,所以这个记账的过程也是被称为比特币挖矿。比特币是一串数字一串字母,它归属自己所有,不会被他人冻结,没有通货膨胀等问题,比特币的总量是2100万个,它不会是假币,假的一串数字是不能被区块认可的,可以认为要符合一定的加解密规则。区块链是一种去中心化的记录,因其存储数据的方式而得名。
2025-08-06 12:43:51
822
原创 项目架构演进
本文主要介绍项目架构演进过程,从简单的单体架构逐步演进到微服务架构,每种架构简要说明了优缺点。项目架构无所谓好坏,只有适不适合当前的业务,项目架构的标准有很多,本文主要以不同UV指标()来说明不同的架构。UV(Unique Visitor)独立访客,统计1天内访问某站点的用户数(以cookie为依据);访问网站的一台电脑客户端为一个访客。可以理解成访问某网站的电脑的数量。
2025-08-04 16:40:15
456
原创 项目设计文档编写
4、消息(Message):对象之间的交互是通过相互发消息来实现的,箭头上面标出消息名,一个对象可以请求(要求)另一个对象做某件事件。技术架构图是实现业务架构的承接方,识别技术需求,进行技术选型,描述技术之间的关系。主要解决的问题有:技术层面的分层、开发语言、框架的选择;3、控制焦点(Activation):控制焦点代表时序图中的对象执行一项操作的时期,在时序图中每条生命线上的窄的矩形代表活动期。对于复杂的功能,时序图能清晰的描述对象之间发送消息的时间顺序,显示多个对象之间的动态协作。
2025-08-04 15:14:31
730
原创 JAVA面试题集(持续更新)
当要执行的任务多于核心线程数,任务进入等待队列,当等待队列满了后,增加新的线程直到达到最大线程数,当最大线程数满了后,执行拒绝策略,实际工作中往往采用丢弃抛异常或者调用线程处理的策略,当任务不多时,最大线程数大于核心线程数,等待keepAliveTime时间后,就开始销毁线程到核心线程的数量。微服务架构下,实现接口熔断的背景:在高并发的场景下,由于A服务不可用,导致B调用A一直等待,迟迟不能释放资源,进而导致B服务不可用,进而导致CD服务不可用,最终整个项目服务不可用,产生了服务崩塌。
2025-08-01 16:11:11
900
原创 并发编程-CountDownLatch
CountDownLatch是Java并发编程中用于协调多个线程执行顺序的工具类,其核心机制是通过一个共享的计数器控制线程的阻塞与唤醒。它通过计数器来实现,初始值为线程的数量。每当一个线程完成了自己的任务,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已执行完毕,然后在等待的线程就可以恢复执行任务。
2025-07-16 10:46:25
205
原创 并发编程-volatile
可见性(Visibility):可见性确保一个线程对共享变量的修改能被其他线程立即反映出来。实现方式:1、volatile关键字:禁止指令重排序,确保每次访问主存最新值 2、synchronized锁:通过内部同步机制保证变量修改对其他线程可见。原子性(Atomicity):原子性指操作的最小单位不可分割,执行过程中不会被其他线程打断。添加了volatile 修饰flag标识后,主线程修改flag变量后,子线程可以获取到最新的值,程序输出count值(主线程修改后的值80)后,程序break推出。
2025-07-15 17:07:11
383
原创 并发-原子变量类
在多线程环境中,如果多个线程对共享资源同时进行操作的话,很容易出现数据不一致的情况(如并发环境同时对库存扣除,导致余额不对),通常情况下我们会使用synchronized或者Lock同步方式来保证线程安全。示例:对库存余额不加锁,导致余额出错。商品库存总共100,模拟了100个线程扣减库存,线程执行完后,库存余额应该为0,实际并不是,见下方示例代码。为了保证业务的准确性,以下2种方式都可以实现。方式2:通过原子变量修饰库存,使其满足线程安全。运行结果如下,符合预期。运行结果如下,符合预期。
2025-07-15 15:23:13
529
原创 并发-死锁
示例代码演示死锁,示例中有2个共享对象对象A锁、对象B锁,2个线程分别持有这2个对象并且不释放,导致程序永不结束,形成死锁。4、循环等待:存在一个线程-资源的循环等待链,链中的每一个线程持有一个资源并且后续线程又在等待下一个资源。2、占有和等待:一个线程至少持有一个资源,并在等待获取其他资源时不会释放已占有的资源。死锁:是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。1、互斥条件:至少有一个资源必须处于非共享模式,即一次只有一个线程可以使用该资源。
2025-07-14 15:06:18
367
原创 二叉树遍历-层序遍历
二叉树的遍历分为深度优先遍历和广度优先遍历,对于深度优先遍历,前序遍历:A B D H E I J C F G。后序遍历:H D I J E B F G C A。中序遍历:D H B I E J A F C G。运行结果如下,复合预期。
2025-07-14 11:24:42
319
原创 数据结构:栈、队列、链表
栈数据结构特点:先入栈的数据后出,此数据结构常用的方法有:入栈push、出栈pop、查看栈顶元素peek等,下方示例以。队列数据结构特点:先入队列的数据先出,此数据结构常用的方法有:入对enQueue、出对deQueue等,下方示例以。链表数据结构特点:通过前后指针串联起来完整的数据,包含单向链表、双向链表等,下方示例演示。,核心方法有链表插入元素,删除元素,遍历链表等。
2025-07-11 12:46:08
365
原创 MySQL数据库调优
这意味着,如果一个查询的条件能够匹配索引的最左边的列,那么这个索引就会被使用。range:只检索给定范围的行,使用一个索引来选择行。ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,可能会找多个符合条件的行,属于查找和扫描的混合体。主键索引(Primary Key Index):基于主键创建的索引,通常是表中唯一的标识符,叶子节点存储主键及数据。非主键索引(二级索引、辅助索引):基于表中的其他列创建的索引,叶子节点存储索引以及主键。
2025-07-10 16:21:33
1002
原创 对象存储-OSS
相比独立搭建文件服务器,云存储方案有诸多优势:SDK使用简单、运维成本低、图形化的管理控制台、提供强大的文件处理功能、CDN加速、服务扩展简单等,单节点环境下,文件往往存储在tomcat服务器内,随着业务需求的增多,单节点已不能满足需求,项目架构需要扩展到多节点(见下图),此时文件经过nginx转发存储到某一个节点,在分布式架构下对文件的访问就存在问题(文件存储到节点A,查看文件请求到节点B访问不了文件)。如下图所示,1.png文件已经被上传到oss中,rename.png是从oss下载到本地的文件。
2025-07-07 13:53:35
559
原创 接口幂等性
通过jmeter模拟5个线程快速重复提交请求,通过控制台sql发现,只有第一个线程请求更新了数据库记录,其他4个线程没有数据库更新,最终更新次数order_update_count 是1,数据版本是1,接口满足幂等性。3、后台生成支付记录接口(即需要满足业务接口幂等性要求的接口)内部校验token的准确性和时效性,不满足直接抛出异常,认为是前台伪造的token。5、复杂混合操作接口:包含了各种insert、update、delete等操作的接口,操作逻辑参考4,使用token+分布式锁保证接口幂等性。
2025-07-03 18:34:46
990
原创 LVS+Keepalived+Nginx实现前台服务高可用
5、 【129、130】etc创建keepalived配置目录,拷贝配置文件到etc目录下,并修改此文件。【129】的优先级高。在上述架构图中,如果Nginx服务器宕机,那么客户端则无法访问后台服务,6、【129】、【130】分别启动keepalived并测试。4、【129、130】安装keepalived。3、【129、130】分别启动nginx。1、Nginx安装【129、130】,由于129是master,显示129的ip地址。是,显示130的ip地址,实现了前台服务的高可用。
2025-07-02 18:11:37
498
原创 分库分表-ShardingSphere
Apache ShardingSphere 是一款分布式 SQL 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强。它的核心功能有:数据分片、分布式事务、读写分离、联邦查询、数据库加密及脱敏、数据迁移等,本文重点阐述数据分片。在大数据,高并发的场景下,数据库会存在性能瓶颈,需要对数据进行分片处理,比如分库分表处理。在分布式应用场景下,每个服务往往对应独立的数据库,天然进行了分库处理。
2025-07-01 18:03:55
1021
原创 JAVA-JWT
JSON Web Token(JWT)是一个非常轻巧的规范,这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。一个 JWT 实际上就是一个字符串,它由三部分组成,头部、载荷与签名。前两部分需要经过 Base64 编码,后一部分通过前两部分 Base64 编码后再加密而成。JWT组成:Header + Payload + Signature。
2025-06-30 13:52:49
1090
原创 分布式session解决方案
基于上述的代码测试效果如下(后台启动了2个服务,端口分别是8081和8082),1、引入 redis和spring session依赖。2、修改配置,增加对redis和session的支持。3、启动2个应用测试(端口8081和8082),
2025-06-27 15:40:17
396
原创 Kafka
Kafka是一个开源的分布式事件流平台(Event Streaming Platform),被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。它的主要应用场景:实时计算分析、数据同步、消息异步、服务解耦、日志收集等,下图演示通过Kafka实现服务解耦:Kafka有如下核心概念:1、Producer:kafka消息生产者2、Broker:kafka集群中的每个节点,这些节点数据被zookeeper管理3、Consumer:Kafka消息消费者。
2025-06-26 17:28:01
1378
2
原创 ZooKeeper集群安装
目录JDK安装Zookeeper集群安装 ZooKeeper(动物园管理者)简称 ZK,是一个分布式的,开放源码的分布式应用程序协调服务组件,它的应用场景如下: 1、服务注册 2、分布式锁 3、配置管理 4、集群Master 选举 安装zookeeper集群,本文环境信息说明如下:系统CentOS7IP192.168.136.128hostnamexjw128jdk版本jdk1.8.0_181zookeep
2025-06-24 15:00:21
964
原创 Redis
Redis是一个开源的高性能键值存储数据库,它提供了多种数据结构来存储数据。它能提供海量的数据存储访问、数据存储在内存,读取更快。对比维度RedisEhcacheMemcache集群、分布式支持不支持支持数据持久化支持支持不支持。
2025-06-19 16:27:10
717
原创 Elasticsearch
Elasticsearch 是一个开源的分布式搜索和分析引擎,专为速度、扩展和 AI 应用而打造。作为一个检索平台,它可以实时存储结构化、非结构化和向量数据,提供快速的混合和向量搜索,支持可观测性与安全分析,并以高性能、高准确性和高相关性实现 AI 驱动的应用。Elasticsearch 主要适用实时快速的全文搜索场景,它是分布式的,基于Restful分隔的API操作索引文档等,它和数据库(如Mysql)类比如下:Elasticsearch核心的概念:分词、倒排索引、TD/IDF打分、分布式集群。
2025-06-17 12:08:55
989
原创 任务调度框架
在实际项目中,经常有定时任务的需求,如日终报表,定时爬取数据等,实现此类需求,往往需要调度框架来实现。调度框架按照分布式的维度区分,分为非分布式调度和分布式调度。非分布式调度框架有spring内置的Scheduled;分布式调度框架常见的有QuartZ、XXL-JOB、PowerJob。本文主要介绍Scheduled和XXL-JOB。
2025-06-11 11:59:04
993
原创 分布式ID
在复杂的分布式项目中,往往需要对大量的数据或消息进行唯一标识,分布式ID能快速唯一的定位一条消息或数据。分布式ID实现方案有很多,下面简要介绍和比较几种实现方式:1、依赖数据库自增生成:利用MySQL的自增列或Oracle的序列等功能。缺点:在分布式分库分表场景下无法保证ID全局唯一。2、时间戳:ID采用时间戳生成。缺点:在高并发多实例服务场景下(相同的毫秒数生成的ID一样)无法保证ID全局唯一。3、UUID:能保证在高并发多实例服务场景下ID全局唯一。
2025-06-10 10:33:51
909
1
原创 分布式锁-Redisson实现
在分布式环境下,分布式锁可以保证在多个节点上的并发操作时数据的一致性和互斥性。分布式锁有多种实现方案,最常用的两种方案是:zookeeper和redis,本文介绍redis实现分布式锁方案。
2025-06-06 15:25:22
995
原创 spring-boot-admin实现对微服务监控
以blog-user服务为例,此服务添加了actuator的支持。5、启动blog-actuator服务并页面测试服务监控情况。1、添加spring-boot-admin和nacos依赖。2、监控应用启动类注解@EnableAdminServer。3、配置应用信息(服务注册到nacos中)4、启动其他微服务及开启actuator。
2025-06-03 16:26:31
415
原创 配置管理Nacos
Nacos 配置中心支持动态配置更新,无需重启应用,从而使得应用不间断运行。kill掉sentinel-dashboard-1.8.8.jar进程后,重新启动sentinel-dashboard和项目后,流控规则仍然继续生效,不需要重复配置sentinel规则。1、统一管理:对应微服务项目,每个服务都有独立的配置信息,Nacos 配置中心可以集中配置所有服务,提供统一的配置界面和API来进行配置的增删改查。3、支持多环境配置:项目在不同的环境应用程序的配置不同,Nacos 配置中心支持多环境配置管理。
2025-06-03 12:03:50
1175
原创 微服务-Sentinel
Sentinel 控制台是一个独立应用,用于可视化的监控和管理,它可以直接运行可执行的jar,项目使用的jar版本是:sentinel-dashboard-1.8.8,直接运行:java -jar sentinel-dashboard-1.8.8.jar。在高并发的场景下,由于A服务不可用,导致B调用A一直等待,迟迟不能释放资源,进而导致B服务不可用,进而导致CD服务不可用,最终整个项目服务不可用,产生了服务崩塌。针对来源:针对特定的调用方进行限流。例如,服务A调用服务B时,可以针对服务A的调用进行限流。
2025-06-02 11:41:37
1320
原创 网关Gateway
在微服务项目中,没有引入网关时,项目架构如下:引入网关后,架构如下:引入网关后,有如下优势:1、客户端请求经过网关向后台统一分发请求,后台微服务的增加、减少对客户端影响较小2、客户端请求到每个后台微服务,可以经过网关实现统一的鉴权认证3、网关可以对后台微服务做限流管理。
2025-05-29 15:09:43
1039
原创 OpenFeign
3、【blog-api】提供feign接口,其中blog-content 是注册到nacos中的服务名,接口名和参数保持和【blog-content】实现类一致。项目版本用的负载均衡是loadbalancer,在【blog-user】调用openFeign接口时,默认的均衡策略时【轮询】blog-api:对外公布的服务接口,主要是blog-content接口,接口包括:dto和服务接口。blog-user:博客作者模块,通过 blog-api模块远程调用blog-content服务。
2025-05-28 12:12:28
360
原创 服务发现Nacos
1、Namespace :Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。2、GROUP:Nacos可以按照group分组的维度管理服务3、集群:多个服务示例可以放在一个集群中。
2025-05-27 16:48:10
932
原创 Spring Cloud 及Spring Cloud Alibaba 简介
Spring Cloud Alibaba是Spring Cloud的子项目,提供了 微服务开发的一站式解决方案,它符合Spring Cloud标准,是阿里提供的微服务解决方案。Spring Cloud Alibaba提供了一系列功能组件,具体包括:1、服务限流降级:Sentinel2、服务发现与注册:Nacos3、事件驱动:Spring Cloud Stream RocketMQ4、分布式事务:Seata。
2025-05-27 11:35:13
477
原创 Spring boot基础
Spring boot 是完成应用快速开发的脚手架工具,能够快速搭建独立的Spring 应用程序。本文从3个方面介绍Spring boot:快速搭建Spring boot应用、。
2025-05-26 15:14:13
484
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅