自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

运气只是当机会来临时,你已为它准备好。

难道向上攀爬的那条路不是比站在顶峰更令人热血澎湃吗?

  • 博客(86)
  • 收藏
  • 关注

原创 Spring Boot中异步线程池@Async

自定义线程池,可对系统中线程池更加细粒度的控制,方便调整线程池大小配置,线程执行异常控制和处理。在设置系统自定义线程池代替默认线程池时,虽可通过多种模式设置,但替换默认线程池最终产生的线程池有且只能设置一个(不能设置多个类继承 AsyncConfigurer)。重新实现接口 AsyncConfigurer;继承 AsyncConfigurerSupport;配置由自定义的 TaskExecutor 替代内置的任务执行器。

2024-02-01 16:44:58 1444

原创 使用自定义注解+反射,实现字典转换

也可不使用切面,定义工具类进行处理。

2023-08-21 16:27:29 323

原创 设计模式之美-结构型模式-装饰器模式

装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,装饰器模式提供了比继承更有弹性的替代方案将功能附加到对象上。因此,装饰器模式的核心功能是功能扩展,使用装饰器模式可以透明且动态的扩展类的功能。装饰器模式还有一个特点,那就是可以对原始类嵌套使用多个装饰器。为了满足这个应用场景,在设计的时候,装饰器类需要跟原始类继承相同的抽象类或者接口。

2023-04-13 16:37:13 550 1

原创 设计模式之美-结构型模式-桥接模式

定义中的“抽象”,指的并非“抽象类”或“接口”,而是被抽象出来的一套“类库”,它只包含骨架代码,真正的业务逻辑需要委派给定义中的“实现”来完成。而定义中的“实现”,也并非“接口的实现类”,而是的一套独立的“类库”。实现部分,可以为接口或者是抽象类,其方法不一定要与抽象部分中的一致,一般情况下是由实现部分提供基本的操作,而抽象部分定义的则是基于实现部分基本操作的业务方法。桥接模式可以取代多层继承的方案。桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。

2023-03-31 17:17:47 559

原创 java Stream流

在在的版本中,借助直观感受上,Stream的实现方式代码更加简洁、一气呵成。在代码中也经常使用Stream流,但是对Stream流的认知往往也是仅限于会一些简单的filtermapcollect等操作,但JAVA的Stream可以适用的场景与能力远不止这些。?这里我们可以先搁置这个问题,先整体全面的了解下Stream,然后再来讨论下这个问题。笔者结合在团队中多年的代码检视遇到的情况,结合平时项目编码实践经验,对。

2023-03-31 16:59:03 421

原创 设计模式之美-结构型模式-代理模式

在不改变原始类(或叫被代理类)的情况下,通过引入代理类来给原始类附加功能。一般情况下,我们让代理类和原始类实现同样的接口。但是,如果原始类并没有定义接口,并且原始类代码并不是我们开发维护的。在这种情况下,我们可以通过让代理类继承原始类的方法来实现代理模式。静态代理需要针对每个类都创建一个代理类,并且每个代理类中的代码都有点像模板式的“重复”代码,增加了维护成本和开发成本。对于静态代理存在的问题,我们可以通过动态代理来解决。

2023-03-29 16:39:11 425

原创 idea合并分支

我们在开发一个功能的过程中,可能会在本地分支上多次提交,那就会产生多次提交的记录,比较零碎,那么有没有什么办法把多次提交合并成一次呢。③ 基于master 分支创建一个新的分支:feature-2,并切换到 feature-2 分支。① 基于master分支创建一个分支:feature-1,并切换到 feature-1 分支。⑦ 将 feature-2 分支提交到远程,以后就可以使用 feature-2 分支开发了。左上红框是,我修改的分支(这里可以任选一个分支),右下切换到我需要提交代码的测试分支。

2023-03-28 10:15:40 12452

原创 设计模式之美-创建型模式-原型模式

浅拷贝:当拷贝对象包含基本数据类型(如int、long)或者不可变的对象(如字符串、基本类型的包装类)时,会直接将这些属性复制到新的对象中。如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。2、安全访问场景:当某个对象对外可能是只读的,为了防止外部对这个只读对象的修改,通常可以通过返回一个对象拷贝的形式实现只读的限制。现在已经有很多针对浅深拷贝的工具类。

2023-03-22 16:51:09 415

原创 设计模式之美-创建型模式-建造者模式

2.在建造过程完成后,提供产品的实例。认识这点是很重要的,因为在建造模式中,强调的是固定整体构建的算法,而灵活扩展和切换部件的具体构造和产品装配的方式。**建造模式可以强制实行一种分步骤进行的建造过程,因此,如果产品对象的一个属性必须在另一个属性被赋值之后才可以被赋值,使用建造模式是一个很好的设计思想。应当指出的是,导演者角色并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色。2、建造者抽象(Builder):建造者的抽象类,规范产品对象的各个组成部分的建造,一般由子类实现具体的建造过程。

2023-03-14 16:55:56 277

原创 设计模式之美-创建型模式-工厂与抽象工厂模式

分类:简单工厂模式(静态工厂模式),工厂方法模式,抽象工厂模式。这种设计模式也是 Java 开发中最常见的一种模式,它的主要意图是定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。简单说就是为了提供代码结构的扩展性,屏蔽每一个功能类中的具体实现逻辑。让外部可以更加简单的只是知道调用即可,同时,这也是去掉众多ifelse的方式。当然这可能也有一些缺点,比如需要实现的类非常多,如何去维护,怎样减低开发成本。但这些问题都可以在后续的设计模式结合使用中,逐步降低。

2023-03-10 14:59:58 746

原创 设计模式之美-创建型模式-单例模式

进程在使用这个单例对象的时候,需要先从外部共享存储区中将它读取到内存,并反序列化成对象,然后再使用,使用完成之后还需要再存储回外部共享存储区。对应地,“多例”指的就是一个类可以创建多个对象,但是个数是有限制的,比如只能创建 3 个对象。单例类中对象的唯一性的作用范围是“进程唯一”的。实际上,“进程唯一”就意味着线程内、线程间都唯一,这也是“进程唯一”和“线程唯一”的区别之处。饿汉式的实现方式,在类加载的期间,就已经将 instance 静态实例初始化好了,所以,instance 实例的创建是线程安全的。

2023-03-10 14:47:56 606 1

原创 git拉取和推送

3、将与本地当前分支同名的远程分支 拉取到 本地当前分支上(需先关联远程分支,方法见文章末尾,只需关联一次)在克隆远程项目的时候,本地分支会自动与远程仓库建立追踪关系,可以使用默认的origin来替代远程仓库名。3、将本地当前分支 推送到 与本地当前分支同名的远程分支上(需先关联远程分支,方法见文章末尾)(注:命令里的尖括号只是包裹中文的标识,方便你看的,实际使用时不用写,不过冒号需要)将本地分支与远程同名分支相关联。

2022-12-26 10:36:49 835

原创 Java中的一些编程规范

除此之外,值得强调的是,不管是用两格缩进还是四格缩进,在使用 tab 键进行缩进时要注意缩进格数,因为在不同的IDE,tab键的缩进格数是不一致的,当然IDE也提供了设置tab键的缩进格数来帮助我们解决此问题,所以到底使用空格还是tab可以根据个人习惯选择。但是,将大括号另起一行,也有它的优势,那就是,左右括号可以垂直对齐,哪些代码属于哪一个代码块,更加一目了然。一般可以借助类的信息来简化属性、函数的命名,利用函数的信息来简化函数参数的命。作用域小的变量(比如临时变量),可以适当地选择短一些的命名方式。

2022-12-22 11:35:46 674

原创 设计模式之美-重构

大规模高层次重构:指的是对顶层代码设计的重构,包括系统、模块、代码结构、类与类之间的关系等的重构,重构的手段有:分层、模块化、解耦、抽象可复用组件等等。小规模低层次的重构:指的是对代码细节的重构,主要是针对类、函数、变量等代码级别的重构,比如规范命名、规范注释、消除超大类或函数、提取重复代码等等。优秀的代码或架构不是一开始就能完全设计好的,我们无法 100% 遇见未来的需求,也没有足够的精力、时间、资源为遥远的未来买单,所以,随着系统的演进,重构代码也是不可避免的。重构是避免过度设计的有效手段。

2022-12-15 14:56:40 492

原创 设计模式之美-设计原则-KISS,YAGNL,DRY,迪米特法则

迪米特法则是希望减少类之间的耦合,让类越独立越好。每个类都应该少了解系统的其他部分。一旦发生变化,需要了解这一变化的类就会比较少。

2022-12-15 14:55:29 464

原创 设计模式之美-设计原则-依赖反转原则

这里所说的“控制”指的是对程序执行流程的控制,而“反转”指的是在没有使用框架之前,程序员自己控制整个程序的执行。我们通过依赖注入框架提供的扩展点,简单配置一下所有需要的类及其类与类之间依赖关系,就可以实现由框架来自动创建对象、管理对象的生命周期、依赖注入等原本需要程序员来做的事情。我们不通过 new 的方式在类内部创建依赖类的对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类来使用。依赖反转原则也叫作依赖倒置原则。抽象不要依赖具体实现细节,具体实现细节依赖抽象。

2022-11-29 11:56:22 154

原创 两个Map的合并操作

merge(param1,param2,param3) : 第一个参数为要合并的key,第二个参数为要合并的value,第三个参数接收两个参数的函数,用来处理重复的 key值出现的处理逻辑,(v1,v2) -> v1)表示使用map1的value值,(v1,v2) -> v2)表示使用map2的value值。如果remapping函数的计算结果为null,将解除此结果。map2的结果是map2和map的lambda结果集,而map则还是原来的map。

2022-11-01 11:28:42 21831

原创 解决Idea Translation插件翻译失败 更新TKK失败 time out 问题

ip获取:命令行 ping translate.google.cn 会返回对应的ip,然后加上translate.googleapis.com。在有的idea版本里面,在这个界面会有一个是否使用translate.googleapis.com网站的勾选。【修改C:\Windows\System32\drivers\etc 下hosts文件。由于谷歌翻译默认访问的是国际的网站translate.googleapis.com。所以需要更改host文件 ,将下面一段代码插入即可。让其访问国内的地址。

2022-10-09 17:31:38 1480 1

原创 设计模式之美-设计原则-单一职责原则

随着业务的发展,如果粗粒度的类越来越庞大,代码越来越多,这个时候,我们就可以将这个粗粒度的类,拆分成几个更细粒度的类。比较难给类起一个合适名字,很难用一个业务名词概括,或者只能用一些笼统的Manager、Context 之类的词语来命名,这就说明类的职责定义得可能不够清晰,需要拆分;私有方法过多,我们就要考虑能否将私有方法独立到新的类中,设置为 public 方法,供更多的类使用,从而提高代码的复用性;类依赖的其他类过多,或者依赖类的其他类过多,不符合高内聚、低耦合的设计思想,我们就需要考虑对类进行拆分;

2022-09-27 15:12:34 250

原创 设计模式之美-面向对象

is a代表的是类之间的继承关系,比如PC机是计算机,工作站也是计算机。PC机和工作站是两种不同类型的计算机,但都继承了计算机的共同特性。因此在用Java语言实现时,应该将PC机和工作站定义成两种类,均继承计算机类。has a代表的是对象和它的成员的从属关系。同一种类的对象,通过它们的属性的不同值来区别。比如一台PC机的操作系统是Windows,另一台PC机的操作系统是Linux。操作系统是PC机的一个成员变量,根据这一成员变量的不同值,可以区分不同的PC机对象。

2022-09-27 15:11:00 259

原创 spring三级缓存

Spring就是在对象外面包一层ObjectFactory,提前曝光的是ObjectFactory对象,在被注入时才在ObjectFactory.getObject方式内实时生成代理对象,并将生成好的代理对象放入到第二级缓存Map earlySingletonObjects。如果创建的Bean有对应的代理,那其他对象注入时,注入的应该是对应的代理对象;不管有没有循环依赖,都提前创建好代理对象,并将代理对象放入缓存,出现循环依赖时,其他对象直接就可以取到代理对象并注入。

2022-09-27 15:04:45 252

原创 设计模式之美-如何评价代码质量的高低,面向对象,设计原则,设计模式,编程规范,重构,五者间的关系

除此之外,代码的易维护性还跟项目代码量的多少、业务的复杂程度、利用到的技术的复杂程度、文档是否全面、团队成员的开发水 平等诸多因素有关。面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式编码实现的基础。持续重构是保持代码质量不下降的有效手段,能有效避免代码腐化到无可救药的地步 ,而重构的工具就是我们前面罗列的那些面向对象设计思想、设计原则、设计模式、编码规范。代码的可复用性可以简单地理解为,尽量减少重复代码的编写,复用已有的代码。

2022-09-27 14:43:25 154

原创 Mysql数据重复问题处理

group by "重复字段" having count(1) > 1 ) b);group by "重复字段" having count(1) > 1 )group by "重复字段" having count(1) > 1 );where "字段" = 'xx'where "字段" = 'xx'where "字段" = 'xx'where "字段" = 'xx'(select "重复字段"(select "重复字段"where " 字段"= 'xx'where "字段" = 'xx'

2022-09-08 10:24:58 621

原创 Java的序列化和反序列化

序列化:把对象转换为字节序列的过程称为对象的序列化.反序列化:把字节序列恢复为对象的过程称为对象的反序列化.当我们只在本地 JVM 里运行下 Java 实例, 这个时候是不需要什么序列化和反序列化的, 但当我们需要将内存中的对象持久化到磁盘, 数据库中时, 当我们需要与浏览器进行交互时, 当我们需要实现 RPC 时, 这个时候就需要序列化和反序列化了.也就是说在 Java 中实现了 Serializable 接口后, JVM就会在底层帮我们实现序列化和反序列化,...

2022-08-26 17:31:08 151

原创 部分会导致索引失效的情况

使所有索引都有效的方案:将c放到建立索引的语句的最后,例如:建立(a,b,d,c)的索引(a,b,d的顺序可以任意调整),这样执行sql的时候,优化器会帮我们调整WHERE后a,b,c,d的顺序(将c放到最后),让我们用上索引。其实单个索引字段,使用is null或is not null时,是可以命中索引的,但是两个不同索引字段用or连接时,索引就失效了。叶子节点的b值为1,2,1,4,1,2,它不是有序的,因此不能使用(a,b)联合索引。假设USER表中的user_id列有索引,age列没有索引。...

2022-08-11 14:03:32 2481

原创 Mysql时间计算相关函数

代码】Mysql时间计算相关函数。

2022-08-11 12:32:05 207

原创 MySQL的MVCC多版本并发控制

为了解决在并发访问数据库系统时在保证数据一致性的情况下同时不降低读写效率而存在的技术对于使用 InnoDB 存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列trx_id :每次一个事务对某条聚簇索引记录进行改动时,都会把该事务的 事务id 赋值给 trx_id 隐藏列。roll_pointer :每次对某条聚簇索引记录进行改动时,都会把旧的版本写入到 undo日志 中,然后这个隐藏 列就相当于一个指针,可以通过它来找到该记录修改前的信息。数据库每次对记录的改动都会生成一个undo日志,将旧记录放入

2022-06-23 16:19:49 201

原创 MySQL事务的隔离级别

并发务带来的问题脏写(Dirty Write):如果一个事务修改了另一个未提交事务修改过的数据,那就意味着发生了脏写。 脏读(Dirty Read):如果一个事务读到了另一个未提交事务修改过的数据,那就意味着发生了脏读。 不可重复读(Non-repeatable Read):如果一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值,那就意味着发生了不可重复读。 幻读(Phantom):如果一个事务先根据某些条件查询出一些记录,之后另一个事务有

2022-06-23 16:18:58 247

原创 shell入门概述

shell 的两层含义: 既是一种应用程序, 又是一种程序设计语言交互式地解释、 执行用户输入的命令, 将用户的操作翻译成机器可以识别的语言, 完成相应功能 , 称之为 shell 命令解析器 是 用户 和 Linux 内核 之间的接口程序用户在提示符下输入的命令都由 先解释然后传给 Linux 核心它调用了系统核心的大部分功能来执行程序、 并以并行的方式协调各个程序的运行Linux 系统中提供了好几种不同的 命令解释器, 如 sh、 ash、 bash 等。 一般默认使用 作为默认的解释器。 是用户

2022-06-23 16:08:00 262

原创 ​修改 .gitignore 未生效的解决方案​

把某些目录或文件加入忽略规则,发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:添加 到 .gitignore移除缓存添加当前信息提交信息...

2022-06-23 16:01:23 377

原创 Elasticsearch学习

https://so.csdn.net/so/search?q=Elasticsearch&spm=1001.2101.3001.7020https://so.csdn.net/so/search?q=Elasticsearch&spm=1001.2101.3001.7020

2022-06-23 15:58:13 97

原创 MySQL事务

事务(transaction): 在数据库一般把需要保证原子性 、 隔离性 、 一致性和持久性 的一个或多个数据库操作称之为一个事务 。事务是一个完整不可分割的整体,在数据库中一般认为要么全做,要么全不做的规则称为原子性。多个事务之间相互独立。每个事务的对象对其他事务的操作对象相互分离,事务提交前对其他事务不可见。以对于现实世界中状态转换对应的某些数据库操作来说,不仅要保证这些操作以原子性的方式执行完成,而且要保证其它的状态转换不会影响到本次状态转换,这个规则被称之为隔离性 。如果数据库中的数据全部符合现实

2022-06-23 15:51:41 313

原创 MySQL索引合并

一般认为使用到多个索引来完成一次查询 的执行方法称之为: index merge ,具体的索引合并算法有下边三种。Intersection合并Intersection 翻译过来的意思是 交集 。这里是说某个查询可以使用多个二级索引,将从多个二级索引中查询到的结果取交集,也就是得到主键值的交集,然后再去回表查询到需要得到的信息。Intersection索引合并的适用场景是单独根据搜索条件从某个二级索引中获取的记录数太多,导致回 表开销太大,合并后可以明显降低回表开销,从而使用索引合并。MySQL 在某些特定的

2022-06-23 15:37:10 1160

原创 MySQL访问方法

const一般认为通过主键或者唯一二级索引列来定位一条记录的访问方法定义为:const。const表示常数级别,代价是可以忽略不计的。不过这种 const 访问方法只能在主键列或者唯一二级索引列和一个常数进行等值比较时才 有效,如果主键或者唯一二级索引是由多个列构成的话,索引中的每一个列都需要与常数进行等值比较,这个 const 访问方法才有效(这是因为只有该索引中全部列都采用等值比较才可以定位唯一的一条记录)。执行过程:聚簇索引(主键索引) 唯一二级索引: ref一般把搜索条件为二级索引列与常数等值比较,

2022-06-23 15:35:57 610

原创 MySQL索引

索引主要用来提高查询效率,索引和实际的数据都是存储在磁盘的,只不过在进行数据的读取的时候会优先把索引加载的内存中。索引的本质是一种数据结构索引特点优点:大大加快查询速度使用分组和排序时,可以显著减少查询时分组和排序的时间创建唯一索引,能够保证数据库中每一行数据的唯一性在实现数据的参考完整性方面,可以加快和表之间的连接缺点创建索引和维护索引需要消耗时间,并且随着数据量的增加,时间也会增加索引需要占据磁盘空间对数据表中的数据进行增加,修改,删除时,索引也要动态的维护,降低了维护的速度按数据结构分类:Hash索引

2022-06-14 11:25:33 140

原创 java数据结构

枚举(Enumeration)位集合(BitSet)向量(Vector)栈(Stack)字典(Dictionary)哈希表(Hashtable)属性(Properties)Java Stack 类栈是Vector的一个子类,它实现了一个标准的后进先出的栈。堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。 Stack()除了由Vector定义的所有方法,自己也定义了一些方法:Java Hashtable 类Hashtable和Ha

2022-06-14 11:17:21 86

原创 MySQL的SELECT注意事项,正则表达式,常用函数,explain的简单解析

使用ORDER BY和LIMIT关键字可以检索出表中最高后最低的值。MySQl在查询执行匹配时默认不区分大小写。单引号用来限定字符串,如果将值与串类型的列进行比较,则需要限定引号,用来与数值列进行比较的值不要用引号。在任何时候使用具有AND和OR操作符的WHERE字句,都应该使用圆括号明确的分组操作符。MySQL支持使用NOT对IN、BETWEEN和 EXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件 取反有很大的差别。通配符的使用(通配符搜索的处理一般要比其他搜索所花时间长)不要过度使用通

2022-06-14 11:15:54 436

原创 MYSQL简单介绍

表:某种特定类型数据的结构化清单。模式:关于数据库和表的布局及特性的信息主键(primary Key):一列(或一组列),其值能够唯一区分表中的每一行。真实的数据在不同的存储引擎中存放的格式一般是不同的主键的强制规则:任意两行都不具有相同的主键值每个行都必须具有一个主键值(主键列不允许有NULL值)主键的最好习惯:不更新主键列中的值不重用主键列的值不在主键列中使用可能会更改的值。MYSQL查询出的数据行数是从行0开始的,类似数组SQL(发音为字母S-Q-L或sequel)是结构化查询语言(Structure

2022-06-14 11:11:23 397

原创 IDEA常用快捷键

为方便大家提升IDEA开发操作效率,参考了 IntelliJ IDEA 的官网,列举了IntelliJ IDEA(Windows 版本)的所有快捷键。使用此命令后,IntelliJ IDEA 会编译项目中所有类,并将编译结果输出到目录中。IntelliJ IDEA 支持增量构建,也就是再次使用该命令会在上次构建的基础上,仅编译修改的类 :重新编译当前类 为了可以看到效果 可以先删除out目录,在IntelliJ IDEA 中打开要编译的类,执行该命令会编译当前类。剪切选中文本,若未选中则剪切当前行。剪切前

2022-06-01 14:24:13 2301

原创 IDEA主题设置,自定义主题

1|0▾ 系统主题设置首先进到设置里:File➞Settings➞Appearance&Behavior➞Appearance。这里默认提供了三套主题:IntelliJ,Darcula,high contrast。这里可以根据个人爱好进行设置。IntelliJ样式Darcula样式high constract样式系统字体样式2|0▾ 导入其他IDEA主题IDEA默认主题IDEA默认提供了三个编辑区主题,可以通过如下的方式进行选择。

2022-05-30 14:51:20 13890 2

空空如也

空空如也

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

TA关注的人

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