自定义博客皮肤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的博客

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

  • 博客(250)
  • 资源 (3)
  • 收藏
  • 关注

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

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

2020-08-27 15:01:11 1793 2

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

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

2018-03-11 00:22:54 100697 218

原创 【Docker 01】Docker简介与基于Docker构建第一个Spring Boot应用

本文内容首先简单介绍Docker是什么、能够做什么、架构是什么样的;然后体验了下如何拉取和运行第一个Docker镜像;最后应用到实战,基于Docker构建第一个Spring Boot应用,并制作属于自己的镜像推送至远程Docker Hub上。

2021-04-15 10:42:09 962

原创 【Redis 03】Redis常用数据对象类型

Redis常见对象有8种:字符串对象 -string列表对象 - list哈希对象-hash集合对象-set有序集合对象-zsetBitmapGeoHyperloglog0、Redis对象介绍Redis中的键值都是用对象表示的,新建键值时,每次都会至少创建两个对象:键对象、值对象。Redis中的对象redisObject定义如下:typedef struct redisObject { unsigned type:4; // 对象类型, string、list、hash、

2021-03-18 20:30:39 1065 2

原创 【Redis 02】Redis底层基本数据结构

Redis有6种基本数据结构:简单动态字符串(SDS)双向链表(linkedlist/quicklist)哈希表 (hash)跳表(skiplist)( 重点关注,面试常问)*整数列表(intset)压缩列表(ziplist)radix-tree (Stream会用到)一、简单动态字符串(SDS)1、数据结构Redis中所有键的类型都是SDS,值可能是不同类型,当然常见的值类型是SDS。(图片来源:极客时间Redis专栏)如:RPUSH zoo "dog" "panda" "c

2021-03-18 15:53:20 805

原创 【Redis 01】Redis线程模型

Redis介绍官网的Redis介绍:Redis是基于内存的存储系统,可以用作数据库、缓存、消息中间件。Redis提供了strings, hashes, lists, sets, sorted sets、bitmaps, hyperloglogs, geo等多种对象和数据结构。Redis内置了复制、lua脚本、LRU驱动、事务和不同级别的磁盘持久化功能,并且通过哨兵Sentinel和Redis Cluster集群保证Redis高可用。Redis线程模型Redis服务采用类似Reactor的方式实

2021-03-18 15:38:09 534

原创 ShardingSphere-JDBC(一)分库分表实战.md

本文主要分享了基于Spring Boot + Druid + MyBatis + ShardingSphere-JDBC的分库分表和读写分离案例,项目中示例代码见地址 分库分表.一、ShardingSphere-JDBC介绍1、ShardingSphere实际上 ShardingSphere 包含3个部分:ShardingSphere-JDBC、 ShardingSphere-Proxy、 ShardingSphere-Sidecar。ShardingSphere-JDBC 采⽤⽆中⼼化架构,适⽤

2021-01-30 00:14:37 824 3

原创 【分布式】Redis分布式锁代码实现Demo

分布式锁实现要素分布式锁实现注意几个要素:加锁过程原子性:加锁时首先判断key是否存在、是否有值,没有值再设置,这3个步骤需要是原子操作;锁正常释放:出现超时、网络等问题时,保证加的锁可以正常释放;锁正确释放:锁A释放时,需要保证只能由加A锁的客户端释放,否则可能就会出现误删锁;锁高可用保证:分布式锁如Redis或ZK出现宕机时,如何保证加锁功能不被影响,需要根据业务考虑到CP、CA抉择选择合适的实现方式;同时可以添加兜底逻辑,如使用CA模型的ZK分布式锁时,当出现分布式不可用时,可以退化成本地

2020-12-19 14:08:26 1183 3

原创 MySQL索引扩展

索引扩展在MySQL的使用问题最近在看《MySQL实战45讲》中遇到一个比较困惑的问题。问题是:有如下表CREATE TABLE `geek` ( `a` int(11) NOT NULL, `b` int(11) NOT NULL, `c` int(11) NOT NULL, `d` int(11) NOT NULL, PRIMARY KEY (`a`,`b`), KEY `c` (`c`), KEY `ca` (`c`,`a`), KEY `cb`

2020-12-03 21:01:00 959 1

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

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

2020-06-30 00:35:46 976 1

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

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

2020-06-30 00:26:08 2515

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

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

2020-06-17 22:51:45 714

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

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

2020-05-31 23:58:29 607

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

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

2020-05-31 17:45:27 626

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

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

2020-04-20 22:33:13 359

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

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

2020-04-20 22:30:43 579

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

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

2020-04-20 22:16:14 743 1

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

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

2020-01-26 21:57:08 758

原创 【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 3697

原创 【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 6102 3

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

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

2019-12-23 20:38:09 4323 2

原创 【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 1049

原创 接口鉴权功能的实现

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

2019-12-10 21:28:29 12990

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

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

2019-12-06 20:29:37 17695

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

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

2019-11-30 20:56:23 205911 21

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

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

2019-11-02 23:52:26 890

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

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

2019-10-30 00:42:25 7963

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

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

2019-10-13 00:52:41 987 2

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

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

2019-09-01 00:51:17 1245 1

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

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

2019-08-31 12:57:57 601

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

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

2019-08-30 21:44:42 1291

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

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

2019-07-27 00:16:06 2306

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

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

2019-07-27 00:02:28 670

原创 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 2184

原创 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 6093

原创 【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 4636 3

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

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

2019-03-07 11:31:03 1362

原创 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 499

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

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

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

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

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

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

JSONObject source 源码

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

2017-12-04

dubbo-admin-2.5.4.war jdk1.8

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

2017-09-14

空空如也

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

TA关注的人

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