- 博客(159)
- 资源 (1)
- 收藏
- 关注
原创 微服务架构中的API网关:Spring Cloud与Kong/Traefik等方案对比
API 网关方式的核心要点是:所有的客服端和消费端都通过统一的网关接入微服务。统一的入口,协调和管理微服务之间的通信。
2025-03-20 17:11:16
842
原创 Windows 环境下 Docker Desktop + Kubernetes 部署项目指南
注:在启动 Kubernetes 过程中可能会比较慢,或者会下载失败,解决方法有两个,一个是设置中找到 Docker Engine,配置镜像加速器;打开 Docker-Desktop, 确保 Docker 正常运行,然后启动 Kubernetes,打开设置,然后找到 Kubernetes,点击 Enable Kubernetes ,然后点击 Apply & restart。将刚才打包好的镜像推送到远程仓库,我这块使用的是默认的远程仓库 Docker Hub。对应的版本,然后选择对应的分支下载。
2025-01-22 16:49:48
1811
2
原创 Elasticsearch 入门教程
es是一个分布式文档储存中间件,它不会将信息存储为列数据行,而是存储已序列化为JSON文档的复杂数据结构。是基于搜索引擎库所构建的全套搜索功能。使用一种被称为倒排索引的数据结构,该结构支持快速全文搜索。分布式性:能够水平扩展以处理大规模数据,并提供高可用性和容错性。实时性:支持实时索引和查询,适用于需要快速响应的应用场景。全文搜索:提供全文搜索功能,支持多语言、复杂查询和相关性排序等特性。复杂查询:支持复杂的结构化查询和聚合操作,包括范围查询、多字段查询、过滤、分组和统计等。多样化数据类型。
2024-12-31 17:15:46
1020
原创 探索设计模式:原型模式
在面向对象编程中,设计模式是一种通用的解决方案,用于解决软件设计过程中常见的问题。原型模式(Prototype Pattern)作为创建型设计模式的一员,旨在通过复制现有对象来创建新对象,而非通过常规的构造函数。这种模式不仅简化了对象的创建过程,而且在特定情况下还能显著提升性能。
2024-11-20 16:27:36
3027
原创 设计模式之状态模式
OverrideSystem.out.println("当前状态为A,转换到B");@OverrideSystem.out.println("当前状态为B, 转换到A");
2024-11-04 16:56:52
1226
原创 探索设计模式:命令模式
命令模式就是一种行为型设计模式。其核心思想是将请求封装成一个对象,从而使你可以使用不同的请求、队列或者请求日志参数化其他对象,同时支持可撤销的操作。通过命令模式,可以将请求的发起者和接收者完全解耦,提高系统的灵活性和可扩展性。 想象一下,当你在家里使用遥控器控制电视时,你按下遥控器上的“电源”按钮,电视就会开启或关闭。在这个过程中,遥控器(调用者)并不知道电视(接收者)是如何工作的,它只是发送了一个“打开”或“关闭”的请求。命令模式正是基于这样的思路,将请求本身封装成一个对象,这样可以更容易地管理
2024-11-01 17:38:19
1248
原创 Java 多线程的 volatile 和 AQS
Java 内存模型()就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了 Java 程序在各种平台下对内存的访问都能保证效果一致的机制及规范。JMM是一种规范,是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序、处理器会对代码乱序执行等带来的问题。目的是保证并发编程场景中的原子性、可见性和有序性。在 Java 中,为了保证原子性,提供了两个高级的字节指令和 Monitorexit。这两个字节码,在 Java 中对应的关键字就是。
2024-10-25 15:22:49
765
原创 多线程:从线程安全到锁机制
通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想要实现每一个线程都有自己的专属本地变量该如何解决呢?JDK 中提供的类正是为了解决这样的问题。类似操作系统中的TLAB。
2024-10-24 08:15:00
801
原创 深入理解Java多线程:调度、线程池与优化技巧
线程池中的线程已经用完了,无法继续为新任务服务,同时,等待队列也已经排满了,再也塞不下新任务了。:通过复用已创建的线程,降低资源损耗、线程可以直接处理队列中的任务加快响应速度、同时便于统一监控和管理。)的调用都会使当前线程阻塞。该线程将会被放置到该 Object 的请求等待队列中,然后让出当前对。线程将会从等待队列中移除,重新成为可调度线程。它会与其他线程以常规的方式竞争对象同步请求。所拥有的所有的同步请求。任务调度的最小执行单位,每个线程拥有自己独立的。方法,调用之后会强制释放当前对象锁,所以在。
2024-10-24 08:00:00
1071
原创 探索设计模式:观察者模式
观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生变化时,会自动通知所有注册的观察者对象,从而它们能够自动更新自己。最常见的场景就是B站up主和粉丝的关系,up主发布新视频,每一个粉丝都会收到消息,这就是因为使用了观察者模式。使用场景消息发布/订阅系统用户界面组件股票市场监控事件驱动系统确定主题需要提供的方法,如注册观察者、移除观察者和通知观察者。
2024-08-08 17:21:28
1300
原创 探索设计模式:组合模式
在软件设计中,组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示部分-整体的层次结构。这种设计模式使得客户端可以以一致的方式处理单个对象和组合对象,极大地提升了代码的灵活性和可维护性。
2024-07-31 17:53:33
814
原创 23种设计模式之装饰者模式
装饰者模式是一种结构型设计模式,它允许在运行时动态地向对象添加新的功能,而不改变其结构和实现。装饰者模式通过组合来实现功能的扩展,它将功能划分成单一职责的类,并在需要时动态地组合这些功能实例化对象。根据《设计模式:可复用面向对象软件的基础》一书的定义,装饰者模式是:动态地给对象添加一些额外的职责。就增加功能来说,装饰者模式相比生成子类更为灵活。装饰者模式是一种强大的设计模式,它提供了一种灵活、可扩展的方式来动态地为对象添加新功能。
2024-07-01 18:09:32
1419
原创 Python测试框架 pytest : 从零开始的完全指南
pytest最初由 Holger Krekel 创建,于 2004 年首次发布,最初名为py.test。其目标是简化测试编写过程,同时提供强大的功能来满足复杂的测试需求。pytest通过直观的语法自动化的测试发现机制和强大的扩展性迅速获得了开发者的青睐。发展历史2004年pytest首次发布,目标是提供一个简单的、灵活的测试框架。2009年成立,推动pytest的持续发展。2011年 引入插件系统,极大地增强了pytest的灵活性和扩展性。2015年pytest。
2024-06-28 18:22:03
24277
7
原创 领域驱动设计(DDD)深入探究
领域驱动设计(DDD)的概念由Eric Evans在2003年提出,并在他的著作《领域驱动设计:复杂性系统的核心设计》()中系统化。Evans从实际的企业项目中总结出了一套方法论,旨在通过将业务领域的复杂性直接反映在系统设计中,使软件开发更贴近业务本质。在 20 世纪 90 年代末和 21 世纪初,软件开发面临的 一个主要问题是业务逻辑和技术实现之间的“鸿沟”。开发人员通常在设计和实现系统时,无法完全理解或表达业务领域的复杂性。这导致了业务逻辑和系统设计之间的不一致,使得系统难以维护和扩展。DDD。
2024-06-07 17:06:40
929
原创 23种设计模式之策略模式
策略模式,又称政策模式,是行为型设计模式之一。其定义如下:定义一系列算法,把它们一个个封装起来,并且使它们互相替换。本模式使得算法可独立于使用它的客户而变化。策略接口是所有策略类的共同父接口,它定义了所有策略类必须实现的方法。策略模式作为一种行为型设计模式,通过将算法封装成独立的策略类,实现算法的易于扩展和高可维护性,避免了大量的条件分支语句,使得代码更加清晰、简洁。策略模式在排序算法、支付方式、数据压缩、游戏AI行为等场景中广泛应用。
2024-05-27 15:25:39
1093
原创 23种设计模式之代理模式
代理模式属于结构型设计模式,其核心思想是为其他对象提供一种代理以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介的作用,并可以在不改变客户端代码的情况下增强或控制对象的访问。
2024-05-16 17:20:27
2879
4
原创 设计模式之责任链模式
责任链模式 是一种常用的设计模式,属于行为型模式的一种。在责任链模式中,多个对象都有机会处理请求,从而形成一条链:请求从一个对象传递到下一个对象,以此类推。这种模式允许请求的发送者和接收者解耦。在责任链模式中,请求可以被多个对象处理,知道其中一个对象负责处理它为止。
2024-05-06 15:52:32
1274
原创 23种设计模式之建造者模式
将一个复杂对象的构造与它的表示分离,使同样的建造过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是一个负责的对象分解为多个简单的对象,然后一步步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
2024-04-28 18:00:14
1410
原创 MyBatis Dynamic SQL基本使用
该类用于定义表。表定义包括表的实际名称(如果使用,包括模式或目录)。如果需要,可以在select语句中应用表别名。您的表应该通过扩展类来定义。该类用于定义库中使用的列。Java 类型实际的列名(可以在 select 语句中应用别名)JDBC 类型(可选)如果不需要默认类型处理程序,则在 MyBatis 中使用的类型处理程序的名称} } }JDBCType;} } }
2024-04-18 15:56:30
2683
原创 【开发规范】Mapstruct 转换器使用教程
MapStruct是一个代码生成器,它基于约定优于配置的方法,极大地简化了Java bean类型之间的映射实现。生成的映射代码使用普通的方法调用,因此速度快、类型安全且易于理解。MapStruct是一种注释处理器,可插入 Java 编译器,并可用于命令行构建(MavenGradle等)以及您喜欢的集成开发环境。MapStruct使用合理的默认设置,但在需要配置或实施特殊行为时,MapStruct会自动退出。
2024-04-17 18:05:18
2904
原创 React 快速入门:掌握前端开发的核心技能
React的雏形在Facebook内部首次出现。由于当时Facebook的前端代码越来越复杂,开发团队感受到了传统的框架的局限性,开始探索一种更加灵活和高效的前端开发方式。所以React就出现了。
2024-04-11 18:01:30
1389
原创 【BUG 记录】ested exception is org.postgresql.util.PSQLException: ERROR: operator does not exist: intege
基本上就可以锁定问题,枚举转换有问题,正常请开给你,这块应该传递的参数为。如果不想切换版本,那么可以在判断的时候添加。在实际开发过程想使用枚举字段,使用了。方法,并且第二个参数的参数类型为。方式的枚举,结果报错,其中。可以从日志中看到底层调用的是。最后通过查阅资料,发现切换。方法,相当于强制类型转换了。
2024-04-02 18:08:57
1183
原创 【BUG 记录】史诗级 BUG - MYSQL 删库删表却没有备份如何恢复数据
binlog2sql是一个用于解析二进制日志的开源工具。它具有从二进制日志中提取原始SQL语句的功能。它具有从二进制日志生成回滚SQL以进行时间点恢复的功能。
2024-02-26 14:49:19
1325
原创 设计模式之GoF23介绍
设计模式是对软件设计中普遍存在的问题的通用解决方案。它们提供了一种在特定上下文中解决问题的方法,是经过验证的、可复用的设计思想。设计模式不是代码或库,而是一种更高层次的抽象,它帮助开发者更好地组织和理解代码。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的高内聚和低耦合。
2023-12-06 11:52:45
1239
原创 设计模式之模板模式
模板模式是一种基于继承的设计模式,它定义了一个算法的骨架,将某些步骤推迟到子类中实现。这样,可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板模式在一个方法中定义了一个算法的框架,而将一些步骤的具体实现延迟到子类中。定义了算法的框架,包括一个或多个方法,其中的某些方法由子类实现。实现了抽象类中的具体方法,完成算法的各个步骤。模板模式的核心是定义一个算法的骨架,即确定算法执行的步骤和顺序。这样一来,所有子类都会按照相同的模板执行算法,从而确保一致性。
2023-12-06 11:16:20
1945
原创 Angular 从零开始,快速上手
AngularJS诞生于2009年,由 Misko Hevery 等人创建,后为Google所收购。是一款由Google开发优秀的前端JS框架,于2010年首次发,已经被用于Google的多款产品当中。MVVM、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。AngularJS的核心思想是使用MVC()架构模式来构建Web应用程序。在AngularJS出现之前,Web开发中存在许多挑战。
2023-12-04 11:43:38
7349
3
原创 PostgreSQL 入门教程
PostgreSQL是一个功能强大且灵活的开源关系型数据库管理系统。它具有许多优点,如可靠性、可扩展性、安全性和可定制性。本文提供了有关PostgreSQL的历史背景、概念、特点、用法、安装步骤和简单示例的详细介绍。通过深入了解PostgreSQL,您可以更好地利用它的优势来构建高性能和可靠的应用程序。当您熟悉了PostgreSQL的基本概念和用法后,还有许多更深入的特性和功能可以探索。
2023-11-13 11:02:30
2548
原创 2023年开发语言和数据库排行
总之,JS是一门非常重要且灵活的编程语言,广泛应用于Web前端开发、前端框架开发、移动应用开发、游戏开发和数据可视化等领域,随着互联网的快速发展,JS的应用场景不断拓展,并且不断提供更多的解决方案,因此学习JS对于当前和未来的开发工作都有很大的意义。总之,具有诸如高效、并发处理等特点的Go语言,对于网络编程、云计算、大数据处理、区块链开发等场景,都是一种非常优秀的开发语言。综上,由于它的高性能和直接访问硬件的能力,C++在需要处理大量数据、实时性要求高、需要高效率的领域拥有着很强的竞争优势。
2023-11-09 17:32:58
3454
2
原创 Xxl-Job 快速入门
Xxl-Job 是一个轻量级分布式任务调度平台作用Xxl-Job是一个任务调度框架,通过引入Xxl-Job 相关的依赖,按照相关格式撰写代码后,可在其可视化界面进行任务的启动、执行、中止以及包含了日志记录与查询和任务状态监控。理解: 如果将Xxl-Job形容为一个人的话,每一个引入Xxl-Job的微服务就相当于一个独立的人(执行器),而按照相关约定格式撰写的Handler。
2023-10-30 10:30:15
1183
原创 RabbitMQ相关的其他知识点
惰性队列会尽可能的将消息存入磁盘中,而在消费者消费到相应的消息时才会被加载到内存中,它的一个重要的设计目标是能够支持更长的队列,即支持更多的消息存储。
2023-10-24 09:04:46
159
原创 RabbitMQ之发布确认高级
在生产环境中由于一些不明原因,导致 rabbitmq 重启,在 RabbitMQ 重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复。于是,我们开始思考,如何才能进行 RabbitMQ 的消息可靠投递呢?特别是在这样比较极端的情况,RabbitMQ 集群不可用的时候,无法投递的消息该如何处理呢:应 用 [xxx] 在 [08-1516:36:04] 发 生 [ 错 误 日 志 异 常 ] , alertId=[xxx]。由。
2023-09-28 16:03:17
1391
原创 初探微前端
随着互联网应用的不断发展,前端应用变得越来越复杂,功能模块和团队规模也在不断增加。在传统的单体前端架构中,所有功能模块都被打包在同一个前端应用中,这导致了应用的扩展性和可维护性变得非常困难。为了解决这些问题,微前端架构应运而生。🚀 🚀微前端框架是解决大型前端应用复杂性和可扩展性的重要手段之一。通过将前端应用拆分成独立的功能模块,每个模块都可以独立开发、部署和运行,可以提高开发效率、降低团队间的沟通成本,并且使得应用更加稳定和可扩展。目前,已经有一些成熟的微前端解决方案可供选择, 如single-spa。
2023-09-20 17:00:33
393
原创 RabbitMQ之延迟队列
延时队列在需要延时处理的场景下非常有用,使用 RabbitMQ 来实现延时队列可以很好的利用RabbitMQ 的特性,如:消息可靠发送、消息可靠投递、死信队列来保障消息至少被消费一次以及未被正确处理的消息不会被丢弃。另外,通过 RabbitMQ 集群的特性,可以很好的解决单点故障问题,不会因为单个节点挂掉导致延时队列不可用或者消息丢失。当然,延时队列还有很多其它选择,比如利用 Java 的DelayQueue,利用 Redis 的zset,利用Quartz或者利用kafka。
2023-09-07 09:53:54
1768
原创 深入探索Spring框架:解密核心原理、IOC和AOP的奥秘
Spring 框架允许开发者自定义和扩展其功能,以适应不同的业务需求。Bean 后置处理器是 Spring 中的一个重要扩展点,它允许开发者在 Bean 的初始化前加入自定义逻辑。我们可以实现接口,并重写和方法,来对 Bean 进行自定义处理。@Override// 在初始化前的自定义逻辑@Override// 在初始化后的自定义逻辑开发者可以通过接口扩展 Bean 定义,从而在容器启动时动态注册或修改 Bean 定义。这为动态配置提供了便利,例如根据不同的环境注册不同的 Bean 定义。
2023-08-15 11:58:07
519
原创 设计模式之工厂模式
工厂模式是面向对象设计中的重要模式之一,它能够将对象的创建和使用分离,提高代码的灵活性和可维护性。通过简单工厂模式、抽象工厂模式和超级工厂模式,我们可以根据不同的需求来选择合适的模式来创建对象。在实际开发中,根据具体情况选择合适的工厂模式可以使代码更加模块化、可扩展和易于维护。
2023-08-14 16:12:26
884
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人