Liquibase 数据库版本管理工具:3. changeSet 变更集详解

2020-07-11
阅读 3 分钟
6.6k
上篇文章中详细了介绍了一下changelog 文件的使用,本篇文章将详细说一下 changeSet 变更集 中的细节,以及通常的使用方式 1.变更集分类 changeSet 分为 6类: add create drop rename sql other 官方文档:[链接],每一个标签都有其必须的参数,使用时根据情况自行设定即可 用法均为如下格式: {代码...} 2.1 add 标签 ...

Liquibase 数据库版本管理工具:1.安装

2020-07-07
阅读 4 分钟
4.6k
Liquibase 是什么 粘一段官方的解释 Track, version, and deploy database changes跟踪、管理和应用数据库变化 说白了,就是一个将你的数据库脚本转化为xml格式保存起来。 其中包含了你对数据库的改变,以及数据库的版本信息,方便数据的升级和回滚等操作。 目前支持:MySql、Maria DB、PostgreSQL、Oracle、SQL Server...

拿来就能用:Redisson 分布式读写锁组件,搭配WebFilter释放你的双手

2020-07-05
阅读 7 分钟
2.2k
为了解决max(id) 引发的事务可见性问题,最初是通过间隙锁完成,但是间隙锁锁的是表,对并发影响太大,因此考虑使用粒度更精细的分布式读写锁。

Docker 读取配置文件,设置环境变量

2020-07-05
阅读 2 分钟
5.2k
场景 工程中有一个xxx.properties的配置文件,里面有些环境变量,如数据库连接,文件目录等 同时有一个处理数据的shell脚本,里面也需要这部分环境变量 通常的做法是在写 Dockerfile 时,使用ENV xx xx的方式制定 但是,系统环境有多个,dev、test、release 等 不能针对每一个环境都去修改 Dockerfile 文件 于是乎就尝试...

你真的明白数据一致性吗—— max(id) 破坏 Mysql 事务一致性

2020-07-04
阅读 2 分钟
2.5k
场景 业务中有一个日志表,插入数据与同步数据查询强依赖于主键的有序性 数据同步时携带上次同步更新的主键,查询到Max(id)之间的数据,只同步增量部分 意味数据只有一次同步机会 表结构如下 问题 Mysql 数据隔离级别是RR 讲道理,两个不同的事务来读取数据后一个事务 B 是无法读取的到先一个事务 A 数据的数据 但是我们...

Mysql 共享锁、排他锁 与 事务隔离级别详解

2020-04-13
阅读 2 分钟
10.8k
InnoDB 实现了两种类型的锁机制:共享锁(S)和排他锁(X)。共享锁允许一个事务读数据,不允许修改数据,如果其他事务要再对该行加锁,只能加共享锁;排他锁是修改数据时加的锁,可以读取和修改数据,一旦一个事务对该行数据加锁,其他事务将不能再对该数据加任务锁。

Java 加锁与解锁

2020-04-02
阅读 2 分钟
2.2k
Mark Word用于存储对象自身的运行时数据,自身运行时的数据:哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等,它是实现轻量级锁和偏向锁的关键。

Java String intern() 解析

2020-03-30
阅读 2 分钟
1.7k
String 在 java 中是一个使用最频繁的类,也是占据内存最大的类,合理的优化 String 对象,可以节省宝贵的内存资源。 String#intern() 在每次赋值的时候使用,如果常量池中有相同值,就会重复使用该对象,返回对象引用,这样一开始的对象就可以被回收掉。 例子 上一段代码 {代码...} 结果是: {代码...} 解析 理解这一块...

Kubernetes 日志脚本,指定环境,指定容器

2020-03-25
阅读 1 分钟
1.1k
./log dev xxx {代码...}

Springboot 用户参数自动注入

2020-03-22
阅读 5 分钟
5.5k
web应用中常会用到用户信息,一般都是从会话中获取,不过这样不优雅,相似的代码到处都是,希望可以通过spring的特性,在我需要的时候可以自动装配。

算法-下一个更大元素 I-LeetCode.496

2020-01-04
阅读 4 分钟
1.6k
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。

算法-最小栈-LeetCode155

2020-01-04
阅读 3 分钟
1.2k
push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。

算法-链表的中间结点

2020-01-02
阅读 2 分钟
1.5k
链表的操作基本上都是可以套用快慢指针的思路 这道题也是,找中间节点就让慢指针一次走一格,快指针一次走两格,快指针走到头也就意味寻址结束,这时判断一下链表的基数偶数就行

算法-删除链表的倒数第N个节点

2019-12-28
阅读 2 分钟
1.5k
思路 双指针,快指针先走n次,保持快慢指针直接的间距是n然后快慢指针同时后移,快指针为null时,满指针后一个就是要删除的节点。 关键点 哨兵节点,减少特殊节点的判断 代码 Node 逻辑 {代码...} 结果 {代码...}

算法-单链存储的字符串判断回文

2019-12-22
阅读 4 分钟
1.3k
快慢指针慢指(s)针一次走一格,快指针(f)一次走2格,当f 存在子节点与孙子节点时循环执行。 例如:1 2 3 3 2 1起始时 s 与 f 均指向1 第一次循环结束 s 指向 2,f 指向 3第二次循环结束 s 指向 3,f 指向 2f 有子节点没有孙子节点,退出循环这时,如果字符串长度是单数则s 节点就是中间节点;如果偶数则s 节点与s 节...

算法-使用数组实现LRU

2019-12-18
阅读 2 分钟
3.7k
思路 每次放值时先判断是否在已经在缓存中 如果是,将它左边的元素全部右移一个,然后放置在数组头中,同时更新map中角标 如果不是,判断数组是否还有空间 有空间,将全部元素右移,然后放置在数组头中,同时更新map中角标 如果没有,将角标0到数组长度-1的元素右移,然后放置在数组头中,同时更新map中角标,并在map中...

算法-使用有序单链表完成LRU

2019-12-18
阅读 3 分钟
992
为什么要先定位到目标缓存的父节点? 因为涉及到删除操作时,是将要删除的节点的子节点指向要删除节点的子节点,如果没有先找到父节点的话,是无法删除成功的,除非再来一次遍历,增加了时间复杂度。