自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring源码分析-环境搭建

这两个jvm的版本一定要保持一致,并且支持当前安装的gradle版本!否则在编译时会报类或者符号找不到!配置本地仓库:这里配置成和maven一样的仓库地址。再根据实际情况配置idea的jdk版本和本地仓库。选择想要搭建的版本,复制地址。2、安装Gradle。

2025-02-18 13:27:15 263

原创 适配器模式(Adapter)

三、实现:适配器模式的实现有两种,类适配器和对象适配器,类适配器是指适配器和被适配器之间是继承关系,对象适配器模式是指适配器与被适配对象之间是组合关系(也就是适配器中声明一个被适配对象作为属性传递)桥接模式主要是为了方便两组不同的接口分别进行扩展,同时又要在主业务流程接口或实现中能访问非主业务流程的代码;代理模式强调的是对目标对象的访问控制,而非增强,这是与装饰器模式的最大区别。一、适配器模式:将两个不兼容的类通过适配的方式去协同工作。适配器模式,主要是两组功能不同的接口之间相互兼容;

2025-02-08 23:02:27 274

原创 模板方法模式(Template)

是一种基于继承的代码复用技术,是一种类行为模式(基于类的,继承关系的,也就是在模板方法模式中,只存在子类和父类的关系),通过继承来复用和扩展父类的功能;主要就是用来提高程序代码的复用性和扩展性的;在操作中定义业务逻辑框架,包含业务逻辑的方法就是模板方法,模板方法允许子类在不改变原有业务逻辑的流程下,对某些步骤进行扩展和修改;Template方法也可以理解为钩子函数和回调函数(hook);

2025-02-08 11:17:30 319

原创 观察者模式(Observer)

一、观察者模式属于行为型设计模式,当一个对象(或者主题或被观察者)发生变更时,需要通知其他各个相关的对象(观察者)进行状态或行为变更时,使用观察者模式,降低对象与对象之间耦合;比如汽车和行人等红绿灯,红绿灯是被观察者,当红蓝绿等发生变化时,观察者(汽车或行人)会根据红绿灯的颜色进行行为或状态的变更,又比如在微服务架构中,服务的注册与发现,也是基于观察者模式实现的,在消息队列的发布和订阅模式也是基于观察者模式实现的。2、抽象被观察者和具体被观察者。1、抽象观察者和具体观察者。

2025-02-06 22:59:09 265

原创 装饰器模式(Decorator)

一、装饰器模式:动态的扩展一个类的功能,提供的是比继承更加灵活的方式去增强一个类的功能;不使用继承的方式去扩展父类功能(这里的不使用继承,是指不使用继承主流程类的方式);可以动态扩展一个类,而不需要弄多个子类,不需要改变原有的类就可以进行多次装饰,有点像AOP的功能;适用于相对独立的功能,比如加解密,安全性校验,被final修饰的、不支持继承扩展的类。排查问题稍微有点复杂,因为不知道是哪个装饰器出了问题。4、由子类装饰器去实现对组件功能的扩展。1、定义主体业务流程抽象。3、定义抽象装饰器类。

2025-02-06 21:10:28 89

原创 桥接模式(Bridge)

一、桥接模式概念股二、桥接模式UML三、桥接模式实现四、桥接模式分析。

2025-02-06 21:09:58 138

原创 责任链模式(Chain Responsibility)

3、责任链的顶端和低端节点之间不应该存在耦合问题。2、链条太长可能会导致的性能问题。2、抽象处理类(也可以是接口)四、责任链模式需要注意的地方。1、需要传递处理的数据类。

2025-02-06 17:59:43 349

原创 原型模式(Prototype)

一、原型模式属于创建型设计模式,当对象需要基于已有对象属性进行创建时使用,基于Object对象的clone()去实现的;二、原型模式的实现分为普通模式、浅拷贝和深拷贝模式。

2025-02-06 15:05:21 80

原创 策略模式(Strategy)

上述案例中,Cat对象是通过比较weight属性来判断大小,Doggy对象是通过比较food属性来比较大小,在实际开发过程中,后续可能会存在这样的需求,比如Cat对象需要通过height属性或者food属性来比较大小,Doggy也需要通过比较weight或者height属性来比较大小,基于设计模式的开闭原则,在不修改原来的代码的情况下,如何实现功能的扩展?封装不同的算法,实现客户端调用时可以根据需求,在不修改原算法的情况下,可以很好的切换不同的算法,实现不同的需求;即不同的策略实现不同的功能;

2025-02-06 14:18:52 542

原创 建造者模式(Builder)

要解决的问题:复杂对象使用不同的构建过程,产生拥有不同对象属性的对象,调用者只需要设定不同的属性值,不需要了解属性值之间是怎么构建出来对象的;将复杂对象的构建与表示进行分离,使得统一的构建过程,可以创建出不同的对象表现模式。就是将复杂对象里面的成员变量,设置不同的值,使得生成出来的对象拥有不同的属性值;指挥者:用来与调用者交互,实现通过抽象创建者生产出产品的流程。lombok包里面的@Builder也是通过这种模式实现的。实现方式二:使用静态内部类的方式实现。实际建造者:抽象创建者的不同实现。

2025-01-16 14:25:44 505

原创 代理模式(Proxy)

客户端不能直接访问一个对象,可以通过代理的第三者来间接访问该对象,代理对象控制着对于原对象的访问,并允许在客户端访问对象的前后进行一些扩展和处理;在jdk1.8后,实际上JDK动态代理比CGLib动态代理效率高,但JDK动态代理需要目标类实现一个接口,因此如果对象有实现接口,用JDK动态代理,没实现 用CGLib动态代理;动态代理只有在运行的时候才会去加载目标类, 当需要加载其他对象的时候,不需要修改,也就是动态代理可以代理任何对象Object;对目标对象进行扩展,将客户端与目标对象分离,解耦。

2025-01-16 14:24:27 651

原创 JVM常见排查问题的命令及可视化工具

5、jhat:与jmap配合使用,在JVM内部内置了一个微型的web服务器,用来分析jmap转储的堆文件快照,除非在完全依赖线上的环境上,否则一般不使用jhat来分析堆文件,因为功能相对简陋,且加载堆文件比dump堆文件更耗内存,可以下载到本地使用VisualVM可视化工具进行分析;2、jstat:监视运行中的JVM状态信息,包含类加载的信息,内存、垃圾回收、即时编译信息(当使用动态代理时,会在运行过程中实时的产生Class对象);备注:生成堆转储快照也可以通过设置参数的方式进行,比如设置。

2024-12-30 22:52:57 488

原创 JVM调优

也就是执行用户代码的时间占总时间的比值,执行用户代码所用的时间越多,说明执行有效业务的时间越多;因为在线文档需要把文档Loading到内存,对象比较大,一般直接分配到老年代,回收次数频繁,但因为内存小,所以回收时间短,卡顿不明显,反而内存大的时候,回收一次的耗时要比回收多次的STW长,造成资源升级了反而卡顿;4、对高并发的理解:百万并发是指在1秒钟内,100万个订单同时下下来,也就是TPS,订单提交到持久化过程结束,淘宝最高峰的并发才五六十万,百万并发也是扯淡,12306才能达到;

2024-12-30 15:12:14 996

原创 常见垃圾回收器

存在问题:当老年代阈值达到92%(可使用参数调整该阈值),进行并发回收,同时又要分配资源给用户线程,也会导致内存占用过多,无法分配新对象,此时会触发(Concurrent Mode Failure)并发失败,如果产生了并发失败,则会启用Serial Old(单线程扫)进行回收,停顿时间更长,响应更慢;迄今为止,所有的垃圾回收器,都是需要暂停用户线程的(也就是STW),目前所有的垃圾收集器都采用了可达性分析算法来实现对垃圾的判断,而使用可达性分析算法,在根节点(Root)枚举这一步,是需要暂停用户线程的;

2024-12-16 10:37:43 846

原创 GC常见垃圾回收算法及堆分代模型

(2)动态年龄,是指将S0里面的存活对象全部拷贝到S1的时候,如果发现全部对象的大小超过了S1的空间的50%,则会触发动态年龄淘汰机制,就是把年龄最大的那些对象放入老年代,而不管他的copying次数是否超过设置的阈值;先尝试栈上分配,如果满了,在Eden区分配,当出现GC时,会往S0区域移动,多次回收是指在S0和S1上来回移动,移动次数可以通过参数配置,经过多次回收还存活,移动到老年代;有一个对象引用该变量,在对象头+1,有多个就加多个,没引用了就-1,减到0,说明没有引用了,判定为垃圾;

2024-12-10 11:01:00 766

原创 java内存模型(JMM,java memory model)

从计算机的层面,cup和内存之间的数据处理效率有较大差异,cup在处理数据效率上远高于内存,大概差距在100倍,当cup的计算效率那么高,如果大部分时间都花在等待内存的读取上,则效率会下降很多,如何解决这个cup和内存之间处理性能差异导致的性能低下的问题?(1)这个东西是处理Invalidate消息的,就是当一个消息从E状态或者S状态变更为M状态时,会通知其他持有变量的cpu将变量改为Invalidate,如果频繁且数据量多的情况下,一个一个去通知,影响效率;问题:有了缓存锁,还需要总线锁吗?

2024-12-06 10:38:24 935

原创 Java 对象的创建过程以及栈如何分配

3、JDK1.4后增加了Direct Memary:直接内存,为提升IO的效率增加的,不归JVM管理,归操作系统管理;class initializing:初始化,执行静态代码块(如果有父类,也是先执行父类的静态代码块,因为类加载也是先加载父类),静态变量赋初始值;在指令层,i++是先执行load指令,再执行incr 1,而++i先执行incr 1,再执行load。(2)执行构造方法语句,如果有父类,先调用父类的构造犯法,即:super();局部变量表:方法里面使用到的局部变量,包含方法传递的变量。

2024-12-06 10:34:13 618

原创 JVM类加载过程-Loading

当使用子级类加载器去加载时,如果找不到该类,会委托父级类加载器去加载该类,也就是CustomClassLoader找不到类时,会委托AppClassLoader去加载,再找不到,再委托ExtensionClassLoader去加载,再找不到,再委托给Bootstrap类加载器去加载;比如:当程序员自定义一个与JDK相同的类,并在里面进行一系列不安全操作,再把该类进行打包放置在JDK对应的包内,使用Bootstrap类加载器进行加载,覆盖JDK自带的类,会造成比较严重的安全问题;

2024-11-19 09:55:13 728

原创 并发编程-锁分类及实现及原理

~待完成。

2024-09-30 16:56:37 134

原创 并发编程三大特性(原子性、可见性、有序性)

未完待续~~

2024-09-30 16:55:34 217

原创 深入理解synchronized

1、锁消除:是指在加锁的代码块或方法中,并没有操作临界资源,锁消除机制不会执行加锁操作,因为加不加锁,意义都不大,没影响,因此不需要加锁;偏向锁:当每次都是同一个对象来获取锁时,没有发生锁资源竞争,当再次获取锁资源时,如果发生锁竞争,会优先偏向之前每次都获取的那个对象;轻量级锁:当发生锁竞争时,不挂起线程,而是采用自旋的模式进行锁资源竞争,自旋就是尝试重新获取;重量级锁:当自旋还是获取不到锁资源,则采用传统的synchronized模式,即挂起线程等待。

2024-09-23 10:03:42 307

原创 Elasticsearch核心

索引类型type:在es7.0及以前有这个概念,相当于索引分类,一个索引可以 由多个type组成,相当于数据的逻辑分类,es8.0后删除了该概念,过渡期默认的索引类型是_doc;master:候选节点,当主节点宕机了,master有可能成为主节点,一个集群节点可能有多个候选节点,五角星节点才是主节点;1、节点:一个节点(Node)就是一个es进程,一个服务器可以部署多个节点。lngest:预处理节点,比如日志,可以先处理,过滤,再查询。data:数据节点,所有的数据都存放在数据节点上。

2024-08-20 13:55:08 585

原创 Elasticsearch基本概念和安装

即只需要关闭安全检查,在本地,不需要增加任何配置,es会自动组件集群,根据默认端口自增,生成多个节点组成的集群;(2)配置ES的java环境变量,注意,变量名一定要写ES_JAVA_HOME,因为ES默认会在本地找这个变量名,如果找不到,才会使用自带的jdk;java开发,Lucene框架,json格式的数据格式,支持分布式、PB级海量数据、高性能、高可用、易扩展;(2)OLAP:联机分析处理类数据库,es,查询,全文搜索;1、开发模式,一般用于非生产环境,windows,非集群;

2024-08-20 13:54:38 895

原创 Redission

Redission:底层基于Netty,线程安全,提供很多分布式服务(分布式锁、分布式集合,分布式下的JUC封装),延迟队列;封装了自己的类型,比如getBuket(key,value)SpringDataRedis: RedisTemplate,默认线程安全,底层基于Netty(异步支持),用于一般的操作。Jedis:简单,和命令最相似, API最丰富,多线程,不安全。分布式锁与本地锁的本质是一样的,将并行的操作转换成串行操作。当可以不存在时,返回true,存在,返回false;

2024-08-20 13:45:47 231

原创 软件测试基础入门

(2)什么是等价类划分法:在所有的数据中, 具有某种共同特征的数据集合进行分类划分,比如账号输入,字母+数字是一类,纯数字是一类,纯字母是一类;3、接口测试: 后端实现接口,使用工具或代码对服务端接口进行测试(根据接口文档),JMeter,Postman;(4)安全检查,密码输入是否隐藏,是否要求https,传输报文加密检查,浏览器地址栏是否包含敏感信息检查;比如:6~8位字符,有效取一组,1234567,无效取两组数据:<6取一组,>8取一组。2、输入密码:123456、123356a、a123456;

2024-08-20 13:44:49 1233

原创 Oracle基础

找到安装目录下的deinstall.bat,双击执行(需要管理员身份运行)一、oracle国内网站:https://oracle.com/cn/Oracle11g,2007年发布的文档版本,相当于jdk8。Oracle19c,c表示cloud云版本,大数据版本;一般要么使用11g,要么使用19c,开发环境使用11g。卸载软件Universal installer,(4)等待一会出现安装步骤,然后next就行;用户名:system/123456。删除安装目录下的文件。

2024-08-20 11:52:22 353

原创 Oracle基本SQL操作-用户角色权限管理

一般情况下,一个用户可以有多个角色,比如拥有connect和resource就可以对数据库进行操作了;语法:GRANT ROLE|RESOURCE TO USER(ROLE);一般情况下,将权限赋予给角色,将角色赋予用户,系统权限只由dba授权,

2024-08-20 11:51:58 361

原创 Oracle基本SQL操作-SQL语句

主键约束:能够唯一标识该字段的唯一约束+不能为空,一张表只能出现一个主键,但可以出现联合主键(一个主键包含多个字段);DML:数据操作语句,insert、update、delete、select。TCL:事务操作语句,begin,commit、rollback,savepoint;count(1) :在列后面再加一列,值用1填充,然后进行统计,也会包含空的结果。唯一约束:有值的情况下,不能重复,不包括null,字段后加unique;DCL:数据控制语句,权限控制,grant、revoke;

2024-08-20 11:51:40 1157

原创 Mysql的分支与变种、替代

MariaDB:sun公司不认同mysql的数据处理流程, 其中一成员创建了MariaDB,主要是bug修复和功能扩展,mysql的超集(超越的集合);Drizzle:C++写的(mysql是C语言写的),主要是高可用、高性能,多核服务器。MyIsam:不支持事务,表锁,支持地图数据类型,关注性能,表空间大,不适合高并发。InnoDB:默认,支持事务,行锁,支持主外键,关注事务,表空间小,适合高并发。Mysql的替代:PostgreSQL;Mysql的分支与变种。

2024-08-20 11:50:53 175

原创 Oracle的PL/SQL编程

一、PL/SQL编程:Procedural Language,过程语言与sql(结构化查询语言)的结合而成的编程语言,增加变量、plsql优缺点:在单数据库里面适用,能提升效率,但是在分布式数据库中不适用。PL/SQL就是方法和存储过程中的一部分。--声明变量,变量名称用v_开头。

2024-08-20 11:50:34 146

原创 计算机操作系统

作为硬件和应用之间的接口:程序接口(应用程序访问操作系统的接口叫系统调用),命令接口(cmd命令)、GUI页面(GUI页面操作底层也是调用命令)(5)并行指在同一个时刻,能处理多少件事的问题,具有很明显的物理局限性,比如4核操作系统在一个时刻就只能处理4件事情;1、基础概念和发展:操作系统(Operation System,简称OS),是一个计算机程序,管理硬件与软件的程序;(1)同时共享访问方式:同一个时间段内可以使用共享的资源,比如磁盘,内存,允许多个程序同时访问磁盘、内存;

2024-08-20 11:49:40 454

原创 并发编程-基础概念

开销不同,线程的创建和终止时间段,且 线程之间的切换比进程之间的切换速度快很多,进程之间的通讯更麻烦,一般借助内核才能实现,而线程之间的通讯相对简单;资源不同,同一个进程下的线程共享进程中的一些资源,线程同时拥有自身的独立存储空间,进程之间的资源通常是独立的;线程:线程依附于进程,是cpu调度的基本单位,每个线程执行的是某个进程的代码的某个片段;数量不同,进程一般指一个,一个应用程序,线程依附于进程,一个进程中可以有多个线程;本质不同,没有可比性,进程是操作系统分配的资源,而线程是cpu调度的基本单位。

2024-08-20 11:48:28 246

原创 Kafka环境搭建和topic管理

三、使用脚本实现topic、生产者和消费者。关闭防火墙&防火墙开机启动。同步时钟(集群环境需要)安装Zookeeper。配置主机名和IP映射。

2024-08-20 11:48:04 404

原创 线程的创建、状态及常见方法

实现Callable接口:实际也是实现Runnable接口,进行了扩展,有返回值,使用的是同步非阻塞模式;1、主要区别:同步异步强调被调用方是否反馈结果,而阻塞非阻塞指调用方是否一直等待被调用方反馈结果;继承Thread:java是单继承,如果使用这种方式,则不能再继承其他类(一般情况下不用);实现Runnable接口:可以解决单继承问题,线程执行完就结束,没有返回值;三、线程的6种状态(也可以是5种,但java种就是6种)3、实战演练各种状态。

2024-08-20 11:47:45 458

原创 Kafka基本概念介绍

也可以采用轮询的方式进行消息发送到分区;顺序写入:kafka会把收到的消息写入磁盘,保证数据不丢失,一般情况下,写数据到磁盘经历磁盘寻址和写入,而对磁盘而言,寻址是机械动作,效率很低;(2)没有限制:生产者写入消息,消费者可能被多个消费者消费,消消费消息的偏移量,消息可以长时间保息服务器仅仅是保存消费者存,每个消费者之间互不影响,在大数据场景使用多。如果是,则product发送后马上flush磁盘,称为同步发送(sync),如果否,则发送后立即返回,由操作系统去flush磁盘,称为(async);

2024-08-20 11:46:47 1300

原创 幂等问题及解决方案

二、应用支付场景:下订单时,如何保证没有重复订单,比如用户将商品添加购物车后,反复点击去支付按钮,此时后端会收到多条创建订单的请求,如何保证不重复生成订单?首次提交数据,删除成功,此时有新数据进来,重复提交的delete请求就会删除新数据导致数据幂等性问题;订单被删除多次产生多个商品id、用户id、订单未支付状态、逻辑删除,导致触发唯一索引,实际上这种情况是被允许的;3、设计幂等表,将唯一索引里面的字段提出来,单独放一个表,先查防重幂等表,如果发现有数据,直接返回,没有数据,则insert;

2024-07-25 17:32:39 354

原创 PostgreSQL约束、表空间、视图、物化视图、索引、事务(MVCC和锁)、数据备份和恢复

在PostgreSQL中,在存储数据时,数据必须要落到磁盘。(select id,name,real_name from user) ---- 仅查询部分字段,不查询密码。如:对表进行insert、update、delete、truncate时,会触发表的Trigger。当创建表时指定了表空间,则默认存储表空间存储了一个链接,指向指定的实际存储的磁盘目录。简单视图允许写操作,但不推荐,因为视图实际上是写的表数据。(5)外键约束(不建议,会导致级联关联)

2024-07-22 17:06:40 657

原创 PostgreSQL的引号、数据类型转换和数据类型

(2)pgsql对boolean类型不敏感,也可以是'yes'或者'no',大小写也不敏感;2、在pgsql中,实际字符串用单引号,双引号相当于mysql的``,用来包含关键字;decimal(n,m),本质是numeric,pgsql会帮转换。1、场景:字符串默认情况下是text类型,浮点默认是numeric;int,int4,int,integer:都是4位。(2)第二种方式,也可以在具体值的后面加 ::类型。(1)可以存储true,false,和null;|/ 平方根 |/4=2。

2024-07-19 11:48:08 1259

原创 PostgreSQL创建表和自增序列

2、pgsql没有auto_increment的概念,如何实现id自增?1、在mysql没有序列的概念,id自增通过auto_increment实现;二、查询、修改和删除和mysql没差别。方式一:创建序列,绑定表;

2024-07-18 17:07:17 1035

原创 PostgreSQL数据类型

一、pgsql的数据类型(数据类型比mysql丰富,但大部分与mysql都有对应)bit varying(n)可变长位图,类似redis的bitmaps。9、JSON类型: mysql有,但是没有pgsql功能丰富。jsonb:存储json的二进制,可以加索引。7、几何类型: mysql没有。json:本质上是字符串。bit(n)定长位图。8、数组:mysql没有。

2024-07-18 16:36:03 211

空空如也

空空如也

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

TA关注的人

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