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

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

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

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

2018-03-11 00:22:54 52119 155

原创 Dubbo入门---搭建一个最简单的Demo框架

Dubbo背景和简介Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起。 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本。 缺点:单一的系统架构,使得在开发过程中,占用的资源越来越多,而且随着流量的增加越来越难以维护 垂...

2017-04-17 19:10:44 413066 219

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

在讨论分布式锁原理的时候,我们带着如下思考进入今天的主题: 根据业务场景如何选择分布式锁模型:CP还是AP? 读锁、加锁是否是原子操作? 锁能否正常释放,避免死锁(如添加过期时间) 保证分布式锁高可用:如何保证锁资源不丢失(保存锁的机器可能宕机) 锁的本质就是对共享资源的串行化处理。在单进程环...

2020-05-31 23:58:29 47 0

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

在正式介绍分布式锁之前,我们有必要再回顾下分布式系统和CAP定理,知己知彼才能知道为什么会出现分布式锁的概念。 话不多说,直接进入本篇文章的主题。 一、分布式与集群的区别 分布式系统并非是一蹴而成的,而是经过几个阶段演化而来。 1、单机 单机就是将一个系统部署在一台服务器上,所有请求都由这台服务器...

2020-05-31 17:45:27 63 0

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

1、Kafka为什么采用分区的概念 Kafka消息采用 主题(Topic) - 分区(partition) - 消息的三级结构,每条消息只会保存在某一个分区中,而不会在多个分区被保存多份。 采用分区的作用就是 提供负载均衡的能力,实现系统的高伸缩性。 不同的分区放在不同的节点机器上,数据的读写操...

2020-04-20 22:33:13 63 0

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

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

2020-04-20 22:30:43 47 0

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

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

2020-04-20 22:16:14 103 0

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

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

2020-01-26 21:57:08 121 0

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

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

2019-12-29 21:22:07 502 0

原创 【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 693 0

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

前言 上一节【Kafka精进系列001】Kafka单机安装与启动(Mac)中,我们演示了如何在本地安装、启动Kafka以及Kafka消息的生产和发送过程,本节将演示如何在Docker中安装启动Kafka容器、以及如何在Kafka容器中进行消息的生产和发送测试。 注:Docker 是一个开源的应用容...

2019-12-23 20:38:09 597 0

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

1、安装Zookeeper和Kafka brew install kafka brew install zookeeper Kafka版本:2.2.0;zk版本:3.4.13 两者安装目录都在: /usr/local/Cellar 目录下。 2、ZK启动 ZK相关目录 ZK安装目录: /us...

2019-12-23 00:04:48 277 0

原创 接口鉴权功能的实现

一、背景 随着系统的发展,单体应用主键演化成微服务架构。系统微服务化之后,若干个微服务之间会有调用。同个部门内实现的服务会被内部调用,一般风险是可控的。但是如果服务提供给别的部门使用之后,在不了解对方的使用场景,接口调用QPS等,如果对方接口调用量过大,会影响整个使用该服务的调用方,且对接口的安全...

2019-12-10 21:28:29 1073 0

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

Git是最牛逼的开源分布式版本控制系统,日常开发中常用来管理代码提交、恢复、追踪,是团队开发最常用的一个代码管理工具。 在我们修改了代码并且提交之前,常会使用git commit -m 'change'命令来描述我们代码改动的内容,但是很多都不规范,随处可见的 git comm...

2019-12-06 20:29:37 1326 0

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

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

2019-11-30 20:56:23 28733 5

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

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

2019-11-02 23:52:26 131 0

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

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

2019-10-30 00:42:25 1094 0

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

1、SPI是什么 SPI全称Service Provider Interface(服务提供接口),是专门被第三方实现或者扩展的API,可以用来启用框架扩展和替换组件,提供了为某个接口寻找对应服务类的机制。 整体机制如下: (图片来源:https://www.jianshu.com/p/46b42...

2019-10-13 00:52:41 101 0

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

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

2019-09-01 00:51:17 158 0

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

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

2019-08-31 12:57:57 91 0

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

前言 HTTP服务器在我们日常开发中,常见的实现方式就是实现一个Java Web项目,基于Nginx+Tomcat的方式就可以提供HTTP服务。但是很多场景是非Web容器的场景,这个时候再使用Tomcat就大材小用了。这个时候就可以使用基于Netty的HTTP协议。那么基于Netty开发的HTTP...

2019-08-30 21:44:42 131 0

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

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

2019-07-27 00:16:06 119 0

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

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

2019-07-27 00:02:28 96 0

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

一、什么是Netty Netty官网上是这样定义Netty的: Netty is an asynchronous event-driven network application framework for rapid development of maintainable high perfo...

2019-07-11 20:45:59 534 0

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

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

2019-07-03 09:35:52 1042 0

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

前言 Nacos可以用于服务发现、配置中心、DNS服务等功能,使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。 详细文档见官方文档: https://nacos.io/zh-cn/docs/what-is-nacos.html,本系列文...

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

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

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

2019-03-07 11:31:03 436 0

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

Mybatis是国内使用较为广泛的ORM框架,本文将简要介绍Spring Boot中整合Mybatis的步骤。 一、准备 1.1 导入依赖 首先需要导入Mybatis和MySQL相关依赖: <dependency> <groupI...

2019-02-09 16:10:35 281 0

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

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

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

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

基于Apache POI的Java读写excel的操作实现,网上的教程有很多,但是都不是很通用,尤其是在写操作的时候,你不知道写进来的数据格式是怎么样的,更无法去格式化。因此本文基于Apache POI,利用Java注解的方式,实现一个通用的Excel读写工具类。 一、Excel读操作 excel...

2019-01-05 21:37:15 1732 0

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

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

2018-12-22 19:36:55 257 0

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

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

2018-12-22 17:29:30 283 0

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

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

2018-09-08 15:30:33 8960 1

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

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

2018-07-20 19:57:34 41542 9

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

一、什么是Quartz 什么是Quartz? Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能: ...

2018-07-10 13:57:07 81308 31

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

二、Spring AOP 1、什么是Spring AOP Spring AOP是Spring核心框架的重要组成部分,采用Java作为AOP的实现语言。与AspectJ实现AOP方式不同之处在于,Spring AOP仅支持方法级别的拦截。 2、Spring AOP的组成 Sp...

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

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

一、AOP 1、什么是AOP AOP :Aspect-Oriented Programming,面向切面编程的简称。 在我们的项目代码中,有大量与日志、事务、权限(AOP称之为横切关注点)相关的代码镶嵌在业务代码当中,造成大量代码的重复与代码的冗余。 虽然可以将这些重复的代码...

2018-03-20 23:39:25 546 0

原创 Spring原理与源码分析系列(五)- Spring IoC源码分析(下)

0 前言 IoC容器主要分为两个阶段:IoC容器启动和依赖注入。 在上节 Spring原理与源码分析系列(四)- Spring IoC源码分析(上) 我们已经从源码的角度分析了IoC容器的启动过程,本篇将要讲述依赖注入过程的源码分析。 二、IoC容器的依赖注入 在IoC容器的...

2018-01-23 13:57:09 860 0

原创 Spring原理与源码分析系列(四)- Spring IoC源码分析(上)

0 前言 在上节 Spring原理与源码分析系列(三)- Spring IoC容器启动过程分析(下) 我们已经介绍过,IoC容器主要分为两个阶段:IoC容器启动和依赖注入。 本节内容我们重点将从源码的角度来分析这两个过程,本篇(上)主要分析IoC容器启动过程,而依赖注入部分将放在(下)去分析。...

2018-01-23 13:41:17 607 0

原创 Spring原理与源码分析系列(三)- Spring IoC容器启动过程分析(下)

0 前言 关于Spring容器启动过程的分析,本章节文章分为两篇文章进行叙述,第一篇主要介绍Spring中Bean的相关概念以及IoC容器类型;第二篇开始详细介绍IoC容器的启动过程。 上篇Spring原理与源码分析系列(二)- Spring IoC容器启动过程分析(上)已经介绍了介绍Spri...

2018-01-23 13:16:26 965 0

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