- 博客(139)
- 收藏
- 关注
原创 设计模式之状态设计模式
对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为,属于行为型模式。状态模式是策略模式的孪生兄弟,他们的UML图是一样的,但实际上解决的是不同情况的两种场景问题。状态设计模式(State Pattern)允许一个对象在其内部状态改变时改变它的行为。代码示例,电商项目中每个状态都有不同的操作。工作中用的不多,基本策略模式比较多。状态设计和策略模式的区别。
2025-03-16 17:05:54
434
原创 设计模式之备忘录设计模式
Originator发起者:记录当前的内部状态,并负责创建和恢复备忘录数据,允许访问返回到先前状态所需的所有数据,可以根据需要决定Memento存储自己的哪些内部状态。Memento备忘录:负责存储Originator发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。Caretaker管理者:对备忘录进行管理、保存和提供备忘录,只能将备忘录传递给其他角色。备忘录设计模式(Memento Pattern)Originator和Memento属性类似。代码示例,以游戏存档、回退为例。
2025-03-15 17:44:44
1054
原创 设计模式之迭代器设计模式
抽象迭代器角色(Iterator):负责定义访问和遍历元素的接口,包括几个核心方法,取得下一个元素的方法next(),判断是否遍历结束的方法isDone()(或者叫hasNext()),移除当前对象的方法remove()具体容器角色(ConcreteAggregate):实现抽象容器的具体实现类,例如List接口的有序列表实现ArrayList,List接口的链表实现LinkedList,Set接口的哈希列表的实现HashSet等。代码示例,自定义集合容器简化版。
2025-03-15 14:56:04
797
原创 设计模式之命令设计模式
具体命令(ConcreteCommand):定义一个接收者和行为之间的弱耦合,实现execute()方法,负责调用接收者的相应操作,execute()方法通常叫做执行方法。接收者(Receiver):负责具体实施和执行一个请求,干活的角色,命令传递到这里是应该被执行的,实施和执行请求的方法叫做行动方法。请求者(Invoker):负责调用命令对象执行请求,相关的方法叫做行动方法。抽象命令(Command):需要执行的所有命令都在这里声明。命令设计模式(Command Pattern)
2025-03-15 13:12:02
675
原创 设计模式之责任链设计模式
ConcreterHandler具体处理者 :处理所负责的请求,可访问它的后续节点,如果可处理该请求就处理,否则就将该请求转发给它的后续节点。责任链设计模式(Chain of Responsibility Pattern)Handler抽象处理者:定义了一个处理请求的接口。代码示例,以转账风控为例。
2025-03-15 11:50:20
915
原创 设计模式之观察者模式
Subject主题:持有多个观察者对象的引用,抽象主题提供了一个接口可以增加和删除观察者对象;ConcreteSubject具体主题:将有关状态存入具体观察者对象,在具体主体内部状态改变时,给所有登记过的观察者发出通知。ConcreteObserver具体观察者:实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态保持一致。一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。Observer抽象观察者:为具体观察者定义一个接口,在得到主题的通知时更新自己。
2025-03-14 14:19:45
301
原创 设计模式之模板方法模式
抽象模板(Abstract Template):定义一个模板方法,这个模板方法一般是一个具体方法,给出一个顶级算法骨架,而逻辑骨架的组成步骤在相应的抽象操作中,推迟到子类实现。具体模板(Concrete Template):实现父类所定义的一个或多个抽象方法,它们是一个顶级算法逻辑的组成步骤。模板方法模式(Template Method)代码示例,以项目开发上线为例。模板方法模式和建造者模式区别。
2025-03-14 11:05:55
234
原创 设计模式之策略模式
Comparator接口常用的compare()方法,就是一个策略模式的应用,把Comparator作为参数使用生成不同的排序策略。Strategy策略角色:抽象策略角色,是对策略、算法家族的抽象,定义每个策略或算法必须具有的方法和属性。ConcreteStrategy具体策略角色:用于实现抽象策略中的操作,即实现具体的算法。Context上下文:屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。策略模式(Strategy Pattern)代码示例:电商优惠活动举例。
2025-03-13 08:43:42
728
原创 设计模式之享元设计模式
抽象享元角色:为具体享元角色规定了必须实现的方法,而外部状态就是以参数的形式通过此方法传入。具体享元角色:实现抽象角色规定的方法。如果存在内部状态,就负责为内部状态提供存储空间。注意划分内部状态和外部状态,否则可能会引起线程安全问题,必须有一个工厂类加以控制。享元工厂角色:负责创建和管理享元角色。要想达到共享的目的,这个角色的实现是关键。客户端角色:维护对所有享元角色的引用,而且还需要储存对应的外部状态。享元设计模式(Flyweight Pattern)享元设计模式和原型、单例模式的区别。
2025-03-10 15:45:13
426
原创 设计模式之装饰器设计模式/包装设计模式
给对象增加功能,一般两种方式,继承或关联组合,将一个类的对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为来增强功能,这个就是装饰器模式,比继承模式更加灵活。也叫包装设计模式,属于结构型模式,它是作为现有的类的一个包装,允许向一个现有的对象添加新的功能,同时又不改变其结构。JDK源码里面应用最多的就是IO流,大量使用装饰器设计模式。以动态、透明的方式给单个对象添加职责,但又能不改变其结构。角色(装饰者和被装饰者有相同的超类Component)装饰器设计模式(Decorator Pattern)
2025-02-21 11:30:31
915
原创 设计模式之工厂模式
它提供了一种创建对象的最佳方式,我们在创建对象时,不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象3种实现方式优点应用场景。
2025-01-04 08:55:44
779
原创 linux企业中常用NFS、ftp服务
修改ip地址为静态vim /etc/sysconfig/network-scripts/ifcfg-enxxx重启网卡:systemctl restart network.serviceping不通域名解决:vi /etc/resolv.conf。
2024-11-16 09:40:20
673
原创 K8S常用命令及其相关概念【偏实战】
资源管理方式命令式对象管理:直接使用命令去操作资源命令式对象配置:通过命令配置和配置文件去操作资源声明式对象配置:通过apply和配置文件操作资源kubectl create和kubectl apply区别使用命令生成yaml配置文件yaml文件说明,以deployment为例。
2024-11-15 10:52:39
933
原创 K8S概念及其常见组件和整体架构
什么是KubernetesK8S的本质是一组服务器集群,可以在对应服务器集群的每个节点上运行程序,来对节点中的容器进行管理类似Master-Work方式,每个服务器上安装特定的K8S组件,就可以形成集群,然后部署对应的应用即可K8S常见的功能。
2024-10-30 11:01:26
1042
原创 微服务之链路追踪Sleuth+zipkin
链路追踪系统核心:将一次请求分布式调用,使用GPS定位串起来,记录每个调用的耗时、性能等日志,并通过可视化工具展示出来注意:AlibabaCloud全家桶还没对应的链路追踪系统,我们使用Sleuth和zipkin(内部使用的鹰眼)
2024-10-26 08:40:29
999
原创 微服务网关之Gateway
什么是SpringCloud GatewaySpring官方出品,基于Spring5+Reactor技术开发的网关性能强劲,基于Reactor+WebFlux,功能多样基于springboot2.x,可以直接jar包方式运行。
2024-10-25 15:35:57
1276
原创 微服务之Sentinel概念介绍及项目实战代码
什么是Sentinel阿里巴巴开源的分布式系统流控工具以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性丰富的应用场景:消息削峰填谷、集群流量控制、实时熔断下游不可用应用等完备的实时监控:Sentinel同时提供实时的监控功能提供开箱即用的与其它开源框架/库的整合模块,例如与Spring Cloud、Dubbo、gRPC的整合介绍 · alibaba/Sentinel Wiki · GitHub。
2024-10-25 08:30:41
1199
原创 设计模式的六大原则
软件设计开发原则为了让代码更好重用性、可读性、可靠性、可维护性诞生出了很多软件设计的原则,这6大设计原则是我们要掌握的将六大原则的英文首字母拼在一起就是SOLID(稳定的),所以也称之为SOLID原则单一职责原则一个类只负责一个功能领域中的相应职责,就一个类而言,应该只有一个引起它变化的原因是实现高内聚、低耦合的指导方针高内聚尽可能类的每个成员方法只完成一件事(最大限度的聚合)模块内部的代码,相互之间的联系越强,内聚就越高,模块的独立性就越好低耦合:减少类内部,一个成员
2024-10-17 19:22:16
512
原创 分布式事务Seata原理及其项目使用
架构理解:TC为单独部署的Server服务端,TM和RM为嵌入到应用中的Client客户端。AT模式可以应对大多数的业务场景,并且基本可以做到无业务入侵,开发者无感知。在Service方法上增加注解@GlobalTransactional。用户只需关心自己的业务SQL,AT模式分为两个阶段,可以认为是2PC。TC(事务协调器)需要存储全局事务和分支事务的记录,支持三种存储模式。Seata实现分布式事务,关键是UNDO_LOG(回滚日志记录表)application.yml文件。Seata事务处理过程描述。
2024-09-09 19:16:52
1086
原创 docker-compose安装与简单使用
docker-compose:是一个用于定义和运行多容器docker的应用程序工具,可以帮助我们轻松、高效的管理容器docker-compose安装$(uname-s$(uname-m。
2024-08-11 20:39:53
339
原创 docker自定义镜像
docker目前镜像的制作有两种方法基于docker commit制作镜像:docker commit -a “Gen” -m “自定义镜像” b98b4a1eb7d4 mycentos:7基于Dockerfile制作镜像,Dockerfile方式为主流的制作镜像方式创建Dockerfile文件构建:docker build -t mycentos:v2 .
2024-07-10 15:09:17
534
原创 Object类hashCode方法和equals方法源码
顶级类Object里面的方法,所有类都是继承Object的,返回值int类型根据一定的hash规则(存储地址、字段、或者长度等),映射成一个数值,即散列值。
2024-06-20 18:23:58
408
原创 方法论:SWOT、SMART
解决方案分析方法论SWOT什么是SWOT:例子中间件RabbitMQ和RocketMQ队列选择对比S(strengths)优势:RabbitMQ团队多人用过,AMQP跨语言、模型API丰富W(weaknesses)劣势:RabbitMQ阅读过源码的人过少,Erlang开发,二次修改不容易O(opportunities)机会:多个容器平台拥抱RabbitMQ,易用性、扩展性强T(threats)威胁:未来可能有更强大的MQ产品出现或改动架构SMART原则(目标管理、设置)Specific:
2024-06-18 17:26:21
323
原创 【面试题】CAP理论、BASE理论及其注册中心选型
CAP:指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),三者不可同时获得CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须要实现的。所以我们只能在一致性和可用性之间进行权衡。
2024-05-30 16:58:46
495
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人