自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mybatis源码分析(缓存)

Mybatis缓存介绍一级缓存例子结论底层实现PerpetualCache说明CacheKey说明LocalCacheScope说明二级缓存例子结论底层实现TransactionalCacheManager说明TransactionalCache说明为什么我们需要提交,二级缓存才有用介绍mybatis缓存分一级缓存和二级缓存,其中一级缓存是sqlSession层面的缓存,二级缓存是Mapper层面的缓存。他们都是保存在Jvm里的,也就是java对象里,所以在分布式部署的时候我们就需要实时更新缓存,不然可

2020-09-20 14:05:46 94

原创 Mybatis源码设计模式(动态代理模式)

动态代理模式背景基本概念代码实现底层实现原理Mybatis动态代理说明总结背景最近在读mybatis源码,发现在使用插件的时候,mybatis拦截器用了动态代理模式,一开始不是很理解,就准备重新温习一下代理模式基本概念动态代理:Proxy+InvocationHandlerJdk的动态代理由Proxy这个类来生成,它有三个参数:ClassLoader loader,:指定当前目标对象使用类加载器,获取加载器的方法是固定的Class<?>[] interfaces,:目标对象实现的

2020-08-24 10:29:54 253

原创 对象的内存布局

这段代码我们每天都要类似的写很多很多次,不知道有没有思考过一个问题,创建一个这样的对象,占多少的内存空间?可以看到mark的部分占了8个字节,类型指针占了4个字节,这个类没有字段,所以实例数据为0,因为我们内存大小要是8的整数倍,所以这里外补齐了4个字节。可以看到跟实例1的区别,增加了实例数据,由于int是4个字节,对齐填充就不用补齐了。我们用ClassLayout类打印出对象的内存布局。我们加个字段看下效果。

2023-04-09 20:57:28 66

原创 算法题(解数独)

第二步:马上想到暴力破解,当遇到没有填值的格子,可以通过那三条规则,先把不能填的值都集中起来,然后挨个遍历能用的值。比如坐标为(0,2)这个空格,先可以通过规则排除掉(3.5.6.7.8.9),所以挨个遍历,先填1,然后往下一个空格走,如果有值就跳过,没有值就按这个方法继续往下走。就说明这个解不能用,这个时候我们就应该回溯上去,重新开始遍历,当每一种可能都遍历完,坐标到(8,8)的时候,就找到了唯一解。第一步:本人没玩过数独,所以先去用网上的方法,手动解了一下这道数独,这里不展开说了,放个解题草稿。...

2022-08-06 23:07:40 159

原创 垃圾收集器

垃圾收集器垃圾收集器关系图各种垃圾回收器和垃圾回收算法间的关系如下CMS收集器描述:收集过程:收集日志:缺点:G1垃圾收集器描述:收集过程:优点:垃圾收集器关系图各种垃圾回收器和垃圾回收算法间的关系如下Serial:标记-复制Serial Old:标记-压缩ParNew:标记-复制Parallel Scavenge:标记-复制Parallel Old:标记-压缩CMS(Concurrent-Mark-Sweep):(并发)标记-清除G1(Garbage-First):并发标记 + 并行

2021-08-21 10:49:09 125

原创 Spring实例化方式(源码解读)

Spring实例化方式概述案例XML配置Bean源码分析概述这篇文章主要是举例说明实例化Bean的不同方式,大致分为构造函数实例化、静态工厂方法实例化、实例工厂方法实例化。然后通过源码分析底层是怎么实现的。案例XML配置Beanpublic class QueueService { private static QueueService queueService = new QueueService(); public static QueueService getInstance(){

2021-03-17 14:40:36 210

原创 Spring结合策略模式(理论到实战)

Spring结合策略模式背景定义实战概况原理图代码背景最近在重构项目的一个大功能,一开始使用的是通过if-else的方式判断不同的状态来处理不同的业务,最后发现这样做代码可维护性很低,扩展性很差,所以后来改为用策略模式来处理。定义策略模式使用的就是面向对象的继承和多态机制,非常容易理解和掌握,我们再来看看 策略模式的三个角色:Context封装角色 它也叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问, 封装可能存在的变化。Strategy抽象策略角色 策略、算法家族的抽

2021-01-15 11:42:48 282

原创 虚拟机垃圾回收过程

GC垃圾回收概述什么是垃圾引用计数算法原理优点缺点解决办法可达性分析算法原理可作为GC Roots 的对象在什么时候回收判断步骤例子怎么回收经典算法标记-清除算法标记-整理算法标记-复制算法衍生算法分代算法增量算法概述垃圾回收是一块大内容,我们用三个问题来了解一下垃圾回收的过程什么是垃圾在什么时候回收垃圾怎么回收什么是垃圾判断堆内存中的对象是否是垃圾,我们有两种方法引用计数算法原理在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时。计数器值就减一;任何时

2021-01-09 13:31:40 241

原创 虚拟机类加载子系统(理论到实践)

虚拟机类加载子系统类加载过程加载验证准备解析初始化双亲委派模型类加载器的类别类加载器双亲委派模型工作过程源码说明作用自定义类加载器类加载过程加载 —》连接 —》初始化 —》使用 —》卸载连接:验证 —》准备 —》解析加载通过一个类的全限定名来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。验证文件格式验证元数据验证字节码验证符号引用验证准备

2020-12-26 15:52:40 62

原创 JVM运行时数据区总结(理论到实践)

运行时数据区总结背景程序计数器(线程私有)概念异常情况实战虚拟机栈(线程私有)概念异常情况实战堆内存(线程共享)概念异常情况实战参数方法区(线程共享)运行时常量池(方法区的一部分)本地方法栈(线程私有)背景读了差不多一年的Java虚拟机这本书,现在准备将平时整理的笔记总结一下,其中还包括看视频、看文章的一些补充内容,上面这张图是java执行的整个流程,以后的文章将会围绕这张图展开,具体的描述class文件的组成、类加载子系统的原理、对象的分配、执行引擎的原理和GC垃圾回收等等,这篇文章主要总结一下运行

2020-12-19 16:35:41 106 2

原创 Arthas 工具实战总结

Arthas 工具实战总结背景定义使用场景全局监控查看接口响应时间查看方法入参,返回值,异常热更新查看线程情况生成火焰图背景玩了很久的Arthas,觉得是线上排除问题的神器,也推荐过同事解决了一些棘手问题,然后在组内做了一次分享,总结了一下能用的实战场景和常用的命令定义Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+,采用命令行交互模式,提供 Tab 自动补全,可以方便的定位和诊断线上程序运行问题。官方文档:https://alibaba.gi

2020-11-08 10:56:42 851

原创 Mybatis源码设计模式(装饰器模式)

装饰器模式背景定义源码说明背景写了一篇关于mybatis缓存的文章,发现里面的executor和cache都用到了装饰器模式,所以准备专门写一篇装饰器模式的文章,以cache为例定义动态地给一个对象添加一些额外的职责。 就增加功能来说,装饰模式相比生成子类更为灵活使用场景:需要扩展一个类的功能,或给一个类增加附加功能。需要动态地给一个对象增加功能,这些功能可以再动态地撤销。需要为一批的兄弟类进行改装或加装功能,当然是首选装饰模式。源码说明现在用源码类说明一下是怎么实现的,我们来看一下

2020-09-20 16:30:32 224

原创 Java配置Spring注解缓存

Spring注解缓存背景配置信息依赖引入配置RedisCacheConfig信息配置Redis连接信息关键性参数设置依据(阿里文档说明):注解的使用注解说明@Cacheable注解的使用@CacheEvict注解说明背景由于公司需要,最近准备使用Spring注解缓存来做Redis缓存,缓存一些配置信息,这里记录一下整个搭建过程,合使用上的心得。配置信息依赖引入<dependency> <groupId>redis.clients</groupId> <

2020-09-06 15:28:43 431

原创 Mybatis源码环境配置

环境配置背景拉取代码跑起来总结背景一直想开始看框架源码,本来想从Spring看起,发现Spring框架源码太庞大,不太容易上手,所以选择先对Mybatis源码进行阅读,这篇文章先开个头,把代码跑起来拉取代码可以参考官方文档,将项目拉取到本地,地址:https://mybatis.org/mybatis-3/zh/index.html。我们把项目导入到idea里,执行mvn clear install命令,下载好依赖,我这里选择的是3.4x版本。跑起来我们可以参考官方文档来跑一个小model//

2020-08-24 17:03:11 98

原创 零钱兑换问题(动态规划算法)

动态规划算法零钱兑换问题动态规划本质动态规化组成部分图解递归解法递归加备忘录总结零钱兑换问题最近做了一道LeetCode里的零钱兑换题目,总结了一下动态规划解题的思路动态规划本质动态规化本质上就是穷举,把所以的可能性都罗列出来,然后取最优解,我们要做的就是做优化手段动态规化组成部分1.重叠子问题:肯定会存在重复的情况,解决的手段无非就两种备忘录或者dp Table2.状态转移方程:只有写出了状态转移方程才能递归求解,这一步是最难也是最关键的,思路的话明确「状态」 -> 定义 dp 数组

2020-08-09 20:10:52 2502 1

原创 二叉树的遍历

二叉树的遍历二叉树说明前序遍历中序遍历后序遍历二叉树说明二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法, 广度遍历即我们平常所说的层次遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁,而对于广度遍历来说, 需要其他数据结构的支撑,比如堆了。前序遍历遍历方式:根结点 —> 左子树 —> 右子树下面展示 代码片.// 二叉树结构实体

2020-08-08 16:30:45 81

原创 单例模式(懒汉式)多线程下是否安全

单例模式最近刷面试题碰到一个问题,单例模式懒汉式多线程下是否安全?1.例子/** * 懒汉式,线程不安全问题 */public class LazyTest { private static LazyTest lazyTest = null; public static LazyTest getLazyTest(){ if(lazyTest ==...

2020-02-16 15:12:05 458

原创 Liunx误删文件找回----debugfs

Liunx误删文件找回----debugfs背景:干java两年出现的最大失误就是把数据包给删了,这是一次血的教训本地测试如果恢复被删除的文件一.创建a.txt文件,并删除a.txt文件二.找到删除文件1.df -h:找到你删的文件在那个分区2.debugfs /dev/vda1:后面的路径是分区的路径3.ls -d /java/… :后面的路径是被删了文件的路径三.回复删除...

2019-11-09 14:41:48 327

原创 redis分布式锁

怎么实现Redis 分布式锁为什么要用分布式锁,最近在做一个基于springcloud框架的分布式项目,所以如果还是用之前的lock或者是synchronized就达不到效果了,因为后者是针对公用一个内存的,所以我们需要用redis来实现分布式锁。1.添加依赖 <dependency> <groupId>org.springframework....

2019-11-03 14:23:43 89

原创 git 的学习总结

git篇1.创建分支1.git checkout -b dev :dev 分支名称 (创建切换到dev分支)git push origin dev:dev :将本地分支传到远程分支上2.git branch 查看分支3. git merge dev 将dev分支合并到主分支上4.git branch -d dev 删除分支git push origin --delete dev......

2019-09-24 15:31:14 347 17

原创 SpringBoot整合Redis

SpringBoot整合Redis最近公司需要我在已有的项目上增加redis缓存,所有自己私底下在springboot小demo上集成了redis,这里有两个比较有意思的地方,一个就是用java配置redis,第二个就是序列化对象保存到redis1.redis所需依赖 &lt;dependency&gt; &lt;groupId&gt;org.springframewor...

2018-11-17 23:39:56 85

原创 Window10安装最新docker

Window10安装最新docker人生第一次写博客,是一篇关于docker在win10下安装的教程,我会把我遇到的几个坑都罗列出来下载链接:BLOGBUS代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctr...

2018-09-15 20:25:00 133

空空如也

空空如也

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

TA关注的人

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