- 博客(35)
- 资源 (3)
- 收藏
- 关注
原创 java设计模式 设计原则
java 设计原则设计思想可维护性 Maintainability修改功能,需要改动的地方越少,可维护性越好可复用性 Reusability代码可重复使用率高(工具类)可扩展性 Extensibility 、Scalability添加功能无需修改原来代码灵活性 flexibility、mobility、adaptability代码接口可灵活调用基于以上设计思想 诞生常用的设计原则单一职责原则Single Responsibility Principe一个类别太大
2021-01-31 00:22:20
177
1
原创 spring原理 idea 导入 spring源码 阅读源码环境 ①
spring-framework 源码的下载与构建整体流程:本地环境准备找到源码地址并拉取到本地根据IDE工具查看源码中提供的不同的安装说明并具体操作构建会出现的的错误及解决一、本地环境准备jdk环境变量这里不做解释,搞java的都知道 spring源码使用 gradle 构建,话不多说 配置 gradle环境变量gradle官网 https://services.gradle.org/distributions/解压 gradle ,配置环境变量path验证环境变量
2021-01-29 16:00:13
163
原创 spring原理 框架 阅读源码 源码流程图 基本技能 ②
阅读spring源码 应具备的基本技能:1、设计模式(工厂模式,单例模式,代理模式,模板模式,观察者模式,装饰器模式,适配器模式)2、数据结构和算法(栈,队列,树以及一些基本的算法)3、反射(如何通过创建对象,如果获取属性)4、多线程(如何通过锁保证线程安全)5、JVM(对象的实例化和初始化的区别)阅读spring源码 注意以下几点:1、坚持不懈(特别重要)2、不要太注重细节,先搞清楚大概的一个流程和脉络3、多看注释(英语不行的,比如我,请用有道翻译)4、画图(时序图,结构图,总.
2021-01-27 20:55:35
228
原创 设计模式① 单例模式
你真的了解单例模式吗?单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。单例流程图来看看单例常见的实现模式--.
2021-01-26 16:29:33
137
原创 分布式事务(2) TCC
分布式事务(2) TCC一 、TCC 又称补偿事务。其核心思想是:“针对每个操作都要注册一个与其对应的确认和补偿(撤销操作)”。它分为三个操作:1、Try阶段:主要是对业务系统做检测及资源预留。2、Confirm阶段:确认执行业务操作。3、Cancel阶段:取消执行业务操作。TCC对应 Try、Confirm、Cancel 三种操作可以理解成关系型数据库事务的三种操作:DML、Commit、Rollback。场景 微服务跨服务事务操作Try :Try操作是先把多个应用中的业务资源预留和锁定住
2021-01-22 18:32:53
303
1
原创 分布式事务(3) LCN
分布式事务(3) LCN一、简介LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。LCN5.0.2有3种模式,分别是LCN模式,TCC模式,TXC模式TX-LCN的核心控制流程TX-LCN 中有事务组的概念,并发请求时,首先获取全局事务id,各参与者加入事务组。1 LCN模式LCN模式是通过代理数据库 Connection 的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作
2021-01-22 18:32:38
367
5
原创 linux rwx 权限
@linux rwx 权限欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样
2021-01-22 10:28:37
1511
1
原创 进程、线程、纤程
注:学习随笔1、进程和线程的区别: 进程是系统分配资源的基本单位,线程是执行调度的基本单位;进程享有独立的内存资源,线程共享进程的资源,线程没有自己独立的内存空间;2、纤程:用户态的线程,线程中的线程,切换和调度不经过操作系统内核; 优点:1、占用资源少,线程大约需要1M的资源,而纤程只需要4k; 2、可以启动很多个线程同时执行,线程启1万个就很卡了,但是纤程10万+; 3、切换比较简单; 应用场景:...
2021-01-20 16:20:46
218
原创 FastDFS HDFS 区别
FastDFS适用的场景FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片、视频、文档等文件。对于互联网应用,和其他分布式文件系统相比,优势非常明显。参考https://www.cnblogs.com/chiangchou/p/fastdfs.htmlhttps://www.jianshu.com/p/b7c330a87855HDFS的场景hadoop的文件系统HDFS主要解决大数据并行计算中分布式存储的问题。面向大文件>2G,采用...
2021-01-07 11:50:37
849
原创 redis 缓存击穿 穿透 雪崩
缓存击穿缓存击穿:高并发场景下,缓存的key过期,造成大量请求直接打到DB。方案:key过期后,第一个请求过来发现key过期,直接获取锁,获取到锁的连接访问db,再缓存key到redis。未获取到锁的连接随机sleep,然后从reids再读取key。 这样会有一个问题,第一个连接在获取到锁后读取db时连接挂了,怎么办?(redis锁加过期时间) 假如第一个连接没挂,但是锁超时了,他还没从db读取完数据缓存到redis。这时其他连接sleep完继续访问db,怎么办? 第一个连接读取db时采
2021-01-06 21:14:15
244
原创 jvm 垃圾回收算法
jvm 垃圾回收算法: a、标记清除--收集垃圾的时候会产生许多的内存碎片 ( 即不连续的内存空间 )b、copying --内存浪费(只能一半内存被使用) c、标记压缩--效率比copy略低 jvmdsafldsjklffjaldfdsjkljfdlkfdsjlkjlfadsajkf...
2021-01-04 20:45:38
96
原创 zookeeper 分布式锁
先来看下zk的 watch机制假设 zk 有一个 /xxoo/abc 的节点客户端获取/xxoo/abc 节点 客户端 watch/xxoo/abc 节点 /xxoo/abc 节点有事件到达 会回调 客户端思考 client可以通过定时心跳监听/xxoo/abc 节点的变化,会有什么缺点?客户端自己实现代码 /xxoo/abc节点变化的时效性 ,延迟zk实现分布式锁争抢锁,只有一个客户端能获取锁 获取锁的客户端挂了,会出现死锁;采用临时顺序节点(sessio...
2021-01-04 11:30:55
170
原创 mysql 执行流程 redolog undolog binlog
一条sql的执行流程见下图:连接器:负责跟客户都建立连接、获取权限、维持和管理连接。用户名、密码验证 查询权限信息、分配对应的权限 可以使用 show processlist 查看现有的连接 如果长时间没有动静,会字段断开连接,通过 wati_timeout 控制,默认 8 小时查询缓存当执行 sql 查询语句的时候,会先去查询缓存中查看结果,之前执行过的 sql 语句及其结果可能以 key-value 的形式存储在缓存中。如果能找到则直接返回,如果找不到则执行后边的阶段。..
2020-12-07 10:32:08
1506
原创 java 容器
容器 Collection List CopyOnWriteList Vector Stack ArrayList LinkedList Set HashSet LinkedHashSet SortedSet TreeSet CopyOnWriteArrayS...
2020-11-24 22:45:36
103
原创 HashMap ConcurrentHashMap jdk7 jdk8 区别
jdk7 HashMap 数组 + 链表 - O(n) ; ConcurrentHashMap 并发容器 ,采用 segment分段锁 ,segment继承 ReentrantLockjdk8 HashMap数组 + 链表 + 红黑树 - O(logn)(解决hash冲突,提高查询效率) ; ConcurrentHashMap 抛弃分段锁,采用 CAS + Synchronized 保证线程安全。其实这块也是面试的重点内容,通常的套路是:谈谈你理解的 HashMap,讲讲其中的 ...
2020-11-24 22:41:40
116
1
原创 数组 链表 树 时间复杂度
参考https://blog.youkuaiyun.com/MOMONGA/article/details/51578602
2020-11-24 21:55:33
324
原创 java 反射 动态代理
java反射:运行时动态获取类属性和方法及动态调用对象的方法的功能jdk、cglib、动态代理区别一、简单来说: JDK动态代理只能对实现了接口的类生成代理,而不能针对类 CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(继承)二、Spring在选择用JDK还是CGLiB的依据:当Bean实现接口时,Spring就会用JDK的动态代理 当Bean没有实现接口时,Spring使用CGlib是实现 可以强制使用CGlib(在spring配置中加入<ao..
2020-11-17 22:11:19
112
1
原创 mysql主从复制
事物:原子性、一致性、隔离性、持久性事物并发1、脏读:事物A读取到事物B更新的数据,但是事物B回滚,造成事物A读取到的数据为脏数据2、不可重复读:事物A多次读取数据库中一条数据,在此过程中事物B多次更新这条记录,造成多次读取到的数据不一致3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读mysql主从复制原理 Slave 从..
2020-11-17 22:02:36
83
原创 jvm 垃圾收集器生产环境解决思路
常见垃圾收集器 7种作用于不同分代的收集器,如果两个收集器之间存在连线,说明他们可以搭配使用。Serial 收集器Serial 收集器是一个单线程收集器大家要先明白一个名词 : STW(Stop the World)垃圾搜集器搜集垃圾的时候,必须暂停所有的工作线程,直到搜集结束。举个例子:“你妈妈在打扫房间的时候,肯定也会让你老老实实的在椅子上或者呆在房间外。如果她一边打扫,你一遍扔纸屑,这房间还能打扫完吗?”ParNew 收集器ParNew 收集器其实...
2020-11-15 21:50:37
416
原创 wait notifyAll ReentrantLock Condition 实现同步容器
wait notifyAll 实现同步容器public class Container1<T > { final private LinkedList<T> list = new LinkedList<>(); final private int Max = 10; private int count = 0; public synchronized void put(T t){ while (list.size()
2020-11-12 17:55:49
137
1
原创 java 锁消除 锁粗化
/** * 锁消除 * StringBuffer是线程安全的,因为它的关键方法都是被synchronized修饰过的,但是我们看上边这段代码会发现 sb 这个引用值会在add方法中使用 * 不可能被其他线程引用(因为是局部变量,栈私有),因此 sb 是不可能共享的资源,JVM 会自动消除 StringBuffer 对象内部的锁。 * */ public void(String str1,String str2){ StringB..
2020-11-11 23:28:38
236
1
原创 java 无锁 偏向锁 自旋锁 重量级锁
锁升级 无锁——》偏向锁——》自旋锁——》重量级锁 用户态到内核态的切换消耗资源1、刚开始无锁;2、来一个线程的时候锁升级为偏向锁(记录线程号--当前线程指针);3、再来一个线程竞争,撤销偏向锁;锁升级为轻量级锁(自旋锁、无锁)---》指向线程栈中 Lock Record 的指针,通过CAS方式竞争锁 谁先把自己的 Lock Record指针贴上去,谁先获取锁;另外一个线程一直自旋等待4、有线程超过10次自旋或自旋线程数超过CPU核数的一半,自动升...
2020-11-06 20:28:18
260
原创 java基本类型,其实还有第9种
常见的8种整数类型 byte、short、int、long 依次占用 1、2、4、8个字节 (1b = 8bit)浮点类型:float(4字节)、double(8字节)字符类型:char(2字节)布尔类型:boolean (1字节)jvm开发规范中说明: jvm使用的returnAddress 数据类型,不可见,所以还有第9种。如下图...
2020-05-23 22:33:54
225
原创 mysql索引原理,二叉树、红黑树、Hash、为什么mysql选择B+tree数据结构?
mysql索引为什么使用B+tree ?二叉树:对于特殊的自增索引树比较高,造成时间复杂度增加。红黑树索引作用:提高数据读取速度,提高项目并发能力、抗压能力InnoDB存储引起使用聚集索引聚集索引:叶子节点包含完整的数据记录为什么InnoDB表必须有主键,并且推荐使用整型的自增序列?防止页分裂,页合并。产生多次IO操作,影响性能索引分类主键索引:主键是一种唯一性索引,但必须指定为PRIMARY KEY,每个表只能有一个主键 唯一索引:索引列的值只能出现一..
2020-05-22 21:17:47
560
原创 zookeeper 选举策略
zookeeper的核心以下三点一致:对外提供的数据是一致的 有头:有Leader 数据树:存储数据的一颗树可靠性快速恢复Leader数据可靠,最终一致性1、Paxos算法基于消息传递的一致性算法参考https://www.douban.com/note/208430424/2、Leader的选举过程:只要任何人投票,就会触发那个准Leader发起自己的投票 推选制,先比较zxid(事务id),zxid相同,再比较myid分以下两种情况:1、第一次启动集...
2020-05-22 14:41:40
421
原创 ThreadPoolExecutor 线程池 线程池原理
public ThreadPoolExecutor(int corePoolSize,//线程池核心线程数(平时保留的线程数) int maximumPoolSize, //线程池最大线程数 long keepAliveTime, //超出corePoolSize数量的线程的保留时间。 TimeUnit ...
2020-05-20 14:07:42
153
原创 关于JVM 内存结构 有这一篇就够了
一、jvm内存结构 包含 方法区、虚拟机栈、本地方法栈、堆、程序计数器 如下图1.1 方法区 (Method Area) 方法区:主要存储 虚拟机加载的类信息、常量、静态变量。jdk1.8版本后也称“永久区”,是所有线程共享的资源。当永久区区域内存消耗解决上限,就会触发FullGC-XX:PermSize 设置永久代最小空间大小 -XX:M...
2019-10-18 17:30:06
162
原创 GC是否回收数据库连接
a、GC只管理内存,非托管资源,如文件句柄,GDI资源,数据库连接等还需要用户去管理 b、像数据库连接、文件流、网络连接都是属于物理资源,而垃圾回收机制是管理内存的。物理资源需要手动关闭,只有用户关闭了这些链接之后,被他们持有的缓冲区才可能被JVM的GC回收。...
2019-10-18 10:55:22
622
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人