自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

成长是一辈子的事

即使看不到未来, 即使看不到希望,也依然相信,自己错不了,自己选的人生错不了。...

原创 如何根据项目、资源做微服务架构中的服务拆分

前言 最近几年微服务架构开始流行起来,单体应用在部署效率、开发成本、系统可用性方面不如微服务架构。那么单体应用如何向微服务架构转变呢,这里就需要服务化拆分。 服务化拆分 服务化拆分有两种方式: 拿个简单的社交网站为例,网站有首页内容模块,评论模块,主页模块和私信模块等。 纵向拆分: 纵...

2019-03-30 22:49:07 556 0

原创 SpringBoot @ConditionalOnBean、@ConditionalOnMissingBean注解源码分析与示例

前言: Spring4推出了@Conditional注解,方便程序根据当前环境或者容器情况来动态注入bean,对@Conditional注解不熟悉的朋友可移步至 Spring @Conditional注解 详细讲解及示例 这篇博客进行学习。 继@Conditional注解后,又基于此注解推出了...

2018-08-11 22:50:12 77795 16

原创 Spring ConfigurationCondition接口详解

前言: 最近在看@ConditionalOnBean的时候,看到了ConfigurationCondition接口,对这个接口比较陌生,故了解一下。 介绍: ConfigurationCondition的定义是这样的,它继承了Condition类,如果读者对Condition类不不熟悉,可以...

2018-08-11 18:55:50 3090 0

原创 Spring @Conditional注解 详细讲解及示例

前言: @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。 @Conditional的定义: //此注解可以标注在类和方法上 @Target({ElementType.TYPE, ElementType.METHOD}) @...

2018-08-08 01:00:01 42833 20

原创 Java8新特性 default关键字

引言:        在查看Enumeration接口源码的时候,发现新增了一个方法,这个方法是有方法体的,并且用default修饰的。这个修饰符看起来很陌生,查阅文档后,大概了解了些。文档中说:default methods enable you to add new functionality...

2018-05-09 10:13:15 12680 6

原创 设计模式学习与整理-目录篇

在学习编程和实际编程工作中,设计模式是很重要的一部分。从今天起,我就要开始系统地学习并整理设计模式。下列目录黑体字将逐步变成超链接。 1.设计模式学习与整理 - 命令模式 2.设计模式学习与整理 - 策略模式 3.设计模式学习与整理 - 模板方法模式 4.设计模式学习与整理 - 观察...

2018-04-07 16:04:15 190 2

原创 Windows安装Docker报错cannot enable hyper-v service

前言 windows 安装 docker 的时候,启动异常,报: cannot enable hyper-v service。 方法一 可以先看晚上的方法 确认hyper-v是否启动 确认cpu的svmmode是否打开 该方法来自于: https://blog.csdn.net/weixin_4...

2020-06-10 12:54:10 2095 0

原创 取消Rainbow Brackets彩色框

此文篇幅较短,预计几秒就读完。 Rainbow Brackets 是很好用的插件,github:https://github.com/izhangzhihao/intellij-rainbow-brackets。安装起来方便,使用起来高效。 但是我使用的时候,把一个代码块高亮之后,又想把高亮...

2020-05-09 09:39:19 268 0

原创 精进代码 - 接口参数校验

前言   我们在写接口的时候,需要对传来的数据进行必要的校验,先来看一段可以改造的代码: public String register(User user) { if (StringUtils.isEmpty(user.getAccount()) || StringUtils.isEmpt...

2020-04-14 15:17:36 64 0

原创 精进代码 - 接口统一响应体

前言   如今web项目的接口大都是 RESTful 的,响应体中包含了一些接口执行的信息,比如返回的数据(data)、响应码(code)、是否成功(success)和响应描述(message)。每个接口都需要封装成这种格式,这样每次都需要留意。   下面来介绍一种方法,是 Spring 的 we...

2020-04-14 15:10:04 73 0

原创 高性能数据库之 分库分表

前言 前面的读写分离,分散了数据库读写操作的压力,没有分散存储压力,当数据量很大时,单台数据库服务器就会出现性能瓶颈,主要在以下几方面: 数据量太大,读写性能下降 数据文件也会变得很大, 备份恢复时间变长 所以,需要控制单台数据库服务器数据量大小,分库分表,他来了!先从分库开始说起。 分库 一...

2020-03-21 18:46:46 83 0

原创 高性能数据库之 读写分离

前言 随着业务的不断发展,单机数据库已经不能满足业务需要。接下来讲讲数据库集群的几种方式:读写分离和分库分表。 读写分离 原理 读写分离的原理就是将数据库的读写操作分散在不同的节点上。 实现方式 多台数据库搭建一个集群,一台数据库做主库,其他数据库做从库。 主库负责写操作,从库负责读操作 ...

2020-03-21 18:42:08 59 0

原创 BeanFactory和ApplicationContext的关系

示例 使用版本为 Spring Framework 5.2.2.RELEASE 示例: 首先创建了Repository类,有两个属性,类型为 BeanFactory 和 ApplicationContext public class Repository { private BeanFact...

2020-02-29 21:50:36 48 0

原创 AOP动态数据源切换 实现主从读写分离

前言 MySQL 主从可以更好的减少数据库压力,今天搞了一个小demo,只读接口让他去从库查,用注解方式实现。代码上传至码云: https://gitee.com/yunup/some-examples 环境信息 Java 版本 1.8 SpringBoot 版本 2.2.3.RELEASE My...

2020-01-18 18:04:55 154 0

原创 Java并发学习(一)并发程序的原子性、有序性和可见性问题

前言 编写正确的并发程序是一件极困难的事情,并发程序的 Bug 很难重现,也很难追踪,很多时候都让人很抓狂。 并发编程是怎么出问题的?这些年,我们的 CPU、内存、I/O 设备都在不断更新迭代,在这个快速发展的过程中,有一个核心矛盾一直存在,就是这三者的速度差异:CPU的速度远远高于内存,内存的...

2019-12-12 22:54:38 36 0

原创 Ruby gem install cannot load such file -- zlib

百度找解决方案未果,就去了谷歌,找到一个方案,地址为https://qiita.com/Gin/items/99e4e92ac53fb3504471。 因为是墙外的网站,所以我截图贴在下面:

2019-11-12 22:33:52 151 0

原创 1024程序员节快乐

世界上有10种人,一种懂二进制的,一种不懂二进制的。 程序员节快乐!

2019-10-24 16:25:39 52 0

原创 内存屏障与volatile内存语义的实现

内存屏障 为了保证内存可见性,java 编译器在生成指令序列的适当位置会插入内存屏障指令来禁止特定类型的处理器重排序。JMM 把内存屏障指令分为下列四类: 屏障类型 指令示例 说明 LoadLoad Barriers ...

2019-09-26 23:51:45 187 0

原创 Idea 远程调试详解

准备工作 首先,需要调试的服务器的ip,比如180.116.81.42 还有远程服务器的防火墙需要关掉 本地 Idea 设置 1. 点击 Run -> EditConfiguration -> + -> Remote 2. 红框 1 处,将它复制下来,下面需要用到 ...

2019-08-17 12:27:10 55 0

原创 RabbitMQ集群安装rabbitmq_delayed_message_exchange插件问题

前言 我们的RabbitMQ需要安装 rabbitmq_delayed_message_exchange 插件。 环境版本信息是: Erlang:22.0,RabbitMQ:3.7.16 CentOS:7集群配置是双节点的镜像模式 如果还没有安装Erlang、RabbitMQ,可以看这篇htt...

2019-07-19 18:04:58 1058 0

转载 自己动手实现牛逼的单例模式

其实写这篇文章之前,我犹豫了一下,毕竟单例大家都知道,写这么一篇文章会不会让人觉得老掉牙。后来想想,就当一种记录吧。先来一副漫画吧,如下图所示 ok,我们回顾下小灰的遭遇,上述漫画所提出的那些问题主要有以下三点: 为什么静态内部类的单例模式是最推荐的? 如何在反射的情况下保证单例? 如何在反...

2019-07-18 22:55:24 73 0

原创 设计模式学习与整理-单例模式

前言 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需...

2019-07-18 22:31:13 39 0

原创 RabbitMQ 3.7.16 安装踩坑记录

前言 安装RabbitMQ的时候有点坎坷,所以这里记录下。 这里Linux版本是 CentOS 6.6安装的是当前最新版 RabbitMQ 3.7.16,对应Erlang22.0。 安装Erlang 首先下载Erlang: 我选择了 RabbitMQ 团队提供的精简版 Erlang,地...

2019-07-11 16:48:51 2474 0

转载 什么场景应该用 MongoDB

月初在云栖社区上发起了一个 MongoDB 使用场景及运维管理问题交流探讨 的技术话题,有近5000人关注了该话题讨论,这里就 MongoDB 的使用场景做个简单的总结,谈谈什么场景该用 MongoDB? 很多人比较关心 MongoDB 的适用场景,也有用户在话题里分享了自己的业务场景,比如 案例...

2019-07-09 15:57:33 132 1

转载 MongoDB索引原理

为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样适用于其他的数据库比如mysql)。 mongo-9552:PRIMARY> db.person.find() { "_...

2019-07-09 15:04:54 653 0

原创 设计模式学习与整理-原型模式

介绍 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价...

2019-06-25 17:12:00 48 0

原创 设计模式学习与整理-建造者模式

介绍 我们假设一个快餐店的案例,快餐店中有很多种类的汉堡、薯条和饮料。客人每次点的餐都可能不一样。这样这些食物的搭配就会有很多种。 建造者模式(Builder Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder ...

2019-06-25 14:46:09 53 0

原创 设计模式学习与整理-抽象工厂模式

介绍 是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 应用场景 (1)系统需要为用户提供多个对象,但不希望用户直接用new运算符实例化这些对象,即希望用户和创建对象脱耦。 (2)系统需要为用户提供一系列对象,...

2019-06-24 09:59:37 54 0

转载 Redis和MongoDB的区别

前言 项目中用的是MongoDB,但是为什么用其实当时选型的时候也没有太多考虑,只是认为数据量比较大,所以采用MongoDB。之前也用过redis,当时是用来存储一些热数据,量也不大,但是操作很频繁。现在项目中用的是MongoDB,目前是百万级的数据,将来会有千万级、亿级。 就R...

2019-06-21 17:42:14 1107 0

原创 ElasticSearch 启动 unknown setting [node] please check that any required plugins are installed

在 elasticsearch.yml 配置 node.name 的时候,启动报错,以下是配置和报错信息。 报错原因其实就是因为少了个空格! 这是因为 yml 文件写属性值的时候必须要空格。 修改配置文件后,可成功运行: ...

2019-05-25 13:49:16 4026 0

原创 ElasticSearch 5.2 安装ES

前言 这篇文章简单地介绍了安装ES,当然,安装ES就是很简单。 步骤 1.首先,java环境是需要配置好的,配置步骤略。 2.下载安装包,下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-5-2-0 ...

2019-05-01 15:24:54 167 0

原创 ElasticSearch 5.2 常用概念

有一些概念是Elasticsearch的核心。从一开始就理解这些概念将帮助简化学习过程。 近实时(Near Realtime NRT) 近实时(NRT)编辑 Elasticsearch是一个近乎实时的搜索平台。这意味着从索引文档到可搜索文档的时间有一点延迟(通常是一秒)。 集群(Cluste...

2019-05-01 15:05:10 88 0

原创 设计模式学习与整理-工厂方法模式

介绍 工厂方法模式(Factory Method Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂方法模式中,定义一个用于创建对象的接口,让子类决定实例化哪一个类。 应用场景 (1)用户需要一个实例,关心创建的细...

2019-04-23 00:37:18 46 0

原创 设计模式学习与整理-中介者模式

介绍 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。 例如,在一个房屋租赁系统中,有很多求租者和出租者,如果要求他们之间必须认识才能进行有关租...

2019-04-21 17:06:09 48 0

原创 设计模式学习与整理-迭代器模式

介绍 迭代器模式(Iterator Pattern)用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 应用场景 (1)让用户访问一个集合中对象,但不想暴露对象在集合中的存储结构。 (2)希望对遍历不同的集合提供一个统一的接口。 模式结构 (1)集合(...

2019-04-17 23:10:58 44 0

原创 设计模式学习与整理-外观模式

介绍 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个可以访问的接口。这种类型的设计模式属于结构型模式。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 应用场景 (1)对于一个复杂的子系统,需要为用户提供一个简单的交互...

2019-04-16 21:25:28 51 0

原创 设计模式学习与整理-责任链模式

介绍 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。对请求的发送者和接收者进行解耦。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 应用场景 ...

2019-04-15 21:26:07 71 0

原创 设计模式学习与整理-适配器模式

介绍 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式。 举个简单的例子,读卡器作为电脑和内存卡的适配器,把内存卡放到读卡器中,再将读卡器插入电脑,电脑就可以读取内存卡的数据。 应用场景 1、系统需要使用现有的类,而此类的接口不...

2019-04-09 20:29:21 86 0

原创 10x程序员工作法 学习笔记

前言 这篇文章是在学习极客时间专栏《10x程序员工作法》后,做出的学习笔记。 工作中应该如何思考: 以终为始 沟通反馈 以终为始:遇到事情,倒着想 网上流传着一个帖子,亚马逊 CTO 介绍亚马逊是如何开发一项产品的,简单来说,他们采用向后工作的方法,开发一项产品的顺序为: 写新闻...

2019-04-07 18:25:04 908 0

转载 详解MySQL行锁、死锁和死锁检测

前言 上一篇文章中,介绍了 MySQL 的全局锁和表级锁,这篇文章讲解行锁。 MySQL 的行锁是在引擎层由各个引擎自己实现的,但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这...

2019-04-07 13:37:22 1079 0

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