- 博客(27)
- 收藏
- 关注
原创 Docker入门-什么是Docker
本文为《Docker入门到实践第三版》摘录内容整理笔记。什么是 DockerDocker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。为什么要使用 Docker?作为一种新兴的虚拟化方式, Docker 跟传统的虚拟化方式相比具有众多的优势。更高效的利用系统
2022-04-13 10:47:36
149
原创 MybatisPlus3.4.2使用SqlRunner分页查询不释放连接
前一段时间项目组进行了MybatisPlus版本升级,升到了最新的3.4.2版本。其它功能正常运行。突然某一天测试发现某一个功能打开列表页会卡住。经过一系列测试发现是数据库连接满了。查看SqlRunner源码可以看出来@Transactional @Override public boolean update(String sql, Object... args) { SqlSession sqlSession = sqlSession(); try {
2022-02-17 14:41:10
3927
1
原创 任务调度之xxl-job
前言因为公司最近系统升级,准备替换掉Quartz使用xxl-job,近期学习了一下xxl-job,记录下笔记我们知道Quartz是由JobDetail(任务)、Trigger(执行器)和Scheduler(调度器)组成,xxl-job其实就是将Quartz单机代码进行解耦,拆分成多个模块运行为什么使用xxl-job放弃Quartz?调度逻辑Scheduler和任务耦合在一个项目中,当任务随着调度任务逐渐增加,调度任务的逻辑逐渐加重,调度系统整体性能会受影响Quartz集群节点见负载结果是随机的
2021-11-02 23:11:43
861
原创 java任务调度组件-Quartz
一、什么是Quartz?Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。Quartz 允许程序开发人员根据时间的间隔来调度作业。Quartz 实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。二、Quartz可以做什么?指定一个特定的时间去执行特定的任务。每秒/每分/每小时/每天/每天几点几分去执行信用卡账单通知,每
2021-11-01 22:53:23
460
原创 Redis常用数据结构和存储结构-List
3. List存储类型List用来存储有序的字符串,元素可以重复,一个列表对象最多可以存储2^32 - 1个元素。存储结构早期版本中,数据量较小时使用ziplist存储,达到临界值时转换成linkedlist因为双向链表占用的内存比压缩列表要多, 所以当创建新的列表键时, 列表会优先考虑使用压缩列表, 并且在有需要的时候, 才从压缩列表实现转换到双向链表实现。3.2版本之后,统一使用quicklist来存储。quicklist存储了一个双向链表,每个节点都是一个ziplist,所以是qu
2021-07-21 20:59:47
121
原创 Redis常用数据结构和存储结构-String
redis数据类型String、Hash、Set、List、ZSet、Hyperloglog、Geo、Streams1. String字符串存储类型可以用来存储int(整数)、float(单精度浮点数)、String(字符串)操作命令1)赋值:SET key value。如 set hello world2)取值:GET key。如 get hello。返回是world3)自增:INCR key。就是 Mysql的AUTO_INCREMENT。每次执行 INCR key时,该key
2021-07-20 21:41:12
157
原创 并发编程之ThreadLocal
ThreadLocal是线程的局部变量,是一个<K,V>结构的Map。每个线程有自己的副本,操作后只有当前线程可用public class Thread implements Runnable { /* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal class. */ ThreadLocal.ThreadLocalMap thread
2021-04-15 00:39:09
174
原创 Mysql索引分析
在InnoDB中,索引有三种类型:普通索引、唯一索引、全文索引索引存储模型推演二叉查找树左子树所有节点都小于父节点,右子树所有节点都大于父节点。投射到平面,就是一个有序线性表优点:快速查找、快速插入缺点:查找时间和深度相关,最坏的情况下复杂度会退化成O(n),也就是退化成链表平衡二叉树因为二叉树深度差距太大,不够平衡。而平衡二叉树左右子树深度相差不能超过1通过左旋右旋来保持平衡...
2021-04-14 21:27:04
91
原创 Mysql架构分析
一条查询SQL的执行逻辑是什么?当你在客户端中编写了一条SQL语句执行首先客户端需要与Mysql建立连接查询缓存。不过缓存是默认关闭的,因为缓存限制太多,只有完全相同的SQL才会命中缓存。且当缓存中数据数据发生改变时,这张表的所有缓存都会失效。Mysql8.0中,查询缓存已被移除。语法解析,根据Mysql定义的语法规则,根据一条SQL语句生成Mysql能够解析的数据结构,这种数据结构叫做解析树。预处理器,检查表名、字段是否正常,是否有歧义。处理后得到新的解析树查询优化器,根据解析树生成不同的
2021-04-13 23:41:19
196
原创 Mysql事务与锁
事务事务的四大特性原子性原子不可分割,就是说一系列操作要么全部成功,要么全部失败。在mysql中通过undo log来实现。undo log中记录了修改前的数据,如果发生异常通过undo log实现回滚操作。隔离性我们有了事务的定义之后,在mysql中有很多事务同时去操作我们的同一张表、同一条数据,会产生一些并发的干扰。对接口隔离性的定义,就应该是事务直接互不干扰持久性我们对数据库数据进行操作,只要事务提交成功,不管是宕机还是断电,数据都不会丢失,这就是事务的持久性。my
2021-02-25 23:12:43
114
原创 redis持久化机制
redis相对与memcache最大的不同就是redis是单线程,且redis支持持久化,那么问题来了面试常见问题,redis持久后有几种方式?redis的两种持久化机制1. RDB:RDB是redis的默认持久化机制(如果开始AOF,优先使用AOF)。 当满足一定条件,会把内存中数据写入磁盘生成快照dump.rdb。redis重启会加载dump.rdb文件恢复数据RDB触发条件配置自动触发规则:配置多少秒内有多少个key被修改,触发持久化shutdown触发,服务关闭时,触发持久化手动.
2021-02-23 23:52:38
143
1
原创 redis的过期淘汰策略
redis有两种过期策略被动过期只有当访问一个key时才判断是否过期,过期就进行清除。节省CPU,但是浪费内存定期过期每隔一段时间进行扫描,清除过期的key对内存和CPU都比较友好可是如果key没有添加过期时间,则redis中数据会越来越多,把redis占满,所以需要使用淘汰策略来清理掉一些数据,保证新插入的数据可以存储淘汰策略LRU:最近最少使用。redis并没有使用双向链表来实现lru。Redis整体上是一个大的dict,key是一个string,而value都会
2021-02-23 22:56:02
105
原创 redis基础篇
1. 什么是redis?redis的全称是REmote DIctionary Service,翻译过来就是远程词典服务2. SQL与NOSQLsql(关系型数据库):以表格的形式存储行数据存储格式需要与表结构相同表之间存在关联支持关联查询事务来保证数据一致性但是在数据量很大时,修改表结构非常困难。关系型数据库需要将数据持久化到磁盘,频繁IO操作在高并发场景下读写压力大,由此引出NOSQLnosql(非关系型数据库):存储非机构化数据表之间没有关联支持海量存储和高并发读写
2021-02-23 01:13:54
96
原创 分布式全局ID生成策略
传统应用中,ID生成策略使用mysql自增序列auto_increment,过度依赖数据库,有一定性能瓶颈;在分库分表的数据库中、之前一张数据庞大想要拆分的表,自增策略就会出现问题。分布式全局ID由此而生Reids:我们知道redis是单线程的,通过Incr可以实现自增。在分布式系统中也可以使用redis来实现自增序列,且每条数据的id均不一样。UUID:UUID是通用唯一识别码(Universally Unique Identifier)的缩写,用它可以产生一个号称全球唯一的ID,来保证每条数据
2021-02-01 23:14:38
89
原创 Spring IOC容器提供的扩展接口
前言了解Spring容器的扩展点可以帮助我们完成特定任务,如何精通 Spring 就看你有没有掌握好 Spring 有哪些扩展点。Spring Ioc 容器主要有这么几个拓展点:BeanFactoryPostProcessor和BeanPostProcessor,他们分别是在构建 BeanFactory 和构建 Bean 对象时调用;还有就是 InitializingBean 和 DisposableBean, 他们分别是在 Bean 实例创建和销毁时被调用。用户可以实现这些接口中定义的方法,Sprin
2021-01-28 22:56:20
237
原创 Spring注入@Qualifier逻辑分组
创建多个具有相同类型的 bean 时,使用类注入会报错,在这种情况下,你可以使用 @Qualifier(bean名字) 注释和 @Autowired 来注入。如果存在多个bean使用同一个@Qualifier修饰的注解,可以通过注入List来分组,所有添加该注解的类都会注入到List当中实体类Rumenz/SuperRumenzpackage com.rumenz;public class Rumenz{ private Integer id; private Strin.
2021-01-28 00:39:40
260
原创 Spring注解编程
@Configuration声明在类上面,表示把这个类作为IoC容器@ComponentScan声明在启动类上,该注解默认会扫描该类所在包及所有子类包中所有配置类,或手动在参数中添加扫描路径@Scope指定bean作用域,应用于方法上,默认是单例:prototype:原型,多例;singleton:单例;request:主要用于web模块,同一次请求只创建一个实例;session:主要应用于web模块,同一个session只创建一个对象@Lazy表示延迟初始化,调用getBean时才创建对象,
2021-01-27 23:11:27
149
原创 springboot自动装配
平时经常用springboot,可是对其自动装配功能却不甚了解。为什么application上开启@EnableAutoConfiguration注解就可以将很多类注入bean呢。下面我们来引入实际案例。使用方面的东西还是很有用处的。下面来引入一个场景。我们有两个系统A系统和B系统,其中A系统提供工具类给B系统使用,且包路径不一样,注入spring比较麻烦,那么有什么优雅的办法将需要的类注入spring吗。可以使用注解 + @Import+@Conditional来模拟springboot自动装配首先
2021-01-27 22:13:26
145
原创 HashMap与ConcurrentHashMap
HashMap是我们开发中经常使用。面试官也总喜欢问关于HashMap的实现原理,那么咱们就用一篇文章来说明一下。关于HashMap的底层结构,那么必须要说的就是JDK1.7及之前,采用的是数组+链表 JDK1.8之后采用数组+链表 或者数组+红黑树的方式进行元素存储首先贴一段我们常用的代码String key = "keyTest";Map<String, String> hashMap = new HashMap<>();hashMap.put(key,"valu
2021-01-23 20:58:20
104
转载 位运算
前言我们都知道对于有符号数据类型,二进制最左端的数字为符号位,0代表正,1代表负,这里先介绍几个概念逻辑左移=算术左移:高位溢出,低位补0逻辑右移:低位溢出,高位补0算术右移:低位溢出,高位用符号位的值补比如一个有符号位的8位二进制数10101010,[]是添加的数字逻辑左移一位:0101010[0]逻辑左移两位:101010[00]算术左移一位:0101010[0]算术左移两位:101010[00]逻辑右移一位:[0]1010101逻辑右移两位:[00]101010算术右移一位:[
2021-01-23 15:44:47
147
原创 二进制与十进制相互转换
十进制转二进制方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。 public static void test2(){ //16转2进制// 16/2 0// 4 0// 2 0// 1 0// 0 1// 结果 10000}二进制转十进制方法
2021-01-23 15:28:25
72
原创 JUC之Condition实现原理
Condition是一个多线程协调通信的工具类,Condition是对线程进行控制管理的接口,具体实现是AQS的一个内部类ConditionObject,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒Condition是一个接口,这些是抽象方法我们本篇文章主要看的就是await()和signal()首先了解一下AQS同步队列与等待队列数据结构等待队列是一个FIFO单向链表同步队列是一个FIFO双向链表下面来看一个生产者消费者对Condition的应
2021-01-21 01:08:50
299
3
转载 [转]将一个github项目克隆到另一个github项目步骤
将demo项目克隆并添加到新的github项目的步骤:方法一:创建repository后,在code页最下边import code,import已存在的项目(使用git下载的url)方法二:1)git clone Demo项目2)git remote rm origin3) git remote add origin https://github.com/skyywj/CarryJey-tale-blog.git4) git add .5) git commit .6) git push
2021-01-20 15:06:45
277
原创 RedisTemplate hash操作如何使用string类型
使用template调用方法,返回值都是object类型因为opsForHash的时候,会返回具体的redis默认操作类,可以指定范型类的HashOperations<K, HK, HV>所以在操作hash之前,需要将<K, HK, HV>换成自己需要的String@Component@ConditionalOnBean(RedisTemplate.class)public final class RedisUtil implements ApplicationConte
2021-01-19 16:11:12
445
转载 时区参照表
记录下时间,使用时查看&lt;?xml version="1.0" encoding="UTF-8"?&gt; 中国标准时间 (北京) 香港时间 (香港) 台北时间 (台北) 首尔 日本时间 (东京) 美国东部时间 (纽约) 美国山区时间 (丹佛) 美国中部时间 (哥斯达黎加) 美国中部时间 (芝加哥) 美国中部时间 (墨西哥城) 美国中部时间 (里贾纳...
2019-01-03 11:39:39
765
原创 easypoi发现注解属性不够,自定义样式
产品需要增加文本超出长度时,不换行,增加了isWrap = false即可,可是对表头却没有效果,以及默认横向对齐方式为居中等样式需要实现,样式很不友好。 @Excel(name = "So", width = 15) private String so; @Excel(name = "Warehouse", width = 11) private String ware...
2018-12-29 14:11:03
8665
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人