- 博客(165)
- 资源 (5)
- 收藏
- 关注
原创 MySQL索引优化
InnoDB索引有聚簇索引和辅助索引。对于MySQL,NULL是一个特殊值,处理方式与其他值不同,不能使用=等运算符,对NULL做算术运算的结果还是NULL,count该字段时不会包括NULL等,NULL比空字符需要更多的存储空间。MySQL可以在含有NULL的列上使用索引(复合索引也可以),但是NULL和其他数据有区别,不建议列上使用NULL,建议给默认值0,空串。复合索引使用时遵循最左前缀原则,就是最左优先,即查询中使用到最左边的列,那么查询就会使用到索引,如果从索引的第二列开始查找,索引将失效。
2022-10-31 07:30:00 453
原创 explain执行计划详解
explain执行计划分析,是SQL优化的重要手段。id表示查询中执行 select 子句或操作表的顺序。id的执行顺序规则:id相同id不同下图中,age是普通索引,age=18时,表中有多条数据,访问类型为all,没有走索引;当age=22,表中只有一条数据时,访问是ref。表示查询时可能使用到的索引,并不是真正用到。表示查询时真正使用到的索引,显示索引字段名称。查询优化器根据统计信息估算查询到结果需要扫描多少行数据。rows越少效率越高。查询使用了索引的字节数据量。可以判断是否全部使用了组合索
2022-10-24 08:00:00 568
原创 MySQL索引原理
索引可以提升查询速度,会影响where查询,以及order by排序。MySQL索引类型如下:从索引存储结构划分:B Tree索引、Hash索引、FULLTEXT全文索引、R Tree索引从应用层次划分:普通索引、唯一索引、主键索引、复合索引从索引键值类型划分:主键索引、辅助索引(二级索引)从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)
2022-10-19 08:13:29 266
原创 MySQL架构原理4 InnoDB存储引擎结构(了解)
Iru list:表示正在使用的缓冲区,管理clean page和dirty page,缓冲区以midpoint为基点,前面链表称为new列表区,存放经常访问的数据,占63%;改性LRU:链表分为new和old两个部分,加入元素时并不是从表头插入,而是从中间midpoint位置插入,如果数据很快被访问,那么page就会向new列表头部移动,如果数据没有被访问,会逐步向old尾部移动,等待淘汰。dirty page:脏页,被使用age,数据被修改过,页中数据和磁盘的数据产生了不一致。
2022-10-14 07:45:00 571
原创 MySQL架构原理之存储引擎
是否需要事务?有,InnoDB是否存在并发修改?有,InnoDB是否追求快速查询,且数据修改少?是,MyISAM在绝大多数情况下,推荐使用InnoDB。
2022-10-11 22:53:05 141
原创 MySQL架构原理之执行机制
查询执行引擎负责执行SQL语句,此时会根据SQL语句中表的存储引擎类型,以及对应的API接口与底层存储引擎存或者物理文件的交互,得到查询结果并返回给客户端。如果采用查询缓存,MySQL就需要花费很大精力维持查询缓存数据的一致性,并发高时影响性能。毕竟数据库资源更加真贵。解析器(Parser)将客户端发送的SQL进行语法解析,生成“解析树“。检查“解析树“是否合法,例如这里将检查数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧。划,可以分为两类:静态优化(编译时优化)、动态优化(运行时优化)。
2022-10-10 07:30:00 303
原创 MQ和多线程异步有什么区别?
在系统调用时,我们可能使用MQ实现自产自销。此处直接使用多线程异步是否也可以实现?使用多线程异步也可以实现,但是不够优雅。主要在于多线程和MQ的区别。项目较大时优先使用MQ,否则都可以。
2022-10-03 19:37:15 2018
原创 kafka高性能的原因
Customer从broker读取数据,采用sendfile,将磁盘文件读到OS内核缓冲区后,直接转到socket buffer进行网络发送。Producer生产的数据持久化到broker,采用mmap文件映射,实现顺序的快速写入;partition顺序读写,充分利用磁盘特性,这是基础;批操作:批量读写、批量压缩。分区分段加稀疏索引。
2022-09-13 23:29:45 243 1
原创 请说一下浏览器从输入URL 到页面展示这个过程中都经历了什么?你能答出来吗?
请说一下浏览器从输入URL 到页面展示这个过程中都经历了什么?你能答出来吗?
2022-08-14 22:52:00 680
原创 服务化架构、SOA、微服务是什么关系
服务化架构是宏观目标,SOA与微服务架构是落地实现。服务化架构-强调对业务垂直拆分形成多个服务模块。然而分布式子系统没有标准,需要一个平台例如ESB,提供中心化服务,例如提供格式转换等,很重量级。微服务则给服务架构提供了标准。将单个应用程序拆分成多个小型程序,运行在自己的进程中,进行轻量级通信。...
2022-07-03 21:34:14 1797
原创 一篇详细实用的IDEA插件开发指南
工作时,创建项目module时,总是有很多模板代码(公司内部框架的一些样板代码),配置起来感觉浪费时间,就开发了个插件。
2022-05-12 22:18:43 6960
原创 分布式接口幂等性的实现
接口幂等性幂等性:f(f(x)) = f(x),幂等元素运行多次,还等于它原来的运算结果。在系统中,一个接口运行多次,与运行一次的效果是一致的。什么时候需要幂等性?并不是所有的接口都要求幂等性,要根据业务设计。重复提交、接口重试、前端操作抖动等场景,例如用户一次提交一个订单,支付时只能扣一次钱。幂等性策略核心思想:通过**唯一的业务单号**保证幂等性。非并发的情况,可以查询某个业务是否操作过,没有则执行(查询券是否使用过);并发时,操作过程加锁(分布式锁)。select操作,不对数据有影响,天
2022-05-08 21:28:45 1053
原创 SpringBean循环依赖
循环依赖所谓的循环依赖是指,A 依赖 B,B 又依赖 A,它们之间形成了循环依赖。1、三级缓存解决循环依赖Spring通过三级缓存的方式来解决循环依赖的问题。DefaultSingletonBeanRegistry类中的三个缓存变量//一级缓存:单例缓存池,用于保存所有的完整单例bean private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);//三级缓存:早期对
2022-04-30 15:54:28 1384
原创 插件开发暂时记录
package com.lzp;import com.intellij.openapi.actionSystem.AnAction;import com.intellij.openapi.actionSystem.AnActionEvent;import com.intellij.openapi.editor.Document;import com.intellij.openapi.fileEditor.FileEditorManager;import com.intellij.openapi.
2022-04-25 23:56:34 171
原创 代码面试之动态规划总结(持续更新中)
class Solution { public int fib(int n) { if (n == 0 || n == 1) { return n; } int[] dp = new int[n + 1]; dp[0] = 0; dp[1] = 1; for (int i = 2; i <= n; i++) { dp[i] = dp[i - 2] +
2022-04-14 12:39:44 630
原创 一次性编译通过Spring 5.3.x源码
之前看了一些博客和视频课程,都是使用Spring 5.1.x和gradle 5.6.3编译,他们编译的倒是很顺利,但本人实际操作总是缺少各种依赖,不可行。强烈推荐下面的博客https://www.cnblogs.com/zpstudy0/p/16096041.html一个小建议就是,查找配置博客时,按照时间选最近的,例如一周内,老博客很多没用,照着搞还浪费时间!...
2022-04-09 22:40:57 418
原创 Java数组foreach赋值不生效的问题
问题是我在完成LeetCode第23题时遇到的,我采用的是最小堆加上递归的解决方式。递归中,我对参数数组lists做了foreach,并且赋值,发现lists的值不会改变,结果是栈溢出。当改成直接修改数组元素时AC。for (int i = 0; i < lists.length; i++) { if (lists[i] != null && minVal == lists[i].val) { pre.next = lists[i]; li
2022-04-04 23:18:42 2979
原创 自定义IOC和AOP的实现思路
1、对象之间耦合的问题假设代码如下实现,service内部调dao层实现。public class TransferServiceImpl implements TransferService { private AccountDao accountDao = new JdbcAccountDaoImpl();}在Service层调上面语句,显然存在对象耦合问题,不符合面向接口编程的规则。假设Dao层接口有了新的实现方式,必须修改service层代码。如果不用new对象,则需要用反射创建
2022-04-04 21:45:30 482
原创 Mybatis核心流程源码分析
Mybatis启动过程// 1. 读取配置文件,读成字节输入流,注意:现在还没解析InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");// 2. 解析配置文件,封装Configuration对象。创建DefaultSqlSessionFactory对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().b
2022-04-01 00:32:57 260
原创 Mybatis层次结构与执行流程
Mybatis功能架构Mybatis的功能架构分为三层:API接⼝层:提供给外部使⽤的接⼝ API,调⽤数据处理层来完成具体的数据处理。MyBatis和数据库的交互有两种⽅式:a. 使⽤传统的MyBatis提供的API ;b. 使⽤Mapper代理的⽅式。数据处理层:负责具体的SQL查找、SQL解析、SQL执⾏和执⾏结果映射处理等,完成一次数据库调用操作。基础⽀撑层:负责最基础的功能⽀撑,包括连接管理、事务管理、配置加载和缓存处理,是基础组件。Mybatis的主要构件与层次结构总体执行流程
2022-04-01 00:30:31 649
原创 Mybatis缓存实现原理
Mybatis缓存mybatis提供了对缓存的支持,分为一级缓存和二级缓存,可以通过下图来理解:①、一级缓存是SqlSession级别的缓存,默认开启。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。②、二级缓存是mapper级别的缓存,基于mapper文件的namespace,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。一级缓存⼀级缓存到底是什么?⼀级缓存什么时候被创建
2022-03-28 07:45:00 1883
原创 Spring AOP实现原理
AOP使用三步走使用AOP主要分为三步:1)、将业务逻辑组件和切面类都加入到容器中;告诉Spring哪个是切面类(@Aspect)2)、在切面类上的每一个通知方法上标注通知注解,告诉Spring何时何地运行(切入点表达式)3)、开启基于注解的aop模式;@EnableAspectJAutoProxyAOP原理总结AOP原理:【看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什么?】debug思想从启动类入手,找到继承/实现关系的顶层,在顶层接口实现方法和自己手写的代码上
2022-03-08 09:29:31 287
原创 @SpringBootApplication到底帮我们做了什么
SpringBootApplication注解@SpringBootApplication,标识某个类上说明这个类是 SpringBorn的主配置类。@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan( excludeFilters = {@Fil
2021-09-02 07:44:19 530
原创 什么是微服务
2014 martin fowler提出。微服务是一种架构风格(服务微化)。一个应用应该是一组小型服务;可以通过HTTP的方式进行互通; 每一个功能元素最终都是一个可独立替换和独立升级的软件单元;微服务文档https://martinfowler.com/articles/microservices.html#MicroservicesAndSoa微服务增加了运维工作量。单体应用:通常将应用打成war包,放到Tomcat中执行即可。便于开发、测试、部署,扩展简单(多台服务器复制应用,使用负载均衡机
2021-09-01 08:04:35 135
原创 Spring Boot简介
Spring boot来简化 Spring应用开发,约定大于配置, 整合了整个Spring技术栈,是J2EE一站式解决方案。有点像门面模式。背景:J2EE笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。解决:Spring全家桶”时代。Spring Boot→J2EE一站式解决方案Spring Cloud→分布式整体解决方案优点:快速创建独立运行的应用,使用嵌入式的 Servlet容器,应用无需打成WAR包;简化开发,starter自动依赖与版本控制;方便集成主.
2021-09-01 08:03:13 144
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人