- 博客(60)
- 收藏
- 关注
原创 最经典的Spring源码手写篇-手写IoC
摘要:本文探讨了Spring框架中IoC容器的核心设计与实现。首先分析了IoC的概念、优势及容器功能,指出IoC容器本质上是一个工厂模式实例。然后详细阐述了Bean工厂的设计过程,包括BeanDefinition的定义、注册机制(BeanDefinitionRegistry)以及DefaultBeanFactory的实现。最后讨论了IoC功能的两个增强方向:别名管理和Type类型支持。文章呈现了完整的IoC容器设计思路,涵盖单例管理、初始化/销毁方法等关键特性,并遵循了面向接口编程、单一职责等设计原则,为理
2025-06-09 00:30:00
1519
原创 最完整的mysql8索引实现原理及优化方案来了
提高select查询性能的最佳方式就是在查询中给表中的一个或者多个列添加索引,以便能够高效的检索到数据。但是要注意的是,并不是给所有的列都添加索引之后,效率就一定会高,多余的索引会浪费mysql确定使用哪些索引的空间和时间,索引还会增加插入、更新、删除的成本,增加索引的维护成本,所以要合理的去添加索引。索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行。表越大,成本就越高。
2025-05-31 22:10:57
871
原创 Redisson分布式锁案列和源码解读
分布式锁的核心功能其实就三个:加锁、解锁、设置锁超时同时在了解分布式锁之前,也需要了解Redis的发布订阅功能。
2025-05-22 23:21:44
882
原创 ReentrantReadWriteLock读写锁
B线程获取了2次读锁资源。**写锁:** 写锁的实现就是每一次获取写锁时,会对state的低16位+1,再次获取,再次+1。正常的操作,是new ReentrantReadWriteLock的对象,但是你具体的业务操作是需要读锁,还是写锁,你需要单独的获取到,然后针对性的加锁。这里可以让最后一个获取读锁的线程在重入时,省略掉去ThreadLocal中get计数器的操作,但是之前的set存储操作,不能省略。在读写锁中,持有读锁的同时,去获取写锁,这种行为被称为 **锁升级** ,这个行为是不允许的。
2025-04-20 16:28:30
1025
原创 FutureTask底层实现
FutureTask在构建时,需要基于有参构造将Callable任务传递到Future中,在给线程提交任务时,提交的是FutureTask,不过Thread对象,值提供了传递Runnable(任务)的有参构造。> set方法第一步是基于CAS的方式,将任务状态从NEW,修改为COMPLETING,修改成功后,就会将返回的异常结果赋值给outcome。在任务完成后,无论是正常的完成,还是异常完成,还是说被取消的情况,最终都会执行finishCompletion方法,去唤醒所有排队的WaitNode节点。
2025-04-20 15:45:06
752
原创 百万级别数据的 Excel 如何快速导入到数据库中
这个版本是最古老的版本,采用原生 POI,手动将 Excel 中的行映射成 ArrayList 对。10w 行的 excel、42w 欠单、42w 记录详情、2w 记录、16 线程并行插入数据库、每。1.数据导入:导入使用的模板由系统提供,格式是 xlsx (支持 65535+行数据) ,用户。的,也就是说 10w 行的 Excel,则至少向数据库插入 30w 行数据。每 30000 行拼接一。导入 Excel 的需求在系统中还是很常见的,优化办法可能不是最优的,欢迎读者在评。
2025-02-28 10:17:23
931
原创 Mysql关系型数据库的整体设计
了解Mysql的前世今生了解Mysql的前世今生Msyql的发展历史简述如下:1995年5月23日,第一个内部版本的Mysql发布 然后在第二年,也就是1996年,MySQL官方正式发行版(3.11.1)对外公 布。2001年推出MySQL 4.1 版本,这个版本集成了InnoDB引擎,支持事务、 子查询等能力 2008年2月,Sun花了10亿美金首购了Mysql,MySQL和Sun合并之后,推 出了MySQL 5.1GA版和MySQL 5.4 Beta版。
2025-01-09 20:58:25
675
原创 Mysql性能优化整体分析和总结
Q&AQ&A1. MVCC为什么不能解决幻读(快照读和当前读的问题)2.,假设id是主键索引,应该加什么锁。如果查询条件是二级索引,默认会有一个next key lock如果是主键索引, 加行锁针对满足条件的记录行加Record Lock3. Next Key Lock 加锁区间的问题针对二级索引加锁的情况下,每个记录行都会默认存在一个next -key lockselectclass_id1;加锁范围 (1,2] (2,8] (8,10],(10,+∞]select。
2025-01-09 19:42:30
952
原创 面试归纳之:mysql数据库面试难点汇总
目录Explain语句结果中各个字段分表表示什么索引覆盖是什么最左前缀原则是什么Innodb是如何实现事务的B树和B+树的区别,为什么Mysql使用B+树Mysql锁有哪些,如何理解Mysql慢查询该如何优化?Explain语句结果中各个字段分表表示什么 列名 描述 id 查询语句中每出现一个SELECT关键字,MySQL就会为它分配一个唯一的id值,某些子查询会被优化为join查询,那么出现...
2021-12-20 14:47:56
906
原创 Hadoop之HDFS的读数据与写数据
NameNode和DataNode的概述NameNode概述:1.NameNode也称为Master,是HDFS的核心 2.NameNode仅存储HDFS的元数据,文件系统中所有文件的目录树,并限制整个集群中的文件 3.NameNode不存储实际文件中的数据,数据本身实际存储在DataNode中 4.NameNode知道HDFS中任何给定文件中的块列表及其位置 5.NameNode并不持久化存储每个文件中各个块所在的DataNode的位置信息,这些信息会在系统启动时从数据节点重建...
2021-08-17 23:27:58
852
1
原创 centos6中yum仓库闭源以及hadoop搭建
解决centos6的yum仓库闭源问题1.sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf2.mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup3.curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vau.
2021-08-08 17:25:35
330
原创 密码学(六):项目案例
目录创建项目encryptcase创建启动类创建javabean创建dao创建servcie创建controller集成 Swagger2swagger介绍swagger的基础注解介绍代码中添加swagger注解购物功能创建项目encryptcase导入pom文件 <parent> <groupId>org.springframework.boot</groupId> ...
2021-07-12 17:37:59
1063
原创 密码学(五):数字签名
数字签名数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。简单认识相信我们都写过信,在写信的时候落款处总是要留下自己的名字,用来表示写信的人是谁。我们签的这个字就是生活中的签名:.
2021-07-12 17:07:29
2151
原创 密码学(四):非对称加密
目录非对称加密生成公钥和私钥私钥加密私钥加密私钥解密私钥加密公钥解密公钥加密和公钥解密保存公钥和私钥读取私钥读取公钥非对称加密简介:① 非对称加密算法又称现代加密算法。② 非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。③ 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密(privatekey)④ 公开密钥和私有密钥是一对⑤ 如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。...
2021-07-12 16:46:25
892
原创 密码学(三):加密模式与填充模式和消息摘要
目录加密模式ECBCBC填充模式NoPaddingPKCS5PaddingTips消息摘要特点获取字符串消息摘要base64 编码其他数字摘要算法获取文件消息摘要加密模式加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.htmlECBECB : Electronic codebook, 电子密码本. 需要加密的消息按照块密码的块大小被分为数个块,并对每个块.
2021-07-12 16:30:01
2234
转载 密码学(二):Byte和常见加密方式
目录频度分析法破解恺撒加密Byte和bit获取字符串bytebyte对应bit中文对应的字节英文对应的字节常见加密方式对称加密DES加密DES解密base64补等号测试AES加密解密toString()与new String ()用法区别频度分析法破解恺撒加密密码棒公元前5世纪的时候,斯巴达人利用一根木棒,缠绕上皮革或者羊皮纸,在上面横向写下信息,解下这条皮带。展开来看,这长串字母没有任何意义。比如这样:信差可以将这条皮带当成...
2021-07-12 15:46:22
4102
转载 密码学(一):古典密码学与凯撒加密
目录密码学基本概念古典密码学近代密码学现代密码学如何设置密码才安全ASCII编码恺撒加密中国古代加密外国加密凯撒位移加密密码学基本概念密码在我们的生活中有着重要的作用,那么密码究竟来自何方,为何会产生呢?密码学是网络安全、信息安全、区块链等产品的基础,常见的非对称加密、对称加密、散列函数等,都属于密码学范畴。密码学有数千年的历史,从最开始的替换法到如今的非对称加密算法,经历了古典密码学,近代密码学和现代密码学三个阶段。密码学不仅仅是数学家们的智慧,更是
2021-07-12 14:55:46
1664
原创 设计模式(二)七大原则之(依赖倒转,里氏替换,开闭原则)
目录依赖倒转原则基本介绍应用实例依赖关系传递的三种方式和应用案例依赖倒转原则的注意事项和细节里氏替换原则OO中的继承性的思考和说明基本介绍一个程序引出的问题和思考解决方法开闭原则基本介绍看下面一段代码方式 1的优缺点改进的思路分析依赖倒转原则基本介绍依赖倒转原则(Dependence Inversion Principle)是指:1) 高层模块不应该依赖低层模块,二者都应该依赖其抽象2) 抽象不应该依赖细节,细节应该依赖抽象
2021-07-09 15:03:23
761
原创 ElasticSearch(二):操作之Http操作实例
目录HTTP操作索引操作创建索引查看所有索引查看单个索引删除索引文档操作创建文档查看文档}修改文档修改字段删除文档条件删除文档映射操作创建映射查看映射索引映射关联高级查询查询所有文档匹配查询字段匹配查询关键字精确查询多关键字精确查询指定查询字段过滤字段组合查询范围查询模糊查询单字段排序多字段排序高亮查询分页查询聚合查询桶聚合查询HTTP操作索引操作创..
2021-07-03 20:49:22
1339
原创 MQ专题之RabbitMQ(三):单例与集群模式搭建
目录RabbitMQ集群搭建集群方案的原理单机多实例部署集群管理RabbitMQ镜像集群配置负载均衡-HAProxyRabbitMQ集群搭建摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试环境上使用其单实例部署就可以了,但是出于MQ中间件本身的可靠性、并发性、吞吐量和消息堆积能力等问题的考虑,在生产环境上一般都会考虑使用Rabb.
2021-06-30 11:14:04
585
1
原创 Web之异步请求-拦截器-异常处理
异步请求-跨域访问跨域访问介绍 当通过域名A下的操作访问域名B下的资源时,称为跨域访问 跨域访问时,会出现无法访问的现象 跨域环境搭建 为当前主机添加备用域名 修改windows安装目录中的host文件 格式: ip 域名 动态刷新DNS 命令: ipconfig /displaydns 命令: ipconfig /flushdns 跨域访问支持 名称: @CrossOrigin ..
2021-06-29 15:29:02
533
原创 SpringMVC案列以及源码讲解
目录SpringMVC 概述入门案例入门案例制作入门案例工作流程分析SpringMVC 技术架构图基本配置常规配置(Controller加载控制)静态资源加载中文乱码处理注解驱动请求普通类型参数传参POJO类型参数传参数组与集合类型参数传参类型转换器日期类型格式转换自定义类型转换器请求映射 @RequestMapping方法注解类注解响应页面跳转页面访问快捷设定 (InternalResour...
2021-06-29 14:48:17
788
2
原创 Spring核心模块:Aop的解释以及应用
AOPAOP简介OOP开发思路转存失败重新上传取消转存失败重新上传取消AOP开发思想转存失败重新上传取消转存失败重新上传取消AOP概念 AOP(Aspect Oriented Programing)面向切面编程,一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构 AOP弥补了OOP的不足,基于OOP基础之上进行横向开发 uOOP规定程序开发以类为主体模型,一切围绕对象进行,完成某个任务先构建模型 uAOP程序开发主要关注基于OO
2021-06-29 10:38:36
1186
原创 Java基础(一):类加载+注解+枚举
1.类加载器1.1类加载器【理解】 作用 负责将.class文件(存储的物理文件)加载在到内存中 1.2类加载的过程【理解】 类加载时机 创建类的实例(对象) 调用类的类方法 访问类或者接口的类变量,或者为该类变量赋值 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象 初始化某个类的子类 直接使用java.exe命令来运行某个主类 类加载过程.
2021-06-28 14:19:53
514
原创 网络编程(一):TCP与UDP与NIO
目录网络编程入门网络编程概述【理解】网络编程三要素【理解】IP地址【理解】InetAddress【应用】端口和协议【理解】UDP通信程序UDP发送数据【应用】UDP接收数据【应用】UDP通信程序练习【应用】UDP三种通讯方式【理解】UDP组播实现【理解】UDP广播实现【理解】TCP通信程序TCP发送数据【应用】TCP接收数据【应用】TCP程序练习【应用】TCP程序文件上传练习【应用】TCP程序服务器优化【应用】NIO...
2021-06-27 20:22:43
1056
2
原创 网络协议(二):NIO与HTTP与http服务器
NIONIO通道客户端【应用】 客户端实现步骤 打开通道 指定IP和端口号 写出数据 释放资源 示例代码 public class NIOClient { public static void main(String[] args) throws IOException { //1.打开通道 SocketChannel socketChannel = SocketChannel.
2021-06-27 20:20:42
1332
1
原创 Java基础:集合Map原理以及JDK1.8流的使用
Map集合Map集合概述和特点【理解】 Map集合概述 interface Map K:键的类型;V:值的类型 Map集合的特点 双列集合,一个键对应一个值 键不可以重复,值可以重复 Map集合的基本使用 public class MapDemo01 { public static void main(String[] args) { //创建集合对象 Map map = new HashMa...
2021-06-27 17:55:27
708
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人