- 博客(35)
- 收藏
- 关注
原创 DDD 领域驱动设计
DDD(领域驱动设计,Domain-Driven Design)是一种软件开发方法论和设计思想。DDD 通过领域驱动设计方法定义领域模型,从而确定业务和应用的边界,保证业务模型和代码模型的一致性。DDD 是一种设计思想,确定业务和应用的边界微服务架构需要将系统拆分为多个小而独立的服务微服务的拆分一直是业界的一个难题:微服务拆分的粒度应该多大?服务到底应该如何拆分?服务之间的边界如何定义?有人可能认为,微服务不就是拆就完事了?不需要管那么多!
2025-04-17 00:33:28
547
原创 Java 中的 CompletableFuture:异步编程的强大工具
CompletableFuture 是 Java 8 引入的核心并发工具类,实现了 Future 和 CompletionStage 双接口,在异步编程领域具有里程碑意义。与传统的 FutureTask 不同,它不直接实现 Runnable 接口,而是通过高阶函数和流水线操作提供了更强大的异步编程能力。非阻塞编程模型:通过回调机制避免线程阻塞链式组合能力:支持多个异步任务的流水线处理异常处理机制:提供完整的异常传播和处理方案执行控制灵活性:支持自定义线程池和并行策略。
2025-04-06 19:43:04
702
原创 快速通过简单代码了解装饰模式
装饰模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。以下是一个简单的 Java 实现示例,模拟咖啡店中咖啡的装饰过程。
2025-04-06 08:47:06
314
原创 银行家算法快速入门
比如先看进程 A 的请求,如果满足它,系统剩余资源为库存 3、资金 8、物流运力 3。银行家算法是一种经典的避免死锁的算法,它通过动态地分配资源,确保系统始终处于安全状态,从而有效地预防死锁的发生。进程 C 已分配库存 2、资金 2、物流运力 2,还需要库存 2、资金 3、物流运力 2。在实际订单系统中,库存、资金、运力等资源情况随时变化,银行家算法能动态评估,保障系统稳定运行。假设有一个订单系统,有三个订单处理进程 A、B、C,系统有三种资源:库存(R1)、资金(R2)和物流运力(R3)。
2025-04-05 21:23:21
476
原创 一个示例代码快速了解CompletableFuture的方法
若没有指定Executor,则使用默认的ForkJoinPool.commonPool()作为它的线程池执行异步代码。supplyAsync(Runnable runnable,Executor executor) 有返回值。runAsync (Runnable runnable,Executor executor) 无返回值。supplyAsync(Runnable runnable) 有返回值。runAsync (Runnable runnable) 无返回值。
2025-04-05 20:41:06
120
原创 Vert.x反应式编程快速入门
在一个事件循环中,程序会不断地检查事件队列,如果有新事件到达,就会触发相应处理程序的回调函数来执行。它最核心的作用还是实现了异步处理(回想CompletableFuture),只不过通过一系列API的支持,便于我们更轻松地处理异步数据。事件驱动是一种编程范式,指整个系统的各个组件通过发送和接收事件进行通信和协作,从而实现异步非阻塞IO。这里涉及到一个概念-事件总线,事件总线相当于一个中间人,复杂接受所有的事件,并分发给不同的事件处理者。阻塞:执行一个任务,需要一直等待,期间无法执行其他任务,指导执行完成。
2025-03-23 06:32:02
618
原创 SpringAI QuickStart
AI 模型处理两种主要类型的消息:用户消息,即用户直接输入的内容,和系统消息,即系统生成的用于引导对话的内容。这使得AI 模型能够通过 Function Calling 的机制,动态地调用这个模拟的天气服务,并根据输入参数生成相应的输出结果通过实现 Function 接口,你的函数对象可以在不同的上下文中被灵活地使用和重用。Spring Image Model API 设计为一个简单便携的界面,用于与各种专门的图像生成的 AI 模型进行交互,允许开发者在最小代码更改的情况下切换不同的与图像相关的模型。
2024-11-06 22:27:24
1013
1
原创 Kafka急速入门
生产者从服务器收到的错误有可能是临时性错误,在这种情况下,retries参数的值决定了生产者可以重发消息的次数,如果达到这个次数,生产者会放弃重试返回错误,默认情况下,第二:选择第一个活过来的Replication,不一定是ISR中的,选为leader,以最快速度恢复可用性,但数据不一定完整。如果提交偏移量小于客户端处理的最后一个消息的偏移量,那么处于两个偏移量之间的消息就会被重复处理。如果提交的偏移量大于客户端的最后一个消息的偏移量,那么处于两个偏移量之间的消息将会丢失。
2024-11-01 22:56:22
851
原创 Freemarker快速入门
仅文本信息,这些不是freemarker的注释、插值、FTL指令的内容会被freemarker忽略解析,直接输出内容。${k_index}:得到循环的下标,使用方法是在stu后边加"_index",它的值是从0开始。point是数字型,使用${point}会显示这个数字的值,每三位使用逗号分隔。,即<#-- -->,介于其之间的内容会被freemarker忽略。如果不想显示为每三位分隔的数字,可以使用c函数将数字型转成字符串输出。在freemarker中,判断是否相等,=与==是一样的。
2024-10-26 13:51:21
633
原创 Java版排序算法
3.遍历count数组,根据count数组的索引(即原始数组的元素)以及出现次数,生成排序后内容count数组的索引是:已排序好的。核心思想:每轮找到一个基准点元素,把比它小的放到它的左边,比它大的放到它的右边,这称为分区。2.count数组的索引对应原始数组的元素,用来统计该元素的出现次数。让原始数组的最小值映射到count[0]最大值映射到count最右侧。1.找到最大值,创建一个大小为最大值+1的count数组。前提:待排序元素 >= 0 且最大值不能太大。
2024-10-24 04:18:52
981
1
原创 Elasticsearch快速入门
Lucene是Apache软件基金会Jakarta项目组的一个子项目,提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。但Lucene只是一个提供全文搜索功能类库的核心工具包,而真正使用它还需要一个完善的服务框架搭建起来进行应用。
2024-10-24 04:12:18
965
原创 MongoDB快速入门
MongoDB 是在2007年由DoubleClick公司的几位核心成员开发出的一款分布式文档数据库,由C++语言编写。目的是为了解决数据大量增长的时候系统的可扩展性和敏捷性。MongoDB要比传统的关系型数据库简单很多。在MongoDB中数据主要的组织结构就是数据库、集合和文档,文档存储在集合当中,集合存储在数据库中。MongoDB中每一条数据记录就是一个文档,数据结构由键值(key=>value)对组成。文档类似于 JSON 对象,它的数据结构被叫做BSON。
2024-10-23 08:19:16
1189
原创 Redis通信协议
但目前,默认使用的依然是RESP2协议,也是我们要学习的协议版本(以下简称RESP)。因此客户端发送命令的格式、服务端响应结果的格式必须有一个规范,这个规范就是通信协议。
2024-10-23 05:00:25
584
原创 Redis在实践的关键点
Key本身的数据量过大:一个String类型的Key,它的值为5MBKey中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100 MB那么如何判断元素的大小呢?redis也给我们提供了命令单个key的value小于10KB对于集合类型的key,建议元素数量小于1000Key的最佳实践固定格式:[业务名]:[数据名]:[id]
2024-10-22 07:03:25
819
原创 Redis多级缓存
传统缓存的问题传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,存在下面的问题:多级缓存方案多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Tomcat压力,提升服务性能:多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Tomcat压力,提升服务性能。在多级缓存架构中,Nginx内部需要编写本地缓存查询、Redis查询、Tomcat查询的业务逻辑,因此这样的nginx服务不再是一个反向代理服务器,而是一个编写业务的Web服务器。Tomcat服务将来也会
2024-10-22 04:41:00
943
原创 安装Canal
接下来添加一个仅用于数据同步的账户,出于安全考虑,这里仅提供对heima这个库的操作权限。Canal是基于MySQL的主从同步功能,因此必须先开启MySQL的主从功能才可以。打开mysql容器挂载的日志文件,我的在。再次进入mysql的客户端输入以下语句。docker进入mysql客户端。首先下载canal.tar。重启mysql容器即可。
2024-10-22 04:37:38
599
原创 安装OpenResty
OpenResty® 是一个基于 Nginx的高性能 Web 平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。具备下列特点:具备Nginx的完整功能基于Lua语言进行扩展,集成了大量精良的 Lua 库、第三方模块允许使用Lua自定义业务逻辑、自定义库官方网站:OpenResty® - 开源官方站安装OpenResty的依赖开发库,执行命令:2.安装OpenResty仓库你可以在你的 CentOS 系统中添加 openresty`仓库,这样就可以便于未来
2024-10-22 04:27:43
624
原创 MyBatis Plus
在演示UpdateWrapper的案例中,我们在代码中编写了更新的SQL语句:这种写法在某些企业也是不允许的,因为SQL语句最好都维护在持久层,而不是业务层。就当前案例来说,由于条件是in语句,只能将SQL写在Mapper.xml文件,利用foreach来生成动态SQL。所以,MybatisPlus提供了自定义SQL功能,可以让我们利用Wrapper生成查询条件,再结合Mapper.xml编写SQL。
2024-10-18 03:37:52
1355
原创 CompletableFuture
类架构说明:接口CompletionStage代表异步计算过程中的某一个阶段,一个阶段完成以后可能会触发另外一个阶段。一个阶段的执行可能是被单个阶段的完成触发,也可能是由多个阶段一起触发类CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合CompletableFuture的方法它可能代表一个明确完成的Future,也可能代表一个完成阶段。
2024-10-17 23:09:01
940
原创 Redis实践篇
初始化项目:短信登录基于Session实现登录发送短信验证码 /** * 发送手机验证码 */ @PostMapping("code")
2024-09-08 12:29:17
3181
原创 Redis安装
大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis.此处选择的Linux版本为CentOS 7.Redis的官方网站地址:https://redis.io/
2024-08-29 01:35:01
2192
原创 CoCo 伙伴匹配系统
需求分析用户去添加标签,标签的分类(要有哪些标签,怎么把标签进行分类)主动搜索:允许用户根据标签去搜索其他用户Redis缓存组队创建队伍加入队伍根据标签查询队伍邀请其他人允许用户去修改标签推荐相似度计算算法+本地分布式计算技术栈前端Vue3开发框架(提高页面开发的效率)Vant UI(基于Vue的移动端组件库) (React版Zent)Nginx来单机部署后端 Java编程语言+ SpringBoot框架 SpringMVC + Mybatis +
2024-08-21 18:39:40
661
原创 Java线程
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位。也就是并行:在同一时刻,有多个指令在多个CPU上【同时】执行并发:在同一时刻,有多个指令在单个CPU上【交替】执行同时工作:对于CPU而言,它是多个进程间轮换执行的。
2024-08-21 00:11:56
652
原创 RabbitMQ
一、分布式消息队列中间件连接多个系统,帮助多个系统紧密协作的技术(或者组件)。比如:Redis、消息队列、分布式存储Etcd谈到中间人,我们必须引入一个概念,那就是中间件。什么是中间件?可以将其视为在开发系统或多个应用时,用于连接多个系统或使多个系统紧密协作的工具。常用的中间件包括Redis,消息队列,以及分布式存储如ETCD等。事实上,如果非要定义,数据库也可以被视为一种中间件。例如,假设我们有两个系统,系统A和系统B,他们需要共享同一份数据。这时,我们可以将数据存储在数据库中,这样,数据库
2024-08-20 16:24:42
1118
原创 多环境设计
老弟小阿巴问:写好代码后,直接更新服务器上的网页文件么?我一巴掌抽过去:那万一你的代码有 Bug,不就影响到线上用户的使用了么?老弟思考了下:那写好代码后,在本地测试运行没有问题后,再发布上线?
2024-08-13 14:43:11
309
原创 智析视界项目
问:什么是BI?答:即商业智能(数据可视化、报表可视化系统)1.手动上传数据2.手动选择分析所需要的数据行和列(由数据分析师完成)3.需要手动选择所需的图表类型(由数据分析师完成)4.生成图表并保存配置与传统的BI不同,我们的解决方案允许用户(数据分析者)仅需导入最最最原始的数据集并输入分析目标(例如网站增长趋势),即可利用AI自动生成符合要求的图表和结论,从而显著提高分析效率。
2024-08-10 17:21:31
1118
原创 幂等性设计
在编程场景指的是:使用相同参数来调用同一接口,调用多次的结果跟单次产生的结果是一致的。企业级项目的一些关键接口都需要幂等设计,比如支付扣款、发货等等。设想以下,因为网络问题我们调用扣款接口超时了,并且没有进行重试,这样有可能给用户发货了,但是实际没扣款。因此这种情况下通常要重试扣款。但是如果重试了,假设之前超时的那次调用实际是成功了,只是响应结果的时候接口超时了,这样不是重复扣两次款了?如果你是那个用户,买一个东西,平台竟然扣了两次钱,你肯定会抓狂并且投诉。那如果我们是平台会怎么样?
2024-07-24 20:44:07
850
原创 RxJava响应式编程
RxJava是一个基于事件驱动的、利用可观测序列来实现异步编程的类库,是响应式编程在Java语言上的实现。事件可以是任何事情,如用户的点击操作、网络请求的结果、文件的读写等。事件驱动的编程模型是通过事件触发行动。比如前端开发中,用户点击按钮后会进行弹窗,这就是“点击事件”触发了“弹窗行动”// 前端按钮点击// 弹窗在RxJava中,事件可以被看做是数据流中的数据项,称为“事件流”或”数据流“。每当一个事件发生,这个事件就会被推送给那些对它感兴趣的观察者(Observers)。2.可观测序列。
2024-07-22 16:41:18
652
原创 基于商城项目了解SpringCloud
SpringCloud及SpringCloudAlibaba是目前最流行的微服务技术栈。但大家学习起来的感受就是组件很多,不知道该如何应用。这套《微服务开发与实战》从一个单体项目入手,带领大家从服务拆分时机、服务拆分原则、拆分遇到的问题入手,结合实际项目讲解。带你体会从单体到微服务中碰到的各种问题,并利用SpringCloud和SpringCloudAlibaba中的组件解决这些问题。让你真正了解到微服务组件在项目中的具体应用场景。
2024-06-30 19:03:44
1954
原创 常见Linux命令
vi是Unix和类Unix操作系统中出现的通用的文本编辑器。vim是从vi发展出来的一个性能更强大的文本编辑器,可以主动的以字体颜色辨别语法的正确性,方便程序设计,vim和vi编辑器完全兼容。使用:vi xxx文件 或者vim xxx文件,简单来说,就是用来编辑文件的一个工具,类似于我们再Windows上的一些文本编辑工具,只不过,这里是命令行形式的,不是图形用户界面形式的.接下来我们就准备一个文件,使用VIM对文件进行修改复制一个系统的配置文件到Root目录下,用以联系vim命令。
2024-04-06 23:34:15
934
原创 Bean管理
3.根据name获取bean(带类型转换): T getBean(String name,Class requiredType)2.根据类型获取bean: T getBean(Class requiredType)1.根据name获取bean:Object getBean(String name)@Component及衍生注解与@Bean注解使用场景?@Scope 默认情况下是singleton。可以通过@Scope注解来进行配置作用域。
2024-03-30 23:23:57
431
原创 408预备知识——C语言(从指针开始,纯代码理解)
递归的核心是找公式为什么使用递归?使用递归解决一些问题时,可以让问题变得简单,降低编程难度// 一定要有结束条件return 1;// 写公式int main()int n = 0;printf("n的阶层为:%d", f(n));return 0;
2024-03-20 19:28:24
869
1
空空如也
为什么虚拟机的mysql一旦虚拟机重启就再也连接不上了
2024-11-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人