自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大魔王

编程技术爱好者

  • 博客(389)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java SPI机制学习

java SPI机制

2023-12-11 19:46:38 149

原创 Redisson分布式锁学习

redisson分布式锁 续约 LUA

2023-10-22 11:36:42 658

原创 数据库拆分5--使用sharding-jdbc来实现水平拆分

使用sharding-jdbc来实现水平拆分

2022-12-18 18:41:15 799 1

原创 数据库拆分4--sharding-jdbc-spring-boot-starter自动装配启动过程

sharding-jdbc-spring-boot-starter自动装配启动过程

2022-12-18 16:09:27 1546

原创 数据库拆分3--使用sharding-jdbc 支持子查询sql

使用sharding-jdbc 子查询注意事项 升级到4.1.1支持子查询

2022-12-15 21:56:25 5056 3

原创 数据库拆分2--使用sharding-jdbc实现垂直拆分

使用sharding-jdbc实现垂直拆分

2022-12-11 17:47:08 985

原创 数据库拆分1--使用dynamic-datasource实现垂直拆分

数据源垂直拆分 dynamic-datasource

2022-12-11 16:33:18 965

原创 后台架构学习(四)

高可用微服务设计

2022-08-21 11:29:27 142

原创 后台架构学习(三)

构建高可用的扣减服务扣减和归还类业务。

2022-08-21 10:34:49 584

原创 后台架构学习(二)

构建高可用的写服务

2022-08-14 17:09:36 160

原创 后台架构学习(一)

常见系统架构设计思路

2022-08-14 13:40:56 896

原创 Mysql Information Schema 学习(二)--Innodb表

Mysql Information Schema 学习(二)--Innodb表

2022-07-03 17:00:27 325

原创 Mysql Information Schema 学习(一)--通用表

Mysql information Schema 学习(一)--通用表

2022-07-03 16:27:15 1010

原创 mysql分区表学习

学习地址:MySQL :: MySQL 5.7 Reference Manual :: 22 Partitioning分区简介查看当前数据库是否支持分区SELECT PLUGIN_NAME AS NAME, PLUGIN_VERSION AS Version, PLUGIN_STATUS AS STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_TYPE = 'STORAGE ENGINE';分区优势: 分区.

2022-05-04 10:53:49 284

原创 Mysql Innodb在线DDL原理

Mysql Innodb在线DDL原理昨晚在生产环境执行DDL时,数据库发现出现大量锁等待,数据库链接一直释放不了,CPU升高,数据库差一点宕机,业务应用基本不可用,吓尿。Waiting for table metadata lock下面,结合mysql官方文档,仔细研究一下mysql的在线ddl功能。MySQL :: MySQL 5.7 Reference Manual :: 14.13 InnoDB and Online DDLmysql支持在线ddl其实是innodb.

2022-04-02 19:10:37 2383 1

转载 Java问题诊断和排查工具(查看JVM参数、内存使用情况及分析等)

JDK自带的工具在JDK的bin目录下有很多命令行工具:  我们可以看到各个工具的大小基本上都稳定在27kb左右,这个不是JDK开发团队刻意为之的,而是因为这些工具大多数是jdk\lib\tools.jar类库的一层薄包装而已,他们的主要功能代码是在tools类库中实现的。命令行工具的好处是:当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程telnet到服务器上都会受到限制。而借助tools.jar类库里面的接口,我们可以直接在应用程序中实现功能强大的监...

2022-03-09 19:16:11 3868

转载 雪花算法(snowflake)生成Id重复问题

原文链接:雪花算法(snowflake)生成Id重复问题 - 简书前言 最近工作上遇到一个雪花算法生成Id重复导致数据库中表主键冲突,导致入库失败的问题,所以顺便学习了一下雪花算法,下面是学习的笔记以及讨论如果解决雪花算法在分布式部署中生成...https://www.jianshu.com/p/71286e89e0c5前言最近工作上遇到一个雪花算法生成Id重复导致数据库中表主键冲突,导致入库失败的问题,所以顺便学习了一下雪花算法,下面是学习的笔记以及讨论如果解决雪花算法在分布式部署中生成重复I

2022-02-12 16:27:59 22198 1

转载 简单介绍 Java 中的编译时注解

看到一篇很好的java注解博文 转发学习一下原文链接:https://segmentfault.com/a/1190000009756015https://segmentfault.com/a/11900000097560151. 前言上一篇主要介绍了什么是注解 (Annotation)以及如何读取运行时注解中的数据, 同时用注解实现了简单的ORM功能. 这次介绍另一部分: 如何读取编译时注解( RetentionPolicy.SOURCE )2. 作用编译时注解可以用...

2022-02-07 20:16:40 495

转载 简单介绍 Java 中的注解 (Annotation)

看到一篇很好的注解博文 转发学习一下1. 例子首先来看一个例子: @Override public String toString() { return "xxxxx"; }这里用了@Override, 目的是告诉编译器这个方法重写了父类的方法, 如果编译器发现父类中没有这个方法就会报错. 这个注解的作用大抵是防止手滑写错方法, 同时增强了程序的可读性. 这里需要指出一点,@Override去掉并不会影响程序的执行, 只是起到标记的作用找到@Override的实...

2022-02-07 20:13:47 263

原创 一致性哈希算法

有一堆待执行的任务(N个) 有一机器集群(M个),怎样分配任务最佳,使得每台机器分到的任务数尽量均衡,当机器集群数量发生变化时,任务数还是尽量平均分配,并且对于已分配的任务尽量减少再次分配,减少任务移动的成本。直接哈希取余算法选择任务的某一特征值,哈希取余来分配任务,第i个任务的特征为hash(i) 则其应该分配到机器编号为 hash(i)%M优点:分配方式简单缺点:特征值和哈希算法的选择非常重要,否则任务会分配不均衡,极端情况会分配到同一台机器;当机器的数量发生变...

2022-01-29 19:56:17 959

原创 常用算法思路总结

最近将剑指 Offer(专项突击版)刷了一遍,总结一下,最好结合图书来看,书里有很多总结,书中解法很经典,leetcode地址:力扣常见的算法方法 二分查找 双指针 滑动窗口 堆 优先级队列 单调栈 前缀树 字典树 前缀和+哈希 排序 快速排序 归并排序 并查集 拓扑排序 回溯法 ...

2021-12-25 18:48:52 594

原创 滑动窗口--方向相同的双指针思路

大致思路如下: 给定一个序列,定义两个指针left,right,根据题意定义区间[left,right]之前的衡量指标f,比如区间和,乘积以及其他等。开始时left=right=0,计算指标f,left先不变,right往右边移动,更新f的值,当f符合一定条件时,left往右边移动,此时相当于区间变小,更新f的值,如果f一直符合题意,则left一直往右移动,如果f不符合题意,则left不变,继续移动right位置。如此往复,相当于一个滑动窗口把整个序列遍历了一遍,在整个过程中,当找到区间[...

2021-12-20 19:52:57 140

原创 Java日志体系学习3--Log4j2

Log4j2试验一下,引入依赖 <!-- Log4j2 门面API--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.13.1</version> </dependency>

2021-09-22 20:29:20 5361

原创 Java日志体系学习2--日志门面JCL&Slf4j

JCL全称为Jakarta Commons Logging,是Apache提供的一个通用日志API。 它是为 "所有的Java日志实现"提供一个统一的接口,它自身也提供一个日志的实现,但是功能非常常弱 (SimpleLog)。所以一般不会单独使用它。他允许开发人员使用不同的具体日志实现工具: Log4j, Jdk 自带的日志(JUL)。JCL是一种接口,具体要依赖于其他日志实现。引入依赖: <dependency> <groupId>commons-logg

2021-09-20 11:49:27 336 1

原创 Java日志体系学习1--JUL

最近在工作中遇到了一个有关于日志引起的性能问题,平日里只是简单实用@slj4j @log4j2 等注解来记录日志,但是对于日志记录没有全面学习总结一下,因此系统的学习一下java日志。java日志框架现有的java日志框架JUL(java util logging)、logback、log4j、log4j2JCL(Jakarta Commons Logging)、slf4j( Simple Logging Facade for Java)日志门面 JCL、slf4j日...

2021-09-20 10:43:16 242

原创 值比较‘’==“的原理

最近在开发过程中遇到了一个bug,主要是要比较两个正数的大小,如下所示:Obj obj = JSON.parseObject("{\n" + "\"id\":1\n" + "}", Obj.class);System.out.println(obj.id);System.out.println(1 == obj.id);简单来说,需要将一个字符串转换为一个对象obj,其中有个属性id为整数,这里使用==来比较两个整数大小,这里会出现一个空指针错误,如果当字符串中id为空,如下所示:结.

2021-08-27 20:29:07 302

原创 Java方法参数传递

最近翻车了,之前学习了java参数传递机制以为理解了,但是团发现还是理解的不太深刻,果然有些问题除非亲身经历否则难以彻底理解。 之前一般都是利用集合来作为方法的入参,然后再方法内部,操作集合,方法调用之后发现集合也的确发生了自己希望的改变,这一次,也是集合参数作为方法入参,在方法内部将入参重新赋值,以为方法执行完成后,集合会发生改变,没想到却失败了。大致意思如下:private void test1() { // 这里的入参list是栈中临时生成的引用变量...

2021-08-04 19:53:35 566

原创 算法--岛屿问题(DFS/BFS/UF)

与岛屿有关的问题1.岛屿数量https://leetcode-cn.com/problems/number-of-islands/2.岛屿的最大面积https://leetcode-cn.com/problems/max-area-of-island/3.岛屿周长https://leetcode-cn.com/problems/island-perimeter/4.不同岛屿的数量https://leetcode-cn.com/problems/number-of-distin

2021-07-14 22:22:15 4890

原创 算法--拓扑排序

拓扑排序无向图和有向图 有向图又分为有向无环图DAG和有向有环图 给定一个包含 n个节点的有向图 G,我们给出它的节点编号的一种排列,如果满足:对于图 G中的任意一条有向边 (u, v),u在排列中都出现在 v的前面。那么称该排列是图 G的「拓扑排序」易知 有向有环图必定没有拓扑排序 有向无环图可能有多条拓扑排序路径。任何 DAG 具有至少一个拓扑排序,存在算法用于在线性时间内构建任何 DAG 的拓扑排序1.课程表https://leetcod...

2021-07-11 20:41:01 231 1

原创 算法--回溯+剪枝2(二维数组)

之前学习了一维数组的回溯算法 现在学习一下二维数组的回溯算法,基本套路差不多,先复习一下回溯算法基本套路定义结果集result 定义搜索路径path 给定待搜索集合nums 记录当前搜索位置index如果满足停止条件 将path加入到结果集result中 返回;遍历当前位置可选子节点列表: 将子节点加入path 改变相应变量; 递归子节点; 回溯 将子节点从path中移除 回溯相应变量;给定待搜索的集合 一般为一位数...

2021-07-11 11:01:25 356 2

原创 算法--回溯+剪枝

搞了一天的回溯算法,现在总结一下,基本的解题思路还是有一定套路的。回溯算法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:找到一个可能存在的正确的答案;在尝试了所有可能的分步方法后宣告该问题没有答案。 回溯算法本质上是一种递归算法,基本上...

2021-07-10 18:14:30 1393

原创 算法--字典树

字典树主要用于大量具有相同前缀的字符串存储与检索。字符串的前缀匹配字典树数据结构:对于每一个节点,都有一个叶子节点数组,如果字符串都是小写字母,一般叶子节点数组为26,利用字符的索引来快速定位叶子节点数组位置。常见的基本操作 插入 查找 前缀查找:插入:每遍历字符串中的一个字母,若该字母没有出现过,则就在对应的空位置往下生成一个 TrieTrie;若该字母出现过,则直接继续遍历下一个字母,直到字符串遍历结束(注意:结束时要标记为 endend,表示这个单词已经结束了)。查找:遍历要...

2021-07-06 22:48:08 276 2

原创 算法--前缀和+哈希表

今天学习一下前缀和和哈希表算法思想。主要用于解决连续子数组问题。前缀和:给定一个数组a[0,..n-1] 定义Sn=a0+a1+...+an-1。则连续子数组和Suma[i, j] 可以表示为ai+...+aj=Sj-Si-1。即连续子数组和问题可以转换为两个前缀和差。1.和为K的子数组https://leetcode-cn.com/problems/subarray-sum-equals-k/给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。想要...

2021-07-04 11:47:28 1335

原创 算法--打家劫舍--动态规划

1.打家劫舍Ihttps://leetcode-cn.com/problems/house-robber/你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。房屋数组nums[], dp[i]表示到第i个房子偷盗的最大金额如果只有一个房子 则直接偷盗

2021-06-16 22:49:45 193

原创 算法--最短的桥DFS+BFS

在给定的二维二进制数组A中,存在两座岛。(岛是由四面相连的 0 形成的一个最大组。)现在,我们可以将0变为1,以使两座岛连接起来,变成一座岛。返回必须翻转的0 的最小数目。首先找到这两座岛,随后选择一座,将它不断向外延伸一圈,直到到达了另一座岛。在寻找这两座岛时,我们使用深度优先搜索。在向外延伸时,我们使用广度优先搜索。对数组 A 中的 1 进行深度优先搜索,可以得到两座岛的位置集合,分别为 source 和 target。随后我们从 source 中的所有位置开始进行广度优先搜...

2021-04-18 17:51:00 285

原创 算法--被围绕的区域--BFS/DFS/UF

给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的'O' 用 'X' 填充。示例 1:输入:board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]输出:[["X","X","X","X"],["X","X","X","X"],["X","X","X","X"],["X","O","X","X"]]解释:被围.

2021-04-05 12:03:14 301

原创 算法BFS--单词拆分

https://leetcode-cn.com/problems/word-break/给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。可以采用DFS BFS或者DP来解决 无论采用何种方式,都类似于一种搜索问题。依次遍历给定字符串的每一个字符串 假定当前遍历位置序号为i,则字符串S此时可以分为两部分s0=s[0, i-1],s1=s[i,...

2021-03-28 12:46:25 338

原创 算法--单词接龙(BFS)

字典wordList 中从单词 beginWord和 endWord 的 转换序列 是一个按下述规格形成的序列:序列中第一个单词是 beginWord 。序列中最后一个单词是 endWord 。每次转换只能改变一个字母。转换过程中的中间单词必须是字典wordList 中的单词。给你两个单词 beginWord和 endWord 和一个字典 wordList ,找到从beginWord 到endWord 的 最短转换序列 中的 单词数目 。如果不存在这样的转换序列,返回 0。htt...

2021-03-21 11:59:38 576

原创 算法--滑动窗口

1.尽可能使字符串相等https://leetcode-cn.com/problems/get-equal-substrings-within-budget/给你两个长度相同的字符串,s 和 t。将 s中的第i个字符变到t中的第 i 个字符需要|s[i] - t[i]|的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可...

2021-03-14 18:18:09 175

原创 由@Data注解进一步理解hashCode和equals方法

最近在阅读代码时 遇到一段代码中使用了HashMap,其中key值为JavaBean对象,由于需要对其进行修改,为了避免书写大量的get和set方法,将该对象使用@Data注解修饰,结果却出现了奇怪的现象。首先将对象作为HashMap的key值是没有问题的,验证如下:创建一个JavaBean对象public class User { private Integer userId; private String userName; public Us...

2020-10-08 22:24:26 2795 3

openjdk编译过程日志记录

具体编译过程可以参考https://blog.csdn.net/u014106644/article/details/89316483

2019-04-17

多线程应用

多线程的应用,采用C++编程实现两个不同进程的实现

2015-03-17

空空如也

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

TA关注的人

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