金鳞踏雨
断剑重铸之日,就是归来之时。
展开
-
【Spring源码】Spring核心原理解析
那么Spring到底是如何来创建一个Bean的呢,这个就是Bean创建的生命周期,大致过程如下:利用该类的构造方法来实例化得到一个对象(但是如何一个类中有多个构造方法,Spring则会进行选择,这个叫做推断构造方法得到一个对象后,Spring会判断该对象中是否存在被@Autowired注解了的属性,把这些属性找出来并由Spring进行赋值(依赖注入。原创 2023-04-06 11:19:07 · 2509 阅读 · 0 评论 -
【MySQL】高性能表结构及索引设计最佳实践(上)
范式的英文是Normal Form,所以我们通常把它称为——NF。MySQL是关系型数据库,想要设计—个好的关系,必须使关系满足一定的约束条件,此约束已经形成了规范,分成几个等级,一级比一级要求得严格!目前关系数据库有六种范式第一范式(1NF)第二范式(2NF)第三范式(3NF)巴斯-科德范式(BCNF)第四范式(4NF)第五范式(5NF,又称完美范式)它们一级比一级严格,而且是像上图这种包含关系,即:2NF一定满足1NF、3NF一定满足2NF......三星索引?原创 2023-03-24 12:43:47 · 472 阅读 · 0 评论 -
【Tomcat】IDEA编译Tomcat源码-手把手教程
【Tomcat】IDEA编译Tomcat源码-手把手教程这一篇文章主要是带着大家在自己的IDEA跑起来一个Tomcat。使用的版本是Tomcat9.0.55 和 JDK8。大家可以使用下文给出的本人的Tomcat源码仓库地址自行下载!原创 2023-02-22 16:46:25 · 741 阅读 · 0 评论 -
【并发】并发锁机制-深入理解synchronized(二)
Mark Word用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64位的虚拟机中分别为32bit和64bit,官方称它为“Mark Word”。对象头的另外一部分是klass类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。32位4字节,64位开启指针压缩或最大堆内存数组长度(只有数组对象有)如果对象是一个数组, 那在对象头中还必须有一块数据用于记录数组长度。原创 2023-01-12 13:05:40 · 615 阅读 · 0 评论 -
【并发】深入理解JMM&并发三大特性(二)
我们在上一篇文章中提到了JMM内存模型,并发的三大特性,其中对做了详细的讲解!这一篇文章,将会站在继续深入讲解的相关问题!【并发】深入理解JMM&并发三大特性(一)_面向架构编程的博客-CSDN博客。原创 2022-12-27 18:39:19 · 1224 阅读 · 0 评论 -
【并发】深入理解JMM&并发三大特性(一)
并发三大特性是可见性、原子性和有序性!这就是并发的3个特性,它们同样也是并发编程Bug的源头!!!在并发编程中出现BUG,十有八九是这3个特性处理不当所导致的。Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果。原创 2022-12-24 03:16:30 · 1282 阅读 · 1 评论 -
【MySQL】史上最全的MySQL高性能优化总结
本人之前写过许多关于MySQL性能优化的文章,在这里会将它们做一个大串讲~这里主要是讲解MySQL底层数据结构,索引优化,事务及其相关特性,MVCC机制,BufferPool缓存机制等内容。原创 2022-12-19 03:05:27 · 1408 阅读 · 0 评论 -
【并发】深度解析CAS原理与底层源码
CAS全称是(Compare And Swap,比较并交换),通常指的是这样一种原子操作(针对一个变量,首先比较它的内存值与某个期望值是否相同,如果相同,就给它赋一个新值)CAS可以看做是乐观锁(对比数据库的悲观、乐观锁)的一种实现方式,我们稍后要讲的Java原子类中的递增操作(i++)就通过CAS自旋实现的。CAS是一种无锁算法,在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步!原创 2022-12-10 20:21:17 · 783 阅读 · 0 评论 -
【并发】深入理解Java线程的底层原理
操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。线程,有时被称为轻量级进程,是操作系统调度(CPU调度)执行的最小单位。Java 语言中线程共有六种状态,分别是:NEW(初始化状态)RUNNABLE(可运行状态+运行状态)BLOCKED(阻塞状态)WAITING(无时限等待)TIMED_WAITING(有时限等待)TERMINATED(终止状态)原创 2022-11-29 22:15:19 · 1117 阅读 · 0 评论 -
【并发】Java并发线程池底层原理详解与源码分析(下)
这里只会打印会前30个任务(10+10+10=30),由于在3s内核心线程和临时线程都在忙碌中,队列也满了,按照ThreadPoolExecutor默认的策略会抛出异常!按照线程池的工作顺序,会先分配10个核心线程(1~10),再装满队列(11~20),最后分配临时线程(21~30);执行逻辑是核心线程和临时线程会先把“手头上”的任务处理完,才会去处理队列里的任务,这就是队列里的任务(11~20)最后打印的原因!!!原创 2022-11-27 20:31:01 · 500 阅读 · 0 评论 -
【并发】Java并发线程池底层原理详解与源码分析(上)
线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。Executors 返回的线程池对象的弊端:1) FixedThreadPool 和 SingleThreadPool:允许的请求队列长度为 MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。2.CachedThreadPool:允许的创建线程数量为 MAX_VALUE,可能会创建大量建大量的线程,从而导致 OOM原创 2022-11-27 01:05:45 · 695 阅读 · 0 评论 -
IDEA调试并运行Spring源码
IDEA中调试Spring源码!!!想要成为一名优秀的开发人员,不是光光看看“八股文”,背背面试题就好的。是要去深入了解框架源码的底层是如何实现的?用了什么设计模式?为什么要使用这种设计模式?有什么好处?当然,在此之前,去Spring官网下载源码到本地,调试源码,把它运行起来是第一步!原创 2022-11-09 23:20:00 · 2314 阅读 · 4 评论 -
【MySQL】深入理解MVCC与BufferPoll缓存机制
MVCC就是多版本并发控制机制MySQL在隔离级别下如何保证事务较高的隔离性?同样的SQL查询语句,就算对数据有也当前事务SQL语句的查询结果。在和这两个隔离级别下,它们的隔离性都是通过MVCC机制来实现的!而也可以保证,但是是通过加锁互斥来实现的!有时候连select,也要加上读锁!性能是相当的低!我们最常用的还是这个隔离级别!MVCC机制的实现就是通过read-view机制与undo版本链比对机制,使得不同的事务会根据数据版本链对比规则读取同一条数据在版本链上的不同版本数据。原创 2022-11-08 23:57:10 · 805 阅读 · 0 评论 -
【MySQL】深入理解MySQL事务隔离级别与锁机制
尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁合理设计索引,尽量缩小锁的范围尽可能减少检索条件范围,避免间隙锁尽量控制事务大小,减少锁定资源量和时间长度,涉及事务加锁的SQL尽量放在事务最后执行尽可能低级别事务隔离原创 2022-10-31 02:13:14 · 1176 阅读 · 2 评论 -
【MySQL】MySQL数据类型选择 与 阿里巴巴MySQL规范解读概要
(1)小数类型为 decimal,禁止使用 float 和 double(2)如果存储的字符串长度几乎相等,使用 char 定长字符串类型(3)单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表(4)业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引(5)超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致;多表关联查询时, 保证被关联的字段需要有索引。(6)页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。原创 2022-10-29 14:21:06 · 500 阅读 · 0 评论 -
【MySQL】MySQL索引优化实战(下)
对于count(*) ,MySQL并不会把全部字段取出来,而是专门做了优化,不取值,按行累加,效率很高,所以不需要用count(列名)或count(常量)来替代 count(*)!!!嵌套循环连接 NLJ算法:一次一行循环地从第一张表(称为驱动表)中读取行,在这行数据中取到关联字段,根据关联字段在另一张表(被驱动表)里取出满足条件的行,然后取出两张表的结果合集。基于块的嵌套循环连接 BNL算法, 8.0.20之后 BNL 被废了,用哈希连接代替!原创 2022-10-27 01:40:00 · 793 阅读 · 4 评论 -
【MySQL】MySQL索引优化实战(上)
对于辅助的联合索引(name,age,position),正常情况按照最左前缀原则这种情况只会走name字段索引,因为根据name字段过滤完,得到的索引行里的age和position是无序的,无法很好的利用索引。在MySQL5.6之前的版本,这个查询只能在联合索引里匹配到名字是 'LiLei' 开头的索引,然后拿这些索引对应的主键逐个回表,到主键索引上找出相应的记录,再比对age和position这两个字段的值是否符合。MySQL 5.6引入了索引下推优化。原创 2022-10-22 17:25:22 · 952 阅读 · 15 评论 -
【MySQL】SQL底层执行原理详解
大体来说,MySQL 可以分为 Server层和存储引擎层(支持 “插拔”)两部分。Server层。主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能。Store层。存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。原创 2022-10-07 18:05:02 · 1822 阅读 · 0 评论 -
【MySQL】Explain详解与索引最佳实践
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句 或 是结构的性能瓶颈。在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL。注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中。原创 2022-10-01 19:15:07 · 1415 阅读 · 0 评论 -
【MySQL】深入理解MySQL索引底层数据结构与算法
索引是帮助MySQL高效获取数据的的。排好序这三个字其实就是对索引最好的形容和体现。我们可以简单把索引比喻成为书本的目录页,当然这么说太过于抽象,并没有把索引的底层特性说明白,下面我们将依次分析这些数据结构,来说明索引究竟是什么?!原创 2022-09-29 01:17:41 · 2579 阅读 · 3 评论 -
【Tomcat】Tomcat整体架构及其设计精髓分析(下)
Tomcat 是怎么确定请求是由哪个 Wrapper 容器里的 Servlet 来处理的呢?Mapper 组件里保存了 Web 应用的配置信息,容器组件与访问路径的映射关系。首先,连接器监听到该请求(监听8080端口)然后,通过父组件Service找到Engine,对该请求进行处理(Service与Engine是一对一的关系,找到了Service,就可以确定是哪一个Engine)通过 “ localhost ” 找到对应的 host 。再通过访问路径path,找到对应的Context,对应的Wrapper原创 2022-08-28 21:32:16 · 416 阅读 · 0 评论 -
【Tomcat】Tomcat整体架构及其设计精髓分析(上)
Tomcat 设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责内部处理。处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。加载和管理 Servlet,以及具体处理 Request 请求。连接器需要完成 3 个高内聚的功能:网络通信。应用层协议解析。Tomcat Request/Response 与ServletRequest/ServletResponse 的转化。...原创 2022-08-23 02:05:06 · 1316 阅读 · 1 评论