Zack_tzh的博客

私信 关注
Zack_tzh
码龄2年
  • 1,270,580
    被访问量
  • 106
    原创文章
  • 24,326
    作者排名
  • 17
    粉丝数量
  • 毕业院校 重庆邮电大学移通学院
  • 于 2019-08-09 加入CSDN
获得成就
  • 获得45次点赞
  • 内容获得18次评论
  • 获得84次收藏
荣誉勋章
兴趣领域
  • #后端
    #分布式#Redis#MySQL#Spring Boot#Elasticsearch#Spring#Linux#Java#架构
TA的专栏
  • 分布式之Redis
    2篇
  • 算法训练
    30篇
  • 算法笔记
    7篇
  • 多线程和高并发专项提升
    4篇
  • MySQL高级特性和性能优化
  • java
    4篇
  • 日志框架系列
    4篇
  • MyBatis系列
    17篇
  • MyBatis-Plus系列
    22篇
  • Exception
    2篇
  • EasyExcel
    4篇
  • docker
    4篇
  • swaager
    2篇
  • spring boot
    6篇
  • FastDFS
    1篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

分布式之Redis【二】高可用集群搭建

分布式之Redis【二】高可用集群搭建一、Redis集群方案比较哨兵模式在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态, 如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率
原创
12阅读
0评论
0点赞
发布博客于 昨天

分布式之Redis【一】基础学习

分布式之Redis【一】基础学习一、Linux 源码安装# 官网 https://redis.io/# wget http://download.redis.io/releases/redis-5.0.2.tar.gz# tar xzf redis-5.0.2.tar.gz# cd redis-5.0.2# make# 修改配置文件 redis.conf daemonize yes# 启动redis服务端 ./src/redis-server redis.conf# 启动客服端 ./s
原创
9阅读
0评论
0点赞
发布博客于 2 天前

【每日一题】 1438. 绝对差不超过限制的最长连续子数组

【每日一题】 1438. 绝对差不超过限制的最长连续子数组避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 中等给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。如果不存在满足条件的子数组,则返回 0 。提示:1 <= nums.length <= 10^51 <= nums[i] <= 10^90 <= limit &
原创
20阅读
0评论
0点赞
发布博客于 5 天前

【每日一题】 697. 数组的度

【每日一题】 697. 数组的度避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 简单给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。提示:nums.length 在1到 50,000 区间范围内。nums[i] 是一个在 0 到 49,999 范围内的整数。示例 1:输入:[1, 2, 2, 3, 1]输出:2解
原创
8阅读
0评论
0点赞
发布博客于 8 天前

【每日一题】 1004. 最大连续1的个数 III

【每日一题】 1004. 最大连续1的个数 III避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 中等给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。提示:1 <= A.length <= 300001 <= K <= A.length示例 1:输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释: [1,1
原创
5阅读
0评论
0点赞
发布博客于 9 天前

【每日一题】 995. K 连续位的最小翻转次数

【每日一题】 995. K 连续位的最小翻转次数避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 困难在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0。返回所需的 K 位翻转的最小次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。提示:1 <= A.length <= 300001 <= K <= A.length示例
原创
20阅读
0评论
0点赞
发布博客于 10 天前

【每日一题】 992. K 个不同整数的子数组

【每日一题】 992. K 个不同整数的子数组避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 困难给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。)返回 A 中好子数组的数目。提示:1 <= A.length <= 200001 <= A[i] <= A.length1 <=
原创
2124阅读
0评论
0点赞
发布博客于 11 天前

【每日一题】 978. 最长湍流子数组

【每日一题】 978. 最长湍流子数组避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 中等当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] <
原创
2150阅读
0评论
0点赞
发布博客于 12 天前

【每日一题】 665. 非递减数列

【每日一题】 665. 非递减数列避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 简单给你一个长度为n的整数数组,请你判断在 最多 改变1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的:对于数组中所有的i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。提示:1 <= n <= 10 ^ 4- 10 ^ 5 <= nums[i] <= 10 ^ 5
原创
2136阅读
0评论
0点赞
发布博客于 13 天前

【每日一题】 1423. 可获得的最大点数

【每日一题】 1423. 可获得的最大点数避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 中等几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。例如:[2,3,4],中位数是 3[2,3],中位数是 (2 + 3) /
原创
2161阅读
0评论
0点赞
发布博客于 14 天前

【每日一题】 1208. 尽可能使字符串相等

【每日一题】 1208. 尽可能使字符串相等避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 中等给你两个长度相同的字符串,s 和 t。将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对
原创
2151阅读
0评论
0点赞
发布博客于 15 天前

【每日一题】 480. 滑动窗口中位数

【每日一题】 480. 滑动窗口中位数避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 困难中位数是有序序列最中间的那个数。如果序列的大小是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。例如:[2,3,4],中位数是 3[2,3],中位数是 (2 + 3) / 2 = 2.5给你一个数组 nums,有一个大小为 k 的窗口从最左端滑动到最右端。窗口中有 k 个数,每次窗口向右移动 1 位。你的任务是找出每次窗口移动后得到的新窗口中元素的中位数,并输出
原创
2127阅读
0评论
0点赞
发布博客于 16 天前

【每日一题】 643. 子数组最大平均数 I

【每日一题】 643. 子数组最大平均数 I避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 简单给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。提示:1 <= k <= n <= 30,000。所给数据范围 [-10,000,10,000]。示例 1:输入:[1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75二、题
原创
2161阅读
0评论
0点赞
发布博客于 17 天前

【每日一题】 424. 替换后的最长重复字符

【每日一题】 424. 替换后的最长重复字符避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 中等给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。提示:字符串长度 和 k 不会超过 104。示例 1:输入:s = "ABAB", k = 2输出:4解释:用两个'A'替换为两个'B',反之亦然。示例 2:输入:s = "AABABBA", k =
原创
2155阅读
0评论
0点赞
发布博客于 26 天前

【四】彻底搞懂synchronized

【四】彻底搞懂synchronized废话不多说,我们先来看一个段代码,了解一个奇怪的现象public class Synchronized03 implements Runnable { private static int count = 0; public static void main(String[] args) { for (int i = 0; i < 10; i++) { Thread thread = new Threa
原创
16457阅读
0评论
0点赞
发布博客于 27 天前

【每日一题】 888. 公平的糖果棒交换

【每日一题】 888. 公平的糖果棒交换避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 简单爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒
原创
2146阅读
0评论
0点赞
发布博客于 27 天前

【三】回避不了的面试问题 ==> volatile

【三】回避不了的面试问题 ==> volatile如果面试问到多线程高并发方面的话必然会问到volatile,很多小伙伴对于volatile的认知可能还不够清晰,今天我们一起来彻底的搞定它。我们先来看一个段代码,了解一个奇怪的现象public class VolatileTest { private static boolean flag = false; public static void main(String[] args) { A a = new A(
原创
16712阅读
0评论
0点赞
发布博客于 28 天前

【每日一题】 2. 两数相加

【每日一题】 7. 整数反转避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 中等给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。提示:每个链表中的节点数在范围 [1, 100] 内0 <= Node.val <= 9题目数据保证列表表示的数字不含前导零示例 1:
原创
3231阅读
0评论
0点赞
发布博客于 28 天前

【二】Java线程池

【二】Java线程池一、线程池的优势降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场))。提供更强大的功能,延时定时线程池。二、线程池的主要参数public ThreadPoolExecuto
原创
10阅读
0评论
0点赞
发布博客于 29 天前

【一】Java线程初步了解

Java线程一、进程与线程进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,即进程空间或(虚空间)。进程不依赖于线程而独立存在,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,线程没有自己的虚拟地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。二、线程实现方式(一)继承 Thread 类public cla
原创
17032阅读
0评论
0点赞
发布博客于 29 天前

【每日一题】 7. 整数反转

【每日一题】 7. 整数反转避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 简单给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。提示:-231 <= x <= 231 - 1示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-32
原创
3805阅读
0评论
0点赞
发布博客于 29 天前

【每日一题】 724. 寻找数组的中心索引

【每日一题】 724. 寻找数组的中心索引避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 简单给定一个整数类型的数组 nums,请编写一个能够返回数组 “中心索引” 的方法。我们是这样定义数组 中心索引 的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。提示:nums 的长度范围为 [0, 10000]。任何一个 nums[i] 将会是一
原创
3765阅读
0评论
0点赞
发布博客于 1 月前

【每日一题】 1579. 保证图可完全遍历

【每日一题】 1579. 保证图可完全遍历避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述难度: 困难Alice 和 Bob 共有一个无向图,其中包含 n 个节点和 3 种类型的边:类型 1:只能由 Alice 遍历。类型 2:只能由 Bob 遍历。类型 3:Alice 和 Bob 都可以遍历。给你一个数组 edges ,其中 edges[i] = [typei, ui, vi] 表示节点 ui 和 vi 之间存在类型为 typei 的双向边。请你在保证图仍能够被 A
原创
3893阅读
0评论
0点赞
发布博客于 1 月前

【每日一题】 1690. 石子游戏 VII

【每日一题】 1690. 石子游戏 VII避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 。有 n 块石子排成一排。每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头,并获得与该行中剩余石头值之 和 相等的得分。当没有石头可移除时,得分较高者获胜。鲍勃发现他总是输掉游戏(可怜的鲍勃,他总是输),所以他决定尽力 减小得分的差值 。爱丽丝的目标是最大限度地 扩大得分的差值 。给你一个整数数组 stones ,
原创
7阅读
0评论
0点赞
发布博客于 1 月前

【每日一题】 1689. 十 - 二进制数的最少数目

【每日一题】 1689. 十-二进制数的最少数目避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 。例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是。给你一个表示十进制整数的字符串 n ,返回和为 n 的 十-二进制数 的最少数目。提示:1 <= n.length <= 105n 仅由数字组成n 不含任何前导零并总是表示正整
原创
3749阅读
0评论
0点赞
发布博客于 1 月前

【每日一题】 1688. 比赛中的配对次数

【每日一题】 1688. 比赛中的配对次数避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制:如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。如果当前队伍数为 奇数 ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生 (n - 1) / 2 + 1 支队伍进入下一轮。返回在比赛中进行的配对次
原创
3770阅读
0评论
0点赞
发布博客于 1 月前

【每日一题】 1128. 等价多米诺骨牌对的数量

【每日一题】 1128. 等价多米诺骨牌对的数量避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述给你一个由一些多米诺骨牌组成的列表 dominoes。如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 a==c 且 b==d,或是 a==d 且 b==c。在 0 <= i < j < domin
原创
3824阅读
0评论
0点赞
发布博客于 2 月前

【每日一题】 1518. 换酒问题

【每日一题】 1518. 换酒问题避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。请你计算 最多 能喝到多少瓶酒。提示:1 <= grid.length == grid[0].length <= 30grid[i][j] 是 '/'、'\'、或 ' '。示例 1:输入:numBottles = 9,
原创
7020阅读
0评论
0点赞
发布博客于 2 月前

算法笔记【7】 最短路问题

算法笔记【7】 最短路问题最短路问题简介这篇文章应该会很长,因为我们要探讨图论中一个基本而重要的问题:最短路问题。如下图,我们想知道,某点到某点最短的路径有多长?最短路问题分为两类:单源最短路和多源最短路。前者只需要求一个固定的起点到各个顶点的最短路径,后者则要求得出任意两个顶点之间的最短路径。我们先来看多源最短路问题。Floyd算法(弗洛伊德算法)我们用Floyd算法解决多源最短路问题:public static int[][] floyd(int[][] e) { for (in
原创
7286阅读
0评论
0点赞
发布博客于 2 月前

【每日一题】 959. 由斜杠划分区域

【每日一题】 959. 由斜杠划分区域避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。(请注意,反斜杠字符是转义的,因此 \ 用 “\” 表示。)。返回区域的数目。提示:1 <= grid.length == grid[0].length <= 30grid[i][j] 是 '/'、'\'、或 ' '。示例 1:
原创
7257阅读
0评论
0点赞
发布博客于 2 月前

算法笔记【6】 匈牙利算法

算法笔记【6】 匈牙利算法匈牙利算法简介今天我们来看一个没有前几篇讲的那么常用,但是很有用的算法:匈牙利算法(Hungarian algorithm)。匈牙利算法主要用于解决一些与二分图匹配**有关的问题,所以我们先来了解一下二分图。二分图(Bipartite graph)是一类特殊的图,它可以被划分为两个部分,每个部分内的点互不相连。下图是典型的二分图。可以看到,在上面的二分图中,每条边的端点都分别处于点集X和Y中。匈牙利算法主要用来解决两个问题:求二分图的最大匹配数和最小点覆盖数。这么
原创
7658阅读
0评论
0点赞
发布博客于 2 月前

【每日一题】 1319. 连通网络的操作次数

【每日一题】 1319. 连通网络的操作次数避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。给你这个计算机网络的初始布线 connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直
原创
7822阅读
0评论
0点赞
发布博客于 2 月前

算法笔记【5】 快速幂

算法笔记【5】 快速幂快速幂简介快速幂(Exponentiation by squaring,平方求幂)是一种简单而有效的小算法,它可以以Ologn的时间复杂度计算乘方。快速幂不仅本身非常常见,而且后续很多算法也都会用到快速幂。让我们先来思考一个问题:7的10次方,怎样算比较快?方法1:最朴素的想法,7*7=49,49*7=343,… 一步一步算,共进行了9次乘法。这样算无疑太慢了,尤其对计算机的CPU而言,每次运算只乘上一个个位数,无疑太屈才了。这时我们想到,也许可以拆分问题。方法2:先
原创
7961阅读
0评论
0点赞
发布博客于 2 月前

【每日一题】 1319. 连通网络的操作次数

【每日一题】 1319. 连通网络的操作次数避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。给你这个计算机网络的初始布线 connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直
原创
8024阅读
0评论
0点赞
发布博客于 2 月前

算法笔记【4】 存图

算法笔记【4】 存图存图简介所谓图(graph),是图论中基本的数学对象,包括一些顶点,和连接顶点的边,这里的边只是表示顶点的连接情况,用直线或曲线表示均可。图可以分为有向图和无向图,有向图中的边是有方向的,而无向图的边是双向连通的。算法竞赛中有一些称为图论题的题目,涉及到对图的处理,为了解决它们,我们至少先得把图存储起来,这个过程我们称为存图。邻接矩阵谈到存图,最朴素的想法当然是用一个二维数组mat[]存储两个边的连接情况。假如从顶点u到顶点v有一条边,则令mat[u][v] = 1。这
原创
8233阅读
0评论
1点赞
发布博客于 2 月前

【每日一题】 989. 数组形式的整数加法

【每日一题】 989. 数组形式的整数加法避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。提示:1 <= A.length <= 100000 <= A[i] <= 90 <= K <= 10000如果 A.length >
原创
8618阅读
0评论
0点赞
发布博客于 2 月前

【每日一题】 1705. 吃苹果的最大数目

【每日一题】 1705. 吃苹果的最大数目避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i + days[i] 天时)腐烂,变得无法食用。也可能有那么几天,树上不会长出新的苹果,此时用 apples[i] == 0 且 days[i] == 0 表示。你打算每天 最多 吃一个苹果来保证营养均衡。注意,你可以在这 n
原创
8632阅读
0评论
0点赞
发布博客于 2 月前

算法笔记【3】 树状数组

算法笔记【3】 树状数组树状数组简介树状数组(Binary Index Tree, BIT)也是很多OIer心中最简洁优美的数据结构之一。最简单的树状数组支持两种操作,时间复杂度均为O(logN):单点修改:更改数组中一个元素的值区间查询:查询一个区间内所有元素的和当然,树状数组能维护的不局限于加法,支持的操作也不止这两种,甚至有大佬能用树状数组实现平衡树,但这篇笔记不会深入讨论(因为我也还不是很懂hh)。我们还是先来看一道模板题,来看看树状数组最基本的应用场景:(HDU P1166
原创
9098阅读
0评论
0点赞
发布博客于 2 月前

算法笔记【2】 并查集

算法笔记【1】 并查集并查集简介并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。当然,这样的定义未免太过学术化,看完后恐怕不太能理解它具体有什么用。所以我们先来看看并查集最直接的一个应用场景:亲戚问题。题目背景若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意
原创
9190阅读
0评论
0点赞
发布博客于 2 月前

【每日一题】 1584. 连接所有点的最小费用

【每日一题】 1584. 连接所有点的最小费用避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [xi, yi] 。连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的绝对值。请你返回将所有点连接的最小总费用。只有任意两点之间 有且仅有 一条简单路径时,才认为所有点都已连接。提示:
原创
9580阅读
0评论
1点赞
发布博客于 2 月前

算法笔记【1】 Kruskal - 克鲁斯卡尔算法

图 Kruskal - 克鲁斯卡尔算法求最小生成树本次所介绍的克鲁斯卡尔算法,从边的角度求网的最小生成树时间复杂度为O(NlogN)。和普里姆算法恰恰相反,更适合于求边稀疏的网的最小生成树。对于任意一个连通网的最小生成树来说,在要求总的权值最小的情况下,最直接的想法就是将连通网中的所有边按照权值大小进行升序排序,从小到大依次选择。由于最小生成树本身是一棵生成树,所以需要时刻满足以下两点:生成树中任意顶点之间有且仅有一条通路,也就是说,生成树中不能存在回路;对于具有 n 个顶点的连通网,其生成树
原创
9602阅读
0评论
1点赞
发布博客于 2 月前

【每日一题】 628. 三个数的最大乘积

【每日一题】 628. 三个数的最大乘积避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。提示:给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。示例 1:输入: [1,2,6]输出: 12示例 2:输入: [1,2,-3,4]输出: 8二、题解1. 解法解题思路:这道题是为了
原创
9797阅读
1评论
1点赞
发布博客于 2 月前

【每日一题】 1396. 设计地铁系统

【每日一题】 1396. 设计地铁系统避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述请你实现一个类 UndergroundSystem ,它支持以下 3 种方法:checkIn(int id, string stationName, int t)编号为 id 的乘客在 t 时刻进入地铁站 stationName 。一个乘客在同一时间只能在一个地铁站进入或者离开。checkOut(int id, string stationName, int t)编号为 i
原创
10442阅读
0评论
1点赞
发布博客于 2 月前

【每日一题】 1184. 公交站间的距离

【每日一题】 1184. 公交站间的距离避免每日太过咸鱼,一天搞定一道LeetCode算法题一、题目描述环形公交路线上有 n 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i + 1) % n 的车站之间的距离。环线上的公交车都可以按顺时针和逆时针的方向行驶。返回乘客从出发点 start 到目的地 destination 之间的最短距离。提示:1 <= n <= 10^4dista
原创
10057阅读
0评论
1点赞
发布博客于 2 月前

日志框架(四)Log4j2

日志框架(四)Log4j2Apache Log4j 2是对Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有:异常处理,在logback中,Appender中的异常不会被应用感知到,但是在log4j2中,提供了一些异常处理机制。性能提升, log4j2相较于log4j 和logback都具有很明显的性能提升,后面会有官方测试的数据。自动重载配置,参考了logback的设计,当然会提供自动刷新参数配置,最实用的就是我们在生产上可以动态的修改
原创
10324阅读
0评论
1点赞
发布博客于 2 月前

日志框架(三)Slf4j、LogBack

日志框架(三)Slf4j、LogBack上篇文章介绍了日志的作用,以及JDK自带的日志框架JUL,接下来我们继续学习Log4j框架1. 日志门面当我们的系统变的更加复杂的时候,我们的日志就容易发生混乱。随着系统开发的进行,可能会更新不同的日志框架,造成当前系统中存在不同的日志依赖,让我们难以统一的管理和控制。就算我们强制要求所有的模块使用相同的日志框架,系统中也难以避免使用其他类似spring,mybatis等其他的第三方框架,它们依赖于我们规定不同的日志框架,而且他们自身的日志系统就有着不一致性
原创
13120阅读
0评论
1点赞
发布博客于 2 月前

日志框架(二)Log4J

日志框架(二)Log4J上篇文章介绍了日志的作用,以及JDK自带的日志框架JUL,接下来我们继续学习Log4j框架1. Log4J 学习Log4j是Apache下的一款开源的日志框架,通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台、文件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。1.1 Log4j入门建立maven工程添加依赖<dependency> <gro
原创
13293阅读
0评论
1点赞
发布博客于 2 月前

日志框架(一)JUL

一、日志的概念1. 日志文件日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。在计算机中,日志文件是记录在操作系统或其他软件运行中发生的事件或在通信软件的不同用户之间的消息的文件。记录是保持日志的行为。在最简单的情况下,消息被写入单个日志文件。许多操作系统,软件框架和程序包括日志系统。广泛使用的日志记录标准是在因特网工程任务组(IETF)RFC5424中定义的syslog。syslog标准使专用的标准化子系统能够生成,过
原创
13619阅读
0评论
1点赞
发布博客于 2 月前

MyBatis - 插件机制(十六)

MyBatis - 插件机制(十六)该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。MyBatis 版本:3.5.6MyBatis-Spring 版本:2.0.3MyBatis-Spring-Boot-Starter 版本:2.1.4该系列其他文档请查看:《 MyBatis 系列 - 导读》插件机制开源框架一般都会提供插件或其他形式的扩展
原创
13693阅读
0评论
1点赞
发布博客于 2 月前

MyBatis - SQL执行过程(十五)延迟加载

MyBatis - SQL执行过程(十五)延迟加载该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。MyBatis 版本:3.5.6MyBatis-Spring 版本:2.0.3MyBatis-Spring-Boot-Starter 版本:2.1.4该系列其他文档请查看:《 MyBatis 系列 - 导读》MyBatis的SQL执行过程在前
原创
15265阅读
2评论
1点赞
发布博客于 2 月前

MyBatis - SQL执行过程(十四)ResultSetHandler

MyBatis - SQL执行过程(十四)ResultSetHandler该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。MyBatis 版本:3.5.6MyBatis-Spring 版本:2.0.3MyBatis-Spring-Boot-Starter 版本:2.1.4该系列其他文档请查看:《 MyBatis 系列 - 导读》MyBati
原创
13801阅读
0评论
0点赞
发布博客于 2 月前

MyBatis - SQL执行过程(十三)StatementHandler

MyBatis - SQL执行过程(十三)StatementHandler该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。MyBatis 版本:3.5.6MyBatis-Spring 版本:2.0.3MyBatis-Spring-Boot-Starter 版本:2.1.4该系列其他文档请查看:《 MyBatis 系列 - 导读》MyBati
原创
16844阅读
0评论
1点赞
发布博客于 2 月前

MyBatis - SQL执行过程(十二)Executor

MyBatis - SQL执行过程(十二)Executor该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。MyBatis 版本:3.5.6MyBatis-Spring 版本:2.0.3MyBatis-Spring-Boot-Starter 版本:2.1.4该系列其他文档请查看:《 MyBatis 系列 - 导读》MyBatis的SQL执行过
原创
15739阅读
0评论
1点赞
发布博客于 2 月前

MyBatis - 初始化(十一)SQL初始化(下)

MyBatis - 初始化(十一)SQL初始化(下)该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。MyBatis 版本:3.5.6MyBatis-Spring 版本:2.0.3MyBatis-Spring-Boot-Starter 版本:2.1.4该系列其他文档请查看:《 MyBatis 系列 - 导读》一、MyBatis的初始化在My
原创
15706阅读
0评论
0点赞
发布博客于 2 月前

MyBatis - 初始化(十)SQL初始化(上)

MyBatis - 初始化(十)SQL初始化(上)该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。MyBatis 版本:3.5.6MyBatis-Spring 版本:2.0.3MyBatis-Spring-Boot-Starter 版本:2.1.4该系列其他文档请查看:《 MyBatis 系列 - 导读》一、MyBatis的初始化在MyB
原创
15759阅读
0评论
0点赞
发布博客于 2 月前

MyBatis - 初始化(九)加载Mapper接口与XML映射文件

MyBatis - 初始化(九)加载Mapper接口与XML映射文件该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。MyBatis 版本:3.5.6MyBatis-Spring 版本:2.0.3MyBatis-Spring-Boot-Starter 版本:2.1.4该系列其他文档请查看:《 MyBatis 系列 - 导读》一、MyBatis
原创
15957阅读
0评论
1点赞
发布博客于 2 月前

MyBatis - 初始化(八)加载 mybatis-config.xml

MyBatis - 初始化(八)加载 mybatis-config.xml该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。MyBatis 版本:3.5.6MyBatis-Spring 版本:2.0.3MyBatis-Spring-Boot-Starter 版本:2.1.4该系列其他文档请查看:《 MyBatis 系列 - 导读》一、MyBa
原创
15577阅读
0评论
0点赞
发布博客于 2 月前

MyBatis - 基础支持层(七)

MyBatis - 基础支持层(七)该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。MyBatis 版本:3.5.6MyBatis-Spring 版本:2.0.3MyBatis-Spring-Boot-Starter 版本:2.1.4该系列其他文档请查看:《 MyBatis 系列 - 导读》一、基础支持层在上文中已经对 MyBatis 的
转载
15779阅读
0评论
1点赞
发布博客于 2 月前

MyBatis系列 - 导读

MyBatis系列 - 导读该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。MyBatis 版本:3.5.6MyBatis-Spring 版本:2.0.3MyBatis-Spring-Boot-Starter 版本:2.1.4MyBatis - 使用示例 (一)单独使用MyBatis - 使用示例(二)整合SpringMyBatis -
原创
15832阅读
0评论
1点赞
发布博客于 2 月前

MyBatis - 整体架构(六)

MyBatis - 整体架构(六)本文主要分享 MyBatis 项目的一个整体情况,对 MyBatis 有个整体的了解,可以去 MyBatis GitHub 上面 Fork 到你自己的 GitHub 上面,然后拉取到自己本地一、整体架构1. 项目结构根据包名差不多就可以知道每个模块的作用2. 整体架构​ MyBatis 的整体架构分为三层:基础支持层、核心处理层和接口层按照 MyBatis 这个架构图从下往上对其进行逐步分析3. 基础支持层基础支持层,包含整个 MyBatis 的
原创
15690阅读
3评论
1点赞
发布博客于 2 月前

MyBatis - 使用示例(五)SpringBoot配置数据库密码加密

MyBatis - 使用示例(五)SpringBoot配置数据库密码加密你在使用 MyBatis 的过程中,是否有想过多个数据源应该如何配置,如何去实现?出于这个好奇心,我在 Druid Wiki 的数据库多数据源中知晓 Spring 提供了对多数据源的支持,基于 Spring 提供的 AbstractRoutingDataSource,可以自己实现数据源的切换。一、配置动态数据源下面就如何配置动态数据源提供一个简单的实现:org.springframework.jdbc.datasource.
转载
17243阅读
0评论
1点赞
发布博客于 2 月前

MyBatis - 使用示例(四)SpringBoot配置数据库密码加密

MyBatis - 使用示例(四)SpringBoot配置数据库密码加密前面三篇文章简单的示意了下MyBatis和Spring以及SpringBoot的整合。本文讲一下如何在SpringBoot下配置数据库密码加密。一、借助Druid数据源配置数据库密码加密Druid 数据源支持数据库密码进行加密,在 Spring Boot 中配置方式如下:加密数据库密码,通过 Druid 的 com.alibaba.druid.filter.config.ConfigTools 工具类对数据库密码进行加密(R
原创
17451阅读
0评论
1点赞
发布博客于 2 月前

MyBatis - 使用示例(三)整合SpringBoot

MyBatis - 使用示例(三)整合SpringBoot前面两篇文章简单的示意了下直接使用MyBatis和整合Spring下使用。本文讲一下如何整合SpringBoot。一、MyBatis集成SpringBoot使用(一)工程结构图先看下我工程的结构吧,如果不熟悉SpringBoot的的可以按照我这个敲一遍(二)引入依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.o
原创
17299阅读
0评论
1点赞
发布博客于 2 月前

MyBatis - 使用示例(二)整合Spring

MyBatis - 使用示例(二)整合Spring在上文中简单的单独使用了MyBatis,但是在正在开发的环境中是不会那样做的,所以接下来为大家介绍如何整合Spring使用MyBatis。一、MyBatis集成Spring使用在 Spring 项目中,使用 MyBatis 的模板,请注意 Spring 的版本为5.2.10.RELEASE,mybatis的版本为3.5.6,spring-mybatis版本为2.0.6(一)引入依赖<?xml version="1.0" encoding=
原创
17421阅读
1评论
0点赞
发布博客于 2 月前

MyBatis - 使用示例 (一)单独使用

MyBatis - 使用示例 (一)单独使用MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录越来越多的企业已经将 MyBatis 使用到了正式的生产环境,本系列就先介绍几种简单使用 MyBatis 的方式
原创
17446阅读
0评论
0点赞
发布博客于 2 月前

下周该我做技术分享,各位大佬给点建议,Java技术栈方面的,不要太简单又不难的🤔🤔

发布Blink于 2 月前

java程序员必须理解的SPI机制

java程序员必须理解的SPI机制一、什么是SPISPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种
原创
15807阅读
0评论
0点赞
发布博客于 3 月前

Java集合------HashMap 源码详细分析(JDK1.8)

HashMap 源码详细分析(JDK1.8)一、概述​ 本篇文章对我们开发中常用的一个集合类 - HashMap来详细的分析一下。HashMap最早出现在JDK1.2中,底层基于散列算法实现,HashMap允许null键和null值,在计算键的哈希值时,null的哈希值为0。HashMap并不保证键值对的顺序,这意味着在进行某些操作后,键值对的顺序可能会发生变化。另外HashMap是非线程安全类,在多线程环境下可能会存在问题。二、原理​ 在JDK1.8之前,HashMap是使用拉链式的散列算
原创
15823阅读
0评论
1点赞
发布博客于 4 月前

如何在liunx系统下获取java的资源文件

如何在liunx系统下获取java的资源文件场景:我在使用easyexcel的模板填充来下载excel文件//获取模板地址String templateFileName = FileUtil.getPath() + "filltemplate" + File.separator + "学籍模板.xlsx";fileName = URLEncoder.encode(fileName, "UTF-8");response.setContentType("application/vnd.ms-exc
原创
15749阅读
0评论
0点赞
发布博客于 6 月前

EasyExcel(四) 导入excel的实战

EasyExcel(四) 导入excel的实战​ 最近刚做了一个项目,需要用excel文件上传,然后需要完成对数据的校验,然后在校验完成后发现有问题的需要对有问题的数据进行添加批注、字体变红后返回excel文件。如果数据格式之类的没有问题就需要进行导入做更新或者添加的操作。​ 出于想偷懒的心态,我一开始就想到要用easyExcel来处理本次项目。一、POM这是我用的版本<dependency> <groupId>com.alibaba</groupId
原创
16420阅读
4评论
7点赞
发布博客于 6 月前

EasyExcel(四) 导入excel的实战

EasyExcel(四) 导入excel的实战​ 最近刚做了一个项目,需要用excel文件上传,然后需要完成对数据的校验,然后在校验完成后发现有问题的需要对有问题的数据进行添加批注、字体变红后返回excel文件。如果数据格式之类的没有问题就需要进行导入做更新或者添加的操作。​ 出于想偷懒的心态,我一开始就想到要用easyExcel来处理本次项目。一、POM这是我用的版本<dependency> <groupId>com.alibaba</groupId
原创
16420阅读
4评论
7点赞
发布博客于 6 月前

EasyExcel(三) 导出excel的拦截器

EasyExcel(三) 导出excel的拦截器关于easyExcel的基本用法我就不在多说了,有需要的可以自己点击该链接去学习基本的使用,主要对这里面经常用到的一些监听器和拦截器讲一下一、准备工作这是我用的easyexcel版本<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2
原创
16447阅读
0评论
0点赞
发布博客于 6 月前

EasyExcel(二) 导入导出excel的数据格式转换

EasyExcel(二) 导入导出excel的数据格式转换关于easyExcel的基本用法我就不在多说了,有需要的可以自己点击该链接去学习基本的使用,主要对这里面经常用到的一些监听器和拦截器讲一下,这里来说一下数据格式转换一、准备工作这是我用的版本<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <ver
原创
18242阅读
0评论
0点赞
发布博客于 6 月前

EasyExcel(一)导入excel的分析监听器

EasyExcel(一)导入excel的分析监听器关于easyExcel的基本用法我就不在多说了,有需要的可以自己点击该链接去学习基本的使用,主要对这里面经常用到的一些监听器和拦截器讲一下一、准备工作这是我用的easyexcel版本<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>
原创
17225阅读
0评论
2点赞
发布博客于 6 月前

MyBatis-Plus(二十一)动态表名

动态表名1、业务场景有时我们希望存储或读取数据的时候能够根据情况、或根据传入参数来动态的选择对应的表。比如我们数据库里的用户信息表通过年份拆分(使用年份做后缀)而对应的实体类是不包含年份后缀的:@Datapublic class UserInfo { private Integer id; private String userName; private String passWord; private Integer age;}2、样例代码首先
原创
16905阅读
1评论
2点赞
发布博客于 7 月前

MyBatis-Plus(二十)多数据源

多数据源1、基本介绍dynamic-datasource-spring-boot-starter 是一个基于 springboot 的快速集成多数据源的启动器。其支持 Jdk 1.7+,SpringBoot 1.4.x 1.5.x 2.0.x。注意:该插件可以不依赖 MyBatis-Plus,可以独立使用。它主要用于读写分离,一主多从的环境。(当然也可以纯粹当成多库使用)一主多从的环境下数据库分工:主数据库建议只执行 INSERT、UPDATE、DELETE 操作。从数据库建议只
原创
15873阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(十九)使用乐观锁进行数据更新

使用乐观锁进行数据更新1、基本介绍乐观锁的应用场景是当要更新一条记录的时候,希望这条记录没有被别人更新。注意:目前乐观锁仅支持 updateById(id) 与 update(entity, wrapper) 方法在 update(entity, wrapper) 方法下,wrapper 不能复用!!!乐观锁实现方式如下:取出记录时,获取当前 version执行更新时,带上这个 version,即 set version = new Version where versio
原创
16463阅读
4评论
1点赞
发布博客于 7 月前

MyBatis-Plus(十八)结合P6Spy进行SQL性能分析

结合P6Spy进行SQL性能分析​ P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。 通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。注意:该插件有性能损耗,建议平时开发测试时使用,不建议生产环境使用。1、安装配置首先编辑项目的 pom.xml 文件,加入 p6spy 依赖:<dependency> <groupId>p6spy</groupI
原创
15909阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(十七)字段数据自动填充

字段数据自动填充1、准备工作假设我们有如下一张用户信息表,下面演示“操作类型”和“操作时间”这两个字段如何通过自动填充功能进行赋值:首先使用 @TableField 注解标记实体类中的哪些字段需要填充,这里我们选择插入或更新都自动填充:FieldFill 是一个枚举,用于指定在何种情况下会自动填充,有如下几种可选值:DEFAULT:默认不处理INSERT:插入填充字段UPDATE:更新填充字段INSERT_UPDATE:插入和更新填充字段@Datapublic clas
原创
15919阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(十六)字段类型处理器TypeHandler

字段类型处理器TypeHandler1、准备工作MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换,假设我们用户表中有一个联系方式字段,类型为字符串:而对应的实体类代码如下,可以看到实体类中 contact 属性类型为 Map。由于与数据库字段类型不匹配,如果不做任何处理的话无论是查询还是插入都会报错。这里我们通过 @TableField 注解将 FastjsonTypeHandler 这个类型处理器快速注入到 mybatis
原创
16442阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(十五)通用枚举

通用枚举1、问题描述项目中我们通常会定义一些枚举,比如下面定义了一个性别枚举:@Getterpublic enum GenderEnum { MALE(1, "男"), FEMALE(2, "女"); private final int code; private final String descp; GenderEnum(final int code, final String descp) { this.code = code
原创
15961阅读
0评论
2点赞
发布博客于 7 月前

MyBatis-Plus(十四)逻辑删除

逻辑删除​ 逻辑删除并不会真正的从数据库中将数据删除掉,而是将当前被删除的这条数据中的一个逻辑删除字段置为删除状态。比如该数据有一个字段 deleted_flag,当其值为 0 表示未删除,值为 1 表示删除。那么逻辑删除就是将 0 变成 1。1、实现步骤假设 UserInfo 表中有一个 deleted_flag 字段作为逻辑删除字段:逻辑删除字段说明:字段支持所有数据类型(推荐使用 Integer、Boolean、LocalDateTime)如果使用 LocalDateTime
原创
15818阅读
0评论
1点赞
发布博客于 7 月前

MyBatis-Plus(十三)代码生成器

代码生成器AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。1、添加依赖要使用代码生成器,项目除了要添加数据库驱动依赖外,还需添加代码生成器以及模板引擎依赖。<!-- 数据库驱动依赖 --><dependency> <groupId>mysql</g
原创
15928阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(十二)使用ActiveRecord模式进行增删改查

ActiveRecord模式进行增删改查1、ActiveRecord 模式介绍ActiveRecord(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言,对于 ActiveRecord 往往只能感叹其优雅。不过 MyBatis-Plus 也在 AR 道路上进行了一定的探索,仅仅需要让实体类继承 Model 类且实现主键指定方法
原创
15888阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(十一)Service的CRUD接口3:增删改操作

Service的CRUD接口3:增删改操作1、新增数据save 方法可以将一个实体对象插入到对应的数据表中注意:插入成功后,当前插入对象在数据库中的 id 会写回到该实体中。@RestControllerpublic class HelloController { @Autowired UserInfoService userInfoService; @RequestMapping("/test") public UserInfo test(){
原创
16159阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(十)Service的CRUD接口2:分页查询

Service的CRUD接口2:分页查询1、添加配置MyBatis-Plus 提供了物理分页的功能,使用前我们需要要进行相关的插件配置:逻辑分页与物理分页比较:逻辑分页:内存开销比较大,在数据量比较小的情况下效率比物理分页高;在数据量很大的情况下,内存开销过大,容易内存溢出,不建议使用。物理分页:内存开销比较小,在数据量比较小的情况下效率比逻辑分页还是低;在数据量很大的情况下,建议使用物理分页。@EnableTransactionManagement@Configurationp
原创
15951阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(九)Service的CRUD接口1:基本查询

Service的CRUD接口1:基本查询1、准备工作假设我们有如下用户信息表 user_info:首先创建对应的实体类 UserInfo:@Datapublic class UserInfo { private Integer id; private String userName; private String passWord; private Integer age;}接着创建 UserInfoMapper 接口,并继承 BaseMapper
原创
16112阅读
0评论
1点赞
发布博客于 7 月前

MyBatis-Plus(八)Mapper的CRUD接口5:增删改操作

Mapper的CRUD接口5:增删改操作1、新增数据insert 方法可以将一个实体对象插入到对应的数据表中:@RestControllerpublic class HelloController { @Autowired private AreaMapper areaMapper; @RequestMapping("/test") public void test(){ Area area = new Area(); ar
原创
15898阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(七)Mapper的CRUD接口4:多表关联查询

Mapper的CRUD接口4:多表关联查询​ Mybatis-Plus 由于内置通用 Mapper、通用 Service,无需复杂的配置即可实现单表大部分 CRUD 操作,大大减少了 MyBatis 的代码量。​ 但如果遇到关联属性的查询(1 对 1,1 对 n ),那么仍然需要我们通过自己写 SQL 的方式去做。这个我们可以使用注解的方式去做,也选择使用 xml 文件的方式,下面分别通过样例进行介绍。一、多表关联查询(使用注解)1、自定义 sql假设我们有如下两张表:用户表(U
原创
16088阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(六)Mapper的CRUD接口3:分页查询

Mapper的CRUD接口3:分页查询1、添加配置MyBatis-Plus 提供了物理分页的功能,使用前我们需要要进行相关的插件配置:逻辑分页与物理分页比较:逻辑分页:内存开销比较大,在数据量比较小的情况下效率比物理分页高;在数据量很大的情况下,内存开销过大,容易内存溢出,不建议使用。物理分页:内存开销比较小,在数据量比较小的情况下效率比逻辑分页还是低;在数据量很大的情况下,建议使用物理分页。@EnableTransactionManagement@Configurationpu
原创
16058阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(五)Mapper的CRUD接口2:条件构造器

Mapper的CRUD接口2:条件构造器1、相等、不相等allEq 表示全部 eq(或个别 isNull)方法最后一个参数 null2IsNull是可选的(默认为true),为 true时则在map的value为null时调用isNull方法,为false时则忽略:allEq({id:1,user_name:“xxname”,age:null}) — 生成的sql为 —> id = 1 and user_name = ‘xxname’ and age is nullallEq
原创
15964阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(四)Mapper的CRUD接口1:基本查询

Mapper的CRUD接口1:基本查询​ MyBatis-Plus 内置通用 Mapper,我们仅需要继承 BaseMapper,通过少量配置即可实现单表大部分 CRUD 操作,同时其更有强大的条件构造器,满足各类使用需求。1、准备工作创建用户信息表 user_info:CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(255) DEFAULT NULL, `
原创
15976阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(三)主键策略、UUID、Sequence

主键策略、UUID、Sequence​ 我们可以通过 @TableId 注解的 type 属性来设置主键 id 的增长策略,一共有如下几种主键策略,可根据情况自由配置。1、ASSIGN_ID(雪花算法) 如果不设置 **type** 值,默认则使用 **IdType.ASSIGN_ID** 策略(自 **3.3.0** 起)。该策略会使用雪花算法自动生成主键 **ID**,主键类型为 **Long** 或 **String**(分别对应 **MySQL** 的表字段为 **BIGINT** 和
原创
16838阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus(二)设置实体类对应的表名、字段名

设置实体类对应的表名、字段名一、设置关联的表名1、默认情况下,如果数据库表是使用标准的下划线命名,并且能对应上实体类的类名,我们就不需要特别去手动匹配。比如有张 user_info 表,那么会自动匹配下面这个实体类:@Datapublic class UserInfo { private Integer id; private String userName; private String passWord;}2、如果数据库中所有表都有个表名前缀,比如我们想让 t_us
原创
19166阅读
0评论
4点赞
发布博客于 7 月前

MyBatis-Plus(一)安装配置、基本用法

安装配置、基本用法一、基本介绍​ MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。我们可以理解为它已经封装好了一些 CRUD 方法,我们不需要再写 xml 了,直接调用这些方法就行,类似于 JPA。MyBatis-Plus 框架结构如下:二、安装配置1、首先编辑项目的 pom.xml 文件,添加如下依赖:<!-- MyBatis-Plus依赖 --><dependency
原创
288阅读
0评论
0点赞
发布博客于 7 月前

MyBatis-Plus快速入门与进阶详解 <<目录>>

MyBatis-Plus快速入门与进阶详解最近到了换了家公司,然后公司用的就是MyBatis-Plus,由于自己也不太熟悉,就在网上找了些资料看了,发现了有个hangge.com的平台对MyBatis-Plus进行了详细的介绍。后面我会把在hangge.com平台看到的学到的总结发到CSDN平台。...
原创
15810阅读
0评论
0点赞
发布博客于 7 月前

SpringBoot整合knife4j

SpringBoot整合knife4j导入依赖<!-- 在需要的项目中导入依赖 --><dependencies> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-bo...
原创
16930阅读
0评论
0点赞
发布博客于 10 月前

Spring Boot整合Swaager

Spring Boot整合Swaager导入依赖<!-- 在需要的项目中导入依赖 --><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>...
原创
16048阅读
0评论
0点赞
发布博客于 10 月前

yml配置文件中使用@符号解析失败

yml配置文件中使用@符号解析失败本来是准备在bootstrap.yml中引入pom.xml文件中的配置这是bootstrap.yml文件[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YWsmP8nk-1587017893106)(C:\Users\Administrator\Desktop\CSDN\异常收集\bootstrap.jpg)]这是pom....
原创
16474阅读
0评论
0点赞
发布博客于 10 月前

Spring Cloud Gateway——(三)微服务网关实现JWT鉴权

微服务网关实现JWT鉴权JJWT快速入门在微服务中实现jjwt鉴权JwtUtil 用于jjwt token生成和解析的工具类
原创
19327阅读
0评论
0点赞
发布博客于 1 年前