- 博客(205)
- 资源 (29)
- 收藏
- 关注
原创 集成分布式锁架包(MySQL、Redis、Zookeeper)
疫情当下,大环境不好,自己又去了一家令人非常失望的单位,一直在996加班忙于业务代码,技术方面几乎等于零成长。但是,作为一个Coder,必须要挤出时间去学习与总结,不然就会被无情的淘汰。Coder加油吧!
2023-01-02 10:23:33
777
1
原创 基于Netty实现SpringMVC
前言:Netty是一个非常优秀的异步事件驱动的网络通信框架,它本身就支持HTTP协议栈的开发。由于Netty是对Java NIO的封装,因此基于Netty开发的HTTP协议栈也是异步非阻塞的。并且Netty相对传统的Web容器(例如Tomcat、Jetty)会更加轻量、小巧、定制化开发也很灵活。SpringMVC是一个轻量级的Web框架,它可以把用户使用浏览器产生的HTTP请求解析成视图,再响应给浏览器。实现该过程的最重要的一个组件是DispatcherServle...
2022-05-03 11:00:30
1672
2
原创 hanxiaozhang 后台管理系统
从开始参加工作到开始准备的系统之前,我一直想自己独立完成一个系统的开发,检验一下自己的工作学习成果。2020年工作中全面的使用到SpringCloud全套相关技术,萌生了使用SpringCloud技术栈作为这个系统后端的实现。2021年工作中又学习了React相关的前端框架,我就放弃打算前端使用Vue技术栈的想法。这个系统从2020年9月份开始到2021年4月份封板(中间也停过小4个月),花费了不少的私下时间,算是对自己工作学习的一个总结吧。
2021-04-22 08:41:29
6191
原创 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
344
原创 LinkedList源码,你想了解一下不?
前言:上回咱们介绍了ArrayList源码,详情见《ArrayList源码,你想了解一下不?》文章,今天来介绍一下LinkedList源码,LinkedList源码也不是很难理解,它的底层用的双链表,如果你对常用的数据结构有所了解,你在学习理解LinkedList源码中关于链表的相关方法就很容易。LinkedList与ArrayList都实现了List接口,如果你原来看过ArrayList源码,你在学习理解LinkedList源码中关于List接口相关方法就很容易。听我这么半天忽悠,你是不是也想学...
2020-06-03 21:22:08
955
2
原创 业务上第一次使用多个设计模式的组合(策略模式+缺省适配器模式+模板方法模式+简单工厂模式)
前言:从第一次系统地阅读《Java与模式》这本书已经过去一年多了,我一直没有有意的去使用设计模式,原因有两点:一是,对设计模式理解有些点不深入,使用起来比较吃力;二是,没有一个合适场景去使用设计模式。最近,我在负责一个新系统的对接钉钉流程中心,调用相关流程的开发工作,我在之前已经钉钉流程对接2次了,都这块业务理解比较准确和成熟。如果要是搬用原来的代码没有问题,但是原来的写法复用很差,每次新增一个流程,都有把原来的接口复制一遍,然后再对每一个方法中部分代码进行修改。基于以上背景,我觉得应该使用设计模式,对
2020-05-16 13:11:07
1864
1
原创 Spring事务的传播规则以及各种场景下事务的生效情况
前言:从大学学完《Web程序设计》这门课之后,我一直在使用Spring这个框架,它的优点和好处不言而喻。随着时间的推移,我对这个框架的理解也不断加深,自己也有了一些使用的技巧与经验,下面我将分享关于Spring事务中的一些知识,希望对大家的工作、学习、面试有一些帮助。分享的内容主要包括事务何时生效、事务的传播规则和嵌套事务的使用等。如有偏差,请君不吝赐教!一、相关知识点(这里只写文中用到的知识点):1.物理事务与逻辑事务:物理事务:事务性资源实际打开的事务,如数据库的Connection打开
2020-05-10 11:37:41
1984
1
原创 基于Springboot+Bootstrap的文件管理全套解决方案(文件列表、上传、预览、下载、删除、打包下载等)
前言:最近,不知道是不是最后一搏,事业群上层领导要求7天内完成ABS项目中保理系统的一期开发。需求评审会后,我发现各个功能模块都有大量的文件材料展示与上传,为了提高开发效率,我与组长商量,我先开发文件模块,为其他同事提供公共方法,减少重复工作。使用的前端技术栈:Bootstrap、Bootstrap-table、layer.js、layui.js、jquery.media.js设计思路...
2020-05-01 20:53:28
8962
8
原创 业务上第一次遇到MySQL更新锁表超时(Lock wait timeout exceeded try restarting transaction)
前言:最近,我在公司开发某个业务功能,需要使用钉钉审批流,在最后一个结点审批通过后,使用MQ监听回调信息,根据回调信息,更新订单状态、触发系统还款、保存相关审批记录。如果在完美情况下,这一套流程没有任何问题,但是因为历史数据等原因,触发系统还款可能会失败。此时,审批流程已经正常结束了,不可能再走一遍流程。为了解决这样的问题,我们订单状态的“已还款”拆成“审批通过”和“已还款”,这两个结点在完美...
2020-04-18 21:32:19
2080
原创 一篇文章了解MySQL联合索引
一、什么叫联合索引?由两列或以上列组成的索引成为联合索引,联合索引又叫复合索引。相关概念:索引覆盖:联合索引中包含了需要查询的所有数据,不需要进行二次查询,直接返回数据。最左索引匹配原则:使用联合索引时,遵循从左边开始匹配联合索引中列,MySQL的SQL的执行过程:MySQL的优化器:...
2020-03-15 10:05:29
2738
1
原创 一套超好用的“Excel导入导出+多线程处理导入数据+多线程事务回滚”的模板方法
Excel导入导出+多线程处理导入数据+多线程事务回滚的模板方法二、功能演示:1.Excel数据:数据说明:第一条数据完整,可以成功导入;第二条数据无姓名,业务逻辑姓名不允许为空,会导出到错误Excel中;第三条数据无姓名无类型,业务逻辑姓名类型不能为空,会导出错误Excel中。2.导入页面:选择相关Excel,点击导出测试按钮:3.正确数据入库:4.错误数据导出成Excel并有提示:...
2020-03-08 21:14:44
14783
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
1671
原创 使用SpringBoot Starter完成发送异常邮件SDK
前言: 前一阵学了SpringBoot发送邮件、SpringBoot制作Starter和自定义业务异常等知识,我突发奇想,我可以制作一个能捕获项目所有异常,通过邮件形式把异常信息发送给开发者的Starter,开发者实现只需要配置相关信息,就可以使用。实现无侵入性编程,支持热拔插使用。正文:具体相关知识点:SpringBoot中Starter知识、SpringBoot驱动配置文件...
2019-09-22 10:11:31
1137
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
445
原创 Netty面试重点-2
select ( oldWakenUp) 方法解决了 Nio 中的 bug,selectCnt 用来记录 selector.select方法的执行次数和标识是否执行过selector.selectNow(),若触发了epoll的空轮询bug,则会反复执行selector.select(timeoutMillis),变量 selectCnt 会逐渐变大,当selectCnt 达到阈值(默认512),则执行 rebuildSelector方法,进行selector重建,解决cpu占用100%的bug。
2025-10-18 11:03:17
1032
原创 Netty面试重点-1
NioEventLoop每次循环的处理流程都包含:事件轮询(select)、事件处理(processSelectedKeys)、任务处理(runAllTasks)这个几个步骤,是典型的Reactor线程模型的运行机制。NioEventLoopGroup相当于1个事件循环组,它包含多个事件循环NioEventLoop,每个NioEventLoop包含1个selector和1 个事件循环线程。Netty是基于NIO的,它封装了JDK的NIO,让我们使用起来更加方法灵活。
2025-10-05 16:45:20
920
原创 网络与IO面试重点-2
http2.0必须基于HTTPS,有公司没有使用HTTPS,HTTPS一般交给Nginx来实现,还需要额外配置等。TCP链接的数量是由浏览器本身限制的,不同浏览器不同,chorme默认约6个。同一个域名下,会建立多少个TCP链接?为什么需要 CA 认证机构颁发证书?不同HTTP版本,HTTP请求不同。为什么http2.0还没有普及?为什么数据传输是用对称加密?HTTPS请求过程:**
2025-10-01 09:22:21
896
原创 运维面试重点
概念:**它是一个能够把开发的应用程序自动部署到容器的开源引擎。Docker思想:集装箱、标准化(运输方式、存储方式、 API接口)、隔离。镜像:是轻量的、可执行的独立软件包。它包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置等。容器:将软件打包成标准化单元,它以用于测试、交付和部署。容器与镜像的关系:容器是镜像运行时的实体,它两的关系像Java中的类和实例,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
2025-09-27 00:15:35
895
原创 Linux面试重点
创建文件夹:mkdir -p /usr/local/nginx(-p:如何父目录不存在,就创建它)创建文件:touch /usr/abc.txt查看当前路径命令:pwd移动命令:mv [源地址] [目的地]复制命令:cp -r [源地址] [目的地] (-r:递归复制子目录)删除命令:rm -rf切换目录命令:cd查看文件或目录命令:ls ll (-a:显示所有文件,包括隐藏文件)查看当前路径:pwd查找文件命令:find /home -name 'fileName*'
2025-09-21 05:31:13
828
原创 算法面试重点
然后,遍历这5个元素,首先第一个元素是4,就把4对应的位置为1。假设,对0-7内的5个元素进行排序(元素没有重复),元素为:4,7,2,5,3。并查集,在一些有N个元素集合的应用问题中,我们通常是在开始时,让每个元素构成一个单元素的集合,然后,按一定顺序,将属于同一组的元素所在的集合合并, 其间要反复的查找一个元素在哪个集合中。每次排序将要序列分成两部分,其中一部分的数据都比基准数小,另一部分的数据比基准数大,然后,分别在两个部分重复上一步,直到两个部分的序列只有一个元素为止。在int中就是N/32。
2025-09-13 08:18:34
725
原创 数据结构面试重点
一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。B+树是B树的变种树,有n棵子树的节点中含有n个关键字,每个关键字都不保存数据,只是用来索引,数据都保存在叶子节点中。相对于B树来说,B+树更充分的利用了节点的空间,让查询速度更加稳定,其速度完全接近于二分法查找。构造一个多阶的B类树,在尽量多的在结点上存储相关的信息,来保证层数尽量的少,方面可以更快的找到信息,磁盘的I/O操作也少一些。红黑树是一种不是非常严格的平衡二叉树,所以它的平均查找,增添删除效率都还不错。
2025-09-07 11:15:00
739
原创 MongoDB面试重点
副本集是由一组托管相同数据集的mongo实例。分片是将数据水平切分到不同的物理节点。当数据量增长,单台机器可能无法存储数据或无法接受的读取写入吞吐量时,可以利用分片技术添加更多的机器来应对数据量增长,满足读写操作的要求。分片属于水平拓展方式。MongoDB支持自动分片,简化系统管理。建议至少创建3个或以上的分片。
2025-09-06 09:00:00
611
原创 Redis面试重点-2
16384=2*1024*8,即2KB,2KB在集群心跳信息传递是不是很大,16384个槽位够用。Redis集群至少需要几个节点?至少需要几个master节点?Redis集群至少需要3个master节点,1master-1slave,Redis集群需要6个节点;1master-2slave,Redis集群需要9个节点,以此类推。数据分片策略:没有使用一致性哈希,而是使用哈希槽分布数据;使用crc16(key) % 16384,计算键key属于哪个槽。
2025-08-31 17:06:00
706
原创 Redis面试重点-1
概念:开源的,键值对的,NoSQL。原理:(@&@)Redis把整个数据库加载到内存当中,通过定期的异步操作,把数据库数据flush到硬盘上进行保存。优点:每秒10万次读写、支持多种数据类型、支持事务、支持过期时间、内置方法支持计算。缺点:Redis数据库容量受到物理内存的限制,不能用作海量数据的高性能读写。
2025-08-30 09:00:00
663
原创 LeetCode-数组-No45缺失的第一个正数跳跃游戏II
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。
2024-07-06 10:00:01
319
原创 Sharding-JDBC
Sharding-JDBC是一个在客户端的分库分表工具。它是一个轻量级Java框架,在Java的JDBC层提供的额外服务。ShardingSphere提供标准化的数据分片、分布式事务和数据治理功能。
2024-07-06 09:55:10
1118
原创 LeetCode-数值-No49字母异位词
是由重新排列源单词的所有字母得到的一个新单词。给你一个字符串数组,请你将。可以按任意顺序返回结果列表。
2024-06-29 17:06:22
506
原创 LeetCode-数组-No48旋转图像
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
2024-06-28 22:34:30
462
原创 《Redis设计与实现》阅读总结-4
一个节点(A节点)除了处理记录自己负责的槽记录,还会将自己的槽记录(A节点)通过消息发送给集群中的其他节点(B节点),其他节点(B节点)会在自己的clusterState.nodes字典中查找节点(A节点)对应的clusterNode结构,更新槽记录。Watch命令是一个乐观锁,它可以在EXEC命令执行之前,监视任意数量的数据库键,并在Exec命令执行时,检查监视的键是否至少有一个已经被修改过了,如果被修改,则拒绝执行事务,并向客户端返回代表事务执行失败的空回复。
2024-06-28 22:14:05
1471
原创 LeetCode-数组-No41缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) ,并且只使用常数级别额外空间的解决方案。
2024-06-27 07:00:00
342
原创 《Redis设计与实现》阅读总结-3
在同步操作执行完毕之后,主从服务器两者的数据库将达到一致状态,但这种一致并不是一成不变的,每当主服务器执行客户端发送的鞋命令时,主服务器的数据库就有可能被修改,并导致主从服务器状态不再一致。Sentinel是Redis的高可用性(HA)解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及主服务器属下的所有从服务器,当被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器上级为主服务器。
2024-06-27 06:45:00
1814
原创 LeetCode-数组/回溯-No40组合总和II
给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。注意:解集不能包含重复的组合。
2024-06-26 07:15:00
444
原创 《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
1075
原创 LeetCode-数组/回溯-No39组合总和
给你一个无重复元素的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合 ,并以列表形式返回。1. 数组排序:将数组排序,可以推论出:如果 sum > target 或 sum = target时, sum + next元素 > target 一定成立,所以可以结束循环。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。
2024-06-25 05:11:52
331
原创 《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
744
原创 MySQL面试重点-2
乐观锁并不是数据库自带的,需要自己去实现,一般情况下,我们会在表中新增一个version字段,每次更新数据version+1,在进行提交之前会判断version是否一致。模拟MySQL优化器运行SQL语句,了解MySQL如何处理你的SQL语句。两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。show engines命令查看数据库支持的存储引擎。一主一从、主主复制、一主多从、多主一从、联级复制。MySQL加锁情况分析:***《见MySQL加锁》
2024-06-24 07:15:00
2663
原创 Java多线程基础知识-3
AQS是抽象的队列式同步和锁实现框架。它是除了java自带的synchronized关键字之外的锁机制。例如ReentrantLock、ReentrantReadWriteLock、Semaphore、FutureTask等都是基于AQS实现的。
2024-06-22 07:45:00
881
spring-framework-5.0.7.RELEASE-编译好的.rar
2020-03-30
springBootStarterExceptionMail.rar
2019-09-22
select2.js插件支持拼音搜索(最新版-4.0.6)Demo
2018-10-03
spring-framework-4.3.12.RELEASE--编译好的源码.rar
2020-03-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅