- 博客(65)
- 收藏
- 关注
原创 设计模式笔记
最复杂的一个工厂模式,需要理解产品族和产品等级,规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口,增加了系统的抽象性和理解难度,具体产品在应用层代码隔离,无须关心创建细节,将一个系列的产品族统一到一起创建;是指由一个工厂对象决定创建出哪一种产品类的实例,简单工厂是产品的工厂,工厂类负责创建的对象较少,客户端需要传入工厂类的参数,对于如何创建对象的逻辑不关心。缺点:工厂类的职责相对过重,增加新的产品时需要修改工厂类的判断逻辑,违背了开闭原则,不易于扩展过于复杂的产品结构;
2023-08-20 21:36:48 459
原创 JVM基础了解
根加载器 和扩展类加载器一般是加载 java自带的一些 类,【这样是一个沙箱机制,防止 用户随意篡改已有的类,比如用户自己写一个 java.lang.String类,用户自己写的类是没法被加载】找到对应的class文件,进行加载的时候,会打散.class的信息,类文件字节码流静态存储结构 放入 JVM的一块区域【Method Area】,方法区,所有的线程共享的一块区域。写好的java源文件,会编译生成16进制的字节码文件(**.class),cafe babe开头,有相应的格式,可交由jvm执行。
2023-08-16 22:48:33 680 1
原创 AQS之ReentrantLock独占锁源码解析
不同的自定义同步器竞争共享资源的方式也不同。自定义同步器在实现时只需要实现共享 资源state的获取与释放方式即可,至于具体线程等待队列的维护(如获取资源失败入队/唤醒出队等),AQS已经在顶层实现好了。条件等待队列:调用await()的时候会释放锁,然后线程会加入到条件队列,调用signal()唤醒的时候会把条件队列中的线程节点移动到同步队列中,等待再次获得锁。对于共享锁而言,就是资源个数,每来一个-1,当减为0以后,后续的资源就不能获取到锁了。JAVA层对管程的实现:AQS抽象层,对AQS进行实现。
2023-04-04 12:26:45 312 2
原创 ArrayList、LinkedList、HashMap、ConcurrentHashMap
从理解ArrayList开始,逐步了解hashMap底层原理及ConcurrentHashMap 源码理解
2022-12-06 22:04:16 464
原创 JMM(Java Memory Model)
Java虚拟机规范中定义了Java内存模型(共享内存模型,实现线程与线程之间的通信,其中主内存是逻辑空间),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必要时如何同步的访问共享变量。
2022-11-30 23:54:51 522
原创 SpringData JPA学习笔记
Spring Data JPA 是基于JDBC之上的一组规范接口,JPA是由ORM框架实现,JPA用面向对象的方式,通过ORM框架生成SQL进行操作(最后还是要用JDBC去操作数据库)
2022-10-10 10:07:02 563
原创 JVM+java的类加载机制
java命令运行某个main函数启动程序时,首先需要通过类加载器把主类加载到JVM; 加载→验证→准备→解析→初始化→使用→卸载
2022-08-25 00:15:16 381
原创 MySQL内核查询优化规则
MySQL在执行SQL语句的过程中会有很多的优化,比如:索引下推,回表中的MRR,索引合并等。但是在执行之前MySQL会依据一些规则,把SQL语句进行转换,以期可以达到某种可以高效执行的形式,这个过程可以被称作查询重写或者查询优化,很多时候这些优化可以由我们自行完成以减少MySQL的优化时间。...............
2022-08-15 23:43:20 929
原创 mybatis-plus 实体类初步解析
mybatis-plus 实体类的创建及注意点,考虑数据库兼容性及分布式数据库存储数据的问题,默认用雪花算法64bit
2022-07-26 23:41:31 1938
原创 打印数字的位信息
数据底层都是二进制组成,如何打印int 和 long类型数字的位信息?int 类型为基本数据类型,占4字节,32位。long类型也为基本数据类型,占8字节,84位。这里需要用的 “&” 与运算。
2022-06-01 17:30:30 163
原创 DCL单例模式是否需要加volatile
必须加volatile** * 双重校验锁 DCL(DoubleCheckLock) * 必须加volatile 防止指令重排 * 多线程情况下安全 */public class DCLType { // 增加volatile修饰保证线程之间的可见性 private static volatile DCLType INSTANCE; private DCLType() { } //可以整个方法加锁 但此时锁粒度太粗了,所以可降低锁粒度 publ
2022-05-04 16:53:15 347
原创 对象创建的过程
Object o = new Object();对象创建的时候存在一个半初始化状态;public class T { int m=8; public static void main(String[] args) { T t=new T(); //Object o = new Object(); }}// access flags 0x9 public static main([Ljava/lang/String;)V
2022-05-04 15:53:59 228
原创 Redis笔记
什么是NoSQLNot Only SQL 泛指非关系型数据库,传统的关系型数据库,很难应对web2.0时代,尤其是超大规模的高并发的社区。在大数据环境下发展的十分迅速。Redis
2022-04-28 23:39:15 1852
原创 JDK8 时间类
以前常用java.util.Date 类,现在常用java.time.LocalDate; 都有对应的格式化类Date类线程不安全,在高并发情况下会比较明显,而且经常通过new Date()方式出来的时间格式并不是完全想要的,可以通过 new SimpleDateFormat()对Date类型数据 进行格式化操作。
2022-04-19 11:33:07 468
原创 Mybatis-plus笔记整理
雪花算法数据库的扩展方式主要包括:业务分库,主从复制,数据库分表数据库分表 如果业务持续发展,同一业务的单表数据也会达到数据库服务器的处理瓶颈;例如淘宝几亿用户数据,因此需要对单表数据进行拆分。垂直分表 列也比较多,查询量比较大的时候,通常把经常被查询的字段 和 数据量比较大的字段,拆分到不同的表中,比如age,sex 主要是查询使用,nickname昵称字段和描述字段主要用于展示使用而且本身还比较长,可以将后面两个字段独立到另一个表中去,这样查询的age 和 sex时 能带来一..
2022-03-06 23:31:24 3166 1
原创 InnoDB引擎底层存储和缓存原理
一、数据页平时执行CRUD的时候,都会从磁盘加载数据页到Buffer Pool的缓存页,更新缓存页后,由异步线程刷回磁盘的数据页,MySQL进行数据操作的最小单位是数据页。每个数据页默认16kb,数据页由多个部分组成,如图在数据页还未写入数据时,是没有数据行的,只有空闲空间,写入就会占用空闲空间,直到空闲空间耗尽,数据页满了自然会开辟新的数据页来存储数据。数据页之间通过双向链表来链接。在文件头中存放了如当前页号、页类型、所属表空间、上一页号、下一页号等等。 数据页内部会存储一....
2022-03-04 14:47:23 885 1
原创 SpringBoot笔记整理
SpringBoot-jar:内嵌tomcat服务越来越多:springcloud约定大于配置的核心思想,核心:自动装配,同时集成了大量第三方库配置。优点:更快入门,开箱即用,内嵌容器简化web,没有冗余代码和很多xml配置微服务:是一种架构风格,在开发一个应用的时候,这个应用必须构建成一系列小服务的组合,可以通过http和rpc的方式进行通信。把每个功能元素独立出来,把独立出来的功能元素动态组合,需要的功能元素采取组合。微服务架构是对功能元素进行赋值,而没有对整个应用进行复制。1.直接
2022-02-28 22:26:41 412
原创 SpringMVC 笔记整理
SpringMVCssm: mybatis+Spring+SpringMVCSpring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。MVC: (Model View Controller )是一种软件设计规范;是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向耦合,MVC不是一种设计模式,是一种架构模式。Model:数据模型,提供要展示的数据可理解为JavaBean组件(包含数据和行为),也就是模
2022-02-22 15:45:06 152
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人