自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(194)
  • 资源 (29)
  • 收藏
  • 关注

原创 集成分布式锁架包(MySQL、Redis、Zookeeper)

疫情当下,大环境不好,自己又去了一家令人非常失望的单位,一直在996加班忙于业务代码,技术方面几乎等于零成长。但是,作为一个Coder,必须要挤出时间去学习与总结,不然就会被无情的淘汰。Coder加油吧!

2023-01-02 10:23:33 698

原创 基于Netty实现SpringMVC

前言:Netty是一个非常优秀的异步事件驱动的网络通信框架,它本身就支持HTTP协议栈的开发。由于Netty是对Java NIO的封装,因此基于Netty开发的HTTP协议栈也是异步非阻塞的。并且Netty相对传统的Web容器(例如Tomcat、Jetty)会更加轻量、小巧、定制化开发也很灵活。SpringMVC是一个轻量级的Web框架,它可以把用户使用浏览器产生的HTTP请求解析成视图,再响应给浏览器。实现该过程的最重要的一个组件是DispatcherServle...

2022-05-03 11:00:30 1386

原创 hanxiaozhang 后台管理系统

从开始参加工作到开始准备的系统之前,我一直想自己独立完成一个系统的开发,检验一下自己的工作学习成果。2020年工作中全面的使用到SpringCloud全套相关技术,萌生了使用SpringCloud技术栈作为这个系统后端的实现。2021年工作中又学习了React相关的前端框架,我就放弃打算前端使用Vue技术栈的想法。这个系统从2020年9月份开始到2021年4月份封板(中间也停过小4个月),花费了不少的私下时间,算是对自己工作学习的一个总结吧。

2021-04-22 08:41:29 5572

原创 hanxiaozhang带你学SpringCloud

目录:0. SpringCloud练习项目git地址:https://gitee.com/hanxinghua2017/srpingcloud_demo.git;1.Zuul网关的请求与响应日志打印、服务回退和异常处理;2.SpringCloud的异常处理体系(一);3.SpringCloud的异常处理体系(二);4.SpringCloud的异常处理体系(三);5.SpringCloud Greenwich版本集成Springboot Admin监控和管理平台;6....

2020-11-26 08:25:12 260

原创 LinkedList源码,你想了解一下不?

前言:上回咱们介绍了ArrayList源码,详情见《ArrayList源码,你想了解一下不?》文章,今天来介绍一下LinkedList源码,LinkedList源码也不是很难理解,它的底层用的双链表,如果你对常用的数据结构有所了解,你在学习理解LinkedList源码中关于链表的相关方法就很容易。LinkedList与ArrayList都实现了List接口,如果你原来看过ArrayList源码,你在学习理解LinkedList源码中关于List接口相关方法就很容易。听我这么半天忽悠,你是不是也想学...

2020-06-03 21:22:08 876 2

原创 业务上第一次使用多个设计模式的组合(策略模式+缺省适配器模式+模板方法模式+简单工厂模式)

前言:从第一次系统地阅读《Java与模式》这本书已经过去一年多了,我一直没有有意的去使用设计模式,原因有两点:一是,对设计模式理解有些点不深入,使用起来比较吃力;二是,没有一个合适场景去使用设计模式。最近,我在负责一个新系统的对接钉钉流程中心,调用相关流程的开发工作,我在之前已经钉钉流程对接2次了,都这块业务理解比较准确和成熟。如果要是搬用原来的代码没有问题,但是原来的写法复用很差,每次新增一个流程,都有把原来的接口复制一遍,然后再对每一个方法中部分代码进行修改。基于以上背景,我觉得应该使用设计模式,对

2020-05-16 13:11:07 1612 1

原创 Spring事务的传播规则以及各种场景下事务的生效情况

前言:从大学学完《Web程序设计》这门课之后,我一直在使用Spring这个框架,它的优点和好处不言而喻。随着时间的推移,我对这个框架的理解也不断加深,自己也有了一些使用的技巧与经验,下面我将分享关于Spring事务中的一些知识,希望对大家的工作、学习、面试有一些帮助。分享的内容主要包括事务何时生效、事务的传播规则和嵌套事务的使用等。如有偏差,请君不吝赐教!一、相关知识点(这里只写文中用到的知识点):1.物理事务与逻辑事务:物理事务:事务性资源实际打开的事务,如数据库的Connection打开

2020-05-10 11:37:41 1852 1

原创 基于Springboot+Bootstrap的文件管理全套解决方案(文件列表、上传、预览、下载、删除、打包下载等)

前言:最近,不知道是不是最后一搏,事业群上层领导要求7天内完成ABS项目中保理系统的一期开发。需求评审会后,我发现各个功能模块都有大量的文件材料展示与上传,为了提高开发效率,我与组长商量,我先开发文件模块,为其他同事提供公共方法,减少重复工作。使用的前端技术栈:Bootstrap、Bootstrap-table、layer.js、layui.js、jquery.media.js设计思路...

2020-05-01 20:53:28 8411 6

原创 业务上第一次遇到MySQL更新锁表超时(Lock wait timeout exceeded try restarting transaction)

前言:最近,我在公司开发某个业务功能,需要使用钉钉审批流,在最后一个结点审批通过后,使用MQ监听回调信息,根据回调信息,更新订单状态、触发系统还款、保存相关审批记录。如果在完美情况下,这一套流程没有任何问题,但是因为历史数据等原因,触发系统还款可能会失败。此时,审批流程已经正常结束了,不可能再走一遍流程。为了解决这样的问题,我们订单状态的“已还款”拆成“审批通过”和“已还款”,这两个结点在完美...

2020-04-18 21:32:19 1897

原创 一篇文章了解MySQL联合索引

一、什么叫联合索引?由两列或以上列组成的索引成为联合索引,联合索引又叫复合索引。相关概念:索引覆盖:联合索引中包含了需要查询的所有数据,不需要进行二次查询,直接返回数据。最左索引匹配原则:使用联合索引时,遵循从左边开始匹配联合索引中列,MySQL的SQL的执行过程:MySQL的优化器:...

2020-03-15 10:05:29 2493 1

原创 一套超好用的“Excel导入导出+多线程处理导入数据+多线程事务回滚”的模板方法

Excel导入导出+多线程处理导入数据+多线程事务回滚的模板方法二、功能演示:1.Excel数据:数据说明:第一条数据完整,可以成功导入;第二条数据无姓名,业务逻辑姓名不允许为空,会导出到错误Excel中;第三条数据无姓名无类型,业务逻辑姓名类型不能为空,会导出错误Excel中。2.导入页面:选择相关Excel,点击导出测试按钮:3.正确数据入库:4.错误数据导出成Excel并有提示:...

2020-03-08 21:14:44 14294 14

原创 springboot聚合项目(自己平时的一些总结)

内容(持续更新):0. springboot-utils 常用工具类汇总(bean拷贝,空值不用复制、Excel导入导出工具等)1. springboot-dynamic-datasource AOP多态数据源切换+atomikos分布式事务 201912282. springboot-httpclient httpclient各种使用方法举例3. springboot-red...

2020-01-30 15:07:23 1580

原创 使用SpringBoot Starter完成发送异常邮件SDK

前言: 前一阵学了SpringBoot发送邮件、SpringBoot制作Starter和自定义业务异常等知识,我突发奇想,我可以制作一个能捕获项目所有异常,通过邮件形式把异常信息发送给开发者的Starter,开发者实现只需要配置相关信息,就可以使用。实现无侵入性编程,支持热拔插使用。正文:具体相关知识点:SpringBoot中Starter知识、SpringBoot驱动配置文件...

2019-09-22 10:11:31 981 1

原创 hanxiaozhang带你学Docker

目录 安装docker Docker创建镜像之docker commit命令与docker build命令 Docker之开启远程访问 Docker 镜像与容器存储目录结构精讲 Docker工具之IDEA中Docker插件的使用 Docker工具之Daocloud的使用 Docker之部署Nginx容器及Nginx配置文件讲解 ...

2019-08-04 19:56:51 369

原创 LeetCode-数组-No45缺失的第一个正数跳跃游戏II

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

2024-07-06 10:00:01 170

原创 Sharding-JDBC

Sharding-JDBC是一个在客户端的分库分表工具。它是一个轻量级Java框架,在Java的JDBC层提供的额外服务。ShardingSphere提供标准化的数据分片、分布式事务和数据治理功能。

2024-07-06 09:55:10 812

原创 LeetCode-数值-No49字母异位词

是由重新排列源单词的所有字母得到的一个新单词。给你一个字符串数组,请你将。可以按任意顺序返回结果列表。

2024-06-29 17:06:22 379

原创 Redisson框架

Redisson锁中,使用订阅发布模式去通知等待锁的客户端:锁已经释放,可以进行抢锁。

2024-06-29 09:54:13 1110

原创 LeetCode-数组-No48旋转图像

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

2024-06-28 22:34:30 313

原创 《Redis设计与实现》阅读总结-4

一个节点(A节点)除了处理记录自己负责的槽记录,还会将自己的槽记录(A节点)通过消息发送给集群中的其他节点(B节点),其他节点(B节点)会在自己的clusterState.nodes字典中查找节点(A节点)对应的clusterNode结构,更新槽记录。Watch命令是一个乐观锁,它可以在EXEC命令执行之前,监视任意数量的数据库键,并在Exec命令执行时,检查监视的键是否至少有一个已经被修改过了,如果被修改,则拒绝执行事务,并向客户端返回代表事务执行失败的空回复。

2024-06-28 22:14:05 1233

原创 LeetCode-数组-No41缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) ,并且只使用常数级别额外空间的解决方案。

2024-06-27 07:00:00 253

原创 《Redis设计与实现》阅读总结-3

在同步操作执行完毕之后,主从服务器两者的数据库将达到一致状态,但这种一致并不是一成不变的,每当主服务器执行客户端发送的鞋命令时,主服务器的数据库就有可能被修改,并导致主从服务器状态不再一致。Sentinel是Redis的高可用性(HA)解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及主服务器属下的所有从服务器,当被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器上级为主服务器。

2024-06-27 06:45:00 1692

原创 LeetCode-数组/回溯-No40组合总和II

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。注意:解集不能包含重复的组合。

2024-06-26 07:15:00 362

原创 《Redis设计与实现》阅读总结-2

每个节点的previous_entry_length属性记录了前一个节点的长度:如果前一个字节长度小于254字节,那么previous_entry_length属性需要用1字节空间保存这个值,如果前一个字节的长度大于或等于254字节,那么previous_entry_length属性需要5字节的空间保存这个值。AOF写入时,如果键过期,但还没有被惰性删除或者定期删除,那么AOF文件不会因为这个过期键而产生影响,当过期键被惰性删除或者定期删除后,程序会向AOF文件追加一条DEL命令。

2024-06-26 07:00:00 962

原创 LeetCode-数组/回溯-No39组合总和

给你一个无重复元素的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合 ,并以列表形式返回。1. 数组排序:将数组排序,可以推论出:如果 sum > target 或 sum = target时, sum + next元素 > target 一定成立,所以可以结束循环。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。

2024-06-25 05:11:52 240

原创 《Redis设计与实现》阅读总结-1

为了避免rehash对服务器性能造成影响,服务器不是一次性将ht[0]里面的所有键值对全部rehash到ht[1],而是分多次,渐进式地将ht[0]里面的键值对慢慢地rehash到ht[1]。SDS的API都是二进制安全的(binary-safe),所有SDS API都会以二进制的方式处理SDS存放在buf数组里的数据,程序不会对其中的数据做任何限制、过滤、或假设,数据写入时是什么样的,取读还是什么样的。Redis的数据库就是使用字典来作为底层实现的,对数据库的增删查改操作是构建在对字典的操作之上的;

2024-06-25 05:11:25 626

原创 内存问题调优-GC

在JVM中配置 -verbose:class 打印类加载信息。什么条件触发GC-CMS为例。

2024-06-24 07:45:00 138

原创 MySQL面试重点-2

乐观锁并不是数据库自带的,需要自己去实现,一般情况下,我们会在表中新增一个version字段,每次更新数据version+1,在进行提交之前会判断version是否一致。模拟MySQL优化器运行SQL语句,了解MySQL如何处理你的SQL语句。两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。show engines命令查看数据库支持的存储引擎。一主一从、主主复制、一主多从、多主一从、联级复制。MySQL加锁情况分析:***《见MySQL加锁》

2024-06-24 07:15:00 2490

原创 Java多线程基础知识-3

AQS是抽象的队列式同步和锁实现框架。它是除了java自带的synchronized关键字之外的锁机制。例如ReentrantLock、ReentrantReadWriteLock、Semaphore、FutureTask等都是基于AQS实现的。

2024-06-22 07:45:00 769

原创 LeetCode-数组-No35搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。

2024-06-22 07:45:00 166

原创 MySQL设计规范

i. null的列使索引/索引统计/值比较都更加复杂,对MySQL来说更难优化。ii. null这种类型MySQL内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时 候,数据库的处理性能会降低很多。iii. null值需要更多的存储空,无论是表还是索引中每行中的null的列都需要额外的空间来标识。iv. 对null的处理时候,只能采用is null或is not null,而不能采用=、in、、!=、not in这些操作符号。如: where name!

2024-06-21 07:30:00 843

原创 LeetCode-数组-No34在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。使用二分查找法,确定是否存在该元素。如果存在值目标值时,分别从左右两侧开始找。

2024-06-21 07:15:00 196

原创 LeetCode-数组-No33搜索旋转排序数组

整数数组 nums 按升序排列,数组中的值互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。整体思路是使用二分查找法的变种。例如: [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2]。

2024-06-20 07:30:00 197

原创 Java多线程基础知识-2

CAS(CompareAndSwap)中文意思:比较并替换,它是一种无锁算法。CAS有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。CAS指令执行时,当且仅当V的值与A相等时,将V修改为B,否则就什么都不做,整个CAS操作是一个原子操作。

2024-06-20 07:15:00 874

原创 Java多线程基础知识-1

可执行的文件。进程是程序一次动态执行的过程,它是资源分配与管理的基本单位。概念:它是用户空间的线程,启动数量多,纤程之间切换资源消耗比较低。线程与纤程的本质区别是一个通过内核空间(线程),一个不通过内核空间(纤程)目前到JDK13并没有支持纤程。有意义,线程在wait或sleep下,不适用CPU。可以被其他线程利用。

2024-06-19 07:45:00 633

原创 LeetCode-数组-No15 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。

2024-06-19 07:30:00 276

原创 LeetCode-数组-No1两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。

2024-06-18 07:45:00 277 1

原创 CPU飙高调优知识

一段时间内处于可运行状态和不可中断状态的进程平均数量。可运行分为正在运行进程和正在等待CPU的进程,状态为R;不可中断则是它正在做某些工作不能被中断比如等待磁盘IO等,其状态为D,它是从另外一个角度体现CPU的使用状态。利用率是一段时间内CPU被占用的情况。超线程(HT):超线程和多线程不同,多线程是程序方面的属于软的代码级别的,超线程是硬件架构方面的,通过控制器来模拟逻辑核心。1. CPU发生了大量计算。表现1:大量线程在等待计算结果,CPU一直在计算,会影响后序线程。

2024-06-18 07:30:00 723

原创 MySQL面试重点-1

存储过程:一组为了完成特定功能的SQL语句集,经编译后存储在数据库中(而SQL语句需要先编译然后执行),用户通过指定存储过程的名字和给定参数来调用执行它。区别:(@&@)存储过程实现的功能要更复杂一些;自定义函数的针对性更强;存储过程可以返回多个值;自定义函数只能有一个值;存储过程一般独立执行;自定义函数可以作为其他SQL语句的组成部分来实现的。

2024-06-17 08:03:50 1861

原创 JVM面试重点-2

如果Full GC的时候,老年代里的对象几乎没有死掉的,而新生代又要晋升活对象上来,那么Full GC结束后老年代的使用量自然就上升了。在分代收集中,新生代的规模一般都比老年代要小许多,新生代的收集也比老年代要频繁许多,如果回收新生代时也不得不同时扫描老年代的话,那么Young GC的效率可能下降不少。是Java内存模型中定义的两个操作之间的偏序关系。Eden区分配满的时候触发,Young GC时,有部分存活对象会晋升到old gen,所以young GC后old gen的占用量通常会有所升高。

2024-06-17 08:03:13 730

spring-framework-4.3.12.RELEASE--编译好的源码.rar

spring4.3.12编译完成的源码,解压后,找到spring.ipr文件,使用IDEA打卡,就可以开始阅读源码之旅。

2020-03-30

spring-framework-5.0.7.RELEASE-编译好的.rar

spring5.0.7编译完成的源码,解压后,找到spring.ipr文件,使用IDEA打卡,就可以开始阅读源码之旅。

2020-03-30

springBootStarterExceptionMail.rar

SpringBoot之自定开发发送异常邮件Starter源码,详细代码解析参考《SpringBoot之自定开发发送异常邮件Starter》文章

2019-09-22

select2.js插件支持拼音搜索(最新版-4.0.6)Demo

select2.js插件支持拼音搜索(最新版-4.0.6)Demo,具体使用方法见《 select2.js插件支持拼音搜索(最新版-4.0.6)》文章

2018-10-03

拼音js(优化版)

拼音js(优化版),对返回结果出现undefined结果进行了优化

2018-10-03

Java面向对象程序设计教程(第二版)

Java面向对象程序设计教程(第二版)

2018-09-05

Java编程思想第四版完整中文高清版

Java编程思想第四版完整中文高清版,学习java比较推荐的一本书

2018-06-30

JAVA核心技术 第9版【中文版】

JAVA核心技术 第9版【中文版】pdf版,非常清晰,便于阅读

2018-06-29

exe4j打包工具

exe4j,把jar包打成exe文件的工具,有注册码,非常好用

2018-06-22

黑色大气后台管理系统bootstrap商业模板

黑色大气后台管理系统bootstrap商业模板,模板质量还可以

2018-06-18

Axure8.0软件+注册秘钥

Axure8.0软件,产品经理画原型图比较好的软件,有秘钥可以激活。

2018-06-08

Axure官方核心培训

Axure官方核心的培训课程,通过此视频可以初步了解Axure的使用方法

2018-06-08

securecrt安装版

securecrt安装版,安装后就可以用。不需要注册机。。。

2018-06-07

Modern_admin前端模板

Modern_admin前端模板,包括登录,表单,表,日期,日历等页面

2018-06-05

booststrapmoban模板

非常不错的bootstrap模板,非常全面,包括表单,表,图标,时间,日历,统计图等等

2018-06-05

证件换底色软件

证件换底色软件,解压直接使用,可以换成任意颜色的底色

2018-06-04

视频加密工具

视频加密工具,通过这个工具可以对视频进行加密,很难破解。

2018-05-14

前端取色器

取色器,前端工具,通过软件选择颜色,告诉你颜色代码

2018-05-12

commons-pool架包

commons-pool架包,里边包括两commons-pool版本的架包

2018-05-12

jedis不同版本的架包

jedis不同版本的架包,包括2.1.0,2.6.1,2.7.2着三个版本的架包

2018-05-12

反编译软件

反编译软件,通过这个软件可以反编译.class文件。。。

2018-05-12

文件和u盘加密工具

文件和u盘加密工具,通过这个软件可以轻松为文件和u盘加密

2018-05-12

excel工具箱

excel工具箱,通过这个软件,可以安装各个版本的Excel

2018-05-12

pdf转换成word转换器

pdf转换成word转换器,非常好用,测试过,格式不变,与原来一样

2018-05-12

视频去水印工具

视频去水印工具,可以去除视频中的水印,是一个软件。

2018-05-12

redis64-3.0.501

redis缓存,在window下使用的客户端软件,64位的。解压就可用

2018-05-12

tomcat-8.0.46

tomcat-8.0.46免安装版,下载就能用。定义的端口号为80,使用其他端口请自行修改

2018-05-12

Mysql相关使用总结

Mysql相关使用总结,把一些mysql的相关语法进行总结,包括建表语句,修改表名和列名属性,添加字段,删除表,字段等

2018-05-12

tomcat6.0.20免安装版

tomcat6.0.20免安装版,解压直接用,64位版本,安全稳定

2017-12-08

空空如也

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

TA关注的人

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