- 博客(38)
- 收藏
- 关注
原创 我的创作纪念日
作为一名开发者,时常在解决问题的过程中发现新的思路与方法,写作成为了我自我梳理和成长的一部分。在这512天的时间里,最令我欣慰的,是通过创作结识了不少志同道合的朋友。在此过程中,我也在阅读和交流中汲取了他人的经验,不断打磨自己的技术知识。每篇文章的完成,既是对自身能力的提升,也是一种自我激励,督促我在日常中坚持深度学习,记录下每一步的成长。在成为一名专业IT作者的目标下,我会继续探索后端开发的深度和广度,不断提升技术水平,尤其是在JVM、设计模式、接口优化等方面。今天是创作的里程碑,但也是一个新的起点。
2024-10-27 14:09:16 507
原创 工厂设计模式(Factory Pattern)
工厂模式是一种创建型设计模式,旨在通过定义一个接口或抽象类来创建对象,而不需要直接指定对象的具体类。这样可以使得系统在运行时决定要创建的对象类型,从而提高了系统的灵活性和可扩展性。
2024-10-21 16:41:08 567
原创 单例设计模式(Singleton Pattern)
单例模式的核心思想是将类的构造函数私有化,从而禁止外部创建该类的实例。通过提供一个静态方法,用户可以获取类的唯一实例。这样,类的实例在整个应用程序的生命周期内始终保持唯一性。
2024-10-21 16:39:15 475
原创 MySQL中幻读与不可重复读的区别
幻读主要关注于同一条件查询时新增的记录,导致结果集发生变化。不可重复读主要关注于同一记录的值在不同读取中发生变化。这两个现象都是在事务处理过程中需要考虑的重要问题,尤其是在需要保持数据一致性的应用场景中。通常,选择合适的事务隔离级别(如可重复读、Serializable 等)可以有效避免这些问题。
2024-10-11 16:02:58 461
原创 Spring Cloud Stream 入门与 RocketMQ 集成实践
是 Spring Cloud 生态系统中的一个子项目,专注于为构建基于消息驱动的微服务提供统一的编程模型。它通过抽象底层的消息中间件(如 Kafka、RabbitMQ、RocketMQ 等),帮助开发者更轻松地使用这些中间件,并专注于业务逻辑的实现,而不必担心具体的底层实现细节。通过 Spring Cloud Stream 与 RocketMQ 的集成,开发者可以简化消息驱动微服务的开发流程。
2024-09-14 17:52:16 805
原创 深入理解 JWT、OAuth2 和 Spring Security 的特性及其相互关系
JSON Web Token (JWT) 是一种开放标准(RFC 7519),用于在网络应用环境中以紧凑、安全的方式传递声明。头部(Header):包含令牌类型(通常是 “JWT”)和签名算法(如HS256负载(Payload):包含声明(Claims),可以是注册声明(如subexp)、公共声明或私有声明。签名(Signature):用来验证令牌的完整性,防止数据篡改。OAuth2 是一个授权框架,允许用户通过授权服务器授权第三方应用访问其资源,而无需直接暴露用户的凭据。
2024-09-14 17:00:31 1109
原创 深入了解 Lombok 的 `@SneakyThrows` 注解
是 Lombok 提供的一个注解,用于简化对受检异常的处理。当你在方法上使用这个注解时,你可以绕过 Java 编译器的异常检查,不需要显式地声明或处理那些受检异常。在使用 注解时,Lombok 会在编译时生成额外的字节码,以处理受检异常。这些字节码会将受检异常(如 )捕获,并将其包装成运行时异常()重新抛出。因此,你不需要在方法签名中声明这些异常,也不需要在调用方法时进行异常处理。具体而言,Lombok 会在编译期间将带有 注解的方法转换为以下形式:不使用 的示例:使用 的示例: 的优缺点
2024-09-07 14:12:39 276
原创 RocketMQ 的 Message Queue 日志管理
RocketMQ 通过CommitLog和IndexFile等日志文件,形成了一个完整的消息存储、消费和检索的管理体系。CommitLog 负责消息的持久化存储,是消息安全性的根基;ConsumeQueue 通过索引加快了消息消费的速度,提高了系统的整体吞吐量;IndexFile 则提供了多种消息查找的可能性,增强了系统的灵活性。RocketMQ 作为一款强大的分布式消息中间件,其消息队列的日志管理机制为系统的高性能和高可靠性提供了坚实的基础。
2024-09-04 12:16:32 747
原创 深入理解 Spring Cloud Stream:功能介绍与消息队列结合详解
Spring Cloud Stream 提供了一个强大的平台,用于构建灵活的消息驱动微服务架构。它通过统一的抽象层简化了与消息中间件的交互,使得开发者可以专注于业务逻辑,而不必担心底层的消息传递细节。无论是处理复杂的消息流、实现事件驱动的架构,还是进行日志收集和任务调度,Spring Cloud Stream 都能提供灵活和可靠的解决方案。
2024-09-03 13:29:33 703
原创 MySQL的各种常用日志介绍
MySQL 的各类日志在不同的应用场景中发挥着重要作用,从性能优化、错误诊断、数据恢复到安全审计,它们是数据库管理员日常运维的关键工具。了解和合理配置这些日志,可以显著提升数据库的可靠性、性能和安全性。
2024-08-28 13:21:36 671
原创 深入理解 MySQL 中的 CASE 语法:`CASE WHEN` 和 `CASE xxx WHEN`
CASE WHEN和都是处理条件逻辑的强大工具。前者灵活多变,适用于复杂的布尔判断;后者简单优雅,适合对单个字段的多值比较。理解并掌握这两种语法,可以帮助你在编写 MySQL 查询时更加得心应手。
2024-08-25 10:43:56 416 1
原创 Spring Boot开发中常用的注解详解
在Spring Boot开发中,注解是非常重要的组成部分,它们简化了开发过程,提高了代码的可读性和可维护性。
2023-08-07 16:01:14 162
原创 死锁:多线程编程中的隐患与解决方案
死锁是指两个或多个线程彼此持有对方所需的资源,并且在等待对方释放资源时陷入无限循环的状态,导致所有线程无法继续执行。死锁通常发生在并发环境中,涉及多个线程同时访问共享资源。互斥条件:每个资源只能被一个线程占用。请求与保持条件:线程已经持有至少一个资源,并且在请求新的资源。不可剥夺条件:线程已经获得的资源在未经其允许的情况下不能被其他线程强行抢占。循环等待条件:多个线程形成一个环路,每个线程都在等待下一个线程所持有的资源。
2023-08-05 14:09:32 165
原创 Java线程中sleep()和wait()的区别
在多线程编程中,理解这两个方法的区别和正确使用它们是保证线程安全和正确同步的关键。都是用于线程间的控制和同步,但它们的用途和行为有很大的区别。
2023-08-05 13:52:38 351
原创 Java线程状态
Java线程可以处于不同的状态,每种状态表示线程的不同行为和状态。Java线程状态由Thread类中的枚举类型来表示。NEW(新建):线程刚被创建,但尚未启动。RUNNABLE(可运行):线程可以在Java虚拟机中执行,可能正在执行,也可能在等待调度运行。BLOCKED(阻塞):线程被阻塞,通常是因为它正在等待一个监视器锁(synchronized关键字)。WAITING(等待):线程在等待另一个线程采取特定操作。它会一直等待,直到其他线程显式地唤醒它。
2023-08-05 13:44:57 103
原创 数据库不同索引类型的异同点
聚集索引决定了表中数据的物理排序,一个表只能有一个聚集索引,而非聚集索引在单独的结构中保存索引并指向实际数据的位置。有些索引类型只能单独使用(如主键索引),而有些可以与其他索引类型一起使用(如唯一索引和非聚集索引)。数据更新性能:指该类型索引在数据插入、更新和删除时的性能表现。聚集索引通常是最快的,而其他索引性能根据查询条件的复杂性和数据分布情况而异。不同类型索引适用于不同的查询和数据需求,根据具体情况选择合适的索引类型。主键索引和唯一索引都要求索引列的值是唯一的,而其他类型索引不要求唯一性。
2023-08-04 19:18:30 131
原创 Tomcat在Spring Boot企业级项目中的配置最佳实践
Tomcat是Java世界中最流行的Servlet容器之一,而在Spring Boot企业级项目中,它担当着处理HTTP请求和响应的重要角色。在这篇博客中,我们将探讨如何在Spring Boot项目中配置Tomcat的最佳实践,以优化性能、确保安全性,并提高应用程序的可靠性。我们将为每个配置选项给出一个简单的示例代码,展示如何在或文件中实现该配置。我们还将为每个配置选项给出一些最佳实践和建议,帮助您优化您的Tomcat环境。
2023-07-25 14:11:20 577
原创 MySQL-日志类型
MySQL是一个开源的关系型数据库管理系统,它提供了多种日志文件来记录数据库的活动和状态,以便于监控、调优、备份和恢复等操作。
2023-07-25 13:18:26 115
原创 MySQL-binlog日志类型及比较
MySQL的二进制日志(binlog)是一种记录数据库所有修改操作的日志文件,它可以用于数据恢复、复制和审计等场景。binlog有三种不同的格式,分别是Statement、Row和Mixed,它们各有优缺点,适用于不同的需求。
2023-07-25 13:10:30 127
原创 数据库事务的ACID是什么意思
事务中的所有操作要么全部提交,要么全部回滚,确保数据库从一个一致的状态转变到另一个一致的状态。事务开始和结束时,数据库必须满足所有的完整性约束,即事务执行的结果必须使数据库从一个有效状态转变到另一个有效状态。隔离性(Isolation):并发执行的多个事务之间应该相互隔离,每个事务都应该感知不受其他事务影响的中间状态。隔离性确保每个事务的执行独立,互不干扰。持久性(Durability):一旦事务提交,其结果应该是永久性的,即使发生系统故障或重启,数据库系统也能够将事务的结果恢复到永久性的状态。
2023-07-19 13:31:54 459 1
原创 Ant风格的路径模式
当谈到路径匹配和模式解析时,Ant 风格的路径模式是一种常用且强大的技术。在本博客文章中,我们将探讨 Ant 风格的路径模式的基本语法和用法,并展示它在实际开发中的应用。
2023-07-02 17:53:07 867 1
原创 正向代理与反向代理
正向代理是指客户端通过代理服务器来访问目标服务器,目标服务器不知道真正的客户端是谁,只知道请求来自于代理服务器。正向代理可以隐藏客户端的真实身份,让客户端访问一些原本无法访问的资源,比如Google、YouTube等。
2023-07-01 12:05:08 810
原创 跨域访问(CORS与代理)
CORS和代理都是解决跨域问题的常用方法,但是它们也有各自的优缺点。CORS是一种更简单和安全的方法,但是它需要服务器端的支持和配置。代理是一种更灵活和强大的方法,但是它需要额外的网络开销和中间层的维护。
2023-07-01 11:36:22 1773
原创 MapStruct:Java Bean映射的简单之道
MapStruct是一个代码生成器,它可以根据约定优于配置的原则,大大简化Java Bean类型之间的映射实现。生成的映射代码使用普通的方法调用,因此速度快、类型安全、易于理解。MapStruct是一个优秀的Java Bean映射框架,它可以帮助我们简化映射代码的编写和维护,提高性能和可读性。如果你还没有使用过MapStruct,不妨试试看,相信你会喜欢上它的。
2023-06-25 15:11:32 500
原创 Linux常用命令
cdcd [目录名]cd /home..lsls -l /etc-a-l-h-r-S-tmkdirmkdir test-p-m-m 755rm-i-f-rcp-i-f-r-pmv-i-f。
2023-06-24 11:36:44 226 1
原创 什么是熔断\降级
熔断降级的目的是为了保护系统的稳定性和可用性,防止故障扩散和蔓延,提高用户体验和信任度。(4) 熔断和降级的真实关系,图文并茂,看完秒懂 - CSDN博客. https://blog.csdn.net/qq_27184497/article/details/119993725.(5) 谈谈熔断与降级 - 简书. https://www.jianshu.com/p/8a315baa78f1.(1) 熔断降级 - 简书. https://www.jianshu.com/p/ee6b16d1b5ab.
2023-06-15 11:19:25 939
原创 编程模型、编程框架、编程脚手架的关系与区别
编程模型是最外层的概念,它包含了编程框架和公共服务和能力服务。编程框架是中间层的概念,它包含了通用业务能力和组件和工具。编程脚手架是最内层的概念,它包含了项目结构和基础配置和命令和功能。希望本文能够帮助你更好地理解这三者之间的异同,并且在实际开发中能够根据不同的需求和场景,选择合适的编程模型、编程框架、编程脚手架来提高开发效率和质量。如果你觉得本文有用,请给我一个赞或者留言吧!
2023-06-06 11:29:46 642 1
原创 Hypermedia模型是什么,举个栗子
首先,你需要确定数据结构模型,即你的应用中有哪些类型的资源,它们有哪些属性,以及它们如何存储和表示。最后,你需要确定组合模型,即你的应用中有哪些页面或者视图,它们包含哪些资源和链接,以及它们如何呈现和交互。假设你想要创建一个超媒体应用,它可以让用户浏览和购买不同的电影。通过使用Hypermedia模型来设计超媒体应用,你可以更清晰地分析和规划你的应用的结构和行为,也可以更容易地修改或扩展你的应用。其次,你需要确定过程模型,即你的应用中有哪些类型的链接,它们有哪些关系,以及它们如何导航和操作。
2023-06-04 19:26:46 79 1
原创 Ceph:一个统一的分布式存储系统
Ceph是一个开源的分布式存储系统,它可以提供对象存储、块存储和文件存储三种接口,满足不同场景的数据存储需求。Ceph的设计目标是提供高性能、高可用性和高可扩展性,以及简化的管理和维护。¹²Ceph的核心组件是RADOS(Reliable Autonomic Distributed Object Store),它是一个基于对象的存储集群,负责数据的分布、复制、恢复和平衡。
2023-06-04 11:55:55 354 1
原创 Seata:一个简单易用的分布式事务解决方案
Seata是一个简单易用的分布式事务解决方案,它可以帮助开发者在微服务架构下实现数据一致性,提高系统的可靠性和稳定性。Seata目前已经有很多知名的企业在使用,如阿里巴巴、蚂蚁金服、美团、京东、滴滴等。
2023-06-04 10:50:21 273 1
原创 Seata四种事务模式介绍+示例代码
Seata是一款支持多种分布式事务模式的框架,它可以根据不同的业务场景和需求,选择合适的模式来实现数据的一致性。Seata的四种模式各有优缺点,需要根据具体情况进行权衡和选择。模式一致性可用性侵入性复杂度XA强低低高AT最终高低中TCC最终高高高SAGA最终高高中Seata官方网站:https://seata.io/Seata官方文档:https://seata.io/en-us/docs/overview/what-is-seata.html。
2023-06-04 10:46:04 4562 1
原创 Hypermedia模型是什么
首先,您需要确定数据结构模型,即您的应用中有哪些类型的资源,它们有哪些属性,以及它们如何存储和表示。最后,您需要确定组合模型,即您的应用中有哪些页面或者视图,它们包含哪些资源和链接,以及它们如何呈现和交互。假设您想要创建一个超媒体应用,它可以让用户浏览和购买不同的电影。通过使用Hypermedia模型来设计超媒体应用,您可以更清晰地分析和规划您的应用的结构和行为,也可以更容易地修改或扩展您的应用。其次,您需要确定过程模型,即您的应用中有哪些类型的链接,它们有哪些关系,以及它们如何导航和操作。
2023-06-04 09:42:53 81 1
原创 分层领域模型规范约束
分层领域模型规范约束DO(Data Object) :此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。BO(Business Object) :业务对象,由 Service 层输出的封装业务逻辑的对象。AO(Application Object) :应用对象,在 Web 层与 Service 层之间抽象的复用对 象模型,极为贴近展示层,复用度不高。VO(View Object) :显示层对象,通常是 Web 向模板渲染引擎层传输的对象。Query :数据查询对象,各层接收上层的
2023-06-03 22:52:44 104
原创 JPA与MyBatis的区别
JPA和MyBatis是两种不同的Java持久层框架,它们有各自的特点、优缺点和适用场景。简单地说,JPA是一种对象关系映射(ORM)的规范,它提供了一种将Java对象和数据库表之间的映射关系的抽象层,让开发者可以使用面向对象的方式来操作数据库,而不需要直接编写SQL语句²。MyBatis是一种数据映射器(Data Mapper)的框架,它允许开发者直接编写SQL语句,并将其与Java对象和方法绑定,让开发者可以更灵活地控制数据库的访问和操作³。
2023-06-03 22:49:47 4498
原创 负载均衡与高可用三剑客(LVS+NGINX+KEEPALIVED)
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是:The Linux Virtual Server Project¹。LVS的目标是通过Linux操作系统和负载均衡技术,实现一个高性能,高可用,高可扩展的服务器集群系统²。LVS的体系架构由三个部分组成:最前端的负载均衡层(Load Balancer),中间的服务器群组层(Server Array),最底层的数据共享存储层(Shared Storage)²。
2023-06-03 22:43:03 1709
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人