自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RestTemplate 用法实战

RestTemplate 简介RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。RestTemplate 继承自 InterceptingHttpAccessor 并且实现了 RestOperations 接口,其中 RestOperations 接口定义了基本的 RESTful 操作,这些操作

2021-12-28 15:09:25 734

原创 springcloud gateway简介

前言Spring Cloud Gateway该项目提供了一个构建在 Spring 生态系统(包括Spring 5,Spring Boot 2,Project Reactor)之上的 API 网关,旨在提供一种简单而有效的方法来路由到 api,并为它们提供横切关注点,例如: 安全性、监视 / 度量和弹性扩容。官方原文链接1. 引入要在项目中包含 Spring Cloud Gateway,请使用具有org.springframework.cloud组 ID 和spring-cloud-s...

2021-12-25 20:53:13 550

原创 Gateway网关简介及使用

Gateway网关简介及使用1. 什么是 API 网关(API Gateway)分布式服务架构、微服务架构与 API 网关在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平 台无关的服务协议作为各个单元间的通讯方式。API 网关的定义网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是

2021-12-21 11:31:07 406

原创 SQL多表查询之隐式连接

①确定表(从哪些表中查?);from 表1,表2②确定连接条件:where/on③确定筛选出哪些列:select 列一、内连接1)、隐式内连接首先得澄清一个概念:笛卡尔积:有两个表,A和B,聚合这两个表的所有组成情况(比如A有4条数据,B有3条数据),也即构成了一个新的表(包含有4*3=12条数据)如下图所示;隐式内连接:就是使用where条件,消除不符合条件的无用数据(消除笛卡尔积的无用数据)。select 列 1,列2 from 表1,表2 where 条件 ;...

2021-11-17 10:33:17 1434

原创 Go goroutine理解

Go语言最大的特色就是从语言层面支持并发(Goroutine),Goroutine是Go中最基本的执行单元。事实上每一个Go程序至少有一个Goroutine:主Goroutine。当程序启动时,它会自动创建。为了更好理解Goroutine,现讲一下线程和协程的概念线程(Thread):有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派

2021-10-12 13:49:18 143

原创 spring boot集成kafka - spring-kafka

前言kafka是一个消息队列产品,基于Topic partitions的设计,能达到非常高的消息发送处理性能。Spring创建了一个项目Spring-kafka,封装了Apache 的Kafka-client,用于在Spring项目里快速集成kafka。除了简单的收发消息外,Spring-kafka还提供了很多高级功能,下面我们就来一一探秘这些用法。项目地址:https://github.com/spring-projects/spring-kafka简单集成引入依赖<dependenc

2021-10-11 14:16:44 422

原创 idea导入eclipse传统java项目

IntelliJ idea导入IntelliJ idea 项目一般不会出问题,但是导入eclipse项目老是出问题,上网查找了一些方法,自己做一些总结.1. 首先打开IntelliJ idea 选择导入项目:2. 首先我导入普通java项目:3. 选择第一项Create project from existing sources:4. 下一步即可:5. 下一步即可:6. 找到你的jar包.注意区别就在这里,如果你在第三步选择导入eclipse项目不会有这个页面,不会找到你的...

2021-09-28 10:44:58 1495 1

原创 SpringBoot 常用注解汇总

目录Spring Boot 常用注解汇总一、启动注解 @SpringBootApplication@SpringBootConfiguration 注解,继承@Configuration注解,主要用于加载配置文件@EnableAutoConfiguration 注解,开启自动配置功能@ComponentScan 注解,主要用于组件扫描和自动装配二、Controller 相关注解@Controller@RestController 复合注解@RequestBody@

2021-09-13 12:43:42 6583

转载 spring、springMvc、springBoot和springCloud的联系与区别

spring和springMvc:1. spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案;2. springMvc是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分;springMvc和springBoot:1. springMvc属于一个企业WEB开

2021-09-13 12:28:14 357

原创 Spring常用注解总结

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之这将导致配置文件的可读性与可维护性变得很低。2、在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率。为了解决这两个问题,Spring引入了注解,通过"@XXX"的方式,让注解与Java Bean紧密结合,既大大减少

2021-09-13 11:50:52 118

原创 Java中三种标准注解和四种元注解

先来说说什么是注解:注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。注解的语法比较简单,除了@符号的使用之外,它基本与Java固有的语法一致。Java内置了三种注解,定义在java.lang中的注解:@Override,表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误提示。@Deprecated,如果程序员使用了注解为它的元素,那么编译器会发出警告信息。@Su

2021-09-13 11:19:10 151

原创 Spring注解原理

复习Annotation注意:注解不同于注释。注释是给开发人员看的,没有任何功能注解是给框架/软件看的,可以赋予注解一些功能元注解元注解:由JDK提供的,用于限制/修饰自定义注解的注解。常见有的2个:@Target:用来限制自定义注解可以用在什么地方。从ElementType里取值的,常用值有:ElementType.TYPE:可以用在类、接口上ElementType.METHOD:可以用在方法上ElementType.FIELD:可以用在字段(成员变量)上@Retention:用来限

2021-09-13 11:12:15 157

转载 Redis延迟问题分析与定位

Redis作为内存数据库,拥有非常高的性能,单个实例的QPS能够达到10W左右。但我们在使用Redis时,经常时不时会出现访问延迟很大的情况,如果你不知道Redis的内部实现原理,在排查问题时就会一头雾水。很多时候,Redis出现访问延迟变大,都与我们的使用不当或运维不合理导致的。这篇文章我们就来分析一下Redis在使用过程中,经常会遇到的延迟问题以及如何定位和分析。使用复杂度高的命令如果在使用Redis时,发现访问延迟突然增大,如何进行排查?首先,第一步,建议你去查看一下Redis的慢日

2021-09-13 09:25:13 222

原创 Redis概念、原理、场景全解析

缓存穿透高并发下查询一个值,缓存中没有,数据库中也没有,布隆过滤器解决方案:如果数据库中值为空,把空写入缓存即可。 也可以把所有的可能存在的key放入到一个大的Bitmap中,查询时通过该Bitmap过滤缓存雪崩缓存中大量数据同时到期,高并发下,所有请求都走向数据库解决方案:尽量不要把所有缓存都设置在同一时间过期, 通过加锁或者队列只允许一个线程查询数据库和写缓存, 其他线程等待.通过加锁或者队列只允许一个线程查询数据库和写缓存,其他线程等待。热点缓存(缓存击穿)双重

2021-09-13 09:14:06 217

原创 接口性能测试方案

一、 性能测试术语解释1. 响应时间响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点再可以细分,如对于一个 C/S 软件(B/S一样)的响应时间可以细分为网络传输时间、应用服务器处理时间、数据库服务器处理时间。另外客户端自身也存在着解析时间、界面绘制呈现时间等。响应时间主要站在客户端角度来看的一个性能指标,它是用户最关心、并且容易感知到的一个性能指标。2. 吞吐率吞吐率指单位时间内系统处理用户的请求数,从业务角度看,吞吐率可以用每秒...

2021-09-12 22:44:19 2644

原创 Mysql explain 执行计划之type详解

EXPLAIN执行计划中type字段分为以下几种:ALL INDEX RANGE REF EQ_REF CONST,SYSTEM NULL自上而下,性能从最差到最好type = ALL,全表扫描,MYSQL扫描全表来找到匹配的行(因为film表中rating不是索引)mysql> explain extended select * from film where rati...

2021-09-12 22:30:13 11475 2

原创 Redis哈希槽和一致性哈希实现原理

文章标题1 一致性哈希 1.1 简单哈希 1.2 一致性哈希 1.3 一致性哈希的分析 1.4 某节点宕机(缩减节点) 1.5 新增节点 1.6 一致性哈希的数据倾斜问题 1.7 虚拟节点解决数据倾斜问题 1.8 一致性哈希的应用案例 2 Redis 集群分槽的实现1 一致性哈希伴随着系统流量的增大,出现了应用集群。在 Redis 中为了保证 Redis 的高可用也为 Redis 搭建了集群对数据进行分槽存放。在 Mysql数据库要存储的量达到一个很高的

2021-09-12 21:57:41 538

转载 MYSQL之MVCC多版本并发控制

前提概要 什么是MVCC 什么是当前读和快照读? 当前读,快照读和MVCC的关系 MVCC实现原理 隐式字段 undo日志 Read View(读视图) 整体流程 MVCC相关问题 RR是如何在RC级的基础上解决不可重复读的? RC,RR级别下的InnoDB快照读有什么不同? 一、前提概要什么是MVCC?MVCCMVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据

2021-09-12 21:55:27 124

原创 聚簇索引和非聚簇索引的区别

聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法。特点是存储数据的顺序和索引顺序一致。一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。在《数据库原理》一书中是这么解释聚簇索引和非聚簇索引的区别的:聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。因此,MYSQL中不同的数据存储引擎对聚簇索引的支持不同就很好解释了。下面,我们可以看一下MYSQL中MYISAM和INNODB两种引擎的索引结构。如原始数据

2021-09-12 21:28:44 4699 1

转载 Java并发编程之AQS详解

一、概述  谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!  类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。  以下是本文的目录大纲: 概述 框架 源码详解 简单应用   若有不正之处,请谅解和批评指正,不胜感激。 

2021-09-12 20:55:00 104

转载 java中锁的分类及其应用场景

如果按照名称来说,锁大概有以下名词:自旋锁 ,自旋锁的其他种类,阻塞锁,可重入锁 ,读写锁,互斥锁,悲观锁,乐观锁,公平锁,偏向锁, 对象锁,线程锁,锁粗化,锁消除,轻量级锁,重量级锁, 信号量,独享锁,共享锁,分段锁我们所说的锁的分类其实应该按照锁的特性和设计来划分概述其实从并发的角度来讲,按照线程安全的三种策略看,主要内容都集中在互斥同步里,我们所讨论的锁也集中在这个部分。这个部分的锁都是悲观锁,第二个部分是非阻塞同步,这个部分也就一种通过CAS进行原子类操作,这个部分可以看成乐观锁...

2021-09-12 18:43:26 1927

原创 OLAP数据库

OLAP百家争鸣OLAP简介OLAP,也叫联机分析处理(Online Analytical Processing)系统,有的时候也叫DSS决策支持系统,就是我们说的数据仓库。与此相对的是OLTP(on-line transaction processing)联机事务处理系统。联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的。OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理 (OLTP) 明显区分开来。Codd认为联机事务处理(OLT

2021-09-10 23:36:25 4360

原创 OLTP与OLAP的区别

数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;OLAP 系统则强调数据分析,强调SQ

2021-09-10 23:23:01 738

原创 Redis命令的执行过程

Redis 服务器: Redis 服务器实现与多个客户端的连接,并处理这些客户端发送过来的请求,同时保存客户端执行命令所产生的数据到数据库中。Redis 服务器依靠资源管理器来维持自身的运转,其主要作用是管理 Redis 服务。服务器处理命令的过程我们向客户端发送了一条命令:SET city〝beijing〝第一步 用户将命令 SET city〝beijing〝输入客户端,客户端接收到此命令。第二步 客户端会先将接收到的命令转化为服务器可以识别的协议格式,然后利用连接到服务器的套接字,将转化为合法

2021-09-10 23:00:46 558

原创 算法时间复杂度

前言算法很重要,但是一般情况下做移动开发并不经常用到,所以很多同学早就将算法打了个大礼包送还给了老师了,况且很多同学并没有学习过算法。这个系列就让对算法头疼的同学能快速的掌握基本的算法。过年放假阶段玩了会游戏NBA2K17的生涯模式,没有比赛的日子也都是训练,而且这些训练都是自发的,没有人逼你,从早上练到晚上,属性也不涨,但是如果日积月累,不训练和训练的人的属性值就会产生较大差距。这个突然让我意识到了现实世界,要想成为一个球星(技术大牛)那就需要日积月累的刻意训练,索性放下游戏,接着写文章吧。1.算法

2021-09-02 22:33:18 75

转载 统一身份认证和授权--微服务架构

一、预备知识本文讨论基于微服务架构下的身份认证和用户授权的技术方案,在阅读之前,最好先熟悉并理解以下几个知识点:微服务架构相关概念:服务注册、服务发现、API 网关 身份认证和用户授权:SSO、CAS、OAuth2、JWT文章在涉及到上述知识内容时,会附上参考链接。二、背景当企业的应用系统逐渐增多后,每个系统单独管理各自的用户数据容易行成信息孤岛,分散的用户管理模式阻碍了企业应用向平台化演进。当企业的互联网业务发展到一定规模,构建统一的标准化账户管理体系将是必不可少的,因为它是企业互联网

2021-08-30 17:38:34 2454 1

转载 Dubbo:从入门到实战

一 为什么需要 dubbo很多时候,其实我们使用这个技术的时候,可能都是因为项目需要,所以,我们就用了,但是,至于为什么我们需要用到这个技术,可能自身并不是很了解的,但是,其实了解技术的来由及背景知识,对于理解一项技术还是有帮助的,那么,dubbo是怎么被提上日程的呢?在互联网的发展过程中,在以前,我们只需要一个服务器,将程序全部打包好就可以,但是,随着流量的增大,常规的垂直应用架构已无法应对,所以,架构就发生了演变。1 单一应用架构2 应用和数据库单独部署3 应用和数据库集群部署4

2021-08-29 20:01:48 16314

原创 Spring实现AOP的方式

前置条件①导入jar<dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependenc

2021-08-28 12:21:57 77

原创 Spring AOP中的JDK和CGLib动态代理效率对比

一、背景今天有小伙伴面试的时候被问到:Spring AOP中JDK 和 CGLib动态代理哪个效率更高?二、基本概念首先,我们知道Spring AOP的底层实现有两种方式:一种是JDK动态代理,另一种是CGLib的方式。自Java 1.3以后,Java提供了动态代理技术,允许开发者在运行期创建接口的代理实例,后来这项技术被用到了Spring的很多地方。JDK动态代理主要涉及java.lang.reflect包下边的两个类:Proxy和InvocationHandler。其中,Invocati

2021-08-28 11:07:30 849 2

原创 Zookeeper全解析——Paxos详解

Paxos,它是一个基于消息传递的一致性算法,Leslie Lamport在1990年提出,近几年被广泛应用于分布式计算中,Google的Chubby,Apache的Zookeeper都是基于它的理论来实现的,Paxos还被认为是到目前为止唯一的分布式一致性算法,其它的算法都是Paxos的改进或简化。有个问题要提一下,Paxos有一个前提:没有拜占庭将军问题。就是说Paxos只有在一个可信的计算环境中才能成立,这个环境是不会被入侵所破坏的。关于Paxos的具体描述可以在Wiki中找到:http://zh.

2021-08-28 00:17:50 618

原创 zookeeper详解

1、zookeeper是什么ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop的重要组件,CDH版本中更是使用它进行Namenode的协调控制。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。zookeeper到底能为我们的分布式系统做什么事情呢:管

2021-08-27 23:20:21 484

转载 Redis的线程模型

为了接下来一篇博客,能使读者更加完整地学习线程模型,所以本文对Redis的线程模型进行必要的讲解。由于《Redis设计与实现》对于Redis的讲解简练优雅,所以本文大部分内容节选自本书,也欢迎对Redis有更多底层了解需求的读者,自行购买学习。文件事件处理器Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。消息

2021-08-27 17:09:55 103

原创 Redis实现延时队列

使用sortedset,使用时间戳做score, 消息内容作为key,调用zadd来生产消息,消费者使用zrangbyscore获取n秒之前的数据做轮询处理。

2021-08-27 16:55:43 70

原创 过滤器之Cuckoo filter 布谷鸟

这一篇讲的是布谷过滤器(cuckoo fliter),这个名字来源于更早发表的布谷散列(cuckoo hash),尽管我也不知道为什么当初要给这种散列表起个鸟名=_=由于布谷过滤器本身的思想就源自于布谷散列,那么我们就从布谷散列开始说它的设计思想。产生布谷散列表的一个重要背景是人们对于球盒问题的分析:给定N个球,随机的放在N个盒子里,在装球最多的盒子里,球的个数的期望是多少?答案是Θ(logN/loglogN)Θ(logN/loglogN),这个问题其实就是散列表装填因子为1时的情况分析。后来有一天,人

2021-08-26 10:39:19 272

转载 SpringBoot+Redis 布隆过滤器 防恶意流量击穿缓存

什么是恶意流量穿透假设我们的Redis里存有一组用户的注册email,以email作为Key存在,同时它对应着DB里的User表的部分字段。一般来说,一个合理的请求过来我们会先在Redis里判断这个用户是否是会员,因为从缓存里读数据返回快。如果这个会员在缓存中不存在那么我们会去DB中查询一下。现在试想,有千万个不同IP的请求(不要以为没有,我们就在2018年和2019年碰到了,因为攻击的成本很低)带着Redis里根本不存在的key来访问你的网站,这时我们来设想一下:请求到达Web服务器;.

2021-08-26 10:29:01 915

原创 Linux文件权限设置

在linux中,为了数据的安全性,权限控制是十分重要的,在这里面可以细分成两个部分来理解他权限定义linux每一个用户都属于一个组,不能独立于组外。linux的文件权限需要定义三个实体对它的权限文件所有者 文件所在组 其他组所有者一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者可以使用chown【change owner】 用户名文件名来修改文件的所有者,例如更改error.log的所有者为enochchown enoch error.log #更改e.

2021-08-24 18:09:35 2179

转载 Spring中Bean的生命周期及其扩展点

出处地址http://www.cnblogs.com/V1haoge/p/6106456.htmlSpring中Bean的管理是其最基本的功能,根据下面的图来了解Spring中Bean的生命周期:解说:(1)BeanFactoryPostProcessor的postProcessorBeanFactory()方法:若某个IoC容器内添加了实现了BeanFactoryPostProcessor接口的实现类Bean,那么在该容器中实例化任何其他Bean之前可以回调该Bean中的postPrces

2021-08-23 14:39:11 172

转载 JAVA-幂等性(二):高并发的系统如何保证幂等性

转载自:https://www.cnblogs.com/geyifan/p/6128425.html一、什么是幂等性幂等概念来自数学,表示N次变换和1次变换的结果是相同的。这里讨论在某些场景下,客户端在调用服务没有达到预期结果时,会进行多次调用,为避免多次重复的调用对服务资源产生副作用,服务提供者会承诺满足幂等。HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的副作用(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。

2021-08-20 15:16:34 507

转载 Epoll原理 多路复用 redis的IO模型

redis 是一个单线程却性能非常好的内存数据库, 主要用来作为缓存系统。 redis 采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量。为什么 Redis 中要使用 I/O 多路复用这种技术呢?首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而I/O 多路复用就是为了解决这个问题而出现的。...

2021-08-12 16:40:33 119

转载 Java回调机制总结

调用和回调机制在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种:1.同步调用同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B的方法b(), 一直等待b()方法执行完毕, a()方法继续往下走.这种调用方式适用于方法b()执行时间不长的情况, 因为b()方法执行时间一长或者直接阻塞的话, a()方法的余下代码是无法执行下去的, 这样会造成整个流程的阻塞.2.异步调用异步调用是为了解决同步调用可能出现阻塞, 导致整个流程卡住.

2021-08-12 15:07:30 1151

空空如也

空空如也

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

TA关注的人

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