自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 问答 (1)
  • 收藏
  • 关注

原创 关于写博客的一些心得

文章目录一, 前言1.1 开源分享1.2 教学相长1.3 追求原创二, 写博客流程2.1 用有道云笔记写初稿2.2 写示例程序2.3 画图2.4 往有道云笔记的Markdown上挪2.5 复制到CSDN2.6 时常翻看,找“bug”2.7 整体流程三, 相关工具3.1 笔记工具3.2 画图工具3.3 LaTeX数学公式编辑器四, 总结一, 前言虽然我的博客也不是很多,但多多少少也总结了一些自己在写博客的心得,写博客很麻烦,那为什么还要写博客呢1.1 开源分享互联网软件行业的产物之一:开源。绝对是人类

2020-07-11 13:44:34 566

原创 Mybatis查询列表中的坑

Mybatis查询结果数少一条,数量不对,一对多查询问题,被去重,多字段排序,Mybatis查询常见问题

2024-03-20 23:31:10 1215

原创 二分搜索边界问题的简单结论

二分搜索,二分查找,边界问题,简单结论

2024-01-13 12:37:59 978

原创 关于低代码平台的思考

关于低代码平台的设计思考,值得开发人员学习的设计思路

2024-01-06 17:19:10 878

原创 HashMap扩容是2倍的原因(全网博客几乎都解释错了)

HashMap扩容为2倍的原因

2023-12-21 12:22:41 1551 3

原创 LinkedHashMap详解

LinkedHashMap详解,源码解析,实现LRU缓存

2023-12-18 10:14:19 119

原创 通俗解释equals和hashCode的关系和作用

通俗解释equals和hashCode的关系和作用

2023-09-11 10:31:15 217

原创 Java算法常用基础工具和技巧总结

Java算法常用基础工具和技巧总结

2023-05-04 13:45:51 399

原创 一文吃透Java线程池——基础篇

java线程池的使用和基本原理

2023-04-12 12:11:38 553

原创 一文吃透Java线程池——实现机制篇

java线程池的原理以及源码分析

2023-04-12 12:09:57 579

原创 Java锁深入理解2——ReentrantLock

ReentrantLock

2023-04-02 17:10:57 502

原创 Java锁深入理解1——概述及总结

为了尽可能榨取CPU的性能。计算机应用了多线程,多级缓存,指令重排。这些技术提高了计算机性能,同时也带来了数据不一致的问题。锁的概念应运而生。就是让多线程在不该并发执行的时候,改为同步顺序执行。机制很简单:只有一把锁,哪个线程抢到锁,哪个线程就可以运行,否则就停下来等着。这就是“互斥”的概念。由于可以让线程停下来,锁还衍生出了一些其他同步工具,让线程按照我们设想的逻辑流程启停运行。我们平时虽然说抢锁,但这只是一种表述习惯。如果要准确的说,应该说是”抢钥匙“。

2023-04-02 17:09:50 456

原创 Java锁深入理解4——ReentrantLock VS synchronized

ReentrantLock VS synchronized

2023-04-02 17:08:33 533

原创 Java锁深入理解3——synchronized

synchronized

2023-04-02 17:07:17 831

原创 Java锁深入理解5——共享锁

前面无论是ReentrantLock 还是 synchronized,我们都称之为“独占锁”。其实AQS还支持另外一种锁:共享锁。说到共享锁。我首先想到的就是“读写锁”里的“读锁”,在我的认知里,共享锁就是读锁。其实也差不多,因为读写锁中动读锁就实现了AQS共享锁机制。JDK中除了读写锁ReentrantReadWriteLock之外,还有CountDownLatch。共享锁的朴素概念:有多个持用该锁的线程可以同时运行。

2023-04-02 17:06:43 1857

原创 由sl4j门面的实现引发的联想

:只要使用无论项目中使用的logback还是log4j2,用户都不需要关心。应用中不可直接使用日志系统( Log4j、 Logback) 中的 API,而应依赖使用日志框架( SLF4J、 JCL–Jakarta Commons Logging) 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。那sl4j-api在不知道项目引用哪种日志框架的时候,是如何调用项目中的日志框架的呢。下面就引出本文的一个联想主题。。。

2023-03-19 15:16:59 407

原创 SpringBoot自动装配串讲

本文假设读者已经有了Spring和SpringBoot的使用基础。全文一万多字,深入探讨了源码的设计模式、模块之间的关系以及容易混淆的细节。通过剖析自动装配机制的前因后果,由浅入深的看看SpringBoot主要做了些什么事。【期间还发现了一个让人忽视的Maven特性】都是干货,无关紧要以及说了也让人记不住的繁琐过程基本都被省略了。如果觉得文章太长,可以只看总结。如果觉得总结的还有点意思,再往前看。StringBoot主要就是实现了一个自动装配功能。通过添加starter的方式,让用户快速使用组件。

2023-03-14 11:19:29 543

原创 mysql详解之innoDB

mysql innodb

2023-02-18 16:07:54 961

原创 mysql详情之MVCC由浅入深

MVCC是为实现隔离性的一种无锁方案。相比有锁方案,实现了读写并行处理,提高了系统性能。实现机制是多版本控制。

2022-12-19 15:39:18 598

原创 mysql详情之关于数据页的一些思考

b+树中的节点既可以称为索引块,也可以称为数据页,是一样大的。数据页即规定格式,也规定大小。或者说:数据即索引,索引即数据数据页在文件中顺序排放,通过页码进行双向关联,构建出b+树(节点中的数据通过偏移量进行单向关联)数据页的功能:优化存储空间(写),方便检索定位数据(读)。这种类似的分块思想在数据存储/传输中都有应用。

2022-12-15 00:01:09 505

原创 mysql详解之B+树的查询时间复杂度

在内存里(不考虑磁盘io的特殊性),n叉树的查询时间复杂度都是O(logN)。

2022-12-08 11:23:09 6590 3

原创 mysql详解之redolog的关键——幂等性

本篇博客的前提是默认读者已经对mysql-innodb内部原理及各种概念有了比较全面的认识。过了是什么阶段,而在为什么阶段的一些深入思考(关于innoDB的基础原理概念,请期待下一篇博客)。说到redo log,我们都会说它是物理日志(和binlog的逻辑日志做对比)。但没人解释过:为什么要用物理日志。换个马甲,显得高级?很多文章在讲redo log时,好像有意无意的都在强调:redo log写日志时,顺序io带来的快或者能保住更多数据。这两点真的是redo log主要追求的东西吗?想一个问题:缓冲池是不是

2022-12-05 16:31:09 1106

原创 关于异常不一样的解释

关于java异常的不一样的解释

2022-09-13 12:04:13 264

原创 TCP三次握手四次分手不一样的解释

tcp三次握手四次分手不一样的解释

2022-09-11 14:37:20 919

原创 jmeter的入门问题

为什么变量不起效1. 变量名写错2. 获取变量的request组件写在了Http Request之后3. 看报错信息一、为什么变量不起效1. 变量名写错这是网上很多都是千篇一律的说法,既然大家都愿意复制这样的博客,说明这应该确实是一个很多入门人员容易犯的错误。2. 获取变量的request组件写在了Http Request之后这个问题,其实我们很多人在刚接触jmeter时,脑子里应该就会浮现的问题:各个组件的顺序是否有影响。但很奇怪的是,我翻了很多博客,大家统统对这个问题

2022-03-15 20:04:50 689

原创 Sqlserver OVER(PARTITION BY)的简单理解

窗口函数 分析函数 row_number() over (partition by ... order by) ...

2022-01-19 16:17:15 4734 1

原创 ZeroC Ice权威指南-学习笔记5——修改日志框架

按照书本上的说明,你也许会碰上这样的问题:修改完之后启动报错原因在simplegrid.xml的配置:看上图两块内容,虽然看起来都是option,顺序似乎无所谓,但这里确实有问题。因为这两块内容必需换一下位置,回想书本之前说的一句话:icebox元素就是拼凑了一个java命令启动脚本,而在拼凑的时候,就是因为都是option,所以拼凑的程序也就是简单的从前往后排序拼接。并不关心里面的内容。而下面几个配置属于jvm参数,必需跟在java后面,而不能跟在主程序后面(如果忘了java启动命令,见前面的章

2021-03-09 22:44:21 312

原创 ZeroC Ice权威指南-学习笔记4——IceGrid Node

有了IceRegistry,就可以请出主角IceGrid Node出场了。本节工作目录还是沿用上次的node。添加IceGrid Note配置node1.cfg注意这里面有两个目录,需要提前创建好。启动通过观察配置,我们可以看到,IceGrid Node的日志只关联了Registry。而Registry是不会主动去关联IceBox服务的。所以IceBox服务不能停下来,config.properties配置还是需要由IceBox“主动推送”给Registry。和启动IceRegistry

2021-03-09 22:43:31 1013

原创 ZeroC Ice权威指南-学习笔记3——IceRegistry

IceBox解决ice的启动“自动化”,让我们只专注于业务逻辑开发。ice作为一个致力于做出“全家桶”式的RPC框架,野心可不仅限如此,它要参与部署生产的各个环节,包括分布式环境下的统一服务治理。 IceGrid应运而生在分布式环境下,IceGrid由一个一个 IceGrid Node组成,每个IceGrid Node可以管理多一个IceBox。在此之前我们再丰富一下程序,增加一个接口写具体服务实现逻辑代码:这个实现逻辑中又调用了OnlineBook的服务,这样就把两个服务穿在一起

2021-03-09 22:42:54 724

原创 ZeroC Ice权威指南-学习笔记2——IceBox

另外写一个稍微复杂一点的调用过程按照书本上的slice【为了更清晰,这里把文件名字改为onlinebook.ice】保存之后,ice插件就为我们自动创建了对应的java代码给项目增加logback,这样可以看到更多日志,方便分析学习。给项目加上IceBox的jar包(ice虽然已经很精简,但ice.jar包可不是包罗万象)写服务端代码和上一个简单的demo不一样,这里我们使用IceBox,此时就不再需要ServerStarter这个对象了,那么他的任务(启动服务端代码)由谁

2021-03-09 22:42:00 691

原创 ZeroC Ice权威指南-学习笔记1——hello world

前言ZeroC Ice是一款很好的RPC框架,性能极好。但是参考文档不足是其一大问题,这也影响了它的传播。《ZeroC Ice权威指南》是唯一的中文教材,但写的不尽如人意,作为入门教材,啃着有点费劲。本系列博客就是学习这本教材的学习笔记,可以作为有需要的同学的辅助参考材料。其中主要是实操类的流程介绍,由于书中的ice版本比较老,和比较新的ice版本有不少使用上的差异,本系列博客使用的是ICE3.7.2,按照书中的步骤,会遇到不少的坑,所以整理了一些学习笔记。但是!学习了一段时间发现,我所在的公司在逐步弃

2021-03-09 22:40:20 1042 3

原创 一种多数据源分布式事务的简单实现及源码

目录问题背景解决方案技术点设计方案上代码用法步骤结尾问题背景一个接口里需要需要处理多个数据源时,必须分多个事务,多个事务无法回滚。场景一:当系统为了性能而进行分库之后,我们的一个业务逻辑里就可能出现操作多个数据源的情况(当然,一般情况下在分库的就会考虑到把相关业务的放在一个机器上)。但也可能会出现奇怪的业务把完全不相干的业务揉到了一起。场景二:对于一些不大的项目,有时候为了省事,几个团队甚至会约定,可以相互直接访问数据库(理论上是不应该的,有安全风险),如果数据库不在一台机器上,就也会出现事务回滚问

2021-02-08 22:13:49 618

原创 git的基本使用及原理

这里写自定义目录标题前言git开发步骤一般场景流程命令行实现idea操作1. 检出代码2. 创建分支3. 修改代码后,在左边commit栏自动会出现你修改的文件5. 切换到其他紧急处理分支6. 切换回来,恢复工作进度7. 提交代码8. 推送远程分支9. 之后就重复上面的操作直到完成自己的开发任务10. 合并到mastergit原理git的存储结构思路一:提交一次就存储一套代码思路二:记录每个文件的增量提交记录其实git选择了更加聪明的存储方式git核心概念原理git存储的三种数据类型1. commit2.

2020-11-24 21:59:15 796

原创 复杂父子继承相互调用的深入理解

前言看过像Spring这样的开源框架源码,第一个感觉:逻辑很复杂,一层一层的跳来跳去,用一个实际例子感受一下(这是Springmvc的handleMapping在找对应的requestMapping的过程一部分,这里的展示的复杂的过程中居然只是“无意义”的中转代码,还没走到真正起作用的方法)在跟踪源码的时候,一会儿跳到父类,一会儿跳到子类。有时候会想:这怎么可能。为什么会产生这种疑惑。因为调用父类我们比较好理解:子类继承父类,就是为了调父类资源的。那父类调用子类呢?下面深入分析一下这种“子类和父类

2020-07-26 10:58:01 451

原创 spring-事件机制-监听器-观察者模式

文章目录前言示例代码路径重要概念简单应用Demo简单分析总结进阶使用注解@EventListener异步监听@Asyncspring监听器RequestHandleEvent观察者模式概念角色示例代码源码解析事件广播器Spring事件机制流程流程解释附录加载监听器的几个细节addApplicationListenerBeanaddApplicationListener如何读的源码把示例项目跑起来在合适的位置打断点总结参考链接前言事件机制(Event)是spring的重要功能之一。本文将从该功能的用法/和

2020-07-04 13:41:25 2619 3

原创 跳表出现的原因,实现原理及代码实现

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2020-06-29 15:14:46 680

原创 源码解析Servlet Filter原理

文章目录零、前言一、流程概述二、大致流程三、详细流程第一阶段第二阶段第一步:加载filter第二步:点燃filterChain“鞭炮链”四、其他关于filter执行顺序小插曲零、前言本文旨在从源码的角度解读过滤器的原理。使用的源码为springboot2.2内置的tomcat9。约定: 下面的所说的web服务器就是tomcat,war指的就是我们开发的web应用程序。一、流程概述为了明确filter所在位置,先说一个整体视角:以tomcat为例,所谓“web开发”,就是完善tomcat逻辑的过程

2020-05-08 23:47:36 1210 1

原创 Mybatis-Plus的应用及思考

文章目录一. 背景和理念二. 作用三. 阅读本文希望达到的目的四. 使用方法4-1. pom.xml增加maven引用4-2. mapper接口继承BaseMapper接口4-3. Entity加上注解4-4. service层直接使用内置方法五. 常用方法5-1. 增5-2. 删5-3. 改5-4. 查六. 在项目中的注意事项一. 背景和理念国产最受欢迎的开源框架mybatis的增强框架,...

2020-03-27 21:49:52 304

原创 int转byte数组以及相关原理

零、前言本文由int转byte数组这样的题目代码引发的思考,其中涉及到多个让我混淆的地方。直接上代码 public byte[] toBytes(int number){ byte[] bytes = new byte[4]; bytes[3] = (byte)number; bytes[2] = (byte) ((number &gt...

2020-01-01 23:23:05 1828

原创 java线程中断、睡眠、等待

目录零、前言线程状态图睡眠(sleep)Demo说明等待(wait)Demo说明wait使用方式synchronized唤醒(notify)wait(), object对象,线程三者关系小结使用Lock实现类似的功能中断(interrupt)一般用法Demo说明中断sleepDemo说明中断waitDemo停止Demo小结总结零、前言在应用线程的时候,启动后,线程就像脱缰的二哈一样不受控制的...

2019-12-11 20:55:10 2878

空空如也

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

TA关注的人

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