自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(92)
  • 收藏
  • 关注

原创 常用的JDK调优&监控工具整理

VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。

2024-06-15 04:32:31 1476 1

原创 【设计模式】行为型设计模式之 备忘录模式(快照模式)

备忘录模式:也称为快照模式,在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态以便后续能将这个对象恢复成之前的状态。备忘录模式的两个要点存储副本以便后期恢复要在不违反封装原则的前提下恢复当需要实现撤销/重做功能时。当需要保存和恢复对象的内部状态,但又不想暴露这些状态的细节时。在某些性能非关键路径上,可以接受因保存状态而带来的资源消耗。备忘录模式在实现时,设计者需要权衡状态保存的频率和成本,以确保不会因为过度使用而导致资源紧张。

2024-06-10 00:11:44 829

原创 【设计模式】行为型设计模式之 迭代器模式

是行为设计模式之一,它提供了一种访问集合对象(如列表、数组或其他集合结构)中元素的方式,而不需要暴露集合的内部结构。迭代器模式定义了一个迭代器接口,该接口负责遍历集合中的元素,这样用户就可以通过迭代器来访问集合的元素,而无需了解集合的具体实现。一个完整的迭代器模式包含集合和迭代器两部分内容,集合又分为集合接口和实现类、迭代器分为迭代器实现类和接口。

2024-06-10 00:04:53 1075

原创 【设计模式】行为型设计模式之 状态模式,带你探究有限状态机FSM的三种实现方式

状态模式是一种行为设计模式,通过把状态的逻辑封装到独立的类中,允许对象在其内部状态改变时改变行为。核心组件包括状态接口、具体状态类和上下文类。与有限状态机(FSM)紧密相关,FSM由状态、事件和动作构成,通过事件触发状态转换及动作执行。状态模式不仅适用于简单的状态逻辑,也擅长管理复杂状态间的转换,替代冗长的if-else或查表法,提高了代码的清晰度与可维护性。例如,实现马里奥游戏角色状态变换,展示从基础状态到高级状态的变化及遇敌回退,清晰体现了状态模式的优势。

2024-06-09 01:15:19 1035

原创 【设计模式】行为型设计模式之 职责链模式,探究过滤器、拦截器、Mybatis插件的底层原理

职责链模式是一种设计模式,它使请求处理与请求发送分离,允许多个处理对象有机会处理请求。该模式通过构建处理对象的链式结构,逐个传递请求直至被处理。变体中,链上每个对象都尝试处理请求而非仅第一个能处理的对象处理。例如,在Java实现中,抽象类Handler定义了处理请求的模板方法,并持有指向下一个处理者的引用。通过链表或数组等形式组织处理者,客户端构建职责链并触发处理流程。此模式在诸如框架过滤器、Netty的编解码器中广泛应用,增强了系统的灵活性和可扩展性。

2024-06-09 01:11:57 1410

原创 【设计模式】行为型设计模式之 策略模式学习实践

策略模式(Strategy),就是⼀个问题有多种解决⽅案,选择其中的⼀种使⽤,这种情况下我们使⽤策略模式来实现灵活地选择,也能够⽅便地增加新的解决⽅案。⽐如做数学题,⼀个问题的解法可能有多种;再⽐如商场的打折促销活动,打折⽅案也有很多种,有些商品是不参与折扣活动要按照原价销售,有些商品打8.5折,有些打6折,有些是返现5元等。

2024-06-09 01:06:20 1103

原创 【设计模式】行为型设计模式之 模板方法模式

模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中去实现;模板方法在不改变算法整体结构·的情况下,可以重新定义算法中的某些步骤。回调方法与模板方法的应用场景几乎一致,都是在一个大的算法框架中自由替换其中的某个步骤,起到代码复用和拓展的作用。回调基于组合关系,而模板方法基于继承实现2. 回调的组合关系更加灵活 1. Java 语言的单继承限制 2. 回调可以使用匿名类,Lambda 表达式来传递代码。但是模板方法必须定义子类 3. 模板方法不够灵活,如果有多个模板方法和其待

2024-06-09 01:04:25 465

原创 【设计模式】结构型设计模式之 享元模式

享元模式,”享元“ 就是被共享的单元。享元模式的意图就是复用对象节省内存,应用的前提是被共享的对象是不可变的对象。将对象设计成享元,保留一份实例供多处代码引用这样能减少内存中对象的数量,不允许修改是因为避免一出修改影响其他使用他的代码。应用享元模式前应该仔细测试是否真的在业务场景中能节省大量内存,否则可能适得其反。

2024-06-09 01:01:32 507

原创 【设计模式】结构型设计模式之 组合模式

这里的组合模式,与之前的设计模式中的""完全是两码事,这里的组合模式主要用来处理结构为树形的数据。组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树状结构来表示“部分-整体”的层次关系。此模式提供了一种方式,使得用户可以以统一的方式处理单个对象和对象组合,从而使得客户代码可以一致地使用它们,而无需关心对象是单独的还是组合的。

2024-06-09 00:59:38 393

原创 【设计模式】结构型设计模式之 门面模式

门面模式(Facade Pattern)是一种常用的设计模式,属于结构型模式的范畴。它为子系统中的一系列接口提供一个简化的统一接口,即一个外观(Facade),从而使子系统更加容易使用。门面模式并不修改子系统的功能,而是为用户提供了一个更高层次的接口,隐藏了子系统内部的复杂性,减少了客户代码与子系统之间的耦合度。

2024-06-09 00:58:27 410

原创 【设计模式】结构型设计模式之 桥接模式

如果车辆有一个类,然后其可以选装不同形式的轮毂 M 种、不同形式的颜色 N 种,如果每种具体的车辆类型都会产生一个子类,那么共有 M。此时,如果我们将轮毂和颜色都单独定义成一个类,在车辆类中使用组合来关联轮毂和颜色。那么只需要 M 种轮毂、N 种颜色便可以组合出 M。SL4J 框架有 3 个核心概念,也用到了桥接模式这三个属性可以独立变化,随意组合出自己想要的日志记录器。

2024-06-09 00:56:08 395

原创 【设计模式】结构型设计模式之 适配器模式

适配器模式(Adapter Pattern) 是一种结构型设计模式,它的核心目的是使接口不兼容的类能够协同工作。适配器模式通过将一个类的接口转换为客户希望的另一个接口,来解决两个已有接口之间不匹配的问题,从而增加它们之间的兼容性。这种模式在需要复用现有类,而又不想修改原有接口或者无法修改原有接口的情况下特别有用。

2024-06-09 00:52:47 676

原创 【设计模式】结构型设计模式之 从IO流设计思想来看装饰器模式

装饰器模式也称为包装模式(Wrapper Pattern) 是指在不改变原有对象的基础之上,将功能附加到对象上,提供了**比继承更有弹性的替代方案**(扩展原有对象的功能),属于结构型模式。装饰器模式的核心是功能扩展,使用装饰器模式可以透明且动态地扩展类的功能。

2024-06-09 00:51:19 794

原创 【设计模式】结构型设计模式之 代理模式

代理模式常见应用,OOP和AOP的区别是什么!静态代理和动态代理有什么区别?JDK动态代理还比CGLIB动态代理性能差吗?来看看吧

2024-06-09 00:49:17 565 1

原创 【设计模式】创建型设计模式之 原型模式

什么是深拷贝、浅拷贝,如何快速拷贝一个hash表。来看看原型模式吧。原型模式主要用于创建重复的对象,而无需重新初始化他们。

2024-06-09 00:46:24 513

原创 【设计模式】创建型设计模式之 建造者模式

建造者模式,将一个复杂的对象的构建过程与表示分离,使得同样的构建过程可以构建不同的结果。

2024-06-09 00:43:51 1078

原创 【设计模式】创建型设计模式之 工厂模式

本篇博客深入浅出地剖析了工厂模式的三大类型:简单工厂模式、工厂方法模式、抽象工厂模式,及其在软件开发中的应用场景与优势。简单工厂模式通过集中创建对象的职责到一个类中,简化客户端代码并提供灵活性,但违背了开闭原则。工厂方法模式通过为每类产品提供独立的工厂类,实现了更好的扩展性与遵循开闭原则。抽象工厂模式则进一步抽象化,适用于生产多系列相关或相互依赖对象的情况,有效减少了大量工厂类的产生。

2024-06-09 00:41:56 1208

原创 【设计模式】创建型设计模式之 单例模式

本文深入探讨了单例设计模式,这是一种确保类在任何时刻都只有一个实例的设计模式,适用于配置管理或资源控制等场景。文章首先介绍了单例模式的基本概念和适用场景,随后详述了多种实现方式,包括饿汉式、懒汉式、双重检查锁定、静态内部类以及枚举实现法,每种方法各有优劣,如线程安全、延迟加载及性能考量。最后分析了单例模式可能带来的弊端,如隐藏依赖、扩展性受限及对测试的不利影响,帮助开发者在实际应用中权衡选择。

2024-06-09 00:35:18 739

原创 SpringBoot 自定义 HandlerMethodArgumentResolver 搞定xml泛型参数解析

SpringBoot自带的jackson解析简单xml对象很简单,但是如果Controller方法参数中包含泛型则由于泛型擦除机制jackson是无法正确解析的。本篇博客通过详细的案例带你自定义‘HandlerMethodArgumentResolver 来实现正确的XML解析。

2024-04-29 23:39:22 1377

原创 Spring异步注解@Async的使用及其自定义线程池配置总结

AsyncConfigurer接口是Spring框架用于全局配置异步执行器(即线程池)的核心接口。当我们的Spring应用需要统一管理所有异步任务的执行环境时,可以选择实现此接口。@Override// 核心线程数// 最大线程数// 队列容量// 线程名称前缀在此示例中,GlobalAsyncConfig类实现了AsyncConfigurer接口,并在getAsyncExecutor()方法中配置了一个全局的线程池。

2024-04-09 00:01:58 2290 3

原创 Zookeeper 分布式服务协调治理框架介绍入门

zookeeper 是一个开源的**分布式协调服务,**是一个典型的分布式数据一致性的解决方案。实现了分布式数据的强一致性!基于Zookeeper可以实现数据发布/订阅,负载均衡、命名服务、集群管理、分布式锁、分布式队列等功能。

2024-01-03 23:11:45 1259

原创 zookeeper 常见客户端介绍和使用 zkCli、自带API、 zkClient、Curator

Zookeeper的基本客户端使用,包括自带的控制台、自带的API、第三方API例如zkClient、Curator等

2024-01-03 23:10:16 4047

原创 开源学习项目推荐

学习项目推荐:一个视频课程资源学习项目,涵盖项目实战、体系课程、IT训练营、Java实战、Python实战、豪华大课、涵盖Web前端、Html/Css、Android实战项目、React、大数据、软件测试、Python、Vue、算法、人工智能、数据分析 资料非常全。

2023-12-18 21:48:50 530

原创 并发编程2:Java 加锁的原理和JVM对锁的优化

这篇博客介绍了Java中的同步机制和对象锁,以及如何使用synchronized关键字来实现对共享资源的互斥访问。文章详细解释了ObjectMonitor监视器的工作原理和加锁过程,并探讨了Java对同步机制的优化措施,包括偏向锁、轻量级锁和重量级锁等。此外,文章还介绍了锁粗化、锁消除和分段锁的概念。

2023-12-03 23:38:10 356

原创 并发编程1:多线程的基本概念

介绍了进程、线程和守护线程的概念,以及Java中的用户线程和原生线程。文章还讨论了线程的优先级和上下文切换,并详细解释了Java中线程的状态和终止方式。此外,文章还介绍了如何创建线程,包括使用Runnable接口和Thread类,并比较了Callable接口和Runnable接口的不同之处。最后,文章提供了一个使用Callable和Future的例子来实现异步执行和结果获取。

2023-12-03 23:29:46 104

原创 龙蜥Anolis 8.8 安装MySQL

开机自启:systemctl enable mysqld。启动服务:systemctl start mysqld。解决方案 禁用自带的mysql模块再安装,安装mysql官方仓库源再安装。

2023-09-04 09:17:27 1941

原创 ZooKeeper原理深入之ZAB原子消息广播协议

ZAB协议的核心是定义了对于会改变 ZooKeeper 数据状态的事物请求的处理方式。

2023-07-30 16:49:49 1835 1

原创 Spring Cloud Eureka 服务发现速度慢配置优化总结

使用Eureka时,常常会发现服务发现慢,上线半天后都不可用。并且服务下线后又长时间未被剔除的问题。这个问题跟Eureka-server 端和client端都有关系,这次从两头来设置优化。

2023-07-23 02:34:43 1379

原创 Idea 启动项目提示找不到或无法加载主类

Idea 启动项目时提示找不到或无法加载主类问题的一次排查过程

2023-07-19 11:24:59 11595 1

原创 dubbo-admin 因连接ZooKeeper超时启动失败问题

尝试本地运行 dubbo-admin 项目,项目的后端部分是一个纯SpringBoot工程,按理说只需要配置一下我的注册中心的地址就可以在本地运行。但是每次运行都会报错。

2023-07-13 11:02:13 2464

原创 软件系统架构的发展和介绍,单体架构、垂直架构、分布式架构、分布式SOA架构、分布式微服务架构

了解各个软件架构的发展和优缺点对比,单体架构、分布式架构、soa、微服务等等

2023-07-11 18:21:42 4074

原创 ZooKeeper使用场景总结

使用ZooKeeper实现 配置中心、服务命名、集群管理、分布式锁、分布式共享锁、分布式队列、负载均衡

2023-07-08 16:06:05 1177

原创 ZooKeeper最新版本集群和单机模式安装

1. 单机模式2. 单机伪集群模式 ⼀台服务器上运⾏多个Zookeeper 实例;3. 集群模式 Zookeeper运⾏于⼀个集群上,适合⽣产环境,这个计算机集群被称为⼀个“集合体”4. 如果在分布式的生产环境中使用ZooKeeper,推荐使用大于3的奇数节点个数搭建集群,这样能提升系统的可用性。集群模式、伪集群模式安装方式都差不多只是真正的集群模式需要使用不同的IP。单机模式则更简单了,只需要取消掉zoo.cfg配置文件中的集群配置就行。

2023-07-08 15:59:44 6102

原创 分布式数据一致性常见协议总结 NWR、Gossip、Paxos、Raft、Lease

分布式数据一致性,是保证同一个数据能在系统不同节点间保持一致状态,让一个数据或者状态的变更,在整个系统上看起来是一致的。CAP理论就是针对的分布式存储系统数据一致性的。分布式事务一致性,是让一个事务发生前后,其涉及的数据库数据不论成功还是失败系统的数据状态能继续保持一致。文章对分布式一致性常见协议,例如NWR、Gossip、Paxos、Raft进行了整理总结

2023-06-27 08:19:44 3037

原创 分布式理论之事务一致性和其常见协议 2PC、3PC、分布式消息、TCC、SAGA、AT

1.分布式事物主要是解决分布式环境下,组合事物的一致性问题。 2.事务也分本地事务和分布式事务,这里主要介绍分布式事务,本地事务可以参考我的另一篇文章 [数据库原理之数据库事物](https://blog.csdn.net/weixin_40979518/article/details/131313594)3.常见的分布式事务协议 2PC、3PC、基于分布式消息的最终一致性方案、SAGA、TCC、XA

2023-06-25 17:31:53 1425 1

原创 分布式理论之数据一致性总结

1、一致性的种类:事务一致性、数据一致性2、数据一致性程度分级:强一致性、弱一致性、最终一致性3、CAP定理:一个分布式系统,无法同时满足 强一致性、可用性、分区容错性4、BASE理论核心思想:强一致性的CAP无法满足,可以根据业务特点实现最终一致性。 5、BASE理论:基本可用、软状态、最终一致性

2023-06-25 17:11:59 1864

原创 数据库原理之数据库事物

事物的目的是保证数据的一致性;事物的ACID中A、I、D都是为了实现C 一致性!各家数据库事物都参考了ARIES理论;原子性和持久性的实现方案:Commit Logging、Write-Ahead Logging、Shadow Paging; 隔离性保证了每个事物各自读、写的数据相互独立,不会彼此影响; 数据库通用的三种锁,写锁、读锁、范围锁; 不同隔离级别以及幻读、脏读等问题都只是表面现象,它们是各种锁在不同加锁时间上组合应用所产生的结果,锁才

2023-06-20 19:20:32 3411

原创 使用Netty的Websocket实现简单的聊天室

【代码】使用Netty的Websocket实现简单的聊天室。

2023-04-19 00:00:25 312 1

原创 Netty自定义应用层协议逃不开的粘包和拆包处理

对于TCP传输过程中的粘包拆包:使用TCP来传输数据的话,TCP传输过程中发生粘包和拆包其实对我们应用层的协议关系不大。因为我们不直接接收和处理TCP报文,TCP报文由TCP协议自己处理。最后组装成发送时的字节流缓存到缓冲区。对于读取数据发生的粘包拆包: 对我们有影响的粘包和拆包其实说的是我们应用层的协议的数据包 在读取中发生了粘包或者拆包,从而没法直接判断报文的边界,需要对这种拆包和粘包情况进行处理。来确定协议报文的边界来解析报文。

2023-04-18 23:58:10 1225

原创 Netty的编解码器案例

编解码器的必要性网络应用中的数据传输,需要将原始字节数据转换成对应的自定义消息对象。服务器编码数据后发送到客户端,客户端接收字节数据后解码还原成服务端发送的消息对象。解码器:负责将消息从字节或其他序列形式转成指定的消息对象。编码器:将消息对象转成字节或其他序列形式在网络上传输。Netty的编解码器功能。

2023-04-17 01:30:11 565

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除