自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Security 实现原理 ② 调用过程

后续再开坑。

2024-09-13 14:43:55 125

原创 Spring Security 实现原理 ① 初始化过程

在了解Spring Security初始化过程,可以先了解一下spring bean的生命周期,以及springboot的自动装配原理。Spring Security的初始化过程是一个复杂但有序的过程,它主要依赖于Spring框架的自动配置机制以及开发者提供的配置信息。以下是从注解方式(Java Configuration)的角度来概述Spring Security在Spring Boot项目中的初始化过程。

2024-09-12 23:32:05 955

原创 Spring MVC 实现原理 ②调用阶段

了解完初始化阶段,让我们看看调用的整个过程,我们都知道servlet的service是提供业务服务的,而DispatcherServlet也简介继承了Servlet,让我们来看看业务逻辑里具体做了什么事。

2024-09-09 15:03:15 463

原创 Spring MVC 实现原理 ① 初始化阶段

Spring mvc 的实现我们主要分两个阶段来了解,一个是初始化阶段,一个是调用阶段,在了解mvc之前,可以先了解一下servlet的生命周期servlet生命周期包括init一次,service多次,destroy一次而我们下面要了解的mvc初始化阶段,核心就是DispatcherServlet。

2024-09-09 13:57:01 358

原创 Spring AOP ① 实现原理

AOP的实现原理分3个阶段收集切面生成代理使用代理对象。

2024-09-08 15:03:29 664

原创 Spring @Async ②实现原理

在了解spring 异步任务之前,可以先了解一下spring bean的生命周期,可以看下spring bean生命周期,以及其他相关文章。

2024-09-07 16:18:49 946

原创 Spring @Async ①入门案例

Async 是Spring提供的一种用于实现异步执行的注解,常用于解决IO密集型任务,如:数据库查询、文件读写、远程服务调用等。

2024-09-06 23:12:10 170

原创 Spring bean的生命周期

此前的面向对象设计思想说到,要面对抽象编程,不要面向具体编程,依赖至于抽象等,具体的有依赖倒置原则、里氏替换原则等等,而Spring核心思想DI和IOC就是对面向对象设计的一个实践。Spring框架(在Java中称为IoC容器)​。在该框架中,通过XML配置文件建立接口和具体类之间的关系,IoC容器通过该配置文件来做具体的新建的工作,这样在实际应用中,只需要修改配置文件就能换成不同的具体类,从而不需要修改任何代码了。下面让我们来看看Spring IOC容器管理的bean的生命周期。

2024-09-06 17:17:16 155

原创 面向对象设计和分析过程

2024-09-03 15:48:42 82

原创 迪米特准则

该准则是由Karl Lieberherr等在一个叫Demeter的项目中提出来的,用于解耦因对象结构的变化和不稳定而导致与该对象耦合在一起的代码。其核心思想就是要求一个类尽量只与它的直接对象交互,避免与间接对象交互,这样就可以与最少的类产生耦合,从而使整个系统的耦合度保持最低。该准则给出了在一个方法内应该向哪些对象发送消息的限制,规定在较少的操作,操作的关联度很高,其任务也比较单一;该准则给出了在一个方法内应该向哪些对象发送消息的限制,规定在一个方法中,消息只能发往以下对象。◆ 该方法内部创建的对象。

2024-09-02 15:26:30 98

原创 培养模式思维

为什么设计模式能够有效地解决设计问题,它们又是如何设计出来的,该如何学习和使用这些模式呢?

2024-09-02 15:13:58 175

原创 依赖倒置原则(TheDependency Inversion Principle, DIP)

这是因为抽象的事物不同于具体的事物,抽象的事物发生变化的频率要低,让高层模块与底层模块都依赖于一个比较稳定的事物比去依赖一个经常发生变化的事物的好处是显而易见的。在该框架中,通过XML配置文件建立接口和具体类之间的关系,IoC容器通过该配置文件来做具体的新建的工作,这样在实际应用中,只需要修改配置文件就能换成不同的具体类,从而不需要修改任何代码了。在传统的自顶向下、自底向上的编程思想中,通过对模块的分层形成不同层次的模块,最上层的模块通常都要依赖下面的子模块来实现,从而就形成了高层依赖底层的结构。

2024-08-29 23:28:13 263

原创 接口隔离原则(The Interface Segregation Principle,ISP)​

按照传统的设计方案,首先设计订单访问接口IOrder,该接口提供了订单类对外公布的所有操作,包括查询订单(getOrder)​、添加订单(insertOrder)​、修改订单(modifyOrder)和删除订单(deleteOrder)​,然后定义订单类(Order)来实现这些接口。而管理后台需要的管理接口IOrderForAdmin首先继承已有的接口,并添加其他相关的行为。由于只为订单类提供了一个“肥”接口IOrder,因此,门户网站、前台系统和管理后台3个外围系统都通过该接口来使用订单类。

2024-08-29 17:24:14 296

原创 单一职责原则(The Single Responsibility Principle, SRP)

因此,要合理评估类的职责,结合业务场景考虑职责的相关性,从而将不相关的职责相互分离,达到SRP所要求的类的内聚性。在该设计方案中,保留了Rectangle类中的与数学模型相关的职责,而将GUI方面的职责封装到一个新的GUIRectangle类中。同时,不同的职责耦合在同一个类中,一个职责的变化可能会影响其他职责,从而引发“脆弱性”的“臭味”​。为此,类设计应遵从SRP,应建立高内聚的类。因此,一个好的设计方案是将其中的一类职责分离出来,从而保持每一个类处理一类职责,从而满足SRP。

2024-08-29 16:52:50 282

原创 开放—封闭原则(The Open-Close Principle, OCP)

变化是永恒的主题,不变是相对的定义”​。软件系统也是如此,任何系统在其生命周期中都需要有应对变化的能力,这也是体现设计质量的一个最重要的功能。那么,什么样的设计才能应对需求的变更,且可以保持相对稳定呢。

2024-08-29 15:43:26 258

原创 Liskov替换原则(The Liskov Substitution Principle, LSP)

子类型(subtype) 必须能够替换它们的基类型(base type)​。换一个角度来理解,对于继承层次的设计,要求在任何情况下,子类型与基类型都是可以互换的,那么该继承的使用就是合适的,否则就可能出现问题。即子类型不能添加任何基类型没有的附加约束。为了避免子类型针对基类型的行为添加附加的约束(即违背LSP)​,基类型中应该只提供尽量少的必需的行为,而且不针对这些行为进行任何实现。此时,那些基类型往往就是抽象类(行为没有任何实现)​,甚至是接口。

2024-08-29 14:43:17 934

原创 面向对象的设计原则

面向对象的设计原则是指导面向对象设计的基本思想,是评价面向对象设计的价值观体系,也是构造高质量软件的出发点。抽象、封装、多态等概念就是最基本的设计原则。

2024-08-29 09:44:20 85

原创 Java visualVM OOM内存溢出问题 排查分析

接上一章,这次我们使用java自己提供的visualVM排查问题。

2024-08-27 17:21:56 191

原创 通过JProfiler快速分析定位线上OOM问题

XX:+HeapDumpOnOutOfMemoryError -Xmx1000M -Xms1000M不久后就会抛出异常:当前目录会生成一个快照文件:可以看到调用树:

2024-08-27 16:39:13 346

原创 JVM性能监控与调优

命令行工具jps:查看正在运行的线程jstat:查看JVM统计信息jinfo:实时查看和修改JVM配置参数jmap:导出内存映像文件和内存使用情况jstack:打印JVM中线程快照jstatd:远程主机信息收集JVM监控及诊断工具jdk自带jconsole:JDK自带的可视化监控工具VisualVM:JDK自带的可视化监视工具,位于JDK的bin目录下。它提供了一个可视界面,用于查看JVM上运行的基于Java技术的应用程序的详细信息。JMC:Java Mission Contro

2024-08-27 15:41:05 169

原创 Java类加载器

2024-08-26 16:04:26 91

原创 类加载机制

2024-08-26 16:02:18 224

原创 字节码指令

在方法执行期间,执行线程持有了同步锁,其他任何线程都无法再获得同一个锁。如果一个同步方法执行期间抛出了异常,并且在方法内部无法处理此异常,那这个同步方法所持有的锁将在异常抛到同步方法之外时自动释放。在JVM中,任何对象都有一个监视器与之相关联,用来判断对象是否被锁定,当监视器被持有后,对象处于锁定状态,指令monitorenter和monitorexit在执行时,都需要在操作数栈顶压入对象。JVM支持两种同步结构,分别是方法内部一段指令序列的同步和方法级的同步,这两种同步都是使用monitor来支持的。

2024-08-26 16:01:12 179

原创 字节码格式

2024-08-26 15:55:30 319

原创 垃圾收集器

2024-08-26 15:55:00 298

原创 垃圾收集相关概念

2024-08-26 15:52:29 227

原创 垃圾收集相关算法

2024-08-26 15:51:44 81

原创 字符串常量池

2024-08-26 15:51:00 95

原创 对象访问定位方式

2024-08-26 15:49:00 72

原创 对象的内存布局

2024-08-26 15:48:23 66

原创 对象实例化

2024-08-26 15:45:22 303

原创 方法区使用示例

2024-08-26 15:43:39 102

原创 堆、栈、方法区交互关系

2024-08-26 15:42:41 88

原创 JVM方法执行过程

● 弹出操作数栈栈顶元素,保存到局部变量表第1个位置(把常量2保存到局部变量表)。● 弹出操作数栈栈顶元素,保存到局部变量表第2个位置(把常量3保存到局部变量表)。● 弹出操作数栈栈顶元素,保存到局部变量表第0个位置(把结果5保存到局部变量表)。● 操作数栈中的前两个int相加,并将结果压入操作数栈栈顶。● 变量表中第1个变量压入操作数栈。● 变量表中第2个变量压入操作数栈。● 常量3压入操作数栈。● 常量2压入操作数栈。

2024-08-26 15:40:00 145

原创 JVM体系结构

一图胜过千言万语。

2024-08-26 15:37:45 320

原创 docker部署centos并安装python

项目上用到的python脚本使用的环境与服务器不一致,导致无法运行,用虚拟环境也遇到了不少问题,所以决定使用docker安装。

2024-08-09 10:25:24 131

原创 windows gitee密码修改,导致更新代码失败解决过程记录

windows gitee密码修改,导致更新代码失败解决过程记录

2024-07-17 22:54:17 267

原创 Mapstruct自定义转换方法(为某个属性指定转换方法)

Mapstruct自定义转换方法(**为某个属性指定转换方法** )

2024-07-17 14:29:31 546

原创 Docker启动报错:cannot access ‘docker-entrypoint-initdb.d‘ Operation not permitted

Docker启动报错:cannot access '/docker-entrypoint-initdb.d/': Operation not permitted

2024-07-11 12:25:48 220 1

原创 个人博客上线,欢迎交流~

点击跳转至十七个人博客持续输出中~

2020-05-10 09:26:41 213

空空如也

空空如也

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

TA关注的人

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