自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(599)
  • 问答 (4)
  • 收藏
  • 关注

原创 4、DDD架构建模(实现面向对象模型(停车场案例))

根据我们的需求输入我们面向对象领域模型uml,(是没有发生系统改变,但是我们若是放置到查询模块就把逻辑泄漏出去了,而且此并不是一个复杂查询所以此处放置到命令模块)进场,出场,付费事件可以得出。由进场出场事件可以得出。进场出场失败事件得出。

2024-03-10 14:29:22 254

原创 3、DDD与CQRS(命令与查询分开)

CQRS(命令和查询职责分离)职责分离(架构上做分解,也就是一个查询模块,一个命令模块(查询模块依赖命令模块))1、查询模块依赖命令模块我们一般都是稳定的去依赖不稳定的了,查询模块是稳定的,命令模块是不稳定的了2、查询和命令模块,不是简单的读写分离,用来构造一些什么需要读取数据结构的也是属于查询模块的(也就是组装也是在查询模块来做的)3、查询模块和命令模块使用的数据库或者表可以相同也可以不相同,甚至与可以是不同的类型数据库

2024-03-09 17:39:11 412

原创 2、DDD六边形架构

代码名称清晰,代码参数清晰我们不能根据参数是如何组装数据的debug才知道这个代码是干什么的,例如代客下单,那么我们需要命名为createOrderForCustomerBySystem(CustomerID),而不能是createOrder(id)这样(RPC调用)就会很不清晰。我们得debug才知道情况

2024-03-09 17:38:00 216

原创 1、DDD架构核心方法论

软件设计应该被领域来驱动(也就是领域驱动模型,模型驱动软件设计)领域: 产品需求的问题域模型:是具体写代码设实体类前的挖掘需求和如何设计的考量思考,其中的产出可能就是我们的uml图,或者就在我们脑海中没有具体的uml产出。软件设计: 具体的写实体类了,写对应方法了如何来解释上面的这句话,软件设计就是我们要写的代码,模型就是我们再写代码前的思考架构建立的模型。例如,我们的整体产品是创建一台全知全能的机器人,其中这个机器的一个领域就是说话,那么我们就对说话这个功能进行建模,其中需要机器人id来定位机器人

2024-03-09 15:04:24 352

原创 11、高性能架构(CAP理论)

在分布式系统中,在其中的读写操作中,我们想要操作的有三种特性(一致性(C)、可用性(A)、分区容错性(P))但是我们只能保证其中三者中的两个,另外一个是肯定会被牺牲的一致性(C)Consistency :就是对应我们客户端来说每次从数据库得到的都是最新的数据,写的什么数据,我就需要读到什么数据。可用性(A)Availablity :一个好的节点(服务器或者说数据库),在合理的时间返回正确的响应(不能是错误的响应的超时的响应,不然这个节点就不是一个好的节点了)分区容错性(P)Parttion Toler

2023-09-16 22:03:10 48

原创 22、7大参数自定义线程池(核心线程数,最大核心线程数。。。拒绝策略(4种))

第二种拒绝策略:(CallerRunsPolicy(哪来的去哪里))这里我们是main线程创建的,所以就是main线程去处理。第一步:5个人进去(2个核心数处理,3个再阻塞队列里面,最大5个个核心线程数(3个在等待阻塞队列满了唤醒))第三个拒绝策略(DisCarPolict(队列满了,丢掉任务(不处理)不会抛出异常))第二步:进去6个人(就会使用2个核心线程和,一个最大线程数里的了,(3个再阻塞队列里))7大参数模型:(这里也说下线程池的运行逻辑)走this方法里(可以看到有7个参数)

2022-11-16 15:54:06 1055

原创 9、8锁现象彻底的理解锁(锁的只有两个东西,一个是对象,一个是Class模板(static修饰))

问题三:(我们在资源类中在给他一个没有锁的方法。问题7:(一个静态同步方法(static syn(休眠4s)),一个普通同步方法(syn),然后只有一个对象,两个线程使用)(先打电话,再等4s输出发短信)问题8:(一个静态同步方法(static syn(休眠4s)),一个普通同步方法(syn),然后两个实例对象)(还是先打电话,再等4s才是发短信)问题4:(我们准备两个对象,一个线程让对象1去调用发短信(还是睡眠4s的),一个线程让对象2去调用打电话)(这里是先打电话再等4s输出发短信了)

2022-11-15 09:28:30 219

原创 48、Nio(Io模型(异步(异步和同步)))

异步是没有阻塞的,只要异步非阻塞。!!!场景:(完成一次数据交流)电话是同步的:什么交数据交流,一来一回才叫交流。这里的要确定接电话就是获取结果(完成交流),这里是一个线程。微信聊天是异步的:一个人发消息过来是一个线程,我们不用确定接不接消息。我们再回消息才是完成数据交流(两个线程)!!!!我们这里是看前面的阻塞/非阻塞/多路复用是同步还是异步的。例如阻塞是同步的就是同步阻塞。第一步:同步阻塞(阻塞io是同步的),是自己线程发起read,数据复制后还是给的前面的线程(自己得结果所以是同步的)

2022-11-14 17:26:56 337

原创 47、Nio(Io模型(多路复用))

多路复用(最开始就是一个单线程加selector)在select阻塞(等待事件)后,返回的是一堆事件(而不是前面阻塞io一个事件一个事件的返回了),然后就让他再下面循环里全部处理完了。所以他就不用前面的等待连接,等待数据了(select前面是已经等待事件完成了,我们select后只需要马上向下运行即可(不需等待了))。我们在等待事件的时候将所有的等待了。(若是单线程其中,虽然返回的也是一批事件,循环处理,但是其中处理的时候还是一个一个事件处理的,阻塞一个后面也会阻塞,所以我们加多线程去分别处理事件)!!

2022-11-14 17:24:20 174

原创 2、Jvm类加载器和双亲委派机制

双亲委派机制(我们创建一个类,类加载器收到这个类加载的请求,他会先向上找类(委托)),找到后再从最上上面检查是否能够加载这个类,能加载就结束,就使用这个类加载器,若无法加载就抛出异常,让子加载器加载)重复步骤。流程是只有当我们的类被委托到最上面再往下查找加载都没有才会是我们自己的AppClassLoader加载我们自己写的类,然后执行main方法。实践2(可以用我们Student类下面的main方法打印类对象的toSting方法)实践1、(无法用我们写的Sting类的main方法)

2022-11-08 08:48:06 140

原创 1、SpringBoot多环境开发配置(开发/测试/生产)

SpringBoot多环境开发配置(开发/测试/生产)

2024-03-30 23:32:53 336

原创 QPS、TPS、RT、并发数

QPS(Queries Per Second):每秒查询数,指的是系统在单位时间内处理的请求数量。QPS通常用于衡量系统的处理能力,特别是在高并发情况下,能够反映系统的性能水平。在网络领域,QPS常用于评估服务器的负载能力,对于网站、API等服务来说,QPS越高,系统的吞吐量就越大,性能就越好。TPS(Transactions Per Second):每秒事务数,指的是系统在单位时间内完成的事务数量。事务可以是数据库的一次读写操作、网络请求的一次处理等。

2024-03-24 22:45:57 919

原创 1、数据脱敏方案

数据脱敏就是将数据展示进行转换用我们的脱敏符号展示,例如手机号1234,前端展示为1*我们要是一个一个的用序列化器那就很麻烦了,所以我们使用一个自定义注解将各种序列化规则集成一下@JacksonAnnotationsInside注解的功能:注解不关注下面的类,而是上面的注解,我们就是要使用@JsonSerialize( using = DesensitizeSerialize.class)来进行序列化器。我们想要强调是这个其表明是JackSon这里包下面的处理json的。/*** 一个强大的各种序列化器*/

2023-12-31 16:01:16 782

原创 49、62. 不同路径(动态规划)

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。网格的左上角 (起始点在下图中标记为 “Start” )。从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右。3. 向下 -> 向右 -> 向下。问总共有多少条不同的路径?

2023-11-05 21:53:13 106

原创 48、746. 使用最小花费爬楼梯

一旦你支付此费用,即可选择向上爬一个或者两个台阶。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。- 支付 15 ,向上爬两个台阶,到达楼梯顶部。- 支付 1 ,向上爬一个台阶,到达楼梯顶部。你将从下标为 1 的台阶开始。你将从下标为 0 的台阶开始。

2023-11-05 21:26:45 109

原创 47、70. 爬楼梯(动态规划)

你有多少种不同的方法可以爬到楼顶呢?1. 1 阶 + 1 阶 + 1 阶。有两种方法可以爬到楼顶。1. 1 阶 + 1 阶。有三种方法可以爬到楼顶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。

2023-11-05 21:26:12 99

原创 2、分布式文件系统MinIO(EC码(冗余恢复)和文件存储结构)

minio如何保证高可靠性(就是用冗余了,多存几份数据,一个节点挂掉了的话,那么还有数据了),以及判断源文件是否损坏(使用的是我们的highwayhash(我们直接进文件的hash都没有去用到md5(也即时Bit Rot机制))),我们知道的我们可能最常用的判断源文件是否被损坏我们可以校验前后问价的MD5值了,若是md5值不同,那么就是被损坏咯纠删码EC(做冗余恢复的)就是一种算法了,将文件编译为一种二进制文件这种,我们通过这个编译出来的二进制问价和前面的冗余出来的多个原始文件,存在这个二进制文件就可以恢

2023-10-25 23:09:02 432

原创 1、分布式文件系统MinIO(对象存储(文件、图片、音乐各种非结构化数据))

MinIO是一款对象存储服务MinIO的特点兼容亚马逊S3的云储存服务接口,十分方便上云适合于存储大量给结构化数据:图片、视频、日志文件。。。minio是一个轻量的服务,很小的一个文件,可以直接命令启动(go实现的)

2023-10-25 23:07:33 291

原创 52、软件设计原则(合成复用原则(复用))

继承复用优点:简单易实现继承复用缺点:破坏了类的封装性,因为继承会将父类的实现细节暴露给子类(子类可以继承重写父类功能),父类对子类完全透明,又叫白箱复用子类和父类的耦合性高,父类的任何改变都会导致子类的实现发生变化,不利于后面的扩展和修改复用灵活性低,从父类继承的实现是静态的,是编译的时候就已经定义,运行时是不会发生任何改变的合成复用优点:维护了类的封装性,因为成员变量的内部细节是新对象看不见的。又叫黑箱复用对象之间的耦合度低,可以给类对象抽出一层接口,我们类中放置的是这个接口的实现类对

2023-10-05 12:01:12 108

原创 51、软件设计原则(迪米特法则(代理))

首先分析一下粉丝、公司、明星和经纪人的关系都为聚合关系,因为其三者是项目独立的,没有经纪人类将三者聚合起来都没有任何作用的只是对象而已,所以经纪人类控制着三者对象的生命周期。为聚合关系(实现+空菱形)

2023-10-05 12:00:22 63

原创 50、软件设计原则(迪米特法则(代理))

概念: 最小知识原则,你和直接的朋友交谈,不和陌生人说话。也就是我们说的找中介如果两个软件实体,无须直接通信的话就不应该发生直接的互相调用,可以使用第三方转发调用。(降低类之间的耦合性,提高模块的独立性)朋友有那些:当前对象 和 对象本身(类和自己类对象)当前对象 和 成员对象(类对象和里面的成员对象)当前对象 和 当前对象创建的对象(类和在类里面创建的对象)当前对象 和 当前对象的方法参数(类和自己对象创建的方法参数?)

2023-10-05 11:59:28 59

原创 49、软件设计原则(接口隔离原则)

将其一个大的接口拆分为多个接口,然后实现类按照自己的需求多实现自己的接口(类是可以实现多个接口的)

2023-10-05 11:58:35 44

原创 48、软件设计原则(接口隔离原则)

概念:客户端被迫不应该依赖他不使用的方法,一个类对另一个类的依赖应该建立在最小的接口上例如:我们有一个类里面有三个方法,我们客户端现在需要这个类了,于是我们在客户端中创建其成员变量使用,但是现在就存在一个问题了,若是我们的一个新用户只想要使用其中的两个方法?那我们可能就需要去重新创建类了。不能复用之前有的功能就很操蛋了

2023-10-05 11:57:46 34

原创 47、软件设计原则(依赖倒转原则)

给每个底层模块抽象出一个接口,这样我们若是想要使用新的cpu,就只需要在测试类中new新的cpu对象放进Computer的方法就行了,没有改动Computer

2023-10-05 11:56:46 29

原创 46、软件设计原则(依赖倒转原则)

依赖倒转原则(是开闭原则的具体实现)概念:高层模块不应该依赖底层模块,高层模块和底层模块都应该依赖细节(也就是底层模块抽取出来的父接口,或者抽象类),细节应该依赖抽象。也就是说我们应该对抽象进行编程,而不是对具体的实现进行编程。例如:其中A类里面有B类的成员变量,也就是A类依赖于B类,A类也就是高层模块,B类也就是底层模块(一个具体的类)。我们应该将B类抽象出一个接口或者一个抽象类出来,这样我们A类和B类都去依赖这个接口。

2023-10-05 11:54:33 41

原创 1、关于JuiceFS整合MinIO的解析(分布式文件系统)

一个分布式文件系统,JuiceFS 会将数据格式化以后存储在对象存储,同时会将文件的元数据存储在元数据引擎。JuiceFS 采用多引擎设计,目前已支持 Redis、TiKV、MySQL/MariaDB、PostgreSQL、SQLite 等作为元数据服务引擎。

2023-10-02 16:12:10 795

原创 45、软件设计原则(里式替换原则)

重新设计(正方形不是长方形,违反里式替换原则)思路:我们为了解决问题,这里的操作是给其进行抽象出一个四边形接口,斩断正方形和长方形的继承关系,都变为四边形接口的实现类。(感觉有点问题,里式替换应该还是继承原则,只是子类不重写父类方法了)UML类图两个子类(实现关系:虚线+虚线三角形)测试类(依赖关系:虚线+箭头(其中的方法参数用到了接口和长方形类))

2023-10-01 23:24:23 40

原创 44、软件设计原则(里式代换原则)

里式代换原则概念:任何基类可以出现的地方(父类),那么子类一定也可以出现,也就是说子类继承父类的时候,应该扩展父类没有的方法,但是最好不要重写父类的方法。多态使用时候容易出现错误经典错误案例(违反里式代换原则)正方形不是长方形,众所周知正方形是长方形,其中长方形父类出现的地方,其正方形应该也可以替换父类长方形运行

2023-10-01 22:40:16 40

原创 43、软件设计原则(开闭原则实践)

软件设计原则(开闭原则实践)

2023-10-01 22:39:14 38

原创 42、软件设计原则(开闭原则)

开闭原则概念:对扩展开发,对修改关闭(也就是我们存在抽象接口或者抽象类,当我们想要添加功能的时候只需新增接口的新的实现类而不是只有一个类,去里面修改类的方法加什么if,else啊)实现形式: 接口(接口+实现类(实现关系))或者抽象类(抽象类+子类(继承关系))例如:我们搜狗输入法,其中我们想要加一个新的皮肤,我们发现每个皮肤都有一个共同点(那就是输入法的背景、窗口颜色、声音等等),我们将其抽象为一个抽象类AbstrackSkin(这里使用的是抽象类的形式来实现,而且根据阿里巴巴开发规范,其中抽象类前

2023-10-01 22:38:10 36

原创 41、UML类图(依赖关系、继承关系)

依赖关系(箭头+虚线(使用类指向被依赖的类))• 性质: 依赖是一种使用关系,对象之中耦合度最低的关联方式也叫做临时性关联• 概念: 一个类的局部变量、局部方法的参数、静态方法的调用来访问另一个类(也就是需要使用另一个类的方法来完成些东西)继承关系 Extend(实线的空心三角(子类指向父类))• 性质: 是耦合度最大的一种关系,是父类和子类的关系• 概念: 可以通过面向对象的继承extend来实现继承关系(泛化关系)

2023-10-01 22:37:00 65

原创 40、UML类图(聚合关系和组合关系)

聚合关系(一个空白菱形实线(部分指向整体))性质: 是一个强关联关系,是整体和部分之间的关系概念: 成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在,例如:学校和老师的关系,其中学校包含了老师,但是若是学校停办了,其中老师还是存在的没有影响,也就是说其中只是学校这个类其中存在老师这个类的对象为成员对象

2023-10-01 22:35:58 144

原创 39、UML类图(类和类之间的关系)

uml关系(三大类)关联关系(三大关系)一般关联关系单向关联 : 一个实心三角形+实线(持有成员变量类指向其中的成员变量类)双向关联 : 一条实线自关联 : 一条自己指向自己的单箭头实线聚合关联关系: 一个空白菱形+实线(部分指向整体)组合关联关系: 一个实心菱形+实线(部分指向整体)依赖关系: 箭头+虚线(类执行被依赖类)继承关系: 空白三角形 + 实线(子类指向父类)实现关系: 虚线三角形 + 虚线(实现类指向接口)

2023-10-01 22:35:04 46

原创 38、UML类图表示法(类图的规范和类图中符号的意义)

UML类图中的三大结构类名属性方法类图中的三大符号(属性和方法中的三大符号)+ :表示public- :表示private# :表示protected标准写法:(【表示可以省略】最好还是写上)属性写法标准:可见性+名称+:+类型+【初始值】方法写法标准:可见性+名称(参数列表)+:【返回类型】

2023-10-01 22:17:24 79

原创 37、UML(类图)

UML概念:是设计软件的可视化语言,简单,而且图形化分类:用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等九种图类图类图是显示模型的静态结构(模型中的类之间的关系,和类的内部结构),类图不显示暂时性的信息

2023-10-01 22:16:31 23

原创 36、设计模式分类

三大分类创建型模式结构性模式行为型模式创建型模式用途:如何创建对象特点:将创建对象和使用分离成员:单例、原型、工厂方法、抽象工厂、建造者设计模式结构型模式用途:将类和对象按照某种结构组装为一个更大的结构成员: 代理、桥接、适配器、装饰、外观、享元、组合设计模式行为型模式用途:用于描述类和对象如何协作完成单个对象无法完成的任务,如何分配职责成员: 方法、策略、,命令、责任链、状态、中介者、迭代器、访问者、备忘录、解释器等设计模式

2023-10-01 22:15:32 25

原创 35、结构型模式(适配器模式(对象适配模式))

我们前面的问题是,若是其中SDCard 没有这个抽象接口了,只有下面的类,我们我们不就无法同时继承两个类了?解决思路我们只能继承一个那么我们就将我们适配器类的继承拿下来,我们在里里面使用构造方法或者注入进来实现之前的继承效果,那不就将继承的位置空置出来的嘛在new对象创建对象实例的时候调用了有参构造,用于初始化对象的状态。就是方法和类名相同的叫构造方法!方案一:可以用其中的这个set方法。方案二:可以用其中有参构造(

2023-09-26 00:28:59 40

原创 34、结构型模式(适配器模式实现方式类适配模式和不足之处)

定义一个适配器类实现实现当前业务的接口(三座充电),还要继承当前的存在的组件(二座充电器),也就是extend+implements 通俗一点的来讲就是我们要继承欧洲那边业务充电,还得是继承手中只有的二座充电器业务实践(电脑使用读卡器适配电话卡)现在我们手中只有一台电脑,这台电脑还只能读取SD卡,而我们现在想要他读取TF卡,那么我们就需要创建一个读卡器来进行适配将TF的内容进行读取

2023-09-22 00:35:20 38

原创 33、结构型模式(适配器模式结构)

三个主要角色:目标接口(Target):我们业务系统期待的接口或者抽象类,也就是我们想要使用的东西,例如:到国外我们就是想要用那个三座的插口了适配者接口(Adaptee):就是我们适配前已经存在的接口例如:就是我们在手中的国内的两座充电器了适配器接口(adapter):是一个转换器,通过继承或者引用其中的适配者对象,将其转换为目标接口,让客户还是按照目标接口访问使用我们

2023-09-22 00:33:02 22

原创 32、结构型模式(适配器模式概述)

将一个类的接口转换成客户希望的另一个接口,让两个原本因为接口不兼容的类能够一起工作使用适配器模式分类:类适配器模式:使用的是继承的模式,耦合度更高,然后若是我们想要适配的就是一个类的话就不行,上面有一层抽象接口我们才有办法对象适配器模式:使用的是聚合或者组合的模式耦合度更低一点

2023-09-22 00:31:56 25

JUC最详细思维导图,一次了解读写锁,可重入锁,Cas原理,volatile 关键字原理

JUC最详细思维导图,一次了解读写锁,可重入锁,Cas原理,volatile 关键字原理

2023-06-27

扫雷图片资源,需要自取 关注点赞收藏

扫雷图片资源

2023-06-04

扫雷源码,需要自取,关注点赞收藏

扫雷源码

2023-06-04

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

TA关注的人

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