自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 InnoDB原理

可以通过启用参数innodb_file_per_table来让每张表单独使用一个表空间,但每张表的表空间内存放的是数据、索引和插入缓冲bitmap页,其他诸如回滚信息、插入缓冲索引页、系统事务信息、二次写缓冲等还是存放在共享表空间中。数据页(B-tree node)、undo页、系统页、事务数据页、插入缓冲位图页、插入缓冲空闲列表页、未压缩的二进制大对象页、压缩的二进制大对象页等等。缓冲区中的数据页类型有:索引页、数据页、undo页、插入缓冲、自适应hash索引、InnoDB存储的锁信息等。

2023-05-18 10:17:32 92

原创 防腐层的重要性

在开发中,许多bug来自系统的状态不满足一致性,而造成这一点的原因就是对于会改变系统状态的行为没有做好校验,改善的方式有两种:1、使用rich model,每个领域对象一旦创建出来就保证其状态是一致的,并且对每个修改方法做好验证。也就是使用领域驱动设计,这应该是当前最好的方法2、添加防腐层,即便不使用ddd,也可以减少bug,在实体类与数据库直接加一层,保证其一致性...

2021-12-27 18:34:29 507

原创 对复用的深入理解

复用有两点优势,浅层优势是减少工作量,深层优势是,修改时只需修改一处。

2021-12-24 00:21:56 288

原创 给无聊的生活赋予意义

人总会有许多无聊的时刻,如何打发无聊便能影响生活的质量。在我看来,无聊的时刻可以被简单定义为不知道做什么的时刻。例如,当你无聊时想看一部电影,却又不知道看哪一部,于是随便找一部看了几分钟便不想看了,于是变得更加无聊。然后,你又想干脆出去购物、骑车、看书等等,但都没有足够动力。很显然,这些行为,都没有被赋予意义。行为被赋予意义是什么意思?当一种行为被赋予意义的时候,你就会有动力去执行这个行为。而动力来自何处?来自于你的期望,期望就是你想要达到的状态、你的目标、你的渴望、你的动力源泉。但是仅仅有期望是不够的

2021-12-06 23:13:44 92

原创 设计模式最简理解之代理模式

初次接触设计模式的时候,我们都以为它是一种魔法,像一本武林秘籍,研究透了就能成为一方高手。现在就来看看它有什么”魔力“。代理模式首先,在我们开发的时候归根结底,只有一种范式,那就是先创建对象,再调用对象的方法。即:A a = new A();a.method();现在引入代理模式,先看看要引入代理模式需要做哪些额外的工作。既然是代理模式,肯定少不了代理类A',而对于调用方来说,代理类A'和被代理类A是没有区别的,所以A'和A应该属于同一个抽象,那么需要引入接口Subject,A和A'

2021-12-02 11:43:34 69

原创 《The Java Virtual Machine Specification》阅读笔记

jvm规范代表了jvm的标准,任何jvm的实现都要遵守该标准,所以阅读jvm规范对理解jvm是有意义的。目录如图有目录大概可以猜测到:第一章是关于jvm的历史、背景与综述;第二章是jvm的结构第三章是编译第四章开始详细说明class文件的格式第五章是整个装载编译链接的步骤第六章是指令集第七章是助记符直接跳过第一章,看第二章很显然,这一章就是描述一下jvm中的结构。第一节粗略介绍了一下class格式,就是说编译后要被jvm执行的代码使用一种独立于操作系统..

2021-11-26 18:11:33 549

原创 对依赖关系的深入理解

在编程中,依赖关系随处可见,从类与类的依赖关系到模块与模块的依赖关系、应用与应用的依赖关系、操作系统与驱动程序的依赖关系,可以说依赖关系是编程中的一个主要属性。那么依赖究竟意味着什么呢?假如A依赖于B,那么就代表A不能离开B,A会用到B的功能,A知道B的存在。A为什么要去依赖B呢?有什么好处呢?很显然,好处是A可以使用B的功能。但随之而来的副作用是B一旦发生改变,A也得跟着改变。这样一来,A的稳定性和灵活性就会下降,要解决这一点,就要使用控制反转,此时的做法是。在A中声明要使用的功能的抽象,

2021-11-25 13:59:09 1564

原创 领域驱动设计的最终目的

去年这个时候我还津津有味地以Martin Fowler在《企业应用架构》中介绍的事务脚本方式写贫血模型代码。虽然现在仍然写贫血模型,但我一直研究着怎样去替换掉这种开发范式。贫血模型的问题是,它舍弃了面向对象编程的优势,使用面向对象语言编写面向过程代码。但是为何这种范式得以流行?主要原因在于关系型数据库。在面向对象编程中,对象与关系型数据库表之间存在天然的矛盾。假如表A与表B是一对多关系,表B中就会有表A的id,如果用面向对象的思维来理解,那么就是表B知道表A,表A不知道表B。然而在面向对象中,这种一对多

2021-11-23 21:43:51 380

原创 Netty探究

经常看到高并发云云,然后大多会提到netty,现在就研究一下netty源码。可以看到netty应该很复杂,有很多包。这里选择看看第一个netty-all。这里的bootstrap包应该就是启动包。先看看这几个类,一共有7个类AbstractBootstrap,Bootstrap,ServerBootstrap,及对应的config,再加一个FailedChannel。看注释,AbstractBootstrap是一个使启动Channel更容易地帮助类,它提供了提供了方法链...

2021-11-23 19:20:37 355

原创 OpenFeign源码分析二

spring初始化时会为每个声明的feignclient注册factorybean豆子,然后通过factorybean来生产feignclient豆子,所以现在关注点来到了FeignClientFactoryBean可以看到它实现了3个接口,factorybean接口声明这是一个factorybean;InitializngBean接口用来在该豆子初始化结束时嵌入自定义逻辑,和@PostConstruct注解的功能一样;ApplicationContextAware接口顾名思义,实现该接口的类能够意识到

2021-11-12 18:28:42 213

原创 OpenFeign源码分析

对于不熟悉的人来说,源代码一般是庞大而“杂乱”的,要阅读源代码需要先找到入口点。而openfeign的入口点在哪呢?当在项目中使用openfeig的时候是通过@EnableFeignClients注解来开启Openfeign,所以这个入口点就是@EnableFeignClients注解:可以看到其和普通的注解没啥大的不同,除了@Import(FeignClientsRegistrar.class)注解,很显然,@EnableFeignClients注解的核心便是@Import注解。当在某个spr

2021-11-10 19:11:55 1014

原创 Spring中的ImportBeanDefinitionRegistrar接口对@Import注解的扩展

在Spring中有ImportBeanDefinitionRegistrar接口,顾名思义,用于对@Import注解引入的bean做扩展。该接口如下:public interface ImportBeanDefinitionRegistrar { public void registerBeanDefinitions( AnnotationMetadata importingClassMetadata,

2021-11-08 19:04:27 267

原创 【领域驱动设计】领域模型的纯粹性和完备性

【领域驱动设计】领域模型的纯粹性和完备性一、结论***领域模型无法在不损耗性能的情况下同时具备纯粹性和完备性***二、什么是领域模型在我们开发一个应用之前,会找出业务场景中的一系列实体,然后用类来表示这些实体,这些类有属性和方法,互相联系彼此协作完成业务逻辑。这些类、类与类之间的关系便是领域模型。三、领域模型的纯粹性和完备性领域模型应该是纯粹的,即只依赖于其他领域模型和编程语言提供的基本数据类型。领域模型也应该是完备的,即业务逻辑不外泄,领域模型已经包含了所有业务逻辑。然而有的时候,这些领域

2021-09-25 00:50:54 368

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除