自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

成长是一辈子的事

吃不了自律的苦,就要忍受平庸的自己。

  • 博客(105)
  • 资源 (2)
  • 收藏
  • 关注

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

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

2019-03-30 22:49:07 799

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

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

2018-08-11 22:50:12 121767 20

原创 Spring ConfigurationCondition接口详解

前言:最近在看@ConditionalOnBean的时候,看到了ConfigurationCondition接口,对这个接口比较陌生,故了解一下。介绍:ConfigurationCondition的定义是这样的,它继承了Condition类,如果读者对Condition类不不熟悉,可以在Spring @Conditional注解 详细讲解及示例 中了解。package org.s...

2018-08-11 18:55:50 4981

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

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

2018-08-08 01:00:01 75198 39

原创 Java8新特性 default关键字

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

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

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

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

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

原创 MySQL开发约束

MySQL 表设计规范明确规定:禁用存储过程,函数,触发器,视图,外键,所有逻辑业务上实现必须使用 innodb 引擎,不允许用myisam。统一utf8mb4编码,不能gbk。必须要有主键,主键如无特殊情况,必须自增整形。例如: INT或者 BIGINT类型,如果是分片表,主键自增可由中间件实现。所有字段要求使用not null,字段都定义为: not null default ‘ 合理默认值’ 。需要多表 join的字段,数据类型、长度必须保持绝对一致,才能用到索引。例如:

2020-10-24 17:50:42 68

原创 ReentrantLock源码解析

ReentrantLock lock = new ReentrantLock(false);lock.lock();System.out.println("do something");lock.unlock();首先来介绍 AbstractQueuedSynchronizer,它是一个双向链表的结构,有头节点和尾结点。来看看它的一些属性// 在ReentrantLock语境下代表重入次数(0代表没有被持有)private volatile int state;// 独占锁模式下持有锁的线程

2020-08-31 19:40:47 99

原创 Redis主从、哨兵详解及安装

前言Redis 主从复制的优缺点Redis 主从复制是现在流行的 Redis 高可用方案,他的优点是可以分担压力,扩展读的能力,并且一台节点挂了,这个节点是主节点的话,从节点可以挑起大梁,承担重任。Redis主从有啥缺点呢?主节点宕机, 从节点上位, 那么需要人为修改所有应用方的主节点地址(改为新的master地址), 还需要命令所有从节点复制新的主节点。Redis-sentinel (下面统称为哨兵)可以解决上面的问题。Redis 哨兵模式的工作方式每个 sentinel 节点每秒都会向他

2020-07-30 17:28:50 139

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

前言windows 安装 docker 的时候,启动异常,报: cannot enable hyper-v service。方法一可以先看晚上的方法确认hyper-v是否启动确认cpu的svmmode是否打开该方法来自于:https://blog.csdn.net/weixin_46145745/article/details/106195619方法二如果方法一不行,可以试试方法二,我自己通过这个方法搞好的。可以试试:关闭 hyper-v重启开启 hyper-v重启该方法

2020-06-10 12:54:10 7824

原创 取消Rainbow Brackets彩色框

此文篇幅较短,预计几秒就读完。Rainbow Brackets 是很好用的插件,github:https://github.com/izhangzhihao/intellij-rainbow-brackets。安装起来方便,使用起来高效。但是我使用的时候,把一个代码块高亮之后,又想把高亮颜色去掉,没有找到快捷键,最后偶然按了 Esc,高亮框就去掉了,在此分享出来。...

2020-05-09 09:39:19 1009 6

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

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

2020-04-14 15:17:36 136

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

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

2020-04-14 15:10:04 179

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

前言前面的读写分离,分散了数据库读写操作的压力,没有分散存储压力,当数据量很大时,单台数据库服务器就会出现性能瓶颈,主要在以下几方面:数据量太大,读写性能下降数据文件也会变得很大, 备份恢复时间变长所以,需要控制单台数据库服务器数据量大小,分库分表,他来了!先从分库开始说起。分库一般都是业务分库,也就是按照业务模块将数据分散到各个数据库,比如一个电商网站,可以分为用户、商品和订单库...

2020-03-21 18:46:46 231

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

前言随着业务的不断发展,单机数据库已经不能满足业务需要。接下来讲讲数据库集群的几种方式:读写分离和分库分表。读写分离原理读写分离的原理就是将数据库的读写操作分散在不同的节点上。实现方式多台数据库搭建一个集群,一台数据库做主库,其他数据库做从库。主库负责写操作,从库负责读操作主库通过复制将数据的变更同步到从库,每台节点都有完整的数据需要考虑的问题复制延迟主库...

2020-03-21 18:42:08 144

原创 BeanFactory和ApplicationContext的关系

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

2020-02-29 21:50:36 228

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

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

2020-01-18 18:04:55 227

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

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

2019-12-12 22:54:38 63

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

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

2019-11-12 22:33:52 367

原创 1024程序员节快乐

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

2019-10-24 16:25:39 75

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

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

2019-09-26 23:51:45 450

原创 Idea 远程调试详解

准备工作首先,需要调试的服务器的ip,比如180.116.81.42 还有远程服务器的防火墙需要关掉本地 Idea 设置1. 点击 Run -> EditConfiguration -> + -> Remote2. 红框 1 处,将它复制下来,下面需要用到3. 红框 2 处,填上远程服务器的 ip4. 红框 3 处,是默认端口,不用动服务器项...

2019-08-17 12:27:10 100

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

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

2019-07-19 18:04:58 1748

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

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

2019-07-18 22:55:24 99

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

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

2019-07-18 22:31:13 65

原创 RabbitMQ 3.7.16 安装踩坑记录

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

2019-07-11 16:48:51 4329

转载 什么场景应该用 MongoDB

月初在云栖社区上发起了一个 MongoDB 使用场景及运维管理问题交流探讨 的技术话题,有近5000人关注了该话题讨论,这里就 MongoDB 的使用场景做个简单的总结,谈谈什么场景该用 MongoDB?很多人比较关心 MongoDB 的适用场景,也有用户在话题里分享了自己的业务场景,比如案例1> 1. 用在应用服务器的日志记录,查找起来比文本灵活,导出也很方便。也是给应用练手,...

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

转载 MongoDB索引原理

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

2019-07-09 15:04:54 1309

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

介绍原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来...

2019-06-25 17:12:00 75

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

介绍我们假设一个快餐店的案例,快餐店中有很多种类的汉堡、薯条和饮料。客人每次点的餐都可能不一样。这样这些食物的搭配就会有很多种。建造者模式(Builder Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。应用场景一些基本部件不会变,而其组合经常变化的时候。代码案例模拟...

2019-06-25 14:46:09 79

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

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

2019-06-24 09:59:37 79

转载 Redis和MongoDB的区别

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

2019-06-21 17:42:14 1490

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

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

2019-05-25 13:49:16 8899

原创 ElasticSearch 5.2 安装ES

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

2019-05-01 15:24:54 309

原创 ElasticSearch 5.2 常用概念

有一些概念是Elasticsearch的核心。从一开始就理解这些概念将帮助简化学习过程。近实时(Near Realtime NRT)近实时(NRT)编辑 Elasticsearch是一个近乎实时的搜索平台。这意味着从索引文档到可搜索文档的时间有一点延迟(通常是一秒)。集群(Cluster)集群是一个或多个节点(服务器)的集合,它们共同保存整个数据,并提供跨所有节点的联合索引和搜索功...

2019-05-01 15:05:10 113

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

介绍工厂方法模式(Factory Method Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,定义一个用于创建对象的接口,让子类决定实例化哪一个类。应用场景(1)用户需要一个实例,关心创建的细节。(2)用户需要一个类子类的实例,但不希望与该类的子类形成耦合。模式结构(1)抽象产品(...

2019-04-23 00:37:18 76

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

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

2019-04-21 17:06:09 64

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

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

2019-04-17 23:10:58 59

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

介绍外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个可以访问的接口。这种类型的设计模式属于结构型模式。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。应用场景(1)对于一个复杂的子系统,需要为用户提供一个简单的交互操作。(2)不希望客户代码和子系统中的类有耦合,以便提高子系统的独立性和可移植性。(3)当整个系统...

2019-04-16 21:25:28 70

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

介绍责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。应用场景(1)有许多对象可以处理用户的请求,希望程序在运行期间自动确定处理用户的那个对象。(2)希望用户...

2019-04-15 21:26:07 91

MongoDB Community Server 4.4.1 Windows版本

MongoDB Community Server 4.4.1 版本,国内网络下载不了,本人去下载的

2020-10-16

深入理解Java虚拟机 JVM高级特性与最佳实践(第二版)+ 源代码

深入理解Java虚拟机 JVM高级特性与最佳实践(第二版)与源代码

2018-03-11

空空如也

空空如也

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

TA关注的人 TA的粉丝

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