- 博客(24)
- 收藏
- 关注
原创 MySQL数据库MVCC原理浅析
MVCC概念阿里数据库内核’2017/12’月报中对MVCC的解释是:指的是一种提高并发的技术。最早的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入多版本之后,只有写写之间相互阻塞,其他三种操作都可以并行,这样大幅度提高了InnoDB的并发度。在内部实现中,与Postgres在数据行上实现多版本不同,InnoDB是在undolog中实现的,通过undolog可以找回数据的历史版本。找回的数据历史版本可以提供给用户读(按照隔离级别的定义,有些读请求只能看到比较老的数据版本),也可以在回滚
2021-01-05 14:47:17
236
原创 java.lang.NoClassDefFoundError: redis/clients/jedis/JedisPoolConfig
springboot版本:2.3.0.RELEASEspring-boot-starter-data-redis连接redis,启动项目后报错pom.xml<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.0.RELEASE
2020-06-08 11:00:05
8939
原创 生产者消费者的两种实现
synchronized实现/** * @author ZxT * @date 2020-03-10 * @desc */public class Costumer implements Runnable { @Override public void run() { while (true) { synchronized (G...
2020-04-03 18:17:12
169
原创 SpringBoot-Redis实现分布式锁的两种方式,支持续约
Redis事务实现package com.example.redis.command;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereo...
2020-04-03 17:52:42
993
原创 SpringBoot应用中利用AOP实现操作日志记录
引出问题在web应用开发中,记录用户的操作日志是必不可少的,下面介绍一下利用AOP实现操作日志记录。本文使用了Lombok,不懂的同学建议了解一下引入依赖首先构建一个SpringBoot项目,引入依赖<dependencies> <dependency> <groupId>org.springframework....
2020-01-20 17:44:53
1396
1
原创 Lombok-你的开发利器
个人博客在这里本文的代码在这里希望收到一个star,感谢支持前提Lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而为您的Java增光添彩。 永远不要再写另一个getter或equals方法,带有一个注释的您的类有一个功能全面的生成器,自动化您的日志记录变量等等。但是Lombok在使用过程中也有许多值得注意的点,如果不清楚的话,可能会给代码调试带来意想不到的后果!!!...
2020-01-16 01:02:30
220
转载 代码技巧之道
原文链接: https://www.zhihu.com/question/37760140/answer/830574208zhihu.com/question/37760…zhihu.com/question/37760…前言:感谢大家观看本文,希望大家都能有所收获开发工具不知道有多少”老”程序员还在使用 Eclipse,这些程序员们要不就是因循守旧,要不就是根本就不知道其他好...
2019-10-23 16:39:18
229
原创 Java虚拟机加载总结
个人站点,请多关注https://kooper.top/2019/05/16/java虚拟机加载总结/知识点总结,持续更新当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类类的生命周期包括:加载->验证->准备->解析->初始化->使用->卸载类的加载阶段(双亲委派机制)通过一个类的全...
2019-05-17 18:51:19
113
原创 vim常用指令
移动光标[+] : 光标移动到非空格符的下一列[-] : 光标移动到非空格符的上一列[0或者Home键] : 移动到这一行的最前面字符处[$或者End键] : 移动到这一行的最后面字符处[G] : 移动到这个档案的最后一行[gg] : 移动到这个档案的第一行搜索[/word] : 向光标之下寻找一个名称为 word 的字符串[?word] : 向光标之上寻找一个字符串名称...
2019-02-01 17:35:36
142
原创 Linux文件权限
文件权限首先看一下Linux文件的属性,以root身份登录Linux服务器,执行“ls -al”命令。一个Linux文件主要包括7个属性- 类型和权限dr-xr-x---第一个字符代表这个文件的类型-:文件 d:目录 l:连结档 ...接下来的字符中,以三个为一组,且均为[rwx]的三个参数的组合。其中...
2019-02-01 16:26:56
324
原创 内存分配与回收策略
读《深入理解Java虚拟机》对象的内存分配,往大方向上讲,就是在堆上分配,对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配,少数情况下也可能会直接分配在老年代,分配的规则不是百分百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中的内存相关的参数的设置。本文是使用Serial/Serial Old收集器的内存分配和回收的策略。Min...
2019-01-22 01:13:19
129
原创 垃圾收集算法
读《深入理解Java虚拟机》1. 标记-清除算法算法分为标记和清除两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。优点:实现简单缺点:效率低,标记和清除的效率都不高;产生大量内存碎片。2. 复制算法为了解决效率问题,复制算法出现了。它将可用内存容量划分为大小相等的两块,每次只使用其中的一块。当这一块内存用完了,就将还存活的对象复制到另外一块上面,然后将垃圾...
2019-01-18 19:04:57
126
原创 对象已死吗
读《深入理解Java虚拟机》当虚拟机中需要发生GC时,垃圾收集器怎样判断对象是否已死?1. 引用计数法给对象添加一个引用计数器,当有一个地方引用它时,引用计数器就加1。当引用失效时,计数器就减1。引用计数法实现简单,但是主流的java虚拟机里面没有选用引用计数法来管理内存,主要原因是它无法解决对象之间相互引用的问题。2. 可达性分析法通过一系列的“GC Roots”的对象作为起始点,从...
2019-01-18 16:44:56
232
原创 springboot-cache-mybatis
当程序中数据库访问压力特别大时,我们会考虑使用缓存来减少对数据库的访问次数。在我们的项目中,springboot+Mybatis是一个比较常见的组合。Mybatis有一级缓存和二级缓存。一级缓存:1. 创建一个springboot项目2. entity层和mapper层代码略3. 在yml配置日志打印级别,打印出数据库查询语句```logging: level: top:...
2019-01-18 00:28:49
369
转载 springboot-Jackson
在json的解析等处理方面,我更喜欢用阿里巴巴的Fastjson。Jackson也有许多实用的功能。今天整理几个比较常用的jackson实用功能:示例代码@RequestMapping("getuser")@ResponseBodypublic User getUser() { User user = new User(); user.setUserName("mrbird...
2019-01-17 15:38:52
1823
原创 对象的访问定位
读《深入理解Java虚拟机》栈中的引用类型如何定位到堆中的具体对象呢?这边有两种方式:1. 直接指针引用类型中存储的就是对象,对象中存放了类型数据的地址优点:只需要一次定位,速度快2. 句柄访问堆中划分出来一块内存作为句柄池,引用类型中存储的就是对象的句柄地址。句柄中包含了对象的实例数据和类型数据各自的具体地址信息优点:引用类型中存放的是稳定的句柄地址,在对象被移动,只会改变句柄中的...
2019-01-17 01:10:49
187
原创 对象的内存布局
读《深入理解Java虚拟机》对象在内存中分为3块区域:对象头,实例数据,对齐填充。1.对象头对象头包括两部分,第一部分用于存储对象自身的运行时数据,如哈希值,GC分代年龄,锁状态标志等;第二部分是指针类型,对象通过这个指针来确定这个对象是哪个类的实例。如果对象是一个Java数组,那在对象头中还必须有一块记录数组长度的数据。2. 实例数据实例数据是存放对象真正的有效数据。无论是从父类继承,...
2019-01-17 01:00:10
154
原创 对象的创建
读《深入理解Java虚拟机》Java是一门面向对象的编程语言,在Java程序运行过程中每时每刻都有对象被创建出来。在语言层面上,创建对象只是一个new关键字,在虚拟机中,对象(普通的java对象,不包括数组和Class对象)的创建是怎样的?这里简单的概述一下。1. 加载当虚拟机遇到一条new指令时,首先去建仓这个指令的参数是否能在常量池中定位到一个类的引用,并检查这个符合的引用的类是否已被加...
2019-01-17 00:47:30
166
原创 Java内存区域
最近在读《深入理解java虚拟机》第二版,在这边记录一下所见所感本书以JDK1.7为例Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。对于Java来说,在虚拟机自动内存管理机制的帮助下,不需要再关心内存的分配和释放,也不容易出现内存泄漏和内存溢出。那我们为什么还要学习虚拟机呢?首先我们要了解,不容易出现,并不是不可能出现。一旦...
2019-01-15 01:09:12
115
原创 springboot-aop实现日志记录
首先创建一个springboot项目,引入必要的依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-a...
2019-01-14 01:00:11
305
原创 org.apache.ibatis.binding.BindingException
记录Mybatis的xml中无法直接用对象参数的属性今天使用mybatis的过程中,在dao有一个查询方法List&amp;lt;User&amp;gt; selectByNickname(@Param(&quot;user&quot;) User user);xml中的配置文件&amp;lt;select id=&quot;selectByNickname&quot; resultMa
2019-01-12 14:00:56
169
原创 Mybatis-动态SQL
动态SQL是mybatis的强大特性之一,主要包括以下几点ifchoose(when,otherwise)trim(where,set)foreachbind前置条件项目是springboot搭建开启mybatis的驼峰等配置mybatis: mapper-locations: classpath:mapper/*Mapper.xml type-aliases-...
2019-01-12 12:20:51
135
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人