CComma's Blog

CComma's Blog

Connect the world

一、概述

AOP:
⾯向切⾯编程,让程序员关注于类中方法的某个切点上
在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复
默认情况下,Spring 会根据被代理对象是否实现接⼝来选择使⽤ JDK 还是 CGLIB。当被代理对象没有实现 任何接⼝时,Spring 会选择 CGLIB。当被代理对象实现了接⼝,Spring 会选择 JDK 官⽅的代理技术,不过 我们可以通过配置的⽅式,让 Spring 强制使⽤ CGLIB。

  • 通知(Advice):通知定义了切面是什么以及何时使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题
    • 前置通知(@Before):在目标方法被调用之前调用通知功能
    • 后置通知(@After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么
    • 返回通知(@AfterReturning):在目标方法成功执行之后调用通知
    • 异常通知(@AfterThrowing):在目标方法抛出异常后调用通知
    • 环绕通知(@Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为
  • 连接点(Joinpoint):要增强代码的地方(方法开始、结束、异常时等时机点)。只是候选点,最终是否增强代码得看后续逻辑
  • 切点(Pointcut):已经把增强代码加入到业务主线之后的连接点
  • 引入:引入允许我们向现有的类添加新方法或属性
  • 织入(Weaving):把增强应用到目标对象老创建新的代理对象的过程。Spring 采用动态代理织入,而 Aspect 采用编译期织入和类装载期织入
  • 切面(Aspect):切面 = 通知 + 切点。通知和切点共同定义了切面的全部内容
1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.1.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
Read more »

约定优于配置

Spring 和 SpringBoot

Spring 缺点:重配置
Spring Boot 优点

  • 起步依赖:将多个 maven 包的坐标整合到一起,并提供一些默认的功能
  • 自动配置:会自动将一些配置类的 bean 注册进 IoC 容器
Read more »

一、索引

1. B+ Tree 原理

1.1. 数据结构

B Tree: B Tree 指的是 Balance Tree,也就是 平衡树。平衡树是一颗查找树,并且 所有叶子节点位于同一层
B+ Tree: B+ Tree 是基于 B Tree 和叶子节点 顺序访问指针 进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。
非递减:
在 B+ Tree 中,一个节点中的 key 从左到右 非递减排列
image.png

Read more »

一、事务

1. 概念

事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚
image.png

Read more »

一、概述

1. IoC 与 DI

IoC: 控制反转。把对象创建(实例化、管理)的控制权交给外部环境(spring 框架、IoC 容器)
DI: 依赖注入。容器把被依赖对象注入到依赖对象中

2. BeanFactory 与 ApplicationContext 区别

2.1. BeanFactory 基础容器

  • 顶层容器(根容器),不能被实例化。
  • 加载配置文件,解析成 BeanDefinition 放在 Map 里。
  • 调用 getBean 的时候,从 BeanDefinition 所属的 Map 里,拿出 Class 对象进行实例化,同时,如果有依赖关系,将递归调用 getBean 方法 —— 完成依赖注入。

2.2. ApplicationContext 高级容器

  • 包含了基础容器的功能,当他执行 refresh 模板方法的时候,将刷新整个容器的 Bean。
  • 支持不同信息源头,支持 BeanFactory 工具类,支持层级容器,支持访问文件资源,支持事件发布通知,支持接口回调等
  • 即时加载、自己创建和管理资源对象、支持国际化、支持基于依赖的注解
Read more »

一、流与块

NIO 与 IO 主要区别: I/O 与 NIO 最重要的区别是 ** 数据打包 ** 和 ** 传输 ** 的方式。NIO 是 ** 非阻塞 ** 的。
I/O 以 ** 流 ** 的方式处理数据
NIO 以 ** 块 ** 的方式处理数据

1. IO 特点

  1. 一次处理一个字节数据:一个输入流产生一个字节数据,一个输出流消费一个字节数据
  2. 创建过滤器非常容易,链接几个过滤器,以便每个过滤器只负责复杂处理机制的一部分
  3. 速度慢

2. NIO 特点

  1. 一次处理一个数据块
  2. 速度快
  3. 面向块的 I/O ** 缺少 ** 一些面向流的 I/O 所具有的 优雅性和简单性

Read more »

一、概览

Java 的 I/O 大概可以分成以下几类:

  • 磁盘操作: File
  • 字节操作: InputStream 和 OutputStream
  • 字符操作: Reader 和 Writer
  • 对象操作: Serializable
  • 网络操作: Socket
  • 新的输入 / 输出: NIO
Read more »

一、概念

特点:

  • 书写一次,到处运行
  • 垃圾收集

解释执行: Java 源代码编译 -> 字节码 -> 运行时 JVM 解释器解释成机器码
** 编译执行:_ _**JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行

Read more »
0%