随笔分类 -  【阿肥的架构师之路】

摘要:一、概述 背景:我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 本质:数据库的多事务并发问题 应对措施: 事务隔离机制 锁机制 MVCC多版本并发控制隔离机制 二、事务及其ACID属性 ACID是 阅读全文
posted @ 2021-06-23 15:29 有梦想的肥宅 阅读(269) 评论(0) 推荐(0) 编辑
摘要:文章更新时间:2021/07/01 一、综合例子 联合索引第一个字段用范围不会走索引 第一个字段就是范围查询时,可能会导致全表扫而不用索引,因为mysql可能认为第一个条件就是范围查询会导致结果集很大,还要回表,索性就干脆直接全表查询了。 -- 第一个条件就用到范围查询,可能会导致全表扫描,而不走索 阅读全文
posted @ 2021-05-27 20:49 有梦想的肥宅 阅读(3421) 评论(0) 推荐(0) 编辑
摘要:一、MySQL内部组件结构 我们简单的通过一张图来分析MySQL内部组件结构: Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、 阅读全文
posted @ 2021-05-18 12:05 有梦想的肥宅 阅读(1549) 评论(0) 推荐(0) 编辑
摘要:一、引言 我们都知道索引是为了提高数据检索的性能,但是不合适的索引或者使用不当等因素,也会使得索引失效导致全表扫描,这篇文章简单汇总一下索引优化的原则。 二、索引优化规约【重要】 1、直接用索引列当查询条件 2、最左前缀法则 3、不在索引列上做任何运算操作 4、把带范围的查询条件放在sql最后 5、 阅读全文
posted @ 2021-05-12 11:22 有梦想的肥宅 阅读(251) 评论(0) 推荐(0) 编辑
摘要:一、引言 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析我们的查询语句有哪些可优化的地方,这样有助于我们优化原有的SQL,在执行SQL时也能做到心里有底。 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行 阅读全文
posted @ 2021-05-11 09:39 有梦想的肥宅 阅读(360) 评论(0) 推荐(0) 编辑
摘要:一、引言 MySQL是目前互联网公司常用的数据库之一,几乎所有业务都离不开对数据的操作,那么对于数据查询来说,索引又是一个绕不开的话题,所以从这篇文章开始重新认识一下MySQL的索引,也便于我们日后对于一些SQL的优化事半功倍。 二、索引 定义:索引是帮助MySQL高效获取数据的排好序的数据结构 索 阅读全文
posted @ 2021-05-08 20:19 有梦想的肥宅 阅读(442) 评论(0) 推荐(0) 编辑
摘要:一、Class常量池解析 定义:Class常量池可以理解为是Class文件中的资源仓库。 内容:Class文件中除了包含类的版本、字段、方法、接口等描述信息外, 还有一项信息就是常量池,用于存放编译期生成的各种字面量和符号引用。 我们可以通过一个命令来查看我们字节码文件的内容: 字面量 定义:字面量 阅读全文
posted @ 2021-04-27 17:54 有梦想的肥宅 阅读(1223) 评论(0) 推荐(0) 编辑
摘要:一、jps【查看进程id】 当我们启动了一个web应用程序时,可以通过jps查看其进程id,接着用各种jdk自带命令优化应用。 使用方式: 二、jmap【查看内存信息,实例个数以及占用内存大小】 查看内存信息 num :序号 instances :实例数量 bytes :占用空间大小 class n 阅读全文
posted @ 2021-04-23 18:24 有梦想的肥宅 阅读(591) 评论(0) 推荐(0) 编辑
摘要:一、G1垃圾收集器简介 为什么单独写一篇文章来记录G1垃圾收集器的学习过程呢?因为上一篇文章主要都是针对8G内存以下的服务器来进行总结的,G1的特点主要是针对大内存的机器,讲道理一般的公司也基本上用不到那么大的内存,所以这篇文章先单独记录一下吧~ 简介:G1 (Garbage-First)是一款面向 阅读全文
posted @ 2021-04-20 09:37 有梦想的肥宅 阅读(4486) 评论(2) 推荐(2) 编辑
摘要:一、垃圾回收算法概览 垃圾回收算法主要根据对象存活周期的不同将内存分为几部分。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集 阅读全文
posted @ 2021-04-15 18:25 有梦想的肥宅 阅读(713) 评论(0) 推荐(1) 编辑
摘要:一、对象创建的过程 我们先画一个流程图来看一下对象在创建的过程中,经历了哪些步骤: 类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那就会先执行相应的类加载过程。 分配内存 阅读全文
posted @ 2021-04-06 21:14 有梦想的肥宅 阅读(569) 评论(0) 推荐(0) 编辑
摘要:一、JVM内存结构概览 由上图可以看到,一个程序在运行时,JVM数据区主要有这几块组成部分,且每一块组成部分都可以通过设置对应的虚拟机参数来进行调优。 Spring Boot应用包运行时可以通过以下格式的指令进行启动(Tomcat启动直接加在bin目录下catalina.sh文件里): java ‐ 阅读全文
posted @ 2021-03-31 21:42 有梦想的肥宅 阅读(232) 评论(0) 推荐(0) 编辑
摘要:一、类加载的过程 我们通过一个流程图来进行分析: 类加载的步骤 类加载过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载 加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的 main()方法,new对象等等,在加载阶段会在内存中 阅读全文
posted @ 2021-03-26 16:01 有梦想的肥宅 阅读(1815) 评论(0) 推荐(0) 编辑
摘要:一、使用背景【动机】 当我们错误的使用继承来进行功能扩展时,在需求不断变更的同时可能会增加很多子类,且缺乏灵活性,那么这个时候我们可以考虑使用装饰器模式进行重构。 二、引入问题 举个栗子:我们需要做一个画图的接口 第一次需求已经实现了画图的基本功能,且分别拥有了两个子类实现“圆形”和“长方形”。 第 阅读全文
posted @ 2021-02-22 17:53 有梦想的肥宅 阅读(103) 评论(0) 推荐(0) 编辑
摘要:一、使用背景【动机】 当我们需要构建一种“通知依赖关系”时,如果这种业务模型耦合度太高的时候,就不能很好的抵御新需求的变化,此时就需要用到观察者模式来进行改造了。 二、代码演示 话题类【话题】 观察者接口【抽象的观察者】 观察者实现类【具体的观察者】 观察者测试类【模拟消息的发布-订阅】 三、模式讲 阅读全文
posted @ 2021-02-14 23:20 有梦想的肥宅 阅读(69) 评论(0) 推荐(0) 编辑
摘要:一、使用背景【动机】 在某一个任务中,某些对象算法可能多种多样且经常改变【如常见的多个if else块进行扩展】时,我们可以采用策略模式来优化。 二、痛点 不使用策略模式之前,代码if else块过多的时候,我们可以看出来这是一种结构化思想的“分而治之”的观念;对于面向对象编程时代,我们应该将其抽象 阅读全文
posted @ 2021-02-11 12:29 有梦想的肥宅 阅读(78) 评论(0) 推荐(0) 编辑
摘要:一、使用背景【动机】 在某一个任务中,其通常具有稳定的主干结构,而子步骤却可能会有很多可改变的地方。 二、代码演示 模板类 子类 测试类【模拟主流程调用】 三、模式讲解 解析:定义一个操作中的算法骨架【模板方法(稳定):TemplateDemo.order()】,而将一些步骤【抽象方法(变化):Te 阅读全文
posted @ 2021-02-08 14:58 有梦想的肥宅 阅读(79) 评论(0) 推荐(0) 编辑
摘要:一、为什么要面向对象设计 痛点:需求时刻变化,而变化又是系统复用的天敌。 优势:抵御变化。 目标:达到“接口标准化”的思想。 二、重新认识面向对象 理解隔离变化 宏观层面,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响降至最小。 各司其职 微观层面,面向对象的方式更强调各个类的“责任”。 阅读全文
posted @ 2021-02-05 18:09 有梦想的肥宅 阅读(87) 评论(0) 推荐(0) 编辑
摘要:一、概念和准备工作 什么是事务 定义:事务是数据库操作最基本的单元,逻辑上的一组操作,要么都成功,如果有一个操作失败则所有操作都失败。 典型场景:银行转账 阿肥转账100闷给阿靓 阿肥:-100 阿靓+100 事务的四个特性(ACID) 原子性:操作不可分割,要么都成功,一个失败则所有操作都失败。 阅读全文
posted @ 2021-02-05 11:03 有梦想的肥宅 阅读(123) 评论(0) 推荐(0) 编辑
摘要:一、学习设计模式 学习目标 理解松耦合的设计思想 掌握面向对象的设计原则 掌握重构技法改善设计 掌握GOF核心设计模式 什么是设计模式 描述在我们周围不断重复发生的问题,以及该问题解决方案的核心。 使用设计模式的目的 提高系统模块的可复用性。 二、面向对象的思维模型 底层思维模型 含义:向下的,目的 阅读全文
posted @ 2021-02-01 17:39 有梦想的肥宅 阅读(129) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示