自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 Lombok常用注解

前言Lombok是一个作用于编辑器和构建工具的 Java 库,可以对编写的 Java 代码进行增强,比如说不用再写实体类的 getter 方法,equals 方法而是自动生成,自动生成日志输出变量等等,减少重复模板的代码。常用注解介绍@Getter/@Setter在我们编写实体类的时候无论多少个属性,都要为其提供 getter 和 setter 方法,如果属性过多就会显得代码过于臃肿,这个时候可以使用@Getter/@Setter来代替 getter 和 setter 方法。如下所示:import

2021-05-28 17:07:36 6923

原创 Spring AOP详解

前言什么是AOPAOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面,是Spring的核心思想之一。AOP 实现分类AOP 要达到的效果是,保证开发者不修改源代码的前提下,去为系统中的业务组件添加某种通用功能。AOP 的本质是由 AOP 框架修改业务组件的多个方法的源代码,按照 AOP 框架修改源代码的时机,可以将其分为两类:

2021-05-26 17:26:43 3571 1

原创 Sentinel 流控执行流程源码详解(上)

前言Sentinel是阿里开源的一个面向分布式服务架构的轻量级高可用流量控制组件。但是Sentinel源码中存在很多的bug,如果要用在生产环境中,就必须要熟悉Sentinel的源码。Sentinel在微服务中的使用方式添加 @SentinelResource @SentinelResource(value = "findOrderByUserId", blockHandlerClass = CommonBlockHandler.class, bloc

2021-05-21 10:44:29 696 1

原创 Nacos 1.4.1源码启动流程

开始下载Nacos源码,这里推荐下载1.4.1版本,2.0.0版本刚刚出来稳定性还不够:(下载地址)https://github.com/alibaba/nacos/tree/1.4.1编译运行下载完成之后,把项目导入到Idea中,找到Nacos的主启动类,如下图所示:点击启动,会出现缺少com.alibaba.nacos.consistency.entity的错误。出现的原因是因为nacos中用的是proto文件,而代码中没有生成对应的实体类,因此我们需要手动生成。方式如下。安装protoc

2021-05-11 16:27:42 1010 1

原创 Spring Cloud集成knife4j文档接口详解

简介knife4j是swagger的增强版,更契合微服务架构,ui前身是swagger-bootstrap-ui,api注解的使用方式和swagger一致。Spring boot整合knife4jpom文件<!-- 包含了ui界面 --><dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter&lt

2021-04-30 10:02:30 3721 4

原创 秒杀系统商品详情多级缓存设计

缓存设计原则用内存设计多级缓存防止缓存失效和击穿无缓存时系统QPS无缓存的时候系统的请求全部都要到达MySQL数据库,因此系统数据库的线程池数量以及系统本身的CPU是QPS多少的瓶颈。没有缓存时请求如下所示:productInfo = portalProductDao.getProductInfo(id); if (productInfo == null) { return null; }

2021-04-22 14:54:27 498

原创 K8s安装教程详解

前言What is Kubernetes?Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统,是一个生产级别的容器编排系统,能够实现自动化的容器部署、扩展和管理。借鉴Google内部的集群管理系统“Borg”(2015 EuroSys)和”Omega”(15年的生产环境应用经验)Google于2014年开源,捐献给云原生计算基金会(CNCF, Cloud Native Computing Foundation)Kubernetes提供了完善的管理工具,这些工具涵盖了包括开

2021-04-02 16:38:57 3377

原创 Netty ChannelPipeline使用详解

ChannelPipeline的设计思想ChannelPipeline是一个双向链表,Channel都有且仅有一个ChannelPipeline与之对应,Channel包含了ChannelPipeline,ChannelPipeline内部包含了N个channelhandler,每一个handler都是由一个线程去执行。用户可在pipeline中添加多个事件处理器(ChannelHandler),并通过实现ChannelHandler中定义的方法,对回调事件进行定制化的业务处理。ChannelHandl

2021-03-15 22:37:11 924

原创 redission分布锁详解

Redission分布式锁原理Redission中分布式锁lua脚本源码//KEYS[1]:表示你加锁的那个key,比如说//RLock lock = redisson.getLock(“myLock”);//这里你自己设置了加锁的那个锁key就是“myLock”。//ARGV[1]:表示锁的有效期,默认30s//ARGV[2]:表示表示加锁的客户端ID,类似于下面这样://8743c9c0-0795-4907-87fd-6c719a6b4586:1if (redis.call('exis

2021-03-11 23:05:45 1398

原创 mybatis基础介绍

前言mybatis是什么  Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。为什么是半ORM框架  Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的(hibernate可以操作实体直接查询,不需要手写语句)。而

2021-03-05 16:26:22 98

原创 Spring MVC的执行流程详解

SpringMVC的工作流程  SpringMVC也可以理解成一个类似于Spring的容器,首先要初始化容器,主要是建立所有url和controller的对应关系,保存到Map<url,controller>中,之后在接受请求,根据request快速定位到Controller,因为最终处理request的是Controller中的方法,Map中只保留了url和Controller中的对应关系,所以要根据request的url进一步确认Controller中的method。 &emsp

2021-03-05 13:55:31 2139

原创 Spring IOC加载过程(下)

前言 上一篇中已经介绍过从bean配置类解析成beanDefinition的过程,本文主要介绍BeanDefinition解析成bean实例的过程。Spring IOC加载过程(上)链接6、refresh()方法refresh()方法, spring有很多衍生品, 比如spring mvc ,spring boot, 都有这个方法. refresh()里面的9个核心方法定义了spring ioc中bean加载的全过程. 源码如下:public void refresh() throws BeansE

2021-03-04 17:03:12 140

原创 Spring IOC加载过程(上)

前言 Spring 最重要的概念是 IOC 和 AOP,其中IOC又是Spring中的根基。 Ioc: inverse of controller 控制反转 . 对象的创建权利由程序反转给spring来完成。IOC容器相关的核心概念Bean:Spring IoC容器管理一个或多个bean。这些bean是由您提供给容器的元数据配置创建的(例如,XML 定义的形式),bean简单来说就是spring 容器创建的对象。beanFactory:Spring顶层核心接口,使用了简单工厂 模式,负责生产Bea

2021-03-02 17:24:09 306

原创 Spring 统一验证

spring-boot-starter-validation介绍 开发过程中,后台的参数校验是必不可少的,spring框架中提供的validation可以实现参数统一校验的功能依赖引入<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId></depen

2021-02-25 14:16:03 250 1

原创 Zookeeper 集群模式详解

集群角色Zookeeper 集群模式一共有三种类型的角色Leader: 处理所有的事务请求(写请求),可以处理读请求,集群中只能有一个LeaderFollower:只能处理读请求,同时作为 Leader的候选节点,即如果Leader宕机,Follower节点要参与到新的Leader选举中,有可能成为新的Leader节点。Observer:只能处理读请求。不能参与选举...

2021-02-23 14:12:27 1363

原创 SpringBoot +AOP日志管理

日志介绍  在web项目开发过程中,日志一般分为两层,一层是controller层,主要是涉及到业务逻辑处理的操作日志,一层是service层,主要是关于数据库操作的日志。对所有的web请求做切面来记录日志(controller层日志)...

2021-02-22 09:39:35 274

原创 Atomic&Unsafe魔法类详解

什么是原子操作  原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。在开发过程中处理器和java语言都可以实现原子操作。处理器如何实现原子操作  处理器可以自动保证基本内存操作的原子性,处理器保证从系统内存当中读取或者写入一个字节是原子的。  通过总线锁保证原子性,所谓总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占使用共享内存。

2021-02-19 10:38:51 122

原创 java线程池源码详解

为什么要使用线程池,有哪些好处?  在开发过程中,如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁 线程,如此一来会大大降低系统的效率。可能出现服务器在为每个请求创建新线程和销毁线程上花费的时间和消耗的系统资源要比处理实际的用户请求的时间和资源更多。 为了解决线程在创建和销毁上所花费的时间,线程池的使用是必须的。什么时候使用线程池?单个任务处理时间比较短需要处理的任务数量很大线程池优势重用存在的线程,减少线程创建,消亡的开销,提高性能提高响应速度。当任务到

2021-02-04 15:38:35 114

原创 动态规划详解

经典背包问题小偷去某商店盗窃,背有一个背包,容量是5kg,现在有以下物品(物品不能切分,且只有一个),请问小偷应该怎么拿才能得到最大的价值?重量 价值物品1 1kg 6元 60 / 10 = 6物品2 2kg 10元 100/20 = 5物品3 4kg 12元 120/40 = 3思路分析我们把5kg的袋子,拆分成1kg,1kg这样子计算,里面的表格就表示当前重量下能装的最多的钱。表格的数列就表示是要装的物品,如下图的表格:1KG2

2020-10-27 13:26:12 99

原创 MySQL 常用关键字用法详解

MySQL 常用关键字用法详解在开发工程中,操作数据库的时候经常会有不同类型的条件查询,除了使用where外,Mysql本身也提供了很多常用的关键字。本文主要介绍一些常用的关键字,像update、insert、delete、select这样的就不在做解释 。distinct关键字distinct关键字的目的是去重查询,示例如下:select distinct 选择的字段 from 表名 条件从句; //distinct放在去重字段的前面between关键字between是查询条件关键字,主要

2020-06-05 14:47:31 1203

原创 Sentinel系列-黑白名单与注解支持

Sentinel黑白名单与注解支持来源访问控制(黑白名单)官方解释:很多时候,我们需要根据调用方来限制资源是否通过,这时候可以使用 Sentinel 的黑白名单控制的功能。黑白名单根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。规则配置黑白名单规则(AuthorityRule)非常简单,主要有以下配置项:resource:资源名,即限流规则的作用对象limitApp:对应的黑名单/白

2020-06-04 19:38:03 1630

转载 Sentinel系列 热点参数限流

热点参数限流何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。根据上述的解释,我们知道热点参数限流的主要目的是根据请求

2020-06-03 17:12:13 702 1

原创 Sentinel系列 熔断降级

熔断降级概述除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。Sentinel的熔断降价98%和h

2020-06-03 14:55:30 531

原创 vue中Axios使用详解

vue中Axios使用详解Axios的基本介绍官方说明:Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。基本特性从浏览器中创建 XMLHttpRequests从 node.js 创建 http 请求支持 Promise API拦截请求和响应转换请求数据和响应数据取消请求自动转换 JSON 数据客户端支持防御 XSRF安装 npm install axios请求配置axios中的请求配置参数包括以下内容:{ // `ba

2020-06-03 14:23:52 670

原创 Sentinel系列-流控规则详解

Sentinel流控规则详解Sentinel的主要工作之一就是流量控制,因此对流控规则的掌握是必不可少的。Sentinel名词解释资源名:唯一名称,默认请求路径针对来源:Sentinel可以针对调用者进行限流,填写微服务名,指定对哪个微服务进行限流 ,默认default(不区分来源,全部限制)阈值类型/单机阈值:1、QPS(每秒钟的请求数量):当调用该接口的QPS达到了阈值的时候,进行限流;2、线程数:当调用该接口的线程数达到阈值时,进行限流是否集群:不需要集群流控模式:1、直接:接口

2020-06-02 14:33:08 4366

原创 Sentinel系列 -快速开始

快速开始本文讲解Sentinel的在项目中的快速开始使用,Sentinel在项目中使用的步骤还是比较简单的。启动Sentinel 控制台启动Sentinel 控制台的步骤本文不再多做介绍,不明白的可以参考sentinel控制台项目整合Sentinel第一步:在Spring Cloud应用的pom.xml中引入Spring Cloud Alibaba的Sentinel模块: <dependencies> <dependency> &l

2020-06-02 11:36:52 503

原创 Sentinel系列-Sentinel控制台(dashboard)

Sentinel 控制台概述Sentinel 提供一个轻量级的开源控制台,它提供服务发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。另外,鉴权在生产环境中也必不可少。这里,我们将会详细讲述如何通过简单的步骤就可以使用这些功能。Sentinel 控制台包含如下功能:查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断服务是否在线。监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最终可以实现秒级的实时

2020-05-29 17:09:40 18275 3

原创 java设计模式 -观察者模式

观察者模式介绍说明观察者模式是对象之间多对一依赖的一种设计方案,被依赖的对象成为Subject,依赖的对象为Observer,当Subject发生变化的时候可以通知到Observer。类图说明以天气预报为示例类图如下:Weather为核心类,实现了Subject里面的方法Subject有变化的时候,Observer会直接接收到通知示例说明/** * 订阅接口 */public interface Subject { public void registerObserver(

2020-05-29 16:00:40 148

原创 java开发过程中唯一ID的生成方式

java开发过程中唯一ID的生成方式本文主要介绍的是在开发过程中唯一ID的生成方式,在分布式的系统中唯一ID的应用场景还是很多的。当然了唯一ID的生成方式也各式各样。文章中主要是根据hutool做的封装来进行讲解。hutool的唯一ID生成器的工具类,主要包括下面3种:UUIDObjectId(MongoDB)Snowflake(Twitter)使用方式与说明引入依赖,当前最新版本的hutool是5.3.5 <!-- https://mvnrepository.com/art

2020-05-29 10:29:23 3163

原创 Sentinel系列 -1 基本介绍

Sentinel基本介绍Sentinel 是面向分布式服务架构的流量控制组件,是Spring Cloud AliBaba的核心组件之一。主要以流量为切入点,从流量(一定时间内的访问量)控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。在当前微服务中代替hystix来使用。Sentinel历史Sentinel诞生已经有些年头,但是开源的时间是比较有限的。2012 年,Sentinel 诞生,主要功能为入口流量控制。2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展

2020-05-28 16:53:10 2570

原创 java设计模式-组合模式

java设计模式-组合模式基本介绍组合模式也叫整体部分模式,他创建了对象组的树形结构,将对象组合成树状结构来表示整体-结构之间的关系。原理类图解释说明:1、Component:组合对象的顶层接口,实现所有类共用的接口默认方法,用于管理Component的子部件,Component可以使抽象类也可以是接口。2、Leaf:最下层的类,没有子节点3、Composite:中间层类,用于存储子部件。案例分享顶层接口类public abstract class OrganizationCompon

2020-05-28 16:20:10 164

原创 阿里云SMS服务的使用方式

阿里云SMS服务使用什么是短信服务短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力。支持向国内和国际快速发送验证码、短信通知和推广短信,服务范围覆盖全球200多个国家和地区。国内短信支持三网合一专属通道,与工信部携号转网平台实时互联。电信级运维保障,实时监控自动切换,到达率高达99%。完美支撑双11期间20亿短信发送,6亿用户触达。最主要的功能是短信通知、短信验证码和推广短信。快速入门短信格式短信服务发送的短信中包括短信签名和短信模板。短信签名是短信

2020-05-27 17:08:51 1497

原创 SpringBoot2.x配置Cors跨域详解

跨域的理解跨域是指:浏览器A从服务器B获取的静态资源,包括Html、Css、Js,然后在Js中通过Ajax访问C服务器的静态资源或请求。即:浏览器A从B服务器拿的资源,资源中想访问服务器C的资源。同源策略是指:浏览器A从服务器B获取的静态资源,包括Html、Css、Js,为了用户安全,浏览器加了限制,其中的Js通过Ajax只能访问B服务器的静态资源或请求。即:浏览器A从哪拿的资源,那资源中就只能访问哪。同源是指:同一个请求协议(如:Http或Https)、同一个Ip、同一个端口,3个全部相同,即为同源

2020-05-27 16:47:07 639

原创 不同场景下登录检验方式选择

不同场景下登录检验方式选择根据登录场景的不同,登录分为单机登录和分布式登录两种。单机登录主要是在应用程序比较简单,没有用到分布式的情况下。具体的说明以及使用方式如下。单机tomcat应用登录检验单机登录的时候一般会选择把用户信息放到session中,session保存到浏览器和应用服务器回话之间,用户登录成功,服务器端会保证一个session 当然会给客户端一个sessionID客户端会把sessionId保存在cookie中,每次请求都会携带这个sessionId。用户再次请求页面的时候,服务器端

2020-05-27 15:52:25 390

原创 java设计模式原则(下)

开闭原则基本介绍开闭原则(Open Closed Principle)是编程中最基础、最重要的设计原则一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。实例介绍与分析public class Ocp { public static void main(String[]

2020-05-23 15:33:41 153

原创 java 设计模式原则(中)

java 设计模式原则(中)依赖倒转原则依赖倒转原则(Dependence Inversion Principle)是指:高层模块不应该依赖低层模块,二者都应该依赖其抽象抽象不应该依赖细节,细节应该依赖抽象依赖倒转(倒置)的中心思想是面向接口编程依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把

2020-05-23 14:53:52 134

原创 java设计模型原则(上)

java设计模型原则设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据)。设计模式常用的七大原则有:单一职责原则接口隔离原则依赖倒转(倒置)原则里氏替换原则开闭原则迪米特法则合成复用原则单一职责原则在java开发过程中,我们经常看到最顶层的类一般都是接口,接口按照职责进行分类,每个接口只负责一个职责,而具体的实现都在下层的实现类中。遵循的就是单一职责原则。实例如下:public class SingleResponsi

2020-05-23 14:35:08 144

原创 Seata使用案例

Seata - 4 使用案例环境介绍:服务注册中心:nacosseata 0.9.0版本实例介绍:整个实例分为账户服务、订单服务和库存服务三个微服务。订单服务调用库存服务和账户服务。具体的事务逻辑就是订单成功之后扣减账户和库存。库存服务于账户服务差不多。库存微服务和账户为服务依赖引入 <dependencies> <!-- SpringCloud alibaba nacos --> <dependency> &lt

2020-05-23 13:38:53 1541

原创 Seata AT 模式介绍

Seata 当前三种模式介绍AT 模式AT 模式是一种无侵入的分布式事务解决方案。在 AT 模式下,用户只需关注自己的“业务 SQL”,用户的 “业务 SQL” 作为一阶段,Seata 框架会自动生成事务的二阶段提交和回滚操作。AT 模式的执行流程在一阶段,Seata 会拦截“业务 SQL”,首先解析 SQL 语义,找到“业务 SQL”要更新的业务数据,在业务数据被更新前,将其保存成“before image”,然后执行“业务 SQL”更新业务数据,在业务数据更新之后,再将其保存成“after im

2020-05-23 12:55:09 4899 1

原创 java设计模式 - 装饰者模式

原理介绍装饰者模式就像打包一个快递,动态的将新工鞥附加到对象上。在对象功能扩展方面,比继承更加的有弹性。原理图与解释如下:实例分析:抽象类public abstract class Drink { public String des; //描述 private float price = 0.0f; public String getDes() { return des; } public void setDes(Stri

2020-05-22 15:06:14 100

空空如也

空空如也

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

TA关注的人

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