计算机基础-基本原理-1、相关名词
1. 计算机基础字与字长 机器字长:CPU 一次能处理数据的位数,通常与 CPU 的寄存器位数有关。存储字长:存储器中一个存储单元 (存储地址) 所存储的二进制代码的位数,即存储器中的 MDR 的位数。指令字长:计算机指令字的位数。数据字长:计算机数据存储所占用的位数。 注:冯诺依曼机中,指令和数据同等重要,都存放在存储器中,并可按地址寻访。 通常早期计算机:存储字长 = 指令字长 = 数据字长。故访问一次便可取一条指令或一个数据,随着计算机应用范围的不断扩大,三者可能各不相同,但它们必须是字节的整数倍。 计算机中信息存储单位 计算机中的信息用二进制表示,常用的单位有位、字节和字。 1、位(bit):是计算机中最小的数据单位,存放一位二进制数,即 0 或 1。它也是存储器存储信息的最小单位,通常用“b”来表示。 2、字节(Byte):字节是计算机中表示存储容量的最常用的基本单位。一个字节由 8 位二进制数组成,通常用“B”表示。一个字符占一个字节,一个汉字占两个字节。其它常见的存储单位有: 存储容量的计量单位有字节 B、千字节 KB、兆字节 MB 以及十亿字节 G ...
性能调优专题-基础-1、JVM-异常处理
1. 异常表1.1. 异常关键字和接口-7、Throwable 1.2. 生成逻辑 没有 try-catch 或者 try-finally 的情况下,是不会生成异常表结构的,比如下面 2 种情况: ❕%%2133-🏡⭐️◼️异常表生成原理 ?🔜MSTM📝 一个方法加了 try-catch 或者 try-finally,才会在方法信息中生成方法表◼️⭐️-point-202302132133%% 异常类也是需要 GC 的 性能调优专题-基础-4、JVM-堆和GC理论 1.3. 生成位置在方法区中的方法信息中存放❕%%2134-🏡⭐️◼️异常表的位置 ?🔜MSTM📝 方法区中的方法信息中◼️⭐️-point-202302132134%% 性能调优专题-基础-3、JVM-方法区和3个池子 1.4. 异常处理 当一个异常被抛出时,JVM 会在 [当前的方法里的异常表中] 寻找一个匹配的处理,如果没有找到,这个方法会强制结束并弹出当前栈帧,并且异常会重新拋给上层调用的方法(在调用方法栈帧)。如果在所有栈帧弹出前仍然没有找到合适的异常处理,这个线程将终止。如果这个异常在最后一个 ...
分布式专题-3、事务失效
1. 失效原因1.1. Bean 是否是代理对象⭐️🔴1.2. 入口函数是否是 public 的⭐️🔴 AbstractFallbackTransactionAttributeSource#computeTransactionAttribute allowPublicMethodsOnly 方法由子类 AnnotationTransactionAttributeSource 实现,该子类方法中默认是 true,所以当你加了事务注解的方法不是 public 时,该方法直接返回 null 1.3. 是否支持事务数据库是否支持事务 (Mysql 的 Mylsam 不支持事务),行锁才支持事务 1.4. 切点是否配置正确1.5. 内部方法间调用导致事务失效⭐️🔴1.5.1. 解决方案 1再声明一个 service,自己注入自己,将内部调用改为外部调用 1.5.2. 解决方案 2因为 this 不是代理对象,可以配置 expose-proxy=”true”,就可以通过 AopContext.currentProxy() 获取到当前类的代理对象。 1SpuInfoServi ...
框架源码专题-Spring-8、BeanDefinition
1. BD 分类 2. BD 来源2.1. 配置类及其注入的 bean2.2. 指定的类路径3. RootBeanDefinition 逻辑流程⭐️🔴^f4b3wu https://www.bilibili.com/video/BV1Ap4y1D798/?spm_id_from=..search-card.all.click&vd_source=c5b2d0d7bc377c0c35dbc251d95cf204 35:19 3.1. 注册 Root BD入口 :new AnnotationConfigApplicationContext(MainConfig.class) 3.2. 创建 ConfigurationClassPostProcessor刷新第5步:invokeBeanFactoryPostProcessors()getBean ConfigurationClassPostProcessor ❕%%0827-🏡⭐️◼️ConfigurationClassPostProcessor 继承关系 ?🔜MSTM📝 继承 BeanFactoryPostProces ...
框架源码专题-Spring-7、扩展点
1. 扩展点分类1.1. Bean定义扩展点BeanDefinitionRegistryPostProcessorBeanFactoryPostProcessor 1.2. Aware类扩展点BeanNameAwareBeanClassLoaderAwareBeanFactoryAware 1.3. 生命周期的回调PostConstructInitializingBeaninit-methodPreDestroyDisposableBeandestroy-method 2. 扩展点解析https://www.processon.com/view/link/5f194e727d9c0835d38cc2cb 2.1. 总体概括1、Spring-基础 2.2. InstantiationAwareBeanPostProcessorhttps://juejin.cn/post/7068511224471748645https://mrbird.cc/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3Spring-BeanPostProcessor-Instantia ...
内功心法专题-设计模式-0、设计模式总结
1. 聚合接口或抽象类1.1. 可以调用其子类的方法1.1.1. 中介者模式⭐️🔴+ 构造导入 + 集合 +【2 个聚合】1 对 N 型[[内功心法专题-设计模式-20、中介者模式#2 2 UML]] 相当于相互聚合 代码:[[pages/002-schdule/001-Arch/001-Subject/013-DemoCode/design_patterns/src/main/java/com/itheima/pattern/mediator/MediatorStructure.java]] 1.1.2. 桥接模式⭐️🔴+ 构造导入 - N 到 N 型设计模式-10、桥接模式 代码: [[pages/002-schdule/001-Arch/001-Subject/013-DemoCode/design_patterns/src/main/java/ ...
并发编程专题-基础-19、Queue
1. JDK 原生并发队列在介绍 Mpsc Queue 之前,我们先回顾下 JDK 原生队列的工作原理。JDK 并发队列按照实现方式可以分为阻塞队列和非阻塞队列两种类型,阻塞队列是基于锁实现的,非阻塞队列是基于 CAS 操作实现的。JDK 中包含多种阻塞和非阻塞的队列实现,如下图所示。 队列是一种 FIFO(先进先出)的数据结构,JDK 中定义了 java.util.Queue 的队列接口,与 List、Set 接口类似,java.util.Queue 也继承于 Collection 集合接口。此外,JDK 还提供了一种双端队列接口 java.util.Deque,我们最常用的 LinkedList 就是实现了 Deque 接口。下面我们简单说说上图中的每个队列的特点,并给出一些对比和总结。 1.1. 阻塞队列阻塞队列在队列为空或者队列满时,都会发生阻塞。阻塞队列自身是线程安全的,使用者无需关心线程安全问题,降低了多线程开发难度。阻塞队列主要分为以下几种: ArrayBlockingQueue:最基础且开发中最常用的阻塞队列,底层采用数组实现的有界队列,初始化需要指定队列的容量。 ...
内功心法专题-设计模式-17、责任链模式
1. 模式定义又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者==通过前一对象记住其下一个对象的引用而连成一条链==;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。 2. 模式结构2.1. 模式角色 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。 客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。 2.2. UML⭐️🔴 2.3. 实现逻辑⭐️🔴 抽象处理者聚合自身作为成员变量nextHandler,表示后续处理者,并提供setter方法,由Client配置,比较灵活 定义处理请求的抽象方法,交给子类实现❕%%2215-🏡⭐️◼️责任链模式的核心逻辑?抽象处理者类,聚合自身,并提供setter方法,表示设置下一个处理者;抽象处理者类还定义 ...
内功心法专题-设计模式-18、状态模式
1. 模式定义 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换❕%%0724-🏡⭐️◼️主要解决的问题是什么?🔜📝 对象在不同状态下转换时输出不同行为的问题◼️⭐️-point-202301250724%% 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类 对==有状态的对象==,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 2. 模式结构⭐️🔴2.1. 模式角色 环境(Context)角色:也称为上下文,它定义了客户程序需要的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为。 具体状态(Concrete State)角色:实现抽象状态所对应的行为。❕%%0729-🏡⭐️◼️所有有 context 角色的设计模式?🔜📝 策略模式、状态模式、解释器模式◼️ ...
内功心法专题-设计模式-19、观察者模式
1. 模式定义⭐️🔴又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。❕%%1642-🏡⭐️◼️观察者模式是什么?定义了一种一对多的依赖关系,让一组观察者对象同时监听某一个主题对象,当主题对象状态发生变更时,通知这一组观察者对象,使得他们能够自动更新状态◼️⭐️-point-202301261642%% 2. 模式结构2.1. 模式角色⭐️🔴 Subject:抽象主题(==抽象被观察者==),抽象主题角色把所有观察者对象保存在一个集合里(如果是接口的话,则由具体主题维护这个集合),每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加、删除和通知观察者对象。 ConcreteSubject:具体主题(==具体被观察者==),该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。 Ob ...

