设计模式
文章平均质量分 75
贺公子之数据科学与艺术
科技向善,拥抱开源,要用技术的影响力来领导人,而不是威权和职位!
展开
-
深入解析Java AQS原理详解
AQS是Java并发包中的一个抽象类,它为实现锁和同步器提供了一种基础框架。其核心思想是基于一个FIFO队列(等待队列)来实现线程的阻塞和唤醒。AQS内部维护了一个状态(state)变量,通过对该变量的操作来实现线程的同步与互斥。AQS基于模板方法设计模式,定义了两类方法:独占模式和共享模式。其中独占模式适用于ReentrantLock等独占锁,共享模式适用于Semaphore等共享资源。原创 2024-10-30 08:46:12 · 207 阅读 · 0 评论 -
使用 Redis 进行分布式事务
Redis 本身并不是一个关系型数据库,它并不支持传统的 SQL 数据库中的 ACID 特性的事务。然而,Redis 提供了一种称为“事务”的特性,它允许客户端将多个命令捆绑在一起作为一个单独的序列发送给服务器。对于更复杂的情况,如需要跨多个键或多个 Redis 实例的一致性操作,可能需要考虑使用外部协调服务(如 ZooKeeper 或 Etcd)来管理分布式事务,或者设计业务逻辑来容忍一定程度的不一致,例如使用最终一致性模型。开始事务,并在事务内减少库存并记录用户的购买行为。在这个例子中,我们使用。原创 2024-10-30 08:45:49 · 290 阅读 · 0 评论 -
软件系统产品设计方案
根据系统的特点和用户的需求,确定合理的响应时间要求,例如要求用户在1秒内获得系统的响应。在功能设计的过程中,应该注重合理的模块划分和良好的接口设计,以及适当的测试和调试。根据用户的并发访问数量和系统的处理能力,确定系统需要具备的并发处理能力。需求分析的目标是为软件开发团队提供一个明确的方向,确保开发的软件能够满足用户的需求。可以根据系统的定位和用户群体的特点选择合适的主题色,并与其他颜色进行搭配,以便突出重点和区分不同的功能。通过良好的数据库设计,可以确保数据的完整性和一致性,提高系统的性能和可维护性。原创 2024-02-23 13:01:54 · 2919 阅读 · 0 评论 -
【存储分配】
在分配存储空间时,我们会检查每个存储空间的可用空间是否足够,如果足够则将文件添加到存储空间中,并更新已使用空间的值。每当一个函数被调用时,它的参数和局部变量会被分配在栈内存中,当函数执行完成后,这些变量会自动销毁。例如,如果程序需要创建一个动态数组,它会在堆内存中分配一段连续的内存来存储该数组的元素。需要注意的是,具体的存储分配方式可能依赖于编译器和操作系统的实现细节。常量区是一个只读的内存区域,存储着程序中使用的常量数据,如字符串常量。代码区:程序的机器指令和函数的二进制代码会被存储在代码区。原创 2024-03-15 09:08:09 · 561 阅读 · 0 评论 -
系统概要设计
概要设计文档需要清晰地描述项目的整体结构和设计思路,便于后续的详细设计和开发工作。了解项目需求:首先,需要详细了解项目的需求和目标,包括功能需求、性能需求、安全需求等。制定技术方案:根据项目需求和现有的技术条件,制定项目的技术方案。绘制系统流程图:绘制系统的流程图,包括各功能模块之间的关系、数据的流向和处理过程等。设计数据库结构:根据项目需求,设计数据库的结构和表之间的关系。确定项目范围:根据项目需求,确定项目的整体范围和边界,明确项目的主要功能和模块,并阐述各模块的关系和交互方式。原创 2024-01-30 08:58:13 · 437 阅读 · 0 评论 -
【synchronized关键字实现线程同步及实现线程安全】
使用线程安全的集合类:Java.util.concurrent包提供了线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList等。这些类使用原子操作来保证对变量的读写操作是线程安全的。使用volatile关键字:volatile关键字用于修饰变量,对于被volatile修饰的变量,线程每次读取该变量时都会从主内存中读取,而不是从线程的本地缓存中读取。使用Lock接口和它的实现类(如ReentrantLock):Lock接口提供了更灵活和可扩展的方式来实现线程同步。原创 2024-01-31 08:58:16 · 846 阅读 · 0 评论 -
数据驱动:从方法到实践
1.随着技术的发展,企业竞争出现白日化现象,加之目前互联网各种技术的不停发展,互联网行业出现大量的数据,导致新的互联网公司交与传统公司相比较出现数据精准营销现象发生。2.通过在平台中采集使用用户产生的大量数据来加之以分析,进行网页页面,APP界面进行各个元素的点击分析对比,判断用户界面设计,商品主要窗口商品的摆放,以及用户在每个页面浏览停留有的时间,来逐步提升公司产品的运营能力,增加公司产品的销售量。原创 2024-03-05 08:48:58 · 1618 阅读 · 0 评论 -
三十二、微服务之-工厂模式
工厂模式是一种创建型设计模式,它提供了一种方法来实例化对象,而不是直接使用 new 关键字。在工厂模式中,我们定义一个工厂类,该类负责创建特定类型的对象,并将对象的创建逻辑封装在其中。通过使用工厂模式,我们将对象的创建过程从客户端代码中分离出来,并使客户端不需要关心具体的实例化过程。方法可以根据传入的参数执行一些复杂的逻辑,比如根据不同的参数创建不同的对象,但在本例中,我们只是简单地创建一个。最后,我们使用工厂模式创建了两个不同品牌和颜色的汽车对象,并输出它们的品牌和颜色信息。,该类具有品牌和颜色属性。原创 2024-03-01 08:56:50 · 380 阅读 · 0 评论 -
十三、微服务之-为什么需要域驱动设计(DDD)
总的来说,域驱动设计有助于将复杂的业务问题转化为可理解、可扩展和可维护的软件系统。它提供了一种方法来更好地与业务专家和领域专家合作,从而更好地满足业务需求。原创 2024-02-29 09:29:47 · 384 阅读 · 1 评论 -
设计模式之观察者设计模式
指能够感知、观察和注意到某些事物或现象的个体或实体。观察者可以是人类、动物、科学仪器、传感器、摄像机等。观察者通过判断、记录和分析所观察到的事物或现象,可以获取和获取关于该事物或现象的信息和知识。观察者在科学研究、实验、观测、监测、社会研究等领域中起着重要的作用。观察者的定义是指能够感知、观察和注意到某些事物或现象的个体或实体。观察者可以是人类、动物、科学仪器、传感器、摄像机等。观察者通过判断、记录和分析所观察到的事物或现象,可以获取和获取关于该事物或现象的信息和知识。观察者在科学研究、实验、观测、监测、社原创 2024-02-27 15:43:58 · 446 阅读 · 0 评论 -
【TDengine 时序数据库,在物联网的应用】
以上就是一个简单的使用TDengine时序数据库的示例。通过这些代码,实现物联网设备数据的存储和查询功能。具体的实际应用中,可以结合其他功能,如数据分析和可视化等,来进一步处理和展示数据。TDengine是一种高性能时序数据库,特别适合物联网应用中大规模数据的采集、存储和分析。以下是一个简单的示例,展示如何使用TDengine进行数据的存储和查询。这样,我们就可以获取到表中的所有数据。这里插入了三条示例数据,分别代表了不同设备在不同时间点上的温度和湿度。是TDengine数据库的服务器地址,原创 2024-02-22 07:44:44 · 477 阅读 · 0 评论 -
实际应用的常用到的Java设计模式
适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一个接口,使原本不兼容的类可以一起工作。工厂模式(Factory Pattern):通过一个工厂类来创建具体的对象,封装了对象的创建细节。示例:在一个爬虫框架中,定义一个抽象类,提供一系列爬取数据的方法,具体的爬虫子类只需要实现特定的抓取逻辑。示例:在一个电商网站的促销活动中,根据不同的销售策略(如满减、折扣),对商品价格进行不同的计算。示例:创建一个图形对象的工厂类,根据不同的参数创建不同的图形对象,如圆形、矩形等。原创 2024-02-20 08:43:10 · 389 阅读 · 0 评论 -
【设计高可用、高扩展性的系统需要考虑以下几个方面的技术和策略】
如果某个请求需要执行耗时的操作(例如网络请求、数据库查询等),那么系统就会因为等待该操作完成而被阻塞,无法处理其他请求,导致系统的吞吐量和响应速度下降。而异步处理则不同,它将耗时的操作转化为异步任务,系统可以立即响应其他请求,而不需要等待该任务的完成。缩短响应时间:由于系统可以立即响应其他请求,不需要等待耗时操作的完成,所以能够更快地响应用户的请求,缩短系统的响应时间。提高系统的稳定性:异步处理可以将一些非关键的操作放到后台进行处理,减少对系统性能的影响,从而提高系统的稳定性。原创 2024-02-20 08:41:49 · 964 阅读 · 0 评论 -
【设计一个分布式容错性和可恢复性的系统】
总而言之,通过考虑容错性和可恢复性的设计原则、使用合适的技术和工具,可以提高分布式系统的稳定性和可靠性,减少故障对系统的影响。原创 2024-02-19 17:30:37 · 383 阅读 · 0 评论 -
史上最全:TCP三次握手原因、过程、失败以及不采用三次握手的后果
如果客户端想建立连接,给服务端发了一个连接请求(SYN),但是由于网络中种种情况,导致没有及时到达服务端,这就导致客户端在很长一段时间中没有收到回复消息(ACK),这时客户端又给服务端发送一个SYN,这次的发送和接收的很顺利,很快就收到了ACK,但是这时之前的SYN终于到了服务端,服务端规规矩矩的为这个SYN申请资源,然后返回ACK。四次握手和两次握手的情况一样,五次握手和三次握手的情况一样,以此类推,奇数次握手的情况与三次握手相同,同理偶数次握手与两次握手一样,所以为了更快的连接,就使用三次握手最合适。原创 2022-06-10 19:19:06 · 1387 阅读 · 0 评论 -
2021-09-16Sharding 分片模式
Sharding 分片模式Sharding 分片模式将一个数据存储到一组水平分区或碎片。存储和访问大量数据时,这个模式可以提高可扩展性。背景和问题由一个单一的服务器托管的数据存储区可能会受到以下限制:存储空间。一种数据存储为一个大型云应用可以预期含有数据量巨大,可以随着时间的推移显著增加。服务器通常提供的磁盘存储仅是有限的,但它可以是能与较大的取代现有的磁盘,或者添加另外的磁盘的机器作为数据量的增加。然而,由此,不能够容易地增加一个给定的服务器上的存储容量的系统最终将达到一个硬限制。计算资源。云原创 2021-09-16 14:15:45 · 220 阅读 · 0 评论 -
工作流引擎
a) 设计建模环境:设计建模环境基于GEF架构,以Plugins的思想,实现对图元的自定义扩展能力。b)执行期:普元BPS的执行引擎,即流程定义的执行语义解析、加载和调度的容器,是基于普元专有的专利技术GVM、PVM架构的基础上,通过可插拔的机制,实现对流程模型的执行解析和调度。 资源池。该模式正是为了解决资源频繁分配、释放所造成的问题的。把该模式应用到数据库连接管理领域,就是建立一个数据库连接池,原创 2017-12-20 14:47:23 · 335 阅读 · 0 评论 -
单例模式(Singleton)
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个队伍出现了...原创 2017-12-20 14:44:08 · 134 阅读 · 0 评论 -
消息队列
消息队列中间件、分布式面向对象中间件和事务处理中间件等。 消息队列服务是一种松耦合的分布式应用集成形式。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。这种模式下,发送和接收是异步的,发送者无需等待;二者的生命周期未必相同;发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;一对多通信:对于一个消息可以有多个接收者。消息队列中间件最重原创 2017-12-20 14:39:47 · 275 阅读 · 0 评论