自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Amos技术足迹

喜欢忠于热爱

  • 博客(46)
  • 收藏
  • 关注

原创 动态注册Bean到Spring上下文中——基于FeignClient源码的阅读

在上一篇博文《基于Feign的局部请求拦截》的最后,我提出了如何实现系统启动将自定义注解的bean注入到Spring的ApplicationContext中,那么本博文我们就来探讨下具体的代码流程基于Feign的局部请求拦截小伙伴们在使用SpringCloud中集成的Feign功能时,只需要编写一个接口,然后再给接口上添加注解@FeignClient,然后配置上相关信息既可以调用其他系统的...

2020-02-25 17:57:31 1288 1

原创 基于Feign的局部请求拦截

由于项目的要求,不能对所有基于Feign的进行拦截,需要对不同的Feign请求进行不同的拦截,经过资料的收集整理以及SpringCloud中对于Feign的集成的源码的阅读,解决了针对Feign请求的局部拦截本项目中SpringCloud的版本是Camden.SR6版本背景说明在既有的项目上进行二次开发,服务A需要请求服务B同时需要将服务A中请求的消息头相关信息传送给服务B,但是由于既有...

2020-02-21 11:06:07 4247 1

原创 Centos7上离线编译安装Nginx

Nginx的官网上有在centos7上安装nginx的详细文档,但是由于需要nginx相关的账号, 且由于国内网速的原因导致我们中国地区按照Nginx官网上的安装方式来安装会出现一些问题,所以本篇博文详细记载安装的步骤首先Nginx在centos7上运行依赖以下插件,我们现在系统中安装以下的插件: yum install -y gcc-c++ pcre pcre-devel zl...

2019-12-15 01:24:16 380

原创 网易社招Java面试(附详细答案)

今天看到网易社招Java岗位的面试题,大致浏览了下,发现还没有答案出来,所以自己就搜索整理下,将答案分享出来,由于水平有限,如发现错误或者疑问,欢迎斧正和讨论,大家一起进步1. redis有哪几种数据结构?给你一个key怎么知道是用的哪种结构?考察对redis的数据结构的了解,以及是否在工作中是否能熟练的运用这些数据结构来解决优化问题Redis是一个内存中的数据结构存储系统,可以用作...

2019-11-25 15:55:38 6449 2

原创 Mysql分库分表实战(一)——一文搞懂Mysql数据库分库分表

由于业务需要,需要对Mysql数据库进行分库分表,故而最近一直在整理分库分表的相关知识,现手上的工作也告一段落了,抽空将自己最近的学习结果转化为博文,分享给大家,本博文打算做成一个系列的,首先是分库分表的理论知识的了解,其次是基于Java编程语言的分库分表的框架的开发,最后是分库分表的编制。让大家不仅仅从理论上了解mysql的分库分表,通过代码来更深层次的了解,理论是如何落地到实践的。最后非常感...

2019-11-05 10:29:19 36816 7

原创 终于有人把“分布式事务”说清楚了!(转载)

分布式事务高可用是指系统无中断的执行功能的能力,代表了系统的可用程度,是进行系统设计时必须要遵守的准则之一。而高可用的实现方案,无外乎就是冗余,就存储的高可用而言,问题不在于如何进行数据备份,而在于如何规避数据不一致对业务造成的影响。对于分布式系统而言,要保证分布式系统中的数据一致性就需要一种方案,可以保证数据在子系统中始终保持一致,避免业务出现问题。这种实现方案就叫做分布式事务,要么一起...

2019-10-28 09:40:57 381

原创 Kafka架构探险(三)——Kafka参数详解

Kafka提供很多的参数:broker参数、topic参数、producer参数、consumer参数等,方便我们对kafka的性能做调整,本博文就来归纳总结下常见的参数参数的说明是基于Kafka 2.12-2.3.0版本详细可以参考官网broker参数broker端的参数在Kafka目录下的config/server.properties文件中参数名称备注说明b...

2019-10-11 17:10:50 282

原创 类以及属性集按照规则过滤——一个简单的构建思路来解决

近期在工作中遇到一个功能需求,基于类以及属性集的数据过滤,功能比较简单,但是的确花费了我一天的工作量来完成该功能,在开发这个功能过程中,我觉的有些问题的思考和处理方式觉得很有帮助,所以整理如下的博文,以便自己以后遇到类似的需求能快速的解决需求如下:需要开发一个功能,能维护系统每个业务单据的数据项,每个业务单据的数据项是可以选择是否展示数据值,然后再系统展示的时候,根据已经维护好的数据项的...

2019-10-10 09:32:33 569

原创 Kafka架构探险(二)——一文带你了解Kafka

上篇博文已经讲解了如何安装Kafka的集群环境,今天我们就来一本带大家了解下Kafka,了解kafka的特点以及基本概念kafka的特点Kafka设计的初衷是为了解决互联网公司超大量级数据的实时传输,为了实现这个目标,需要考虑以下四个方面的问题吞吐量/延时消息持久化负载均衡和故障转移伸缩性吞吐量是Kafka每秒能够处理的消息数,那么很显然,我们都希望系统的吞吐量越大越好,与...

2019-10-06 21:34:38 215

原创 策略模式+Spring——让我们的代码更加高大上一点

if…else if…else 代码是实际的项目代码中出现的比例还是蛮高的,特别是针对一些业务需求根据不同类型来进行不同的业务处理,针对这种业务模型,我们来试着使用策略模式结合Spring来优化我们的代码,让代码更加高大上一点为了更好得结合业务来实现代码,先简单的介绍一下具体的业务逻辑模型:目前有一个功能,需要打印表单设置的内容,处理表单固有的属性之外,用户可以维护自定义属性,每个自定义...

2019-09-29 11:05:01 443 1

原创 一次Sql优化的体验

今天遇到一个SQL优化的问题,记录下来测试部门反映,有个功能的查询很缓慢,需要支持排查下首先描述下具体的问题数据库中一张表的大概有700多条记录,业务需要模拟一个类似属性树形的数据结构,需要查询所有父类的列表数据,查询出来符合记录的大概有400多条,目前测试点击查询,所需要的时间大概在4s多,这个效率实在太慢了;下面是SQL的内容 SELECT (SELECT ...

2019-09-19 19:28:31 184

原创 Kafka架构探险(一)——Kafka的集群安装

工欲善其事必先利其器,我们想了解Kafka的话,必须先搭建Kafka的运行环境,启动Kafka由于Kafka一般都是分布式集群来支持高并发和高可用的,所以我们这里也使用分布式集群的方法来搭建Kafka的运行环境Ip:PortKafka VersionKafka PortZookeeper VersionZookeeper Port192.168.56.1052....

2019-09-17 13:55:50 157

原创 Java并发编程——AtomicReference,解决并发修改多个属性

说到CAS理论,在java中我们第一个就想到了atomic类,一般常见的有AtomicInteger、AtomicBoolean等java.util.concurrent包下面的类,但是这个只能并发修改一个属性,如果我需要对多个属性同时进行并发修改,并且保证原子性呢?AtomicReference 了解下?AtomicReference也是java.util.concurrent包下的类,...

2019-09-11 11:00:34 1747

原创 Java内存溢出——OutOfMemoryError体验——JProfiler安装

在实际的开发过程中,我们经常遇到java.lang.OutOfMemoryError异常,那么如何定位是程序的哪里出现这个异常的呢?本博文将体验OutOfMemoryError的定位本博文体验的软件环境JDK版本IDEJava 1.8.0.144_x64IDEA 2019.1编写OutOfMemoryError的代码 public class Tes...

2019-09-10 11:55:05 603

原创 Transaction rolled back because it has been marked as rollback-only 异常处理

从 rollback-only异常中分析下事务中propagation的应用和理解rellback-only异常场景描述项目已经过去很久了,今天突然间出现一个BUG,我开发的接口自己这边运行很正常,但是别人调用的时候,在方法结束后进行事务提交时报错: Transaction rolled back because it has been marked as rollback-onl...

2019-09-09 08:37:08 5465

原创 SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(四)——Nginx+Redis+Cache实现三级缓存架构

前几篇博文我们介绍了三级缓存架构的内容,并且实现了基于Nginx的定向请求分发的功能,那么接下来我们依次来编写Nginx缓存,redis缓存和Tomcat堆缓存的代码实现参考之前的博文SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(一)——三级缓存架构体系SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(二)...

2019-09-05 18:52:38 380

原创 SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(三)——Nginx+Lua实现定向请求分发

上篇博文我们已经基于OpenResty搭建了Nginx+Lua的运行环境,并且编写了工程小Demo,本博文将基于上篇博文的环境来继续实现Nginx+Lua是实现定向请求分发参考之前的博文SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(一)——三级缓存架构体系SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(二...

2019-08-27 20:31:39 374

原创 SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(二)——Nginx环境安装和整合Lua

前面我们已经简单的介绍过了三级缓存的概念,接下来的博文中,我们需要搭建系统运行的环境、编写功能实现代码来实现我们的三级缓存架构,工欲善其事必先利其器,本片博文我们先来搭建Nginx环境以及整合LuaRedis的环境搭建我们之前的博文 《Redis教程(一)——Redis安装》 已经搭建好了,本文只是实现三级缓存架构,所以Redis这里我们这暂时不做分布式集群,只使用单机版即可,以后如果有需要...

2019-08-26 19:50:36 243

原创 SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(一)——三级缓存架构体系

最近在学习整理软件架构中的三级缓存架构,使用SpringBoot+Redis+MemCache+Nginx+Lua来实现该架构体系,来提高系统的并发访问能力,该三级缓存架构主要适用于对请求并发量比较高的数据变动不是很大的业务场景三级缓存架构在博文开始的时候,这里我们需要了解下本博文说的三级缓存架构是什么?首先确定一点,本博文中的三级缓存不是我们学硬件时的三级缓存,而是在软件开发过程中,在...

2019-08-23 15:50:14 1316

原创 缓存与数据库双写一致性的解决方案——附上代码解决方案

传统企业中为了解决高并发大流量的问题,通常使用缓存+数据库的方式来支撑高QPS的访问,虽然能解决读QPS的问题,但是同时也引入了新的问题,例如:缓存与数据库的数据不一致的情况;本博文参考网上相关的博文,详细的整理下缓存数据库数据一致性的问题,并且给出基于Java的代码解决方案关于缓存数据库数据一致性的解决方案,网上有很多,但是大都是偏向理论的,且大多数使用分布式锁来实现的,分布式锁也是一种解...

2019-08-19 19:24:19 4317 2

原创 Centos7上安装Elasticsearch 7.3.0

随着项目的运行的时间的加长,日志信息也会不断的增大,迫切的需要一款功能强大,能高效的搜索日志的相关内容,最好是支持图表展示和实施流量统计的相关系统过来支撑我们的系统,那么就必不可少的需要提下我们的Elastic的相关组件了,其中Elasticsearch是系统的基石,所以我们接下里的博客就了解下Elasticsearch,从而一步步的搭建我们需要的日志系统。工具善其事,必先利其器,我们先来搭建下...

2019-08-13 22:28:29 745

原创 RabbitMQ高可用原理讲解

这两天在针对项目过程使用的RabbitMQ得学习文档整理的过程中,发现还遗漏了RabbitMQ的就集群原理的系统的分析的文档,这个就比较尴尬了,正好最近在整理RabbitMQ的集群的搭建,那我们今天就聊聊RabbitMQ的集群的相关原理RabbitMQ的优缺点在正式的聊聊集群的原理之前,我们先简单了解下RabbitMQ的优缺点,然后为什么要使用RabbitMQ的集群模式,他能为我们解决那些...

2019-08-06 22:39:58 553

原创 创建同一类型不同的对象——Builder来秀一波

在我们实际的开发需求中,经常需要创建同一类型的不同的对象,而且这个对象的特性还是随机可变的,这样就需要我们使用一种设计模式来满足复杂多变的场景;1. 业务场景我们以经常出现的喝咖啡为例,每种咖啡都有大杯小杯和中杯之分,然后咖啡可以添加糖、牛奶或者酒(?,这个口味就比较独特了),我们可以搭配大杯咖啡+糖、大杯咖啡+牛奶、小杯咖啡+酒、大杯+糖+牛奶等等,随着添加的种类的增多,搭配的种类也是不...

2019-08-03 14:43:19 428

原创 RabbitMQ 面试那点事儿(二)

本博文接上篇《RabbitMQ面试那点事儿》,再梳理下RabbitMQ关于面试的一些知识点,本博文包含了RabbitMQ集群和高可用方面的知识1. 如何保证RabbitMQ的消息的顺序性对于这个问题,我查阅很多网上的资料,大体来说主流的解决方案有两种:一种是使用单线程消费来保证消息的顺序性对消息进行编号,消费者处理时根据编号来判断顺序乍一看,觉得两种方案没有什么问题,但是深入了解...

2019-07-25 23:26:01 164

原创 Centos7下安装和配置SonarQube7.7

IDEA中的代码规范检查很好用,但是不能检测代码的质量,所幸有了SonarQube,我们可以提交代码到git上进行代码质量检测为了体验SonarQube,我们先来在Centos7上安装SonarQube运行环境,首先准备sonarQube的安装包,不方便下载的可以使用百度云提供的安装包SonarQube:https://pan.baidu.com/s/1vJYHJKF5Hrhr6rL4MX...

2019-07-19 20:19:21 1166

原创 RabbitMQ面试那点事儿

简单的整理RabbitMQ的相关的知识,我们初步了解了RabbitMQ的相关知识,那么我们怎么在我们的工作中使用RabbitMQ呢,使用RabbitMQ应该需要注意哪些问题。我们以面试题的方法来展示,不过本次的题目不包括集群和高可用方便的,这个等我梳理集群和高可用的相关知识后再整理对应的面试题本博文参考网上很多关于RabbitMQ的经典面试题,整理归纳并加上自己的理解,意在梳理自己对Rabb...

2019-07-18 19:52:41 391

原创 必备技能——使用线程池来初始化缓冲队列

在我们的业务场景中,经常会遇到一些需要在系统启动时就需要手动缓存一下线程,方便我们去使用已有的线程去处理一些业务,降低系统资源的消耗等,今天我们就来讲解下Java开发必备技能,使用线程池初始化缓冲队列ServletListenerRegistrationBean我们用来演示的项目是基于SpringBoot框架,在框架中我们需要向web容器中注册监听器,可以使用ServletListener...

2019-07-16 22:12:04 663 1

原创 RabbitMQ集群搭建

rabbitMQ的两种重要特性,异步化提高系统抗峰值能力和系统及功能解耦,这两个特点决定了rabbitMQ在我们的系统中占据了重要的地位,所以为了让RabbitMQ高可用,我们今天就来讲解下RabbitMQ的集群环境搭建应用常识一般情况下,一个单机版的rabbitMQ能承受大运1000/s的消息量(跟网络和消息的大小有关,数值存在波动),但是如果是集群环境中,就可以将访问的压力分摊到集群中...

2019-07-16 22:10:47 151

原创 SpringBoot整合RabbitMQ——交换机和队列的管理和绑定

本博文从某个角度来说,应该是rabbitMQ应用开发的知识点梳理,使用目前最广泛流行的SpringBoot来集成rabbitMQ的功能开发,在开发的过程中讲解rabbitMQ的各种特性、技能点以及开发过程中需要注意的地方上一篇博文Centos7下RabbitMQ的搭建我们已经搭建好RabbitMQ的服务器,并且简单的介绍了MQ服务中主要的几个概念,各个概念的主要作用以及为了实现消息的发送和接...

2019-07-16 22:09:06 1731

原创 Centos7下RabbitMQ的搭建

接下来我们来整理学习下RabbitMQ的相关技能点,工欲善其事必先利其器,我们首先来理解RabbitMQ的一些特性,我们为什么选择RabbitMQ来作为我们的消息中间件。带着问题去学习OK,还是延续我们之前的学习特定,带着问题去学习,我们先了解下:什么是rabbitMQ?rabbitMQ的一些主要的特性和优缺点rabbitMQ能为我们解决什么样的问题,主要的运用场景有哪些rabb...

2019-07-16 22:05:55 144

原创 全局代码异常处理封装——让代码逼格更高点

我们开发过程中,不管是通用代码的开发还是业务代码的编写,都涉及到异常的处理,如果不对异常进行封装处理的话,会导致我们的代码十分的不雅观,比较low,所以一个好的全局异常处理的封装不仅仅能加快我们的开发效率,并且也能让我们的代码逼格更高点,何乐而不为呢?首先我们来看下一般情况下代码的处理 /** * 方法定义声明式异常,明确方法调用者需要手动处理异常 * ...

2019-07-11 20:27:29 443 1

原创 SpringBoot整合RabbitMQ——RabbitMQ进阶

title: SpringBoot整合RabbitMQ——RabbitMQ进阶date: 2019-07-06 21:20:35tags:rabbitMQSpringBootcategories:rabbitMQrabbitMQ如何保证如果消息发送失败,保证其消息不丢失、怎么设置消息过期时间以及死信队列是如何在消息消费失败时保证消息不丢失的、如何使用过期时间来实现延迟队列以及...

2019-07-06 21:24:56 679

原创 SpringBoot整合RabbitMQ——消息的发送和接收

上篇博文我们整理了RabbitMQ的交换机、队列以及路由绑定等相关知识,并且了解了RabbitMQ是如何发送消息给队列的,以及重要的RoutingKey等重要知识点,这篇博文我们来重点了解下RabbitMQ是如何发送消息,消费消息的,本片博文我们还是以代码为主,简要说明为辅,同时对消息的发送和接收功能进行简单的封装,可以作为一个jar包给第三方进行使用。本博文是在上一篇博文《SpringBo...

2019-07-03 21:03:28 6751 7

原创 SpringBoot整合RabbitMQ——交换机和队列的管理和绑定

本博文从某个角度来说,应该是rabbitMQ应用开发的知识点梳理,使用目前最广泛流行的SpringBoot来集成rabbitMQ的功能开发,在开发的过程中讲解rabbitMQ的各种特性、技能点以及开发过程中需要注意的地方上一篇博文Centos7下RabbitMQ的搭建我们已经搭建好RabbitMQ的服务器,并且简单的介绍了MQ服务中主要的几个概念,各个概念的主要作用以及为了实现消息的发送和接...

2019-06-29 23:54:49 9271

原创 Centos7下RabbitMQ的搭建

接下来我们来整理学习下RabbitMQ的相关技能点,工欲善其事必先利其器,我们首先来理解RabbitMQ的一些特性,我们为什么选择RabbitMQ来作为我们的消息中间件。带着问题去学习OK,还是延续我们之前的学习特定,带着问题去学习,我们先了解下:什么是rabbitMQ?rabbitMQ的一些主要的特性和优缺点rabbitMQ能为我们解决什么样的问题,主要的运用场景有哪些rabb...

2019-06-24 23:12:38 138

原创 Redis场景应用实例

Redis的相关知识点和需要注意的问题我们都已经梳理过了,关键还是需要运用到实际的工作中才能达到学以致用,下面我们将整理一个实际应用的场景,并且集合Redis来实现其需求。目前公司有十万员工,分成500个部门,公司为员工制定了每日9点前和18点后网上签到的制度,签到之后可以及时查看自身签到状态,主管可以及时收到下属员工的签到状态,一整天未签到的员工自动补充旷工以上为场景;请用java+re...

2019-06-22 20:22:24 308

原创 Redis面试以及在分布式集群环境中遇到的问题

Redis 面试题前面已经系统的梳理了Redis的各个功能和搭建的方法,下面我们就来系统的梳理下,关于Redis在系统中可能会出现的面试题介绍Redis的集中架构模式单机型这个模型很简单,多个客户端直接连接Redis服务器特点:内存容量有限,支持的QPS有限,无法扩容,并且没有高可用主从复制(读写分离)通过Redis的replication的功能,创建多个Master...

2019-06-21 20:59:28 324

原创 Redis教程(五)——RedisCluster配置

终于到了Redis实际生产过程中的重头戏——Redis Cluster,之前介绍的都是Redis的基础知识和提供的功能,我们可以基于之前学习到的功能搭建一个简单的基于Redis的缓存方案,并且具有10w+左右的并发量,但是在大型的电商活动中,这样的缓存并不能解决我们的实际需要,并且自行搭建的Redis支持的并发可能会出现一些意料不到的问题,去维护也是需要很高的人力成本。对此,Redis官方提供了...

2019-06-19 20:17:52 527

原创 Redis教程(四)——配置高可用和集群

在生产环境中,Redis单实例远远不能提供稳定高效,具备数据冗余和高可用的服务。所以今天我们来整理下,如何使用哨兵来搭建Redis服务端的高可用和集群在搭建高可用和集群前,我们先要带着如下的问题来学习什么是Redis的高可用Redis高可用需要达到哪些要求什么是哨兵?有哪些作用如何配置哨兵哨兵的原理以及数据的管理问题Redis高可用单机版的Redis的主从复制和持久化我们解...

2019-06-18 21:03:28 228

原创 Redis教程(三)——Redis的主从复制

上篇博文我们了解该如何实现Redis的持久化,这篇博文再get下Redis的主从复制的相关知识点,理解主从复制的操作、原理以及完全重新同步和部分重新同步的区别,能优化主从复制并且进行故障诊断。Redis的安装和持久化Redis的安装Redis的持久化Redis的主从复制(replication)Redis的主从复制是组成Redis高可用的一部分,也是必不可少的一部分,通过Red...

2019-06-18 21:01:58 263

空空如也

空空如也

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

TA关注的人

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