自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 数据结构的组成

数据结构的组成数据结构由存储结构、逻辑结构及算法组成存储结构:又名物理结构,是数据存储到计算机上的真实结构逻辑结构:是数据组合规则与关系的抽象描述,一般所讨论的数据结构通常指逻辑结构算法:是针对逻辑结构一系列的操作方法,算法在考虑性能的时候受存储结构制约...

2019-11-29 13:31:29 1979

原创 设计模式类目

创建型创建型模式涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要实例化的对象中解耦Abstract Factory(抽象工厂)Builder(生成器)Factory Method(工厂方法)Prototype(原型)Singleton(单件)结构型结构型模式可以让你把类或对象组合到更大的结构中Adapter(适配器)Bridge(桥接)Composite(组合...

2019-11-18 18:02:07 233

原创 Linux安装部署RocketMQ

Linux安装部署RocketMQ引言安装步骤1. 安装JAVA2. 安装RocketMQ3. 安装Maven4. 编译RocketMQ5. 启动RocketMQ6. 测试RocketMQ7. 关闭 RocketMQ自启动 RocketMQ引言阿里巴巴其中一个核心分布式技术是RocketMq ,作为一款分布式的消息中间件,经过了淘宝双十一的洗礼,在功能和性能上远超过activeMq1.要知道RocketMQ原生就是支持分布式的,而ActiveMQ原生存在单点性。2.RocketMQ可以保证严格的

2021-11-09 11:57:12 1543

转载 SpringBoot系列十八:整合Hikari

Hikari是一款非常强大,高效,并且号称“史上最快连接池”。并且在springboot2.0之后,采用的默认数据库连接池就是Hikari。不需要引入依赖,已经在SpringBoot中包含了。GitHub地址:https://github.com/brettwooldridge/HikariCP1、在yml中配置# 数据库配置spring: datasource: type: com.zaxxer.hikari.HikariDataSource driverClassName: com.

2020-11-06 09:38:31 390

转载 领域驱动设计在互联网业务开发中的实践

至少30年以前,一些软件设计人员就已经意识到领域建模和设计的重要性,并形成一种思潮,Eric Evans将其定义为领域驱动设计(Domain-Driven Design,简称DDD)。在互联网开发“小步快跑,迭代试错”的大环境下,DDD似乎是一种比较“古老而缓慢”的思想。然而,由于互联网公司也逐渐深入实体经济,业务日益复杂,我们在开发中也越来越多地遇到传统行业软件开发中所面临的问题。本文就先来讲一下这些问题,然后再尝试在实践中用DDD的思想来解决这些问题。过度耦合业务初期,我们的功能大都非常简单,普通的

2020-11-03 10:21:33 560

转载 基于电商中台架构-商品系统设计(二):类目设计

类目设计概念定义什么是类目前后台类目属性和属性值导航属性销售属性普通属性子属性和子属性值技术设计关系图类目属性树形结构图类目表缓存分布式缓存分布式本地缓存总结概念定义什么是类目类目简单来说就是商品的分类,用大家最常用的淘宝来看,就是图中圈出来的地方。为什么会有类目,也是其功能决定的,类目目前已经作为电商网站导航的标配,只是不同网站的类目不同罢了。如果我们的网站只有几十个、上百个商品,或许类目对于我们来说不重要,但是如果商品有成千上万个,甚至更多,那类目对我们来找到具有某些特点的商品就至关重要了。

2020-10-30 14:39:44 1401

转载 基于电商中台架构-商品系统设计(一)

文章目录一、 总体设计基础层平台层二、 概念定义Item-sku前后端商品关联关系商品快照商品打标类目属性三、技术设计关系图商品关键字段介绍商品历史表Item_history设计商品快照设计商品打标设计商品扩展字段设计商品销量统计&排序商品类目设计商品搜索设计四、 总结一、 总体设计为什么采用中台架构前几篇已经说明了,这里就介绍一下基础层和平台层的功能。基础层发布、编辑、上架、下架这些功能大家应该比较熟悉。审核:是否需要审核通过才允许上架打标:对商品进行标记,例如参加某种活动Sku管

2020-10-30 14:25:05 1940

转载 如何设计缓存系统:缓存穿透,缓存击穿,缓存雪崩解决方案分析

文章目录前言缓存穿透解决方案缓存雪崩解决方案缓存击穿解决方案总结前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用

2020-09-30 11:26:30 122

转载 DDD 领域驱动设计学习(五)- 实体/值对象/领域服务

领域驱动设计DDD在战术建模上提供了一个元模型体系(如下图):元模型往往用来在某一特定的领域定义一个基础的通用的语言,来讨论和描述该领域的问题及解决方法。可以将元模型想象成为某种形式语言,这样模型就是一篇用该语言描述的文章,其中元模型中的元素就是该语言的词汇,元素之间的关系就是该语言的语法。元模型的例子其实很多,例如交通指示标志就定义了一种非常简单的交通规则的元模型。DDD的元模型图也是用于描述如何去创建一个DDD的模型。DDD的战术阶段实际就是这样一个抽象过程。这个抽象过程由于元模型的存在实际是一定

2020-09-25 14:40:44 1884

转载 DDD 领域驱动设计学习(四)- 架构(分层/六边形/RESTful)

DDD方法中并没有指定使用特定的架构。领域中的BC被封装为高内聚的模块,这种特性让DDD对架构并没有太大侵入性。架构可以应用于领域内部的结构,也可以包围着领域模型,系统中可以采用多种风格的架构。架构是指构成一个系统的主要元素及它们之间的主要关联,这些元素和关联能够反映该系统的本质特征。选择架构应该了解架构的来源和所要解决的问题,从业务和问题出发,避免滥用架构。例如分布式应用的架构有REST、DO(分布式对象)和RPC,REST架构是Web风格的架构,而DO和RPC是面向企业应用的,技术和架构也不是一

2020-09-25 11:21:02 1056

转载 DDD 领域驱动设计学习(三)- 领域事件

领域事件(Domain Event)在Eric的《领域驱动设计》中并没有提到领域事件,领域事件是在后来才被正式提出来的,并成为DDD通用语言(UL)的正式组成部分。领域事件(DE)是什么?领域事件的作用又是什么?介绍领域事件的书籍和文章也比较多了,本文最后也推荐了几篇很好的文章。写这篇文章更希望多思考一下自己的一些疑问,一个是为什么要用领域事件?领域事件和一般事件驱动的区别是什么?顺便也想理一下Event相关的几个概念和工具。领域事件是什么在《实现领域驱动设计》一书中对领域事件的定义如下:领域专

2020-09-24 14:37:48 831

转载 DDD 领域驱动设计学习(二)- 限界上下文

12/9-DDD中国峰会部分文章节选DDD不是架构,而是一种方法论(Methodology)。根据维基百科:Methodology is the systematic, theoretical analysis of the methods applied to a field of study,DDD正是针对软件领域提供的系统与理论分析方法。Eric在创造性地提出DDD时,实则是针对当时项目中聚焦在Data(主要是DB Schema)为核心的系统建模方法的批判。这种面向数据的建模方式无法应对日渐复杂的

2020-09-23 19:24:56 711

转载 使用Spring实现读写分离( MySQL实现主从复制)

文章目录1. 背景2. 方案2.1. 应用层解决:2.2. 中间件解决3. 使用Spring基于应用层实现3.1. 原理3.2. DynamicDataSource3.3. DynamicDataSourceHolder3.4. DataSourceAspect3.5. 配置2个数据源3.5.1. jdbc.properties3.5.2. 定义连接池3.5.3. 定义DataSource3.6. 配置事务管理以及动态切换数据源切面3.6.1. 定义事务管理器3.6.2. 定义事务策略3.6

2020-09-23 14:39:45 91

转载 DDD 领域驱动设计学习(一)- 领域模型和统一语言

1. DDD是什么?解决什么问题?1.1 软件开发的困境“随着业务的扩展,软件开发投资越来越大” 团队的规模也开始变得越来越大,软件系统的投资和维护的成本变得越来越高。“业务人员不懂架构,架构师不懂代码,开发人员不不懂业务模型” 当团队中的关键角色谁也不懂谁的时候,问题来了。。。“重构是好的,但什么时候要重构?重构到什么样的架构就是够⽤的了?” 每个有追求的团队都在做重构,但管理者更关心,什么时间必须要重构?重构的目标在哪?1.2 DDD的来源及简介2004年Eric Evans 发表Domai

2020-09-21 16:41:18 1439

转载 领域驱动设计实现之路

2004 年,当 Eric Evans 的那本《领域驱动设计——软件核心复杂性应对之道》(后文简称《领域驱动设计》)出版时,我还在念高中,接触到领域驱动设计(DDD)已经是8 年后的事情了。那时,我正打算在软件开发之路上更进一步,经同事介绍,我开始接触DDD。我想,多数有经验的程序开发者都应该听说过DDD,并且尝试过将其应用在自己的项目中。不知你是否遇到过这样的场景:你创建了一个资源库(Repository),但一段时间之后发现这个资源库和传统的DAO 越来越像了,你开始反思自己的实现方式是正确的吗?或者

2020-09-18 17:15:23 263

转载 阿里盒马领域驱动设计实践

作者:张群辉发布于:2018 年 1 月 21 日 17:00前言设计是把双刃剑,没有最好的,也没有更好的,而是条条大路到杭州。同时不设计和过度设计都是有问题的,恰到好处的设计才是我们追求的极致。DDD(Domain-Driven Design,领域驱动设计)只是一个流派,谈不上压倒性优势,更不是完美无缺。 我更想跟大家分享的是我们是否关注设计本身,不管什么流派的设计,有设计就是好的。从我看到的代码上来讲,阿里集团内部大部分代码都不属于 DDD 类型,有设计的也不多,更多的像“面条代码”,从端上一

2020-09-15 11:14:44 371

转载 如何设计出骚气的秒杀系统

文章目录前言一:秒杀应该考虑哪些问题1.1:超卖问题1.2:高并发1.3:接口防刷1.4:秒杀url1.5:数据库设计1.6:大量请求问题二:秒杀系统的设计和技术方案2.1:秒杀系统数据库设计2.2:秒杀url的设计2.3:秒杀页面静态化2.4:单体redis升级为集群redis2.5:使用nginx2.6:精简sql2.7:redis预减库存2.8:接口限流2.8.1:前端限流2.8.2:同一个用户xx秒内重复请求直接拒绝2.9:令牌桶算法限流2.10:异步下单2.11:服务降级三:总结前言秒杀系统相

2020-09-12 10:35:56 98

转载 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案

文章目录问题概述方案概述方案一详细说明:优化现有mysql数据库**1、数据库设计和表创建时就要考虑性能索引2、sql的编写需要注意优化引擎3、分区4、分表5、分库方案二详细说明:升级数据库,换一个100%兼容mysql的数据库方案三详细说明:去掉mysql,换大数据引擎处理数据开源解决方案云解决方案使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死。严重影响业务。我尝试解决该问题

2020-09-12 09:16:30 335

转载 DDD(领域驱动设计)总结

领域驱动设计总结基本概念:1.实体(entity):2.值对象(value object)3.聚合及聚合根(aggregate、aggregate root):4.工厂(factories):5.仓储(repositories):6.服务(services):7.domain事件8.DTO设计领域模型的一般步骤一些思考1. 建立完整自封闭的领域模型。2. 领域服务建模3.领域对象、领域服务以及repository之间的互相依赖基本概念:领域驱动设计(简称 ddd)概念来源于2004年著名建模专家e

2020-09-11 17:28:04 12903 2

原创 docker 批量删除含有同样名字的images

docker rmi --force $(docker images | grep doss-api | awk ‘{print $3}’)docker rmi $(docker images | grep doss-api | awk ‘{print $3}’)

2020-07-27 17:33:18 846

转载 B树详解

B树详解B树B树基本概念网上的许多资料在讲述数据结构之前都会讲相关的一些符合、说明以及特性什么的都交代清除。在阅读网上资料的时候我发现许多知识点说的都非常的官方,简单来说就是贼难看懂。所以我在记录的时候会将那些难懂的官方内容用通俗的话解释一下,方便我自己的理解。首先来说,为什么我们要引入B树呢?有二叉树不是很好吗?存在即合理。所以还是有存在的理由的。B树的时间复杂度与二叉树一样,均为O(logN)。然而B树出现是因为磁盘IO。IO操作的效率很低,那么,当在大量数据存储中,查询时我们不能一下子将所有

2020-06-28 13:41:19 1387

转载 SOA架构设计经验分享—架构、职责、数据一致性

文章目录1.背景介绍2.SOA的架构层次2.1.应用服务(原子服务)2.2.组合服务2.3.业务服务(编排服务)3.SOA化的重构3.1.保留服务空间,为了将来服务的组合4.运用DDD+GRASP进行分析和设计(防止主观的判断导致错误的假设)5.SOA分布式下的数据一致性5.1.分布式事务(基于DTC的分布式事务)5.2.事务补偿(提供正向或反向的操作来让数据在业务上是一致的)5.3.异步EDA(基于异步事件流来实现柔性的分布式事务)6.总结1.背景介绍最近一段时间都在做系统分析和设计工作,面对的业务是

2020-06-20 09:51:50 318

转载 logback-spring.xml配置文件

logback-spring.xml配置文件自己改下value="G:/logs/pmp"这个值,如果你相关依赖弄好的话,直接复制粘贴即用输出的日志文件的名称最好也改下,下文中${log.path}/web_info.log是因为我这个模块就叫web,要改的话,一个appender改两处集成到springboot的yml格式配置文件的示例:logging: config: classpath:logback-spring.xml level: dao: debug org:

2020-06-12 15:32:49 148

原创 jenkins发布踩过与GitLab相关的坑

jenkins发布踩过的坑配置gitlab项目交接之后,修改了相关的账号权限,导致jenkins发布时,无法从gitlab拉取代码root@root:/# ssh-keygen -t rsa -C "[useremail]"生成密钥root@root:/# cd ~/.ssh进入~/.sshh目录,查看密钥root@root:/# lsroot@root:/#.ssh# cat id_rsa.pub将生成的id_rsa.pub里面内容 复制到gitlab中 生成SSH K

2020-06-09 15:22:11 702

原创 Dubbo控制台DubboOPS安装

Dubbo OPS 地址https://github.com/apache/dubbo-admin拉取镜像docker pull apache/dubbo-admin编写docker-compose.yml文件在linux下创建docker-compose.yml文件(文件名自定义,例:docker-compose-dubbo.yml)root@root:/# touch docker-compose.yml编辑docker-compose.ymly文件root@root:/# vi

2020-06-06 13:23:46 535

转载 Linux Shell命令实现端口转发(端口映射)

Linux下使用Shell 命令 实现ssh端口转发实际例子来两个:ssh -CfNg -L 9987:10.154.62.197:3306 root@localhost -p 9999ssh -CfNg -L 9985:10.154.62.75:3306 root@localhost -p 99999999是本地服务器的SSH端口默认是22,默认则不写。我这是改了99999987是本地创建的一个端口要把10.154.62.197服务器上的3306端口映射到本地的9987ssh实现转发, 只要用

2020-06-04 15:31:13 2587

原创 Elasticsearch常用命令

1._cat/nodes?pretty 查看节点状态注:节点名称带表示为主节点*集群健康:curl http://localhost:9200/_cluster/health?prettystatus 字段表示了ES的整体指标。颜色的含义如下:green:所有的prinary shards和replica shareds都是激活的yellow:所有的prinary shards和部分replica shareds是激活的red:部分prinary shards是激活的...

2020-06-01 17:29:47 334

转载 服务化SOA设计与微服务

SOA面向服务体系结构,将程序中不同的功能模块,通过服务定义的接口和契约关联起来。接口是采用中立的方式定义的,它独立于实现服务的硬件平台、操作系统和编程语言。从定义上看,可以总结出SOA软件架构模式的几个特点:1、面向服务划分系统将庞大的业务系统拆分成高内聚的服务单元,每个单元对外提供服务服务能力,服务与服务之间通过相互协作共同实现业务价值2、松耦合SOA框架中可以应用多种技术,服务消费方不依赖于服务提供者的技术实现(比如Java服务提供方,Python服务消费者)。双方可以通过thrift,

2020-05-28 10:42:26 512

原创 JAVA 对象规范 POJO

文章目录POJO:Plain Ordinary Java Object 无规则简单java对象PO:Persistent Object 持久对象VO:Value Object值对象 / View Object表现层对象BO:Business Object 业务对象DTO:Data Transfer Object 数据传输对象VO与DTO的区别DAO:Data Access Object 数据访问对象DO:Domain Object 领域对象DTO与DO的区别DO与PO的区别在这里插入图片描述POJO:Pl

2020-05-27 10:50:10 1066

转载 elasticsearch7 配置篇

学习了这么多,终于开始搭建生产环境了,这一篇主要讲解配置项,以及支持中文分词的ik安装,集群的搭建。配置项确实挺多的,但把几个常用配置熟悉就好,而且就像elasticsearch官方文档所说,不存在某个使得性能大幅度提升的配置。配置项一下子看到这么多配置项,可能就吓坏了,不要怕,用到的并不多。cluster.name: elasticsearch# 配置的集群名称,默认是elasticsearch,es服务会通过广播方式自动连接在同一网段下的es服务,通过多播方式进行通信,同一网段下可以有多个集群

2020-05-26 14:11:15 1328

转载 RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储RabbitMQ提供了四种Exchange:fanout,direct,topic,headerheader模式在实际使用中较少,本文只对前三种模式进行比较。性能排序:fanout > direct >> topic。比例大约为11:10:6一.Direct ExchangeDirect Exchange - 处理路由键。需要将一个队列绑定到交换机上,要

2020-05-18 14:55:18 226

原创

文章目录串概念存储顺序存储链式存储复杂度及应用应用匹配朴素匹配KMP算法串概念串是一个特殊的线性表,由n(n>=0)个字符组成的一个有限序列,n可以由字母、数字或其他字符组成,串的每个数据元素仅有一个字符,串又称字符串S = “a1a2…ai…an”S是串名,用双引号括起来的字符序列为串值,引号本身不是串的内容存储串的存储结构比较简单,单字符的特性,使得顺序及链式都能很好的...

2020-04-09 15:54:40 712

原创 队列

文章目录队列定义类型复杂度队列的属性及概念队列的方法类型及适用场景消息队列概念模式优点缺点消息队列的选择注意事项使用场景注意事项队列定义队列是一种特殊的线性表,其特殊之处在于它只允许表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是一种受限的线性结构队列只允许在头部...

2020-04-06 19:08:04 360

转载 Circular Queue(循环队列)

为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。用java实现循环队列的方法:1、增加一个属性size用来记录目前的元素个数。目的是当head=rear的时候,通过size=0还是size=...

2020-04-06 17:58:34 989

转载 BlockingQueue(阻塞队列)

注意:该随笔内容完全引自http://wsmajunfeng.iteye.com/blog/1629354,写的很好,非常感谢,复制过来算是个积累,怕以后找不到。一. 前言在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了Blockin...

2020-04-06 15:46:16 153

原创

Stack 栈Stack(栈 )逻辑定义实现特点使用场景常见应用递归定义思想使用方式常见递归尾递归循环迭代法总结Stack(栈 )逻辑定义栈(Stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出...

2020-03-31 21:43:49 152

原创 链表

文章目录链表结构优缺点常见类型常见用法跳表结构优缺点常见应用链表结构链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。链表的存储不用考虑数据的连续性 不考虑扩容性能损耗 典型的...

2020-03-30 15:15:06 126

原创 数组

文章目录数组定义特性为什么一般使用数组要指定长度常见问题散列表(Hash哈希表)原理及构造特性如何解决散列冲突1. 开放寻址法2.链表法常见应用数组定义数组,是有序的元素序列,用于存储多个相同类型的数据的集合,数组在程序设计中,为了处理方便,把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组数组,即连续的同一类型的数据,使用连续的内存空间存...

2020-03-26 15:25:22 173

原创 Template Method(模式方法)

Template Method(模式方法) 行为型 类 1Intent_意图2在一个方法中定义一个算法的骨架 ,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤Motivation_动机3确保算法的结构保持不变,同时由子类提供部分实现Applicability_适用性4在算法结构部分通用的情况Structure_结构5Parti...

2020-03-05 19:50:00 194

原创 Visitor(访问者)

Visitor(访问者) 行为型 对象 1Intent_意图2封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变Motivation_动机3解决稳定的数据结构和易变的操作耦合问题Applicability_适用性4当想要为一个对象的组合增加新的能力,且封装并不重要时,使用访问者模式Structure_结构5Particip...

2020-03-05 17:37:07 243

空空如也

空空如也

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

TA关注的人

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