这个用户很懒,还没有个人简介
私信
主帖 40
回帖
视频
提问
回答 1
资源
专栏
前言公众号写的第2篇设计模式类型文章文章开篇,抛出一个老生常谈的问题,学习设计模式有什么作用?设计模式主要是为了应对代码的复杂性,让其满足开闭原则,提高代码的扩展性另外,学习的设计模式一定要在业务代码中落实,只有理论没有真正实施,是无法真正掌握并且灵活运用设计模式的这篇文章主要说责任链设计模式,认识此模式是在读Mybatis源码时,Interceptor拦截器主要使用的就是责任链,当时读过后就留下了很深的印象(内...
5天前 143浏览 0点赞 0回复 0收藏
前言Builder设计模式也叫做构建者模式或者建造者模式,名字只是一种叫法,当聊起三种名称的时候知道是怎么回事就行Builder设计模式在作者编码过程中,属于比较常用的模式之一。优秀的设计模式总是会受到广大开发者的青睐,Hutool也是其中之一因为上周编写的业务需要用到线程池,就去Hutoolthread包下看了看,还真有惊喜,学习到了一种之前编码中没用过的Builder模式实现这里必须提一句:设计模式重要的是思想,一种设计模式可能...
5天前 200浏览 0点赞 0回复 0收藏
责任链业务场景设计趁热打铁,本小节对使用的真实业务场景进行举例说明。假设业务场景是这样的,我们系统处在一个下游服务,因为业务需求,系统中所使用的基础数据需要从上游中台同步到系统数据库基础数据包含了很多类型数据,虽然数据在中台会有一定验证,但是数据只要是人为录入就极可能存在问题,遵从对上游系统不信任原则,需要对数据接收时进行一系列校验最初是要进行一系列验证原则才能入库的,后来因为工期问题只放了一...
5天前 152浏览 0点赞 0回复 0收藏
公众号写的第3篇设计模式类型文章日常Coding过程中,设计模式三板斧:模版、构建者、策略,今天来说下第三板斧策略设计模式策略模式还是比较简单并且使用较多的,平常我们多运用策略模式用来消除ifelse、switch等多重判断的代码,消除ifelse、switch多重判断可以有效应对代码的复杂性,使设计解耦如果分支判断会不断变化(增、删、改),那么可以使用技巧让策略模式满足开闭原则,提高代码的扩展性(策略模式场景主要负责解耦,...
5天前 126浏览 0点赞 0回复 0收藏
3PC一致性算法三阶段提交(3PC)是二阶段提交(2PC)的一个改良版本,引入了两个新的特性协调者和参与者均引入超时机制,通过超时机制来解决2PC的同步阻塞问题,避免事务资源被永久锁定把二阶段演变为三阶段,二阶段提交协议中的第一阶段"准备阶段"一分为二,形成了新的CanCommit、PreCommit、doCommit三个阶段组成事务处理协议这里将不再赘述3PC的详细提交过程,3PC相比较于2PC最大的优点就是降低了参与者的阻塞范围,并且能够...
5天前 91浏览 0点赞 0回复 0收藏
DTP模型和XA规范XOpen组织定义了分布式事务的模型(DTP)和分布式事务协议(XA),DTP由以下几个模型元素组成AP(Application应用程序):用于定义事务边界(即定义事务的开始和结束),并且在事务边界内对资源进行操作TM(TransactionManager事务管理器):负责分配事务唯一标识,监控事务的执行进度,并负责事务的提交、回滚等RM(ResourceManager资源管理器):如数据库、文件系统等,并提供访问资源的方式CRM(CommunicationR...
5天前 141浏览 0点赞 0回复 0收藏
分布式事务系列第一篇文章工作中使用最多的是本地事务,但是在对单一项目拆分为SOA、微服务之后,就会牵扯出分布式事务场景文章以分布式事务为主线展开说明,并且针对2PC、3PC算法进行详细的讲解,最后通过一个Demo来更深入掌握分布式事务,文章目录结构如下什么是事务什么是分布式事务DTP模型和XA规范什么是DTP模型什么是XA规范2PC一致性算法2PC准备阶段2PC提交阶段2PC算法优缺点3PC一致性算法JDBC操作MySQLXA事务结言什么是事...
5天前 111浏览 0点赞 0回复 0收藏
如何实现开闭原则看了应用的代码之后,函数体过大的问题已经被解决了,我们通过拆分成为不同的具体的观察者类来拆分总体逻辑。但是开闭原则问题呢?这就是上面所说的问题所在,我们目前是通过显示的引入具体观察者模式来进行添加到被观察者的通知容器中,如果后续添加警察老四、老五...越来越多的警察时,还是需要改动原有代码,问题应该怎么解决呢其实非常简单,平常Web项目基本都会使用Spring框架开发,那自然是要运用其中的...
5天前 119浏览 0点赞 0回复 0收藏
观察者模式结合业务因为公司业务场景保密,所以下面我们通过【新警察故事】的电影情节,稍微篡改下剧情,模拟出我们的观察者模式应用场景假设:目前我们有三个警察,分别是龙哥、锋哥、老三,他们受命跟进犯罪嫌疑人阿祖。如果发现犯罪嫌疑人阿祖有动静,龙哥、峰哥负责实施抓捕行动,老三向警察局摇人,流程图如下:如果说使用常规代码写这套流程,是能够实现需求的,一把梭的逻辑可以实现一切需求。但是,如果说下次行动,龙...
5天前 104浏览 0点赞 0回复 0收藏
前言《设计模式实战》系列目前已经写了7篇了,最近几篇平均阅读保持1.1k+,后面也会延续之前的高质量,欢迎继续关注【设计模式实战】策略模式【设计模式实战】责任链模式【设计模式实战】Builder模式【设计模式实战】代理模式【设计模式实战】模版方法模式【设计模式实战】适配器模式【设计模式实战】...今天讲解一篇行为型设计模式,什么是行为型?行为型主要负责设计类或对象之间的交互。工作中常用的观察者模式就是一种行为...
5天前 133浏览 0点赞 0回复 0收藏
文章字数1.3k左右,阅读时长5分钟首先,这是一个悲伤的故事,涉及到JVM底层优化的知识点。想到第一次碰到这种问题时的懵逼,应了句老话:书到用时方恨少!负责的消息中台在晚上八点左右,运维群里反馈大量用户接收不到短信消息。登陆Kibana查找对应的Error日志,发现出现了大量的下标越界异常当时更...,线上问题得到了修复。但是,出现问题可不得找到问题的产出原因,不然下次有可能还会出现因为在ELK上进行日志分析不太方便,...
5天前 118浏览 0点赞 0回复 0收藏
代码不多,文章不长,简要描述了下DataSource演进过程的故事产出背景最近这段时间一直忙着集团内部安全等保加密相关事项,初步决定使用shardingsphere来进行因为项目众多,需要兼容的需求也随之而来,加密数据源和动态数据源的互相兼容,以及分库分表和加密数据源的兼容等等,反正一言不合就兼容无疑,上面这些或多或少都和数据源有关系,所以在处理不同兼容性等问题时,也让我再次对DataSource产生了了解的兴趣,这个曾经被很...
5天前 204浏览 0点赞 0回复 0收藏
为什么要有SPI了解一项技术的前提,一定要知道它为了解决什么样的痛点而存在,JDK作者也不会没屁事加点代码玩引入了SPI机制后,服务接口与服务实现就会达成分离的状态,可以实现解耦以及程序可扩展机制。服务提供者(比如springbootstarter)提供出SPI接口后,客户端(平常的springboot项目)就可以通过本地注册的形式,将实现类注册到服务端,轻松实现可插拔数据加密举例以实际项目举个例子,就拿shardingjdbc数据加密模块来说...
5天前 124浏览 0点赞 0回复 0收藏
代码不多,文章可能有点长。朋友面试某厂问到的SPI机制,联想到自己项目最近写到的SPI场景,文章简要描述下SPI机制的发展历程产出背景因为最近项目中使用分库分表以及数据加密使用到了ShardingSphere,所以决定这段时间看看源码实现。问我为什么要读源码?不看源码怎么提高逼格嘞,就是这么朴实无华~考虑到自己看微信文章的习惯,不喜欢代码太多的,看着逻辑有点不清晰。所以,以后的文章风格就是,少贴代码,画图+BBShardingJ...
5天前 216浏览 0点赞 0回复 0收藏
动态的阻塞队列线程池中是以生产者消费者模式,通过一个阻塞队列来缓存任务,工作线程从阻塞队列中获取任务。工作队列的接口是阻塞队列(BlockingQueue),在队列为空时,获取元素的线程会等待队列变为非空,当队列满时,存储元素的线程会等待队列可用阻塞队列动态设置队列大小,有很多种操作方式。可以按照原逻辑不变加一些扩展,也可以在特定方法上进行重写,实现方式并不固定。下面说几种可以实现动态阻塞队列功能的方案复制...
5天前 132浏览 0点赞 0回复 0收藏
核心线程动态的坑有一个很重要的点需要注意,核心线程数设置时可能失效。比如说,最大线程数为5,当前线程池内活跃线程数为5,此时设置核心线程数为10的话,一定是不生效的,Why?先假设线程池的运行时状态如下,核心线程为3,最大线程是5,线程池内活跃线程为5,此时调用setCorePoolSize动态设置核心线程数为10执行完上述操作之后,调用execute向线程池发起任务执行,内部处理逻辑如下判断当前线程池核心数为10,当前工作线程...
5天前 154浏览 0点赞 0回复 0收藏
线程池(ThreadPool)是一种基于池化思想管理线程的工具。使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽目前线程池被广泛应用于业务系统,但是业界内对线程池初始化参数并没有很好的标准。线上环境的线程池因为业务特殊性遇到一些痛点,进而引发了小编对于线程池使用的一些思考线上配置不能合理评估最大的痛点就是无法正确评估线程池关键参数的配置。比如核心线程数、最大线程数、阻塞队列大小等,一旦...
5天前 212浏览 0点赞 0回复 0收藏
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的有些时候我们希望能使用一种简单些的ID,并且希望ID能够按照时间有序生成什么是雪花算法Snowflake中文的意思是雪花,所以常被称为雪花算法,是Twitter开源的分布式ID生成算法Twitter雪花算法生成后是一个64bit的long型的数值,组成部分引入了时间戳,基本保持了自增SnowF...
5天前 152浏览 0点赞 0回复 0收藏
3.分片测试使用MySQL终端命令连接ShardingSphereProxy服务端。如果Docker部署的数据库,需要加上h本机ip。因为容器内访问127.0.0.1不通。将{xx}替换为实际参数mysqlh{ip}u{username}p{password}P3307示例命令mysqlh127.0.0.1urootprootP3307ShardingSphereProxy支持NavicatMySQL、DataGrip、WorkBench、TablePlus等数据库管理工具连接。连接成功后,查询代理数据库,与配置文件中一致。mysql>showdatabases;++schemaname++shard...
6天前 153浏览 0点赞 0回复 0收藏
四、场景实践本章节从实战场景的前提出发,通过ShardingSphereProxy完成上述需求。1.初始化数据库表CREATEDATABASECREATEDATABASEusersharding0;CREATEDATABASEusersharding1;CREATETABLEuseusersharding0;CREATETABLEtuser0(idbigint(20)NOTNULL,useridbigint(20)NOTNULL,createdatedatetimeDEFAULTNULL,PRIMARYKEY(id))ENGINEInnoDBDEFAULTCHARSETlatin1;CREATETABLEtuser1(idbigint(20)NOTNULL,useridbigint(20)NOTNULL,crea...
6天前 164浏览 0点赞 0回复 0收藏