09 2021 档案

摘要:观察者模式(Observer Pattern)定义了对象之间的一对多依赖,让多个观察者对象同 时监听一个主体对象,当主体对象发生变化时,它的所有依赖者(观察者)都会收到通 知并更新,属于行为型模式。观察者模式有时也叫做发布订阅模式。观察者模式主要用 于在关联行为之间建立一套触发机制的场景 应用场景 阅读全文
posted @ 2021-09-27 20:43 狻猊的主人 阅读(92) 评论(0) 推荐(0)
摘要:装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,将功能附加到对 象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式 应用场景 用于扩展一个类的功能或给一个类添加附加职责。 动态的给一个对象添加功能,这些功能可以再动态的撤销。 案例 煎饼果子可以 阅读全文
posted @ 2021-09-27 20:42 狻猊的主人 阅读(101) 评论(0) 推荐(0)
摘要:适配器模式(Adapter Pattern)是指将一个类的接口转换成客户期望的另一个接口,使 原本的接口不兼容的类可以一起工作,属于结构型设计模式 应用场景 已经存在的类,它的方法和需求不匹配(方法结果相同或相似)的情况。 适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同 阅读全文
posted @ 2021-09-27 20:07 狻猊的主人 阅读(123) 评论(0) 推荐(0)
摘要:定义 模板模式通常又叫模板方法模式(Template Method Pattern)是指定义一个算法的骨 架,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结 构的情况下,重新定义算法的某些步骤,属于行为性设计模式 应用场景 一次性实现一个算法的不变的部分,并将可变的行为留给 阅读全文
posted @ 2021-09-27 19:54 狻猊的主人 阅读(81) 评论(0) 推荐(0)
摘要:策略模式(Strategy Pattern)是指定义了算法家族、分别封装起来,让它们之间可以互 相替换,此模式让算法的变化不会影响到使用算法的用户。 应用场景 假如系统中有很多类,而他们的区别仅仅在于他们的行为不同。 一个系统需要动态地在几种算法中选择一种 支付案例 支付抽象类Payment pub 阅读全文
posted @ 2021-09-24 22:40 狻猊的主人 阅读(57) 评论(0) 推荐(0)
摘要:委派模式(Delegate Pattern)的基本作用就是 负责任务的调用和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理 的全权代理,但是代理模式注重过程,而委派模式注重结果。委派模式在 Spring 中应用 非常多,大家常用的 DispatcherServlet 其实就是用到了委派 阅读全文
posted @ 2021-09-24 21:39 狻猊的主人 阅读(97) 评论(0) 推荐(0)
摘要:代理模式(Proxy Pattern),是指为其他对象提供一种代理,以控制对这个对象的访问。 代理对象在客服端和目标对象之间起到中介作用,代理模式属于结构型设计模式。使用 代理模式主要有两个目的: 保护目标对象 增强目标对象 静态代理 静态代理只能通过手动完成代理操作,如果被代理类增加新的方法,代理 阅读全文
posted @ 2021-09-24 18:20 狻猊的主人 阅读(100) 评论(0) 推荐(0)
摘要:原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些 原型创建新的对象。 使用场景: 类初始化消耗资源较多 new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等) 构造函数比较复杂 循环体中生产大量对象时 在 Spring 中,原型模式应用得非常广 阅读全文
posted @ 2021-09-23 20:57 狻猊的主人 阅读(69) 评论(0) 推荐(0)
摘要:单例模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例,并 提供一个全局访问点。 应用场景 在 Spring 框架应用中 ApplicationContext 数据库的连接池 分类 饿汉式单例 懒汉式单例 注册式单例 ThreadLocal线程单例 饿汉式单例 饿 阅读全文
posted @ 2021-09-23 20:56 狻猊的主人 阅读(71) 评论(0) 推荐(0)
摘要:软件设计原则 设计原则 解释 使用频率 开闭原则 对扩展开放,对修改关闭。 ★★★★★ 依赖倒置原则 通过抽象使各个类或者模块不相互影响,实现松耦合。 ★★★★★ 单一职责原则 一个类、接口、方法只做一件事。 ★★★★☆ 接口隔离原则 尽量保证接口的纯洁性,客户端不应该依赖不需要的接口。 ★★☆☆☆ 阅读全文
posted @ 2021-09-23 16:13 狻猊的主人 阅读(64) 评论(0) 推荐(0)
摘要:JVM参数 JVM参数分为四大类,标准参数、-X参数、-XX参数、其他参数 标准参数 不会随着Java版本的变化而变化 java -version java -help java -server -cp -X参数 非标准参数,也就是在JDK各个版本中可能会变动 -Xint # 解释执行 -Xcomp 阅读全文
posted @ 2021-09-20 01:30 狻猊的主人 阅读(235) 评论(0) 推荐(0)
摘要:上篇文章中我们了解了Java内存模型,并提到了垃圾回收,那怎么确定一个对象是垃圾,又是如何回收这些垃圾的呢? 如何确定一个对象是垃圾 要想进行垃圾回收,得先知道什么样的对象是垃圾。有两种方式 引用计数法 对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾,如果一个对象没有任何指针 阅读全文
posted @ 2021-09-17 19:11 狻猊的主人 阅读(103) 评论(0) 推荐(0)
摘要:栈和栈帧 上篇文章中类加载机制提到了java虚拟机栈以及栈帧. 每个栈帧对应一个被调用的方法,可以理解为一个方法的运行空间。 栈帧数据 每个栈帧中包括局部变量表(Local Variables)、操作数栈(Operand Stack)、指向运行时常量池的引用(A reference tothe ru 阅读全文
posted @ 2021-09-16 20:27 狻猊的主人 阅读(104) 评论(0) 推荐(0)
摘要:类加载机制 java语言规范( Java Language Specification) 查看官方文档可以知道Java类加载步骤为 Loading(装载)、Linking(链接)、Initialization(初始化) 装载 步骤 查找和导入class文件, 分为以下3个步骤 通过一个类的全限定名获 阅读全文
posted @ 2021-09-14 22:43 狻猊的主人 阅读(117) 评论(0) 推荐(0)
摘要:事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL 中,事务支持是在引擎层实现的。你现在知道,MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。 阅读全文
posted @ 2021-09-13 20:00 狻猊的主人 阅读(72) 评论(0) 推荐(0)
摘要:MySQL更新流程涉及到很多重要的模块:redo log、binlog redo log 在 MySQL里,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。为了解决这个问题,MySQL 的设计者就用了WAL(Write-Ahead 阅读全文
posted @ 2021-09-12 00:04 狻猊的主人 阅读(274) 评论(0) 推荐(0)
摘要:Mysql基本架构 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触 阅读全文
posted @ 2021-09-10 20:00 狻猊的主人 阅读(180) 评论(0) 推荐(0)
摘要:订阅模式 Redis 提供两个订阅模式:频道(channel)订阅和 glob-style 模式(pattern)频道订阅。 频道订阅: CA(client A)向服务器订阅了频道 news,当 CB 向 news 发布消息的时候,CA 便能收到 glob-style频道订阅:举例,CA(clien 阅读全文
posted @ 2021-09-09 22:51 狻猊的主人 阅读(155) 评论(0) 推荐(0)
摘要:Redis 通过 MULTI、EXEC、DISCARD、WATCH 、UNWATCH 来实现事务功能,Redis 事务具备如下几个特性 Redis 会将事务中的多个命令一次性、按顺序一次执行,在执行期间可以保证不会中断事务去执行其他命令 Redis 的事务机制是不能保证原子性的,它只保证隔离性和一致 阅读全文
posted @ 2021-09-08 21:20 狻猊的主人 阅读(128) 评论(0) 推荐(0)
摘要:在介绍 Redis 主从复制的时候,提到了相比于单机的 Redis 架构,主从复制架构具有如下优势: 保证数据安全性。从节点作为主节点备份,一旦主节点不可用,从节点可以顶上去,保证了数据尽量不被丢失 提高读能力。主从读写分离,横向扩展的系统的读负载 Redis 高可用的基础 但是主从复制架构有一个非 阅读全文
posted @ 2021-09-08 19:37 狻猊的主人 阅读(201) 评论(0) 推荐(0)
摘要:Redis的持久化技术AOF 和 RDB保证了即使在服务器重启的情况下也不会丢失数据(或少量损失),不过,由于数据都是存储在一台服务器上, 如果服务器发生了宕机,由于数据恢复是需要点时间,那么这个期间是无法服务新的请求的; 如果这台服务器的硬盘出现了故障,可能数据就都丢失了。 为了避免这种情况,最好 阅读全文
posted @ 2021-09-07 21:24 狻猊的主人 阅读(119) 评论(0) 推荐(0)
摘要:Redis是内存数据库,宕机后数据会消失。为了重启后快速恢复数据,Redis提供持久化机制 Redis有两种持久化方式:RDB和AOF RDB,即 Redis DataBase:把 Redis 服务器中内存的数据保存到一个 dump 文件中,数据的集合 AOF,即 Append-only file: 阅读全文
posted @ 2021-09-06 20:13 狻猊的主人 阅读(113) 评论(0) 推荐(0)
摘要:RedisDB typedef struct redisDb { dict *dict; /* The keyspace for this DB */ dict *expires; /* Timeout of keys with a timeout set */ dict *blocking_key 阅读全文
posted @ 2021-09-05 19:27 狻猊的主人 阅读(75) 评论(0) 推荐(0)
摘要:Redis数据类型和应用场景 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围 阅读全文
posted @ 2021-09-04 21:30 狻猊的主人 阅读(95) 评论(0) 推荐(0)
摘要:消息存储 消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构、PageCache与Mmap内存映射以及RocketMQ中两种不同的刷盘方式三方面来分别展开叙述。 消息存储整体架构 消息存储架构图中主要有下面三个跟消息存储相关的文件构成。 Commi 阅读全文
posted @ 2021-09-03 15:09 狻猊的主人 阅读(177) 评论(0) 推荐(0)
摘要:技术架构 RocketMQ架构上主要分为四部分,如上图所示: Producer:消息发布的角色,支持分布式集群方式部署。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。 Consumer:消息消费的角色,支持分布式集群方式部署。支持 阅读全文
posted @ 2021-09-03 14:01 狻猊的主人 阅读(124) 评论(0) 推荐(0)
摘要:基本概念 1 消息模型(Message Model) RocketMQ主要由 Producer、Broker、Consumer 三部分组成, Producer 负责生产消息 Consumer 负责消费消息 Broker 负责存储消息。 Broker 在实际部署过程中对应一台服务器,每个 Broker 阅读全文
posted @ 2021-09-02 17:18 狻猊的主人 阅读(297) 评论(0) 推荐(0)