- 博客(31)
- 资源 (10)
- 收藏
- 关注
原创 【SpringBoot 005】 整合log4j2.xml 配置详解
如果启动时出现 Class path contains multiple SLF4J bindings ,说明还有多个jar 里面包含,需要排查移除。1、需要将 spring-boot-starter-web 中的默认日志系统排除。如果引入的jar 很多,可能其它包里面的也要排除。每一行都添加的注释。
2023-09-15 16:41:46 896
原创 【springboot 001】搭建 springboot 源码分析环境
本文以SpringBoot2.2.5版本为案例,介绍编译过程。2.3.0版本之前:使用Maven构建项目的。2.3.0版本之后:使用。1、修改pom 中的文件。
2023-08-23 11:24:19 303
原创 004_Mysql 之索引使用以及优化
也出现 Using index, 但是此时Extra中出现了 Backward index scan,这个代表反向扫描索引,因为在MySQL中我们创建的索引,默认索引的叶子节点是从小到大排序的,而此时我们查询排序时,是从大到小,所以,在扫描时,就是反向扫描,就会出现 Backward index scan。当字段类型为字符串(varchar,text,longtext等)时,有时候需要索引很长的字符串,这会让 索引变得很大,查询时,浪费大量的磁盘IO, 影响查询效率。所以需要针对于age也要建立索引。
2023-03-21 16:20:54 205
原创 003_Mysql之事务详解redo log、undolog 和 MVCC
1、不管是redo log 还是 undo log ,都需要在事务提交时写入磁盘文件。不同的加了Log buffer 缓存区,可以将随机读写变为顺序读写。
2023-03-18 11:38:01 862
原创 002_InnoDB引擎索引高度计算方法详解
如果B+树高度为3的话,那么这棵B+树的存放总记录数为:根节点指针数*单个叶子节点记录行数 = 16kb/14 * 16kb/14 * 16 大约2kw+数据。如果B+树高度为2的话,那么这棵B+树的存放总记录数为:根节点指针数*单个叶子节点记录行数 = 16kb/14 * 16 大约 1.8w+ 数据。假设主键ID为bigint类型,长度为8字节,而指针大小在InnoDB源码中设置为6字节,这样一共14字节,InnoDB 存储引擎默认一个数据页大小为16kb,非叶子节点存放(key,pointer),
2023-03-16 08:52:55 167
原创 001_InnoDB引擎详解
因为前面我们讲到过,hash索引在 进行等值匹配时,一般性能是要高于B+树的,因为hash索引一般只需要一次IO即可,而B+树,可能需 要几次匹配,所以hash索引的效率要高,但是hash索引又不适合做范围查询、模糊匹配等。InnoDB 存储引擎基于磁盘文件存储的,访问物理硬盘和内存,速度相差很大,所以,为了减少磁盘的访问,需要将经常访问的数据加载到缓存池,避免每次都访问磁盘,减少磁盘IO。为了保证页的连续性,• dirty page:脏页,被使用page,数据被修改过,也中数据与磁盘的数据产生了不一致。
2023-03-14 14:59:49 118
原创 011|JVM 老年代垃圾回收器CMS 的工作原理
CMS 垃圾回收的基本原理一般来说,老年代我们选择的垃圾回收器是 CMS,他采用的是 标记-清理 算法,其实就是,先通过追踪 GC Roots 的方法,看各个对象是否被 GC Roots 给引用了,如果是,那就是存活对象,否则就是垃圾对象。这种方法最大的问题是,会造成很多内存碎片。如果 Stop the World 然后垃圾回收会如何?CMS垃圾回收器采取的是垃圾回收线程和线程系统工作线程尽量同时执行的模式来处理。CMS 如何实现系统一边工作一边进行垃圾回收CMS ...
2020-08-24 11:20:43 849 1
原创 009|分析一次JVM多久会发生GC
分析的案例背景:公司研发的一个数据计算系统,日处理数据量在上亿的规模。是一个分布式部署的系统,每台机器大概每分钟执行100次数据提取和计算 每次大概需要计算10秒 每次大概提取1万条左右的数据到内存里面机器的配置:4核8G,JVM 内存给4G,其中新生代和老年代分别是 1.5G的内存空间。如下图,上面的图那么新生代多久会被塞满?假设,每条数据平均10个字段,可以认为每条数据在1KB 左右的大小,那么每次计算任务的一万条数据就差不多 10M 左右。按照 8:1:1 的..
2020-08-24 10:58:58 2193
原创 007|什么时候JVM 中一个对象会被回收
被哪些变量引用的对象是不能被回收的?JVM 中使用了一种可达性分析算法,来判断哪些对象是可以被回收的,哪些是可以被回收的。这个算法的意思,就是说对每个对象,都分析一下有谁在引用他,然后一层一层往上去判断,看是否有一个GC Roots。那么哪些可以作为 GC Roots:局部变量 -- 只要一个对象被局部变量引用,那么就不能被回收 静态变量Java 中对象的不同引用类型Java 中的不同引用类型分别是:强引用、软引用、弱引用和虚引用。1、强引用public clas.
2020-08-24 10:53:03 767
原创 005|JVM的分代模型:年轻代、老年代、永久代
为什么要分成年轻代和老年代?因为这跟垃圾回收机制有关,年轻代的对象,他们的特点就是创建之后很快就会被回收,所以需要一种算法而对于老年代里的对象,他们的特点是需要长期存在,所以需要另外一种垃圾回收算法,所以需要分成两个区域来放不 同的对象。什么说永久代?上图中的 方法区,就是永久代,永久代存放一下类的信息。...
2020-08-24 10:50:14 192
原创 003|Jvm 有哪些内存区域
整体流程的分析:首先,你的JVM 启动,就会先加载你的 Kafka 类到内存中,然后会有一个 main 线程,开始执行的你的Kafka中的 mian() 方法,mian() 方法会关联一个程序计数器,那么它执行到哪一行指令,就会记录在这里。然后,mian() 方法在执行的时候,会在main线程关联的 Java虚拟机栈里,压入一个 main() 方法的栈帧。接着,就会发现需要创建一个 ReplicaMabager 类的实例对象,此时会加载 ReplicaMabager 类到内存里...
2020-08-24 10:47:06 162
原创 04|索引初始
三种常见的索引模型1、哈希表2、有序数组3、搜索树哈希表一种以键—值,存储的数据结构,哈希的思路很简单,处理步骤就是把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。缺点:1、只适用于等值查询,区间查询效率低有序数组优点:1、在等值查询和范围查询中很好2、使用于静态索引引擎缺点:1、在需要更新数据的时候就麻烦了,你往中间插入一个记录就必须得挪动后面所有的记录,成本太高搜索树书中最经典的就是
2020-08-24 10:44:28 222
原创 02|类加载器到底是何方神圣
前面我们分析了,JVM 的整体的一个运行原理我们首先从“.java”代码文件,编译成 “.class” 字节码文件然后,类加载器把“.class”字节码文件中的类加载到JVM中,接着就是JVM 运行我们写好的那些类中代码。上面就是我们之前的分析类,下面我么着重分析其中的“类加载”过程,看看JVM 的类加载机制到底是怎么样的?1、JVM 什么情况下会加载一个类一个类从加载到使用,一般会经历下面的几个过程:加载 --> 验证 --> 准备 --> ...
2020-08-18 15:58:28 143
原创 01|我们的Java代码到底是如何运行起来的?
学习 JVM,那么得先明白我们平时写的代码,到底是怎么运行起来?首先,我们会写好一堆以 .java 结尾的代码文件,那么,我们也好的程序是如何部署到服务器呢?一般来说,我们会把代码打成“.jar”的jar 包,或者打成“.war”de war包。然后,把打成的 jar 包或者 war 包放到线上服务器去部署。这个部署就有很多种途径了,但是最基本的一种方式,就是通过Tomcat这类容器来部署代码,也可以是你自己手动通过 “java”命令来运行一个jar包中的...
2020-08-18 15:57:45 318
原创 05|策略模式
解决什么问题?利用它来避免冗长的 if-else 或者 switch 分支判断。策略模式,全称 Strategy Design Pattern,定义一簇算法类,将每个算法分别封装起来,让它们可以互相替换。策略的定义包含一个策略接口和一组实现接口。因为所有的策略类都实现了相同的接口,所以,客户端代码基于接口而非实现编程,可以灵活的替换不同的策略策略的作用主要还是解耦策略的定义、创建和使用。控制代码的复杂度。让每个部分不至于过于复杂。案例说明1、原始类package com
2020-08-18 13:47:47 139
原创 04|建造者模式
一、初始代码当参数变多之后,构造函数会变的及其复杂package com.geek.jeep.designpattern.build;import org.springframework.util.StringUtils;/** * @author guchangyuan * 当参数变多之后,构造函数会变得很复杂,变得及其难用; */public class ResourcePoolConfig { private static final int...
2020-08-18 13:46:06 118
原创 03|工厂模式
一、原始类有太多的if-else,语句。package com.geek.jeep.designpattern.factory;/** * @author guchangyuan * 演示工厂模式最原始的代码: * 根据不同的配置文件,选择不同的文件解析器 * 封装变化:创建逻辑有可能变化,封装成工厂类之后,创建逻辑的变更对调用者透明。 * 代码复用:????创建代码抽离到独立的工厂类之后可以复用。 * 隔离复杂性:封装复杂的创建逻辑,调用者无需了解如何创建对象。 * 控
2020-08-18 13:43:27 131
原创 02|单例模式
下面通过代码展示单例的4中实现方式一、饿汉式package com.geek.jeep.designpattern.singleton;import java.util.concurrent.atomic.AtomicInteger;/** * @author guchangyuan * 全局唯一类 * 饿汉式创建 * * 构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例; * 考虑对象创建时的线程安全问题; * 考虑是否支持延迟加载; *
2020-08-18 13:42:17 111
原创 01|设计模式之初始
设计模式一:初识目标:每天学习一个常用的设计模式创建型:单例模式工厂模式(工厂方法和抽象工厂)建造者模式结构型:代理模式桥接模式装修者模式适配器模式行为型:观察者模式模版模式策略模式责任链模式迭代器模式状态模式总共13个常用设计模式。...
2020-08-18 13:41:25 113
原创 003|事务到底可见不可见
一、事务的理解查看数据库的事务配置:mysql> show variables like 'transaction_isolation';+-----------------------+----------------+| Variable_name | Value |+-----------------------+----------------+| transaction_isolation | READ-COMMITTED |+-----------------
2020-08-18 09:21:13 457
原创 002|从更新到日志,数据库是如何恢复半个月前的数据的
日志:重做日志(redo log)和 归档日志(binlog)redo log1、Mysql 有一种技术叫 WAL : Write_Ahead Logging。即:先写日志,再写磁盘。是引擎层的日志2、redo log 的大小是固定,类似一种闭环,其中两个关键点是: write pos :当前记录位置 checkpoint:当前要擦除的位置write pos 和 checkpoint 之间空的部分,就是用来写数据的,一旦当 write pos 追上 checkpoin...
2020-08-18 09:20:19 266
原创 001|一条查询sql 的执行过程
连接器可以通过下面的命令,来查看连接状态。show processlistsleep 表示休闲状态,如果太长时间没有使用连接器就会断开,这个时间由:wait_timeout 控制,默认:8小时查缓存1、大部分情况下,可以禁用缓存设置 query_cache_type :DEMAND,默认禁用缓存而对于确定要使用缓存的sql, mysql 也提供了显示的指定方式,SQL_CACHE例如: SELECT SQL_CACHE * FROM tb...
2020-08-18 09:19:20 129
Spring+SpringMVC+mybatis+Echarts+maven 整合
2016-11-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人