![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 58
if_icanfly
这个作者很懒,什么都没留下…
展开
-
设计模式-策略模式
策略模式的主要角色:抽象策略类Strategy: 通常是一个接口或者抽象类具体策略类: 实现抽象策略类 通常有多个环境类: 持有一个策略类的引用,最终给客户端调用代码实现抽象策略类:通常是一个接口或者抽象类/** * 支付抽象策略类()接口 * * @author Administrator */public interface PayStrategy { /** * 支付功能 */ void pay();}具体策略类:实现了抽象原创 2022-02-24 15:27:42 · 336 阅读 · 0 评论 -
设计模式-适配器模式
适配器模式(adapter)主要包含以下角色:目标(target)接口:当前系统业务锁期待的接口.他可以是抽象类或者接口.适配者(adaptee)类:他是需要被适配的现存组件.适配器(adapter)类:转换器,通过继承或者引用适配者的对象,把适配者接口转换成目标接口.1.类适配器模式实现方式: 定义一个适配器类来实现当前系统业务接口,同时也继承现有组件库中已经存在的组件/** * 类适配器测试类 * 以手机type-c接口为例 * type-c接口的手机都是没有单独的耳.原创 2022-02-21 16:23:20 · 110 阅读 · 0 评论 -
设计模式-单例模式
单列模式的定义:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池,缓存,日志对象,对话框等常被设计成单例单例模式的特点:1.单例类智能有一个实例.2.单例类必须自己创建自己的唯一实例.3.单例类必须给其他对象提供这一实例.实现单列的5种方式懒汉式:默认不会实例化,第一次使用的时候实例化.(可能会由有线程安全问题)1.双重检查,已解决线程安全问题【推荐使用】public class Singleton4 { pri.原创 2022-02-08 11:29:51 · 340 阅读 · 0 评论 -
java多线程
1.线程/进程2.线程的状态1.新建状态:新创建一个线程对象(比如 new thread())2.就绪状态:调用了线程对象的start()方法就会进入就绪状态,但不意味着立即执行,还需要等待cpu分配时间3.运行状态: 获得了cpu使用权,进入运行状态,执行线程体的代码块.4.阻塞状态: 由于某种原因导致线程失去了cpu的使用权,暂时停止运行,比如wait(),sleep();5.死亡状态:线程执行完毕或因为异常推出了run()方法,该线程的生命周期结束.状态转化图:原创 2022-01-20 18:26:03 · 365 阅读 · 0 评论 -
SpringMVC
MVCMVC是一种架构,或者说是一种设计模式,这种设计模式将应用分成三个部分,M(模型),V(视图),C(控制器)MVC优点:1.分工明确,松耦合,复用性高,前后端分离,后端开发只需要关注于业务的开发,而不需要关注页面的开发,mvc三个模块相互独立,松耦合架构,多视图共享一个模型,业务层代码复用率更高M: Model(模型)包含:service,pojo,entity,dao等V:View(视图)包含:html,jsp,pdf,excel等C: Controller原创 2022-01-12 14:26:36 · 102 阅读 · 0 评论 -
分布式锁Redisson简单使用
springboot整合redisson1.添加redisson依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.16.3</version>原创 2022-01-11 17:17:46 · 856 阅读 · 0 评论 -
SpringCloudAlibaba Seata AT模式简单理解
一.seata简介Seata官方文档http://seata.io/zh-cn/docs/overview/what-is-seata.htmlSeata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。阿里巴巴推荐使用AT模式整体机制两阶段提交协议的演变: 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。 二.原创 2022-01-11 17:15:30 · 185 阅读 · 0 评论 -
记一次@NonNull导致无法序列化的问题
以上这个代码在接参的时候报了一个缺少无参构造函数无法序列化的错误将.class反编译可以看到编译后的源码中生成了一个有参构造 明显是 用来判空的 假设那么这个构造函数应该就是根据@NOTNULL生成的玛德 导错包了应该导的是第一个才对上面因为lombook生成了一个有参构造函数,导致jdk不会添加默认的无参构造函数,没有无参构造函数的话 序列化就会失败....原创 2021-11-25 14:46:44 · 460 阅读 · 0 评论 -
Redis
一.概述1.什么是redisredis是一个高性能的运行在内存中的非关系型数据库,由c语言编写.2.redis优缺点优点①.读写性能优异,读的速度可以达到110000次/s 写的速度可以达到81000次/s.②.支持数据持久化 支持AOF与RDB两种持久化方案.③.支持事务④.数据类型丰富,除了String,hash,set,zset,list等常规的类型外,还有HyperLogLog,Geo,bitmaps⑤.支持主从复制,可以进行读写分离缺点...原创 2021-11-16 17:36:03 · 154 阅读 · 0 评论 -
HashSet源码解读
关键属性// hashset底层实际就是维护了一个hashmap private transient HashMap<E,Object> map;// 对象关联的虚拟值 简单来说 就是所有key的value值private static final Object PRESENT = new Object();关键方法构造方法:这三个构造方法实际就是调用了hashmap的构造方法add方法hashset的add方法实际上就是调用了hashmap的..原创 2021-11-11 11:42:07 · 385 阅读 · 0 评论 -
ArrayList源码分析(1.8 部分源码)
// 默认初始容量 10private static final int DEFAULT_CAPACITY = 10;// 共享空数组实例。private static final Object[] EMPTY_ELEMENTDATA = {};// 默认容量空元素数据 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};// 元素数据 真实的存放数据的数组transient Object[] ele.原创 2021-11-10 17:11:22 · 82 阅读 · 0 评论 -
System.arraycopy方法参数
方法在java.lang.System中的源码如下public static native void arraycopy(Object src, int srcPos, Object dest, int destPos,int length);可以看出这是一个本地方法 具体在吗实现不得而知参数详解:src 源数组srcPos 源数组起始索引dest 目标数组destPost 目标数组起始索引length 复制的长度将数组src中的数据复制到dest中 从...原创 2021-11-10 16:42:44 · 206 阅读 · 0 评论 -
HashMap在JDK1.7和JDK1.8中的区别
1.底层数据结构不同jdk1.7 数组+链表jdk1.8 数组+链表+红黑树 树化阈值8 取消树化阈值6数组的名字也不同 1.7中交Entry 1.8交Node 属性都一样 都继承Map.Entry2.空参构造方法不同1.7中 调用空参构造方法直接构建容量为默认值16的Entry[]对象1.8中值进行赋值Node[] table是在第一次put操作时 通过resize()扩容方法 构建默认容量163.链表插入方式不同1.7采用头插法1.8使用尾插法...原创 2021-11-04 16:25:54 · 257 阅读 · 0 评论 -
jdk1.7 hashmap
1.底层存储原理JDK1.7 数组+链表JDK1.8 数组+链表+红黑树数组在内存中是需要一块连续的内存来存储,链表不需要数组的特性: 由于数组在内存中是连续的且有索引(下标) 所以查询非常快复杂度O(1) 但是添加比较慢,最理想的状态就是O(1) 最不理想的状态是O(n)O(1)的情况就是刚好插入到末尾 前面的数据都不需要移动O(n)的情况是刚好插首位,其他的数据都需要向后移动一位链表新增快,查询慢查询需要遍历整个链表,最理想的状态就是第一个元素就是我们要找的O(1),.原创 2021-11-04 12:36:50 · 79 阅读 · 0 评论