- 博客(49)
- 资源 (3)
- 收藏
- 关注
原创 JVM内存管理
给对象中添加一个引用计数器,每当有一个地方引用,计数器就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。
2023-08-11 18:17:38
699
原创 经典排序算法
在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找并进行移动。重复遍历需要排序的数列,每次比较两个元素,按照升序或降序的方式交换位置,直到没有再需要交换的值,即该数列已经排序完成。利用递归与分治技术将数据序列划分为越来越小的半子表,再对半子表排序,最后用递归将排好序的半子表合并为越来越大的有序序列。使用双重循环遍历该数组,外层循环控制遍历次数,内层循环每个位置相互比较,按照升序或降序的规则,对比时小的或大的数值将被放在前面或后面。
2023-03-20 15:41:21
512
原创 Linux基础命令(一):文件、目录、查询、搜索、容量、压缩与解压
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限,文件的权限字符为:“-rwxrwxrwx”, 这九个权限是三个一组的!说明:locate 来寻找数据的时候特别的快, 是因为 locate 寻找的数据是由“已创建的数据库 /var/lib/mlocate/” 里面的数据搜索;使用说明: tar [-z|-j|-J] [xv] [-f 既有的 tar文件名] [-C 目录]
2023-03-04 17:33:25
1009
原创 redis基础数据结构
Redis 的列表结构常用来做异步队列使用。将需要延后处理的任务结构体序列化成字符串塞进 Redis 的列表,另一个线程从这个列表中轮询数据进行处理。
2022-09-27 17:50:57
1607
原创 Spring源码分析九:事务原理源码分析
(一)spring事务入口(二)Spring事务切入方式InfrastructureAdvisorAutoProxyCreator自动代理器、InfrastructureAdvisorAutoProxyCreator层级示意图、获取增强器getAdvicesAndAdvisorsForBean、获取增强器findCandidateAdvisors、匹配增强器findAdvisorsThatCanApply、事务标签提取、 解析事务标签(核心)、事务增强器(事务实现原理)等.........
2022-07-18 22:56:07
339
原创 Spring源码分析番外篇二:事务原理番外篇
(1)创建事务实例,使用DataSourceTransactionManager作为创建类型,有点类似JDBC创建事务实例。值得注意的是:`当前线程存在数据库连接,直接复用,否则创建新的连接,并验证是否开启保存点设置,嵌入式事务时使用;`* (2)判断是否已存在事务,若存在嵌套事务逻辑处理即`handleExistingTransaction方法;`* (3)事务超时验证即TransactionDefinition.TIMEOUT_DEFAULT默认为-1;* (4)事务的传播行为设置即Propaga
2022-07-18 22:42:44
319
原创 Spring源码分析八:Mybatis ORM映射框架原理
2、建立PO3、建立mapper接口映射4、建立Mybatis配置文件5、建立mapper映射文件6、测试类输出结果:7、Mybatis编写程序小结(1)创建数据库表;(2)建立java实体PO;(3)Mapper业务接口定义;(4)编写mapper文件映射;(5)mybatis配置数据源、执行环境参数、别名、mapper文件引入;(6)创建SqlSessionFactory、SqlSession和获取数据库连接,集成到spring中时会自动执行,不需要手动去编写。(
2022-06-01 15:03:44
849
2
原创 Spring源码分析七:JdbcTemplate连接数据库原理
文章目录(一)Spring连接数据库程序1、创建数据库表2、创建实体PO3、创建mapper映射4、创建业务接口5、创建业务接口实现类6、Spring配置文件7、测试类(二)JdbcTemplate核心原理1、update方法(执行DML语句)2、execute底层方法(底层核心,DDL)(1)获取数据库连接(2)用户查询参数设置(3)执行回调方法(4)告警处理(5)资源释放3、query方法(执行DQL语句)(三)总结(一)Spring连接数据库程序1、创建数据库表CREATE TABLE `stu
2022-05-25 14:56:29
1154
原创 Markdown编辑指令
文章目录标题设置标题级别2有序列表无序列表未完成任务列表已完成任务列表引用文本快速创建表格快速创建代码块长长的分割线粗体文本斜体文本删除线行内代码上标下标高亮文本标题设置格式:# + 空格 + 文本 ,多个#代表几级标题,如## 标题级别2标题级别2有序列表格式:1 + . + 空格 + 文本,空格换成回车或tab其他效果,如 1. 有序列表1有序列表1有序列表2无序列表格式:- + 空格 + 文本,*可代替-,如- 无序列表1● 无序列表1● 无序列表2未完成任务列表格式
2022-05-20 17:33:15
1529
原创 Spring源码分析六:Bean加载之populationBean③
文章目录(一)序言(二)bean属性注入:populateBean1、属性注入代码逻辑:populateBean2、属性注入整体流程(三)属性注入中的核心方法1、按名称注入:autowireByName2、按类型注入:autowireByType(较复杂)3、匹配类型bean:(do)resolveDependency(doXX核心)4、依赖注入:applyPropertyValues(四)属性注入总结(一)序言在spring源码分析加载bean之doGetBean②分析里面doCreateBean中简
2022-05-20 11:53:29
443
原创 Spring源码分析五: Bean加载之doGetBean②
文章目录(一)序言(二)非延迟bean加载——doGetBean1、规范化beanName:transformedBeanName2、三个缓存中获取bean实例:getSingleton3、递归获取bean:getParentBeanFactory4、优化缓存bean:markBeanAsCreated5、depends-on依赖实例化:isDependent6、创建bean:createBean(1)实例化前和初始化后的后置处理器(1)InstantiationAwareBeanPostProcessor
2022-05-09 20:18:59
570
1
原创 Spring源码分析——汇总全集
spring源码分析、专注于容器IOC、AOP实现原理,主要用于分析spring工作原理的汇总一、背景本篇文章主要是记录Spring源码分析文章汇总的目录,用于记录Spring源码的思路和步骤,为Spring源码分析文章做链接跳转,后面会持续更新。主要来源:一方面阅读《Spring源码深度解析-郝佳.pdf》,另一方面是结合Spring源码编译后的项目代码进行整理和总结。二、源码分析目录(1)Spring源码分析一:容器篇......
2022-05-07 17:57:38
745
原创 Spring源码分析四:Bean加载总览①
文章目录(一)序言(二)Spring初始化非延迟加载单例入口1、初始化非延迟加载单例bean准备:finishBeanFactoryInitialization2、实例化单例bean:preInstantiateSingletons(三)Spring Bean加载1、非延迟bean加载:doGetBean(四)非延迟加载bean流程(一)序言在Spring源码分析容器篇(http://t.csdn.cn/kjsnI)中初始化非延迟加载单例finishBeanFactoryInitialization中提
2022-05-07 17:40:05
468
原创 Spring源码分析三:Bean标签解析之BeanDefinition
文章目录(一)序言(二)Spring生成BeanDefinition1、Spring Bean解析入口2、Spring Bean内置标签解析(1)bean标签解析——processBeanDefinition方法(2)bean元素解析——parseBeanDefinitionElement方法(核心)①创建AbstractBeanDefinition实例②spring内置硬编码处理③解析元数据④解析lookup-method⑤解析replaced-method⑥解析构造函数参数⑦解析property子元素⑧
2022-05-03 23:44:59
646
原创 Spring源码分析番外篇一:AOP
文章目录(一)AOP获取增强方法1、getAdvisors获取增强方法(核心)2、canApply方法:匹配实际bean业务的增强器序言本文主要是对Spring源码分析三:AOP篇做一个补充,因AOP篇幅受限,一些比较具体实现逻辑不能一一罗列,故新增加AOP补充篇一继续分析Spring源码AOP的实现逻辑。(一)AOP获取增强方法在Spring源码分析三中已提到AnnotationAwareAspectJAutoProxyCreator->findCandidateAdvisors->b
2022-04-26 16:37:36
759
原创 Spring源码分析二:AOP篇
(一)spring Aop概念spring aop简称面向切面编程,不同于OOP即面向对象编程,OOP作为开发业务时,如需要引入安全检测、系统日志、监控等功能时,每个对象都需要引入公共代码,会造成不可维护和冗余代码,AOP的横空出世,正是为了解决OOP纵向的继承关系,AOP关心的是横向切面关系,在某一时刻进行切入,执行一些额外的逻辑。本文不对较低的sprig aop版本进行分析,直接从spring支持@AspectJ开始进行分析,该注解中主要是在切面中定义一个切点和切入点即可。(二)Spring A
2022-04-25 15:10:21
962
原创 Spring源码分析一:容器篇—refresh()
文章目录(一)BeanFactory与ApplicationContext容器(二)ApplicationContext层次结构(一)BeanFactory与ApplicationContext容器BeanFactory是加载Bean的基础基石,早期spring的实现是利用XmlBeanFactory来实现其基本功能,相对于ApplicationContext来说,缺少了很多扩展性。BeanFactory beanFactory = new XmlBeanFactory(new ClassPath
2022-04-10 03:26:37
888
原创 FutureTask分析
文章目录(一)关键概念点1、Future简介(一)关键概念点1、Future简介Future是一个带泛型的接口类,主要定义了五个方法,大致分为三个作用:取消线程执行、线程是否取消或完成和获得返回值。 public interface Future<V> { //取消线程或中断线程 boolean cancel(boolean mayInterruptIfRunning); //是否被中断 boolean isCancelled(
2022-03-21 21:41:54
768
原创 ThreadLocal源码分析
文章目录(一)ThreadLocal介绍(二)ThreadLocal思想(三)源码分析ThreadLocal核心点和api(1)核心成员变量和辅助方法(2)setInitialValue方法(3)get方法(api)(4)set方法(api)(5)remove方法(api)ThreadLocalMap核心源码:(1)核心成员变量和辅助方法(2)构造函数(核心)(3)set方法(核心)(4)getEntry方法(核心)(5)rehash扩容(核心)(6)remove方法(核心)(一)ThreadLocal介
2022-03-14 18:50:55
1039
原创 线程池ThreadPoolExecutor分析
文章目录(一)线程池背景(二)线程池优势(三)线程池场景(四)线程池源码分析(1)核心成员变量(2)线程池状态转换(3)线程池七大参数(4)三大固定方法(Executors工具类不推荐使用)(5)四大拒绝策略(6)execute方法(核心)(7)addWorker方法(核心中的核心)(8)工作线程Worker内部方法(runWorker方法)(9)processWorkerExit清理方法(10)tryTerminate状态转换(11)shutdown方法(12)shutdownNow方法(13)await
2022-03-10 23:54:27
440
原创 Semaphore分析
文章目录(一)概念简介(二)使用场景(三)特点(四)Semaphore源码分析(1)构造函数(2)acquire方法(核心)(3)doAcquireSharedInterruptibly方法(核心)(4)release方法(核心)(5)doReleaseShared方法(核心)(一)概念简介Semaphore是一个访问公共资源的线程数量如限流、停车等,它是一个基于AQS实现的共享锁,主要是通过控制state变量来实现。其内部结构关系为:Semaphore内部是通过一个内部核心成员变量sync去调用AQ
2022-03-08 11:22:06
543
原创 CyclicBarrier分析
文章目录(一)概念简介(二)使用场景(三)特点(四)CyclicBarrier源码分析(1)核心成员变量(2)构造函数(3)await方法(核心)(4)辅助方法(一)概念简介CyclicBarrier是一个可循环使用的屏障锁,依赖于ReentrantLock和Condition来实现阻塞和唤醒,主要是分为普通阻塞和超时阻塞,利用构造方法初始化指定parties(屏障数)和count(剩余屏障数),只需要使用await即可让count值持续递减。基于Condition条件,屏障锁对于屏障数分为多组,每组中
2022-03-03 18:28:35
252
原创 CountDownLatch分析
文章目录(一)概念简介(二)使用场景(三)特点(四)CountDownLatch源码分析(1)构造函数(2)await方法(核心)(3)countDown方法(核心)(一)概念简介CountDownLatch是一个阻塞部分线程直到其他线程执行完成后唤醒的同步计数器,核心是其内部类Sync继承于AQS,同时也是利用的AQS的同步原理,也称之为闭锁。(二)使用场景当主线程进行执行时,利用构造方法初始化一个同步数state(AQS原理),主线程调用await方法进行阻塞主线程即谁调用谁阻塞,其它线程调用c
2022-03-01 00:25:02
913
原创 Synchronized与Lock区别
文章目录1、具体区别(核心)2、在锁概念上的区别3、性能比较1、具体区别(核心)(1)synchronized和Lock都是可重入锁,前者是jvm中使用monitorenter(1个)和monitorexit(2个)来实现同步且其中阻塞和唤醒是wait和notify,后者是juc包中的lock层次使用,依赖于AQS来实现加锁和解锁;(2)synchronized是非公平锁,ReentrantLock可以设置公平锁或者非公平锁;(3)synchronized是不可中断且无法获取锁状态,后者是可中断l
2022-02-24 16:34:11
5679
原创 AQS原理分析(ReentrantLock锁分析)
文章目录(一)AQS简介(二)AQS原理剖析ReentrantLock源码分析:源码思想加锁:释放锁:源码逻辑1、构造方法2、非公平锁lock方法(核心)3、acquire获取资源方法(核心)4、addWaiter创建等待者方法(核心)5、acquireQueued入队等待方法(核心)6、cancelAcquire取消线程获取方法(非核心)(一)AQS简介AQS简称AbstractQueuedSynchronizer,是一种实现阻塞锁和依赖FIFO队列的同步器框架。其依赖于一个原子变量state,子类要
2022-02-21 21:04:23
418
原创 Spring源码编译【idea】
文章目录1、github安装2、gradle安装3、spring源码4、配置源码编译环境5、编译spring源码6、idea导入spring源码7、idea编译spring1、github安装先安装github,点击此链接可下载Git:Git下载 直接点击安装并使用默认设置直到安装完成。2、gradle安装安装gradle gradle官网 选择指定的版本下载(1)官网地址打开后,找到下图中的下载(2)自行选择自己的版本可下载,me选择的是5.6.4版本(3)下载解压后,配置环境变量紧
2022-02-08 18:06:21
1540
3
原创 Spring Bean 基础使用篇
文章目录1、自动装配2、声明Bean和属性注入3、限定自动装配4、bean的作用域1、自动装配@Autowired自动装配(1)放置在类成员变量上;@AutowiredPlayerService playerService;(2)放置在构造函数上(构造器本身会自动注入,可不加该注解);@Autowiredpublic PopPlayerServiceImpl(PlayerService playerService){ this.playerService = playerSe
2022-01-28 15:30:52
983
原创 可重入锁原理分析
(一)synchronized锁分析1、synchronized作用和使用?synchronized作用:(1)原子性:确保线程之间互斥访问同步代码;(2)可见性:保证多线程之间共享变量的修改能及时可见,与java内存模型一致,对变量加lock操作,则执行前会重新从主内存load或assign操作,反之则刷入主内存(unlock);(3)有序性:有效解决重排序问题即释放锁在加锁后,保证代码的有序性。Synchronized可以将任何一个非null对象作为锁即对象监视器(Object Monit
2022-01-14 17:05:47
1262
原创 集合框架核心知识点——线程安全JUC
JUC并发编程集合如CopyOnWriteArrayList和ConcurrentHashMap等常见方法原理,使用场景等
2021-12-24 18:02:34
2635
原创 集合框架核心知识点——非线程安全JU
java常用集合,Collection和Map接口,其数组容器ArrayList和Vector、线性节点容器LinkedList、键值对容器HashMap和线性LinkedHashMap,树结构的TreeSet和TreeMap,以及HashSet等
2021-12-08 20:59:20
454
notePad++良心工具
2022-04-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人