自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

noaman_wgs的博客

盛夏白瓷梅子汤,碎冰碰壁当啷响。

  • 博客(243)
  • 资源 (3)
  • 论坛 (1)
  • 收藏
  • 关注

原创 【分布式】图解Raft协议

Raft算法是目前分布式系统开发选用较多的共识算法,它在Paxos算法的基础上做了简化和限制。本文采用动态图的形式讲解Raft协议中的选举和日志复制整个过程,帮助理解选举过程中的选举超时、心跳超时、重新选举概念,以及日志复制、网络分区等情况。

2020-08-27 15:01:11 525

原创 Java SSM练手小项目-手把手带你搭建一个基于SSM框架的人力资源管理后台系统

前言相信很多小伙伴在学习完SSM三大架构以后,不知道该如何找到一个简单容易上手的项目进行实战训练,经常在博客上看到一个不错的项目下载下来以后全部都是代码,无处下手。因此本文力求以最简单易懂的项目结构和代码搭建一个还较为完整(即从登录到退出的整个流程)的后台系统。(适合新手)整个项目的操作流程动态图如下(由于CSDN对上传图片大小有限制,这里录制的gif画面很不清晰,点击图片查看更清晰): ...

2018-03-11 00:22:54 63300 168

原创 【限流02】限流算法实战篇 - 手撸一个单机版Http接口通用限流框架

本文将从需求的背景、需求分析、框架设计、框架实现几个层面一步一步去实现一个单机版的Http接口通用限流框架。

2020-06-30 00:35:46 214

原创 【限流01】限流算法理论篇

微服务就是将复杂的大应用拆分成小的应用,这样做的好处是各个应用之间独立开发、测试、上线,互不影响。但是服务拆分之后,带来的问题也很多,我们需要保障微服务的正常运行,就需要进行服务治理。常用手段有:鉴权、限流、降级、熔断等。其中,限流是指对某个接口的调用频率进行限制,防止接口调用频率过快导致线程资源被耗尽从而导致整个系统响应变慢。限流在很多业务中都有应用,比如:秒杀、双11。当用户请求量过大时,就会拒绝后续接口请求,保障系统的稳定性。接口限流的实现思路是:统计某个时间段内的接口调用次数,当调用次数超过设置

2020-06-30 00:26:08 1544

原创 【分布式】03-分布式一致性协议2PC&3PC&Paxos&Raft协议

分布式系统设计中,几乎都需要在服务可用性性 和数据一致性之间做权衡,也因此诞生了一系列的一致性协议,常见的有2PC一致性协议、3PC一致性协议、Paxos一致性算法、Raft一致性算法。

2020-06-17 22:51:45 181

原创 【分布式】02-分布式锁原理和选型

在讨论分布式锁原理的时候,我们带着如下思考进入今天的主题:根据业务场景如何选择分布式锁模型:CP还是AP?读锁、加锁是否是原子操作?锁能否正常释放,避免死锁(如添加过期时间)保证分布式锁高可用:如何保证锁资源不丢失(保存锁的机器可能宕机)锁的本质就是对共享资源的串行化处理。在单进程环境中,Java JDK提供了两种互斥锁实现:Lock和Synchronized。这两种锁对共享资源的操作前后加解锁,保证不同线程可以互斥有序的操作共享资源。在分布式环境下,就需要我们自己来实现分布式锁,保证不同J

2020-05-31 23:58:29 206

原创 【分布式】01-分布式系统和CAP理论

在正式介绍分布式锁之前,我们有必要再回顾下分布式系统和CAP定理,知己知彼才能知道为什么会出现分布式锁的概念。话不多说,直接进入本篇文章的主题。一、分布式与集群的区别分布式系统并非是一蹴而成的,而是经过几个阶段演化而来。1、单机单机就是将一个系统部署在一台服务器上,所有请求都由这台服务器处理。![在这里插入图片描述](https://img-blog.csdnimg.cn/20200531173211538.png?x-oss-process=image/watermark,type_ZmFuZ

2020-05-31 17:45:27 272

原创 【Kafka精进系列007】从面试的角度分析Kafka Producer

1、Kafka为什么采用分区的概念Kafka消息采用 主题(Topic) - 分区(partition) - 消息的三级结构,每条消息只会保存在某一个分区中,而不会在多个分区被保存多份。采用分区的作用就是 提供负载均衡的能力,实现系统的高伸缩性。不同的分区放在不同的节点机器上,数据的读写操作针对的是分区这个粒度,每个节点的机器能够独立执行各自分区的读写处理请求,并且还可以通过添加新的节点机...

2020-04-20 22:33:13 131

原创 【Kafka精进系列006】KafkaProducer消息发送源码解析
原力计划

上一讲中,我们大概的分析了下KafkaProducer消息发送流程,本节将从源码的角度深入分析消息发送过程。消息发送之前的准备工作都已经在客户端KafkaProducer的构造器中完成,包括:配置项加载、序列器初始化、消息收集器初始化、消息发送线程初始化等等。而消息的发送入口在send()方法中:Future<RecordMetadata> send(ProducerRecord&...

2020-04-20 22:30:43 133

原创 【Kafka精进系列005】Kafka生产者流程客户端消息发送过程解析
原力计划

在前两节博客中,我们已经演示了如何在Docker搭建Kafka集群以及实现Kafka的消息发送和接收过程.本文将深入Kafka Producer的消息发送过程,从源码的角度梳理下Kafka的发送过程。注:本文Kafka源码版本:1.0.0.一、KafkaProducer介绍1、KafkaProducer介绍与使用KafkaProducer是Kafka的客户端、消息的生产者,用来将消息发...

2020-04-20 22:16:14 214

原创 【经典设计原则学习】SOLID设计原则

了解一些经典的设计原则,并且将其应用到我们的日常开发中,会大大提高代码的优雅性、可扩展性、可维护性。本文总结了极客时间上的 《设计模式之美》 专栏中的SOLID设计原则的内容,用于学习和使用。SOLID原则是由5个设计原则组成,SOLID对应每个原则英文字母的开头:单一职责原则(Single Responsiblity Principle)开闭原则(Open Close Principl...

2020-01-26 21:57:08 251

原创 【Kafka精进系列004】Spring Boot + Kafka消息生产与消费代码示例

通过本文,你可以学到:(1)Kafka生产者异步发送API介绍;(2)Kafka生产者消息发送的代码实现;(3)Kafka生产者发送的消息不丢失的配置参数;(4)Kafka消费者常见的两种消费方案设计(单实例与多实例以及多线程消费);(5)Spring Boot整合Kafka实现Kafka生产与消费的完整过程

2019-12-29 21:22:07 985

原创 【Kafka精进系列003】Docker环境下搭建Kafka集群

通过本文,你将了解到:(1)如何使用Docker进行Kafka集群搭建;(2)如何使用Docker-compose一键构建Kakfa单节点和集群服务;(3)使用`docker-compose down -v`解决docker-compose初始化创建topic时无法创建多分区问题记录;

2019-12-29 21:13:15 1837

原创 【Kafka精进系列002】Docker环境下Kafka的安装启动与消息发送

前言上一节【Kafka精进系列001】Kafka单机安装与启动(Mac)中,我们演示了如何在本地安装、启动Kafka以及Kafka消息的生产和发送过程,本节将演示如何在Docker中安装启动Kafka容器、以及如何在Kafka容器中进行消息的生产和发送测试。注:Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Lin...

2019-12-23 20:38:09 960

原创 【Kafka精进系列001】Kafka单机安装与启动(Mac)

1、安装Zookeeper和Kafkabrew install kafkabrew install zookeeperKafka版本:2.2.0;zk版本:3.4.13两者安装目录都在: /usr/local/Cellar 目录下。2、ZK启动ZK相关目录ZK安装目录: /usr/local/Cellar ZK配置文件目录: /usr/local/etc/zookeeper ...

2019-12-23 00:04:48 419

原创 接口鉴权功能的实现

一、背景随着系统的发展,单体应用主键演化成微服务架构。系统微服务化之后,若干个微服务之间会有调用。同个部门内实现的服务会被内部调用,一般风险是可控的。但是如果服务提供给别的部门使用之后,在不了解对方的使用场景,接口调用QPS等,如果对方接口调用量过大,会影响整个使用该服务的调用方,且对接口的安全性也会有风险。在这种情况下,每个微服务都需要对调用者进行鉴权。基本的鉴权维度有:应用鉴权:对方在...

2019-12-10 21:28:29 2668

原创 Git Commit提交规范和IDEA插件Git Commit Template的使用

Git是最牛逼的开源分布式版本控制系统,日常开发中常用来管理代码提交、恢复、追踪,是团队开发最常用的一个代码管理工具。在我们修改了代码并且提交之前,常会使用git commit -m 'change'命令来描述我们代码改动的内容,但是很多都不规范,随处可见的 git commit -m 'update',以致于不能清晰地知道每次提交代码的变更内容,所以需要一种规范来管理代码提交的内容。一、Gi...

2019-12-06 20:29:37 3603

原创 【Sentinel(一)】Sentinel介绍与使用

一、什么是SentinelSentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。官网:https://github.com/alibaba/Sentinel/wikiSentinel主要特性:Sentinel与Hystrix的区别关于Sentinel与Hystrix的区别见:https://yq.aliyun.com/artic...

2019-11-30 20:56:23 56969 8

原创 责任链设计模式与应用:实现拦截器责任链统计接口执行时间和性能

一、什么是责任链设计模式1、什么是责任链设计模式?责任链设计模式主要构成有抽象处理者、具体处理者、客户类,在处理请求的时候,将请求通过客户类发送至处理链路上,这样链路上所有处理对象都有机会处理请求,使发送者与接收者之间解耦。见:https://blog.csdn.net/noaman_wgs/article/details/778382222、使用场景使用责任链模式的优点:发送者...

2019-11-02 23:52:26 257

原创 使用Spring SmartApplicationListener实现业务解耦

一、SmartApplicationListener介绍Spring ApplicationEvent以及对应的Listener提供了一个事件监听、发布订阅的实现,内部实现方式是观察者模式,可以解耦业务系统之间的业务,提供系统的可拓展性、复用性以及可维护性。Spring 提供的ApplicationEvent & Listener有3种实现方式:@EventListener 注解的...

2019-10-30 00:42:25 2619

原创 Java SPI机制介绍与ServiceLoader应用

1、SPI是什么SPI全称Service Provider Interface(服务提供接口),是专门被第三方实现或者扩展的API,可以用来启用框架扩展和替换组件,提供了为某个接口寻找对应服务类的机制。整体机制如下:(图片来源:https://www.jianshu.com/p/46b42f7f593c)Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机...

2019-10-13 00:52:41 174

原创 Netty学习(六)- 基于Netty的私有协议栈开发

大多公司都会有自己的一套私有协议,可能只在自己公司内部使用的协议。使用Netty实现的私有协议可以用于内部各模块之间的通信,基于TCP/IP协议栈,异步NIO框架,提供高性能、异步化的通信能力。

2019-09-01 00:51:17 287

原创 Netty学习(五)- 基于Netty的WebSocket协议栈开发

0、前言HTTP协议作为客户端-服务端之间的通信方式,得到了很多的应用。但是HTTP协议有很多的弊端:半双工:HTTP协议为半双工协议,这意味着客户端、服务端之间同一时刻只能有一端发送数据;消息结构复杂:HTTP协议包含消息头、消息体等内容,消息结构比较复杂和繁琐;长连接机制耗费服务器资源:为了实现实时通信,很多网站都采用长连接的方式,由客户端每隔固定时间(如1s)发送HTTP请求到服务...

2019-08-31 12:57:57 135

原创 Netty学习(四)- 基于Netty的HTTP协议栈应用

前言HTTP服务器在我们日常开发中,常见的实现方式就是实现一个Java Web项目,基于Nginx+Tomcat的方式就可以提供HTTP服务。但是很多场景是非Web容器的场景,这个时候再使用Tomcat就大材小用了。这个时候就可以使用基于Netty的HTTP协议。那么基于Netty开发的HTTP服务器有什么优势呢?Netty的多线程模型和异步非阻塞特性能够支持高并发;相比于Tomcat H...

2019-08-30 21:44:42 282

原创 Netty学习(三)- Netty常用解码器原理与应用

一、Netty常用解码器TCP以流的形式传输数据,上层协议为了对消息进行区分,常采用以下4种方式:回车换行符:将回车换行符作为消息结束标志,如FTP协议,这种方式在文本协议中应用较为广泛;特殊分隔符:将特殊分隔符作为消息结束标志,上述的回车换行符就是一种特殊的特殊分隔符;固定消息长度:设置一个定值LEN,当累计读取到长度为LEN的报文后就认为读取了一个完整的消息;将计数器置位重新读取下一...

2019-07-27 00:16:06 337

原创 Netty学习(二)- TCP粘包/拆包

一、TCP 粘包/拆包介绍1、什么是粘包、拆包首先只有TCP数据传输才会存在是粘包、拆包现象。假设客户端分别发送两个数据包D1和D2给服务器,由于TCP是面向流的协议,TCP把客户端传过来的数据看成是一连串的无结构的字节流,且服务端一次读取到的数据是不确定的,所以可能会出现下面几种情况。(1)服务端分两次接收到D1和D2数据包,没有发生粘包/拆包。(2)服务端一次接收了两个数据包,D1...

2019-07-27 00:02:28 145

原创 Netty学习(一)- Netty入门与Netty应用实战

一、什么是NettyNetty官网上是这样定义Netty的:Netty is an asynchronous event-driven network application frameworkfor rapid development of maintainable high performance protocol servers & clients.用人话(Google翻...

2019-07-11 20:45:59 1221

原创 BigDecimal操作double、float精度丢失问题

一、问题最近使用BigDecimal进行数值加减运算的时候踩了一个小坑:BigDecimal操作double、float数值时精度丢失。举个例子: public static void main(String[] args) { float d1 = 1.2f; float d2 = 2.1f; BigDecimal b1 = new B...

2019-07-03 09:35:52 2384

原创 【Nacos学习】01-Nacos简介与Server端启动

前言Nacos可以用于服务发现、配置中心、DNS服务等功能,使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。详细文档见官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html,本系列文章只做一些Nacos特性的学习与应用。一、Nacos介绍什么是Nacos?引用官方文档的话,Na...

2019-06-27 00:23:47 1564 2

原创 高可用系统常用利器(一) - 服务降级 Hystrix

0、前言互联网高并发系统一般QPS、TPS都比较高,当流量比较大的时候,有三种常见手段可以保证系统高可用和稳定:缓存服务降级与熔断服务限流缓存的目的是减少数据库的压力和提升系统访问速度,使用缓存要需要考虑缓存穿透、缓存失效以及高并发情况下DB与缓存不一致的问题;服务降级与熔断是用来解决核心服务受到非核心服务的影响的一种手段,比如用户下单页面的优惠券展示,当优惠券展示的服务挂掉后,可以...

2019-03-07 11:31:03 677

原创 Spring Boot学习笔记:(四)整合Mybatis

Mybatis是国内使用较为广泛的ORM框架,本文将简要介绍Spring Boot中整合Mybatis的步骤。一、准备1.1 导入依赖首先需要导入Mybatis和MySQL相关依赖:&amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.mybatis.spring.boot&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;myb

2019-02-09 16:10:35 326

原创 接口重试机制的最佳实践 - Guava-retrying的应用

项目开发中,调用第三方接口会因为网络延迟、异常导致调用的服务出错,重试几次可能就会调用成功(例如上传图片),所以需要一种重试机制进行接口重试来保证接口的正常执行。重试机制除了用代码实现外,guava-retry可以灵活的实现这一功能,github 地址: https://github.com/rholder/guava-retrying/tree/master/src/main/java/com...

2019-01-06 18:09:18 7067 1

原创 基于POI + Java注解实现Excel通用读写组件

基于Apache POI的Java读写excel的操作实现,网上的教程有很多,但是都不是很通用,尤其是在写操作的时候,你不知道写进来的数据格式是怎么样的,更无法去格式化。因此本文基于Apache POI,利用Java注解的方式,实现一个通用的Excel读写工具类。一、Excel读操作excel读操作相对比较简单,实现方式比较统一,就是读取excel的每一行,再读取每一列,将内容取出。具体实现如...

2019-01-05 21:37:15 2467 1

原创 并发编程系列(2)- 线程池代码实战

上一节并发编程系列(1)- 线程池原理 已经初步介绍线程池的原理、线程池的创建,但是实际在项目中应该如何使用线程池呢?一、使用场景介绍当遇到重复性、且互相无依赖的任务的时候,可以用多线程来实现。比如:上传多个文件、解析多个文件等等,这些行为相互之间不会影响(即一个任务不依赖与另一个任务的执行成功与否,也不依赖于其执行的结果)。如果任务执行相互依赖,那么可以用异步去实现。二、代码实战下面...

2018-12-22 19:36:55 367

原创 并发编程系列(1)- 线程池原理

一、线程池基本原理分析1、什么是线程池线程池就是一种池化技术,核心思想就是事先创建多个线程,将线程资源放到池子中,这样任务到达时可以 不需要等到线程创建就能立刻去执行。创建线程池的好处:降低资源消耗。线程池可避免大量线程的创建于销毁造成的消耗。提高响应速度。任务到达时,线程池中线程可立即去执行,无需等待线程的创建。提高线程的可管理性。利用线程池可以进行统一分配、调优和监控。2、线...

2018-12-22 17:29:30 434

原创 记录一次MySQL死锁的分析与解决过程

一、问题描述上周开发过程中,线下环境遇到一个死锁问题,借此机会正好分析下MySQL死锁的原因和解决方案,本篇文章会带你去如何查看死锁日志和分析、解决。 二、MySQL死锁介绍1、MySQL 锁种类MySQL InnoDB存储引擎提供了如下几种锁:(1)共享/排他锁(S/X锁)共享锁(S Lock):允许事务读取一行数据,多个事务可以拿到一把S锁(即读读并行);排他...

2018-09-08 15:30:33 14750 2

原创 Maven中 jar包冲突原理与解决办法

Maven中jar包冲突是开发过程中比较常见而又令人头疼的问题,我们需要知道 jar包冲突的原理,才能更好的去解决jar包冲突的问题。本文将从jar包冲突的原理和解决两个方面阐述Maven中jar包冲突的解决办法。

2018-07-20 19:57:34 59458 12

原创 定时任务框架Quartz-(一)Quartz入门与Demo搭建

一、什么是Quartz什么是Quartz? Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能: 持久性作业 - 就是保持调度定时的状态; 作业管理 - 对调度作业进行有效的管理; ...

2018-07-10 13:57:07 165680 42

原创 Spring原理与源码分析系列(七)- Spring AOP实现过程与实战

二、Spring AOP1、什么是Spring AOPSpring AOP是Spring核心框架的重要组成部分,采用Java作为AOP的实现语言。与AspectJ实现AOP方式不同之处在于,Spring AOP仅支持方法级别的拦截。2、Spring AOP的组成Spring AOP中主要包括:Joinpoint、Pointcut、Advice、Aspect,下面一...

2018-03-20 23:50:27 5848 3

原创 Spring原理与源码分析系列(六)- Spring AOP入门与概述

一、AOP1、什么是AOPAOP :Aspect-Oriented Programming,面向切面编程的简称。 在我们的项目代码中,有大量与日志、事务、权限(AOP称之为横切关注点)相关的代码镶嵌在业务代码当中,造成大量代码的重复与代码的冗余。 虽然可以将这些重复的代码封装起来再进行调用,但是这样的调用方式比较单一,不够灵活,无法更好地以模块化的方式,对这些横切关注点进...

2018-03-20 23:39:25 641

JSONObject source 源码

提供了除JSONObject的jar之外依赖的其他6个jar包,一共7个jar文件 说明:因为工作中项目用到的版本是1.1的对应jdk1.3的版本,故本篇博客是基于1.1版本介绍的。

2017-12-04

Spring(第3版)实战中文版(英文版也有)

《Spring实战(第4版)》是经典的、畅销的Spring学习和实践指南。《Spring实战(第4版)》适用于已具有一定Java 编程基础的读者,以及在Java 平台下进行各类软件开发的开发人员、测试人员,尤其适用于企业级Java 开发人员。本书既可以被刚开始学习Spring 的读者当作学习指南,也可以被那些想深入了解Spring 某方面功能的专业用户作为参考用书。

2017-10-29

dubbo-admin-2.5.4.war jdk1.8

下载dubbo-admin,可自行根据网上介绍安装。大致做法就是将dubbo-admin中 的某个文件夹内容替换到tomcat的conf中,再运行tomcat即可。但我在实际操作中发现JDK8无法运行,后来找到一个JDK8可以实现的dubbo-admin版本,如有需要可留下邮箱索要

2017-09-14

是Guava不是瓜娃的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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