自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 笔记自用自用

目录Javajvm内存模型一.运行时数据区二.类变量、实例变量、局部变量分别存储在什么地方三.类加载四.垃圾回收五.jvm调优Java内存模型一.线程之间如何进行通信二.重排序和内存屏障三.原子性、有序性、可见性四.本地内存和主内存交互的八大操作HashMap一.为什么HashMap底层数组的长度是2的幂次数二.HashMap的hash值是hashCode吗三.HashMap的树化条件四.HashMap的putVal方法线程池一.线程池的优点二.线程池的原理三.线程池的拒绝策略四.线程池的关闭和回收五.预置

2024-03-03 16:34:37 827

原创 SpringBoot读取配置文件

PropertySource + @ConfigurationProperties(需要为属性提供set方法)读取主配置文件(application.yml/application.properties)@ConfigurationProperties注解(需要为属性提供set方法)

2024-03-03 10:29:25 397

原创 Spring三种依赖注入的方式

场景:@Autowired先根据类型(byType)查找,如果存在多个 Bean 再根据名称(byName)查找,如果查找不到,启动就会报错。@Autowired支持Setter注入、构造器注入,属性注入,@Resource只支持Setter注入和属性注入。@Autowired先根据类型(byType)查找,如果存在多个 Bean 再根据名称(byName)查找。@Resource先根据名称(byName)查找,如果查不到,再根据类型(byType)进行查找。

2024-03-02 16:51:06 982 1

原创 共享锁与排他锁

共享锁与排它锁

2023-05-11 22:13:56 778 1

原创 初探Gradle

初探gradle

2023-03-18 22:46:50 579

原创 数据库事务ACID以及隔离级别

数据库事务隔离级别

2023-02-20 15:32:38 2003

原创 Java实现碧蓝航线连续作战

Java实现碧蓝航线连续作战

2023-02-14 21:32:33 668

原创 exe4j将jar包打成exe程序(详细)

用java语言的jar包生成可执行的exe程序

2023-02-14 19:50:39 480

原创 Spring事务的失效场景

Spring事务的失效场景及解决方案

2023-02-14 17:11:42 1396

原创 Spring的事务传播机制

Spring事务的七种传播机制

2023-02-13 20:17:58 2649

原创 HJ24 合唱队

牛客网算法题

2022-06-12 11:57:08 206

原创 一起走进迭代器模式

目录一.介绍二.UML类图三.示意代码四.使用场景五.在JDK中的应用一.介绍迭代器模式(Iterator Pattern)属于行为型模式。提供一个对象来顺序访问容器对象中的一系列数据,目的是在不暴露容器对象内部结构的情况下,让外部代码透明地访问容器的内部数据二.UML类图三.示意代码业务代码//抽象迭代器public interface Iterator { boolean hasNext(); Object next();}//抽象容器interface ICo

2022-01-09 20:23:21 207

原创 一起走进观察者模式

目录一.介绍二.场景约束三.UML类图四.示意代码(版本一)五.示意代码(版本二)六.观察者模式与发布订阅模式七.优点八.在JDK中的典型应用一.介绍观察者模式(Observer Pattern)属于行为型模式。定义了对象之间的一对多依赖,让多个观察者同时监听某一个主题对象,类似于广播机制,只需要分发广播,感兴趣的对象自动接收该广播。我们平常所说的Observer、Listener、Hook、Callback都和这个模式有关二.场景约束小孩(Baby)哭的时候会通知到爸爸(Dad)和妈妈(Mum),

2022-01-09 15:59:19 332

原创 一起走进状态模式

一.介绍状态模式(State Pattern)属于行为型模式。当控制一个对象状态转换的条件表达式过于复杂时,把相关判断逻辑提取出来,用各个不同的类进行表示,系统处于哪种情况,直接使用相应的状态类对象进行处理。这样能把原来复杂的逻辑判断简单化,消除了if-else、switch-case等冗余语句,代码更有层次性,并且具备良好的扩展力...

2022-01-07 21:22:52 518

原创 一起走进责任链模式

一.介绍责任链模式(Chain of Responsibility Pattern)属于行为型模式。该模式为请求创建了一个接收者对象的链,链中的每一个节点处理自己范围内的逻辑,如果一个节点不能处理该请求,那么它会把相同的请求传给下一个节点,依此类推。本文介绍自关联和非自关联两种实现方式二.场景约束客户端请求要在通过请求频率校验、登录认证、访问权限校验后,才能执行接下来的业务逻辑二.UML类图自关联Handler类本身封装了链条的下一个节点非自关联采用ArrayList维护链条四.自关

2022-01-05 21:14:33 413

原创 一起走进命令模式

目录一.介绍二.场景约束三.UML类图四.示意代码五.优点六.在JDK中的应用一.介绍命令模式(Command Pattern)属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令,执行顺序是调用者→命令→接收者,实现调用者(Invoker)与接收者(Receiver)解耦二.场景约束设计一个文本编辑器(TextField),支持复制、插入以及撤销操作三.UML类图四.示意代码业务代码//抽象命令p

2021-12-28 21:08:27 314

原创 一起走进策略模式

目录一.介绍二.场景约束三.UML类图四.具体代码五.使用场景六.优缺点七.在Spring中的应用一.介绍策略模式(Strategy Pattern)属于行为型模式。定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户策略模式的重心不是如何实现算法,而是如何组织这些算法,从而让程序结构更加灵活,具有更好的扩展性二.场景约束植物大战僵尸是一款极具策略性的游戏,里面僵尸的种类特别多,不同僵尸的攻击方式可能不一样,甚至同一种僵尸的攻击方式都是可以变化的。比如

2021-12-26 18:20:26 404

原创 一起走进模板方法模式

目录一.介绍二.意图三.UML类图四.具体代码五.在JDK中的典型应用六.在Spring中的应用七.设计思想一.介绍模板方法模式(Template Method Pattern)属于行为型模式。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。二.意图 基本算法可以固定,其中部分细节可以变化 方便的复用逻辑 控制子类只允许在特定的钩子点进行扩展三.UML类图四.具体代码业务代码public abstract cla

2021-12-25 20:20:33 197

原创 一起走进组合模式

目录一.介绍二.UML类图三.具体代码四.使用场景五.优点一.介绍组合模式(Composite Pattern)属于结构型模式。组合模式又叫作部分整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示整体-部分的关系,color=‘green’>使用户对单个对象和组合对象具有一致的访问性。组合模式有透明方式和安全方式两种实现方式二.UML类图1.透明方式抽象节点中定义了规范,客户端无需区别叶子节点和树枝节点,使用方便叶子节点本来无add、remove、getChild方法,但是因

2021-12-25 15:29:44 525 1

原创 一起走进门面模式

一.介绍门面模式(Facade Pattern)属于结构型模式。门面模式又叫作外观模式,通过给多个复杂的子系统提供一个门面(高层接口),使这些子系统更加容易的被访问,客户端与门面直接通信,封装/隐藏背后子系统的细节与复杂度二.UML类图未使用门面模式使用门面模式三.具体代码业务代码class Facade { private SubSystem1 subSystem1 = new SubSystem1(); private SubSystem2 subSystem2 = n

2021-12-25 13:36:01 406

原创 一起走进装饰器模式

目录一.介绍二.UML类图三.具体代码四.装饰器模式与代理模式对比五.使用场景六.在JDK中的应用七.在Spring中的应用八.优点一.介绍装饰器模式(Decorator Pattern)属于结构型模式。在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能),不同装饰类之间可以灵活的排列组合二.UML类图三.具体代码业务代码//抽象装饰public abstract class Decorator implements Component{ protected

2021-12-22 22:25:15 268

原创 一起走进桥接模式

目录一.介绍二.场景理解三.UML类图四.具体代码五.优缺点六.使用场景一.介绍桥接模式(Bridge Pattern)属于结构型模式。用于将抽象与其实现解耦,使得二者可以独立变化。桥接模式使用组合/聚合替代继承,从而连接功能层面与实现层面,把强关联转为弱关联之后进行双向扩展适配器模式可以在抽象层不变的情况下,对实现进行扩展和变化;而桥接模式可以在抽象和实现两个维度独立扩展和变化二.场景理解JPA是ORM框架的抽象,或者说是Java提供的持久化标准,而Hibernate与TopLink则是ORM框

2021-12-21 21:52:07 2163

原创 一起走进适配器模式

目录一.介绍二.场景约束三.UML类图四.具体代码五.使用场景六.适配器模式与代理模式对比七.在JDK中的应用八.在Spring中的应用一.介绍适配器模式(Adapter Pattern)属于结构型模式。将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。例如电源转换头、数据线转换头、翻译等。适配器模式分为类适配器和对象适配器两种实现方式二.场景约束 适配者和目标接口都已经存在,不易修改接口代码 抽象接口希望复用已有组件的逻辑三.UML类图类

2021-12-20 21:40:52 327

原创 设计模式七大原则

设计模式要找到变化的内容中不变的部分,没有完美的设计模式,作为一名开发者要懂得取舍,触类旁通,开发出高内聚、低耦合、灵活性更高的软件产品1.开闭原则(软件设计第一原则)定义:一个软件实体应该对扩展开放,对修改关闭,即在不修改源代码的基础上扩展软件功能本质思想: 以抽象来固定不变的东西(把固定不变的抽出来) 使用具体实现对可变性进行封装/隐藏 面向抽象编程2.依赖倒置原则开闭原则是目标,依赖倒置是手段三层含义: 高层模块不应该依赖于低层模块,两者都应该依赖其抽象(例如

2021-12-15 22:02:48 579

原创 一起走进享元模式

一.介绍享元模式(Flyweight Pattern)运用共享技术有效地减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它通过共享已存在的对象来大幅度的减少对象的创建,避免大量相似对象的开销,适用于频繁创建享元对象的场景二.场景下面的图片是众所周知的俄罗斯方块中的一个个方块,如果在俄罗斯方块这个游戏中,每个不同的方块都是一个实例对象,这些对象就要占用很多的内存空间,我们可以使用享元模式来节省内存使用三.UML类图四.具体代码1.本案例中使用HashMap数据结

2021-12-14 21:03:06 272

原创 一起走进代理模式

一.介绍在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口二.UML类图三.代理模式分类Java中的代理按照代理类生成时机不同分为静态代理和动态代理,静态代理的代理类在编译器就生成,而动态代理的代理类在Java运行时动态生成。动态代理又分为JDK代理和CGLib代理。四.静态代理业务代码/** * 静态代理 */public interface Pay { vo

2021-12-12 14:48:54 380

原创 一起走进建造者模式

一.介绍建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。如果一个对象的构造很复杂或者有顺序要求、甚至对象中的某些属性的创建也有一个很复杂的过程,就可以使用建造者模式二.UML类图三.具体代码业务代码public class Product { private String part1; private String part2; public Product

2021-12-11 20:21:19 391

原创 一起走进原型模式

一.介绍原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式二....

2021-12-11 17:02:57 571

原创 一起走进抽象工厂模式

一.介绍抽象工厂模式(Abstract Factory Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类,每个生成的工厂都能按照工厂模式提供对象。工厂方法模式针对产品等级,而抽象工厂模式针对产品族二.比较抽象工厂模式与工厂方法模式工厂方法模式可以参考我写的这篇一起走进工厂方法模式三.UML类图如果从同一产品等级层面看,我们只关注上半部分的DataBase与Connection,就会发现实则使用的就是工厂方法

2021-12-06 22:04:45 901

原创 一起走进工厂方法模式

一. 简单工厂思想在学习工厂方法模式前,先来了解一下简单工厂的缺点违背了开闭原则(对扩展开放,对修改关闭)扩展性不高(要去改动getProduct方法)工厂类(SimpleFactory)与ProductA、ProductB、ProductC的耦合度太高class SimpleFactory { //根据type创建不同的产品 public Product createProduct(int type) { if (type == 0) {

2021-12-05 16:48:48 470

原创 一起走进单例模式

一.介绍单例模式(Singleton Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象(不需要手动去new)。本文会结合源码加深你对单例模式的理解二.实现方式大体上分为四种实现方式:饿汉式、懒汉式、静态内部类、枚举类实现思想基本一致: 提供一个唯一的私有实例 私有化构造器 提供一个公共方法获取私有实例饿汉式/*

2021-12-05 12:46:08 535 1

原创 SpringBoot启动时打印的时间是如何计算的?

一.现象我们都知道SpringBoot启动时会打印时间,那么内部是如何计算的呢?二.本质获取时间间隔计算秒数(Started springBoot in 20.763 seconds)记录开始的毫秒数计算毫秒数(Root WebApplicationContext: initialization completed in 612 ms)...

2021-12-02 22:16:45 1764

原创 Android隐藏虚拟按键

直接在onCreate方法里面调用如下方法即可protected void hideBottomUI() { int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYST

2020-11-05 11:34:59 707

原创 使用Fiddler进行手机软件的抓包

一.配置Fiddler1.Tools–>Options–>HTTPS,勾选上Capture HTTPS CONNECTS和Decrypt HTTPS traffic2.Tools–>Options–>Connections,Filddler listens on port的值设置为8888,勾选Allow remote computers to connect,配置完成后点击ok,不要关闭Fiddler二.手机网络配置1.手机与电脑连接同一个WIFI或者电脑连接手机的热点

2020-08-26 18:50:50 300

原创 GET/POST请求传递给三方接口的参数中文乱码的问题以及问题延伸

测试服务器调用接口不会传递出乱码,而在本地服务器调用接口会传递出中文的乱码,所以我定位到是tomcat的问题1.检查tomcat\conf\server.xml文件,发现已经设置了URIEncoding=“UTF-8”,所以排除是这块的原因 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redir

2020-08-25 18:20:52 1439

原创 Vue初体验:鼠标悬停控制元素高亮效果

使用变量location记录鼠标悬停的行,在遍历列表时比对index与location是否一致来控制高亮<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>test</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script&g

2020-07-30 16:33:57 1617

原创 MySQL数据库查询按照中文姓名排序

SELECT * FROM 表名 ORDER BY CONVERT(name USING gbk);将姓名转为gbk编码,排序才有效

2020-06-19 13:45:14 5431

原创 java.lang.IllegalArgumentException: Invalid character found in the request target

ERROR: java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986解决方案在tomcat/conf/server.xml的Connector标签中添加两个属性rel...

2019-11-02 14:56:21 292

原创 Error No.2058 Plugin caching_sha2_password could not be loaded

因为mysql新版加密方式改变,远程连接docker中的mysql出错解决方案1.进入运行中的mysql容器docker exec -it 容器名或id bash2.登陆mysqlmysql -root账号 -p密码3.修改加密方式ALTER USER'root'@'localhost' IDENTIFIED BY '填写密码' PASSWORD EXPIRE NEVER;4...

2019-10-06 20:40:33 147

原创 springboot实现语言切换

1.编写国际化配置文件配置文件中定义与语言相关的数据例如login_en_US.properties#英文login.btn=Sign In login.password=Passwordlogin.Remember=Remember Me login.tip=Please sign inlogin.username=UserName 2.页面使用thymeleaf的#...

2019-10-03 17:03:32 2058

空空如也

空空如也

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

TA关注的人

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