自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Aop基本流程原理

一、代理对象的创建过程:AbstractAutowireCapableBeanFactory#initializeBeanprotectedObjectinitializeBean(StringbeanName,Objectbean,@NullableRootBeanDefinitionmbd){ if(System.getSecurityManager()!=null){ AccessController.doPrivileged((PrivilegedAction&lt

2021-04-18 23:49:14 1244 8

原创 Spring IOC基本流程原理

前言:Spring IoC 容器初始化的关键环节就在 AbstractApplicationContext#refresh() ⽅法中@Overridepublicvoidrefresh()throwsBeansException,IllegalStateException{ synchronized(this.startupShutdownMonitor){ StartupStepcontextRefresh=this.applicationStartup.start(

2021-04-12 23:23:47 41 1

原创 Spring Cloud --- Feign

一、Feign是什么Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。Spring Cloud引入 Feign并且集成了Ribbon实现客户端负载均衡调用。二、Feign解决了什么封装了Http调用流程,更适合面向接口化的变成习惯。三、Feign工作原理1.基于面向接口的动态代理方式生成实现类2.基于RequsetBean,动态生成Request3.使用Encoder将Bean转换为Http报文正文4.拦截器负责...

2021-04-10 11:17:18 27

原创 SpringCloud --- Eureka

一、Eureka是什么Eureka是Netflix组件的一个子模块,也是核心模块之一。云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移Eureka服务端(以下简称服务端)与Eureka客户端(以下简称客户端)之间协同工作的流程:二、Eureka优缺点优点:(1)故障转移:在Eureka平台中,如果某台服务器宕机,Eureka不会像zookeeper选择leader的过程,客户端请求会自动切换到新的Eureka节点,当宕机的服务器重新恢复后

2021-04-10 11:10:35 37

原创 TCP/IP协议应用层-HTTP协议

一、HTTP是什么HTTP:请求响应机制。用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。同时属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。HTTP客户端通过URL向HTTP服务端发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。HTTP底层协议:TCP 协议主要特点1、简单快速:客户向服务器请求..

2021-03-28 23:12:51 121

原创 TCP/IP协议传输层-TCP和UDP

一、TCPTCP是一种可靠的、面向连接的字节流服务。源主机在传送数据前需要先和目标主机建立连接。然后,在此连接上,被编号的数据段按序收发。同时,要求对每个数据段进行确认,保证了可靠性。如果在指定的时间内没有收到目标主机对所发数据段的确认,源主机将再次发送该数据段。源、目标端口号字段:占16比特。TCP协议通过使用"端口"来标识源端和目标端的应用进程。端口号可以使用0到65535之间的任何数字。在收到服务请求时,操作系统动态地为客户端的应用程序分配端口号。在服务器端,每种服务在"众所周知的.

2021-03-28 22:57:10 53

原创 TCP/IP协议网络互联层-IP协议

IP头部格式:IP协议是TCP/IP协议族中最为核心的协议。它提供不可靠、无连接的服务,也即依赖其他层的协议进行差错控制。在局域网环境,IP协议往往被封装在以太网帧中传送。而所有的TCP、UDP、ICMP、IGMP数据都被封装在IP数据报中传送。 版本(Version)字段:占4比特。 用来表明IP协议实现的版本号,当前一般为IPv4,即0100。 报头长度(Internet Header Length,IHL)字段:占4比特。是头部占32比特的数字,包括可选项。 普通IP.

2021-03-28 22:48:35 191

原创 TCP/IP协议模型

TCP/IP参考模型分为四个层次:应用层、传输层、网络互连层和主机到网络层。(1)主机到网络层:实际上TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层-网络互连层一个访问接口,以便在其上传递IP分组。(2)网络互连层:网络互连层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。(3)传输层:在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP(transmiss

2021-03-28 22:43:17 40

原创 最详细的RabbitMQ介绍

一、RabbitMQ是什么 RabbitMQ是一个由erlang语言编写的、开源的、在AMQP基础上完整的、可复用的企业消息系统。支持多种语言,包括java、Python、ruby、PHP、C/C++等。 备注:(1)MQ:MQ是 message queue 的简称,是应用程序和应用程序之间通信的方法。(2)AMQP:advanced message queuing protocol ,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设.

2021-03-28 22:38:53 99

原创 ActiveMQ、RabbitMQ、RocketMQ、kafka中间件对比

特性 ActiveMQ RabbitMQ RocketMQ kafka 开发语言 java erlang java scala 单机吞吐量 万级 万级 10万级 10万级 时效性...

2021-03-27 16:35:29 35

原创 RabbitMQ如何保证消息的可靠性

一、首先看一下RabbitMQ为什么不可靠RabbitMQ丢失的以下3种情况:(1)生产者方面:生产者发送消息至MQ的数据丢失(2)RabbitMQ方面:MQ收到消息,暂存内存中,还没消费,自己挂掉,数据会都丢失(3)消费者方面:消费者刚拿到消息,还没处理,挂掉了,MQ又以为消费者处理完二、针对不可靠问题的解决方案通过上诉我们知道RabbitMQ共有3处不可靠问题。(1)生产者方面:生产者发送消息至MQ的数据丢失(2)RabbitMQ方面:MQ收到消息,暂存内..

2021-03-27 16:07:51 61

原创 使用限流方式限制流量,完美应对高并发中请求暴涨难题

前言:在大量并发的环境下,为了防止由于请求暴涨,导致系统崩溃从而引起雪崩,一般会对流量做一定的限制操作。比如等待、排队、降级、拒绝服务、限流等。我们这节主要讲的是限流,限流的措施有很多,我这里分为单机限流和集群限流。(1)单机限流:在java中我们可以使用AtomicInteger,RateLimiter或Semaphore来实现,但是上述方案都不支持集群限流。(2)集群限流:集群限流的应用场景有两个。一个是网关限流:常用的方案有Nginx限流和Lua+Redis(如:Spring.

2021-03-20 17:59:10 161

原创 IDEA项目中有多个配置文件时,指定使用某个配置文件方法

我们项目中针对不同的环境有不同的配置文件,比如我的application-local.properties就是当地开发的配置文件、application-test.properties是测试环境的配置文件等。有时候我们需要对其配置环境进行切换,我们需要怎么做呢?其实很简单,我们点击Edit Configurations。然后找到自己对应的Spring项目最后在Spring项目中的Active profiles输入框中输入你想要配置的文件,比如我想用application-local.

2021-03-18 23:12:11 276

原创 使用DBeaver导入数据到hive慢?试一下直接指令导数据文件进去

对于大数据中的一些特殊维表,有时候需要导入文档数据进去。对于批量导入数据,我们建议用指令导进去,这样速度可以非常快。我们一般会有这样的流程:(1)首先我们在execl中处理相关数据,每个字段的顺序都要一一与数仓中的表对应。整理好后导出为csv文件。(2)将导出的csv文件使用类似NotePad++的工具进行编辑,将“,”替换成数仓中设置的隔开符(比如/t)。如果有中文,还需要另存utf-8格式。(3)将修改后的csv文件另存为txt文件格式。(4)将该txt文件放置到服务器某个路径,然后

2021-03-18 22:54:30 127

原创 完美解决前后端交互中后端返回树形结构数据

在我们开发中,前端有些树形组件需要的数据类型更多是树形类型,比如Element中的树节点:前端需要补充的数据类型是:[{ id: 1, label: '一级 1', children: [{ id: 4, label: '二级 1-1', children: [{ id: 9, label: '三级 1-1-1' },

2021-03-17 22:36:53 250

原创 如何给postman中给接口传入基本类型的集合

我们希望前端传过来一个Integer类型的集合,方便我进行处理操作。在写接口的时候,会写成这样@RequestMapping(value = "/user",method=RequestMethod.GET)public @ResponseBody String select(@RequestParam(value = "ids",required = false) List<Integer> ids){ ... .... }但我们在调试的时候,使用postman不知道怎么

2021-03-17 22:01:20 304

原创 idea下载依赖包慢?试一下给你的idea配置阿里云配置仓库

一、前言我们在开发的时候,往往会遇到过下载依赖包慢的问题。主要原因是maven的中央仓库在国外,再加上某些原因,导致下载速度非常慢。有没有一种办法,让我们的依赖包下载速度快起来呢,还真有,把maven的中央仓库地址换成阿里云的maven仓库地址,这样就不会慢了,而且速度还非常快。二、配置idea的maven仓库地址首先我们打开我们idea的setting配置在指定目录下settings.xml文件,并在settings.xml中找到<mirrors>标签,并在里面加入以.

2021-03-16 23:05:31 23

原创 使用Mybatis遇到需要拼接/复用sql问题?快来试试Mybatis的动态sql吧

一、前言我们在使用mybatis的时候,很多时候我们需要自定义sql。通常我们会在mapper文件上写上如下操作。<select id="findSuncat" resultType="Suncat"> SELECT * FROM table left table1 on table.id = table.tq_id WHERE state = ‘SHOW’</select>假设现在增加一个条件,当业务有传时间参数的时候,我们就在后面加上and crea

2021-03-16 22:51:40 51

原创 解决前后端分离中文件传输跨域失败问题

笔者在之前的开发中就遇到过这种情况:给与后端的文件下载接口,我在浏览器在postman上试过都是可以的,但在前端上就报这种错误:看上面的介绍是说前后端跨域问题,可是后端代码中明明配置了放行所有请求,其他接口也没有报这种CORS跨域问题,偏偏这个传输文件接口报跨域问题。我当时的代码类似是这样的response.reset();response.setHeader("Content-disposition", "attachment; filename="+fileName);response

2021-03-15 22:27:16 148

原创 解决Windows10家庭版系统无法安装Docker Desktop问题

一、无法直接安装运行Docker Desktopwin10家庭版不支持hyper-v功能,只有专业版才有,不能直接安装docker。但我们在docker官网上看到一句话:(https://docs.docker.com/docker-for-windows/install-windows-home/)大概的意思就是说,现在支持在windows上安装运行Docker Desktop,只需要安装WSL2即可。二、安装WSL2我们打开win10自带的Microsoft store微软商城软.

2021-03-15 22:03:41 144

原创 Spring BeanFactory与FactoryBean 区别

一、BeanFactory与FactoryBean分别是什么1.BeanFatory: BeanFactory是个Factory,也就是IOC容器或对象工厂。所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。 我们经常用到的是ApplicationContext 接口也是继承BeanFactory的。spring不允许我们直接操作 BeanFactory bean工厂,所以为我们提供了ApplicationContext 这个接口继承BeanFactory 接口,

2021-03-07 12:34:21 35

原创 数据库隔离级别及脏读、不可重复读、幻读

一、数据库隔离级别1.未提交读(Read uncommitted) 未提交读,事务可以读取其他事务未提交的数据,存在脏读问题。 A事务中未提交的内容,在B事务中都可见。如果A事务回滚,B事务读到的数据就是脏数据。2.已提交读(Read committed) 事务只能看到其他事务已经提交的修改。 解决了脏读问题,但有不可重复读的问题,即同一个事务多次执行同样的查询语句不一样。3.可重复读(Repeatable read) 避免了不可重复读的问题,即能够保证在同..

2021-03-07 11:19:26 100 4

原创 数据库事务的四大特性(ACID)

⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。 因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。⑵ 一致性(Consistency)在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次.

2021-03-06 21:03:03 64

原创 MySQL存储引擎InnoDB和MyISAM区别及使用场景

一、先了解一下InnoDB与MyISAM分别是什么,又因何诞生InnoDB是集聚引擎。它设计之初就是为了处理大量数据时提供高性能的服务,因此在运行时会在内存中建立缓冲池,用于缓冲数据和索引。 MyISAM是非集聚引擎。它设计之初就是为了快速读取。二、InnoDB与MyISAM的区别我们通过上述知道,InnoDB设计之初就是处理大量数据时提供高性能的服务。那么大量数据处理过程中,我们肯定会一些问题:事务问题:在大规模数据中,就意味着有可能大规模的修改,遇到事务问题也是很常见,因此肯定会添.

2021-03-06 20:31:16 78 1

原创 Apache DolphinScheduler 海豚调度器自定义时间参数

在Apache DolphinScheduler 海豚调度器(本文简称:小海豚) 官网中,我们看到其自定义时间的参数是这样介绍的1.支持代码中自定义变量名,声明方式:${变量名}。可以是引用 "系统参数" 或指定 "常量"。2.我们定义这种基准变量为 [...] 格式的,[yyyyMMddHHmmss] 是可以任意分解组合的,比如:$[yyyyMMdd], $[HHmmss], $[yyyy-MM-dd] 等3.也可以使用以下格式:* 后 N 年:$[add_months(yyyyMMdd

2021-03-03 21:41:35 1070 1

原创 sql 优化

一、首先要分析你的sql分析sql语句:在你的sql语句前添加explain 或者点击Navicat中的解释工具会出现以下表头字段:现在说一下每个表头的字段代表什么意思(1)id : select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序 id相同 执行顺序由上至下 id不同 如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行 id相同又不同(两.

2021-03-01 23:24:15 42 1

原创 索引

一、索引是什么index是帮助MYSQL高效获取数据的数据结构。索引是数据结构。相当于书的目录。二、索引的优缺点索引的优势: 提高查询效率(降低IO的使用率) 降低CPU使用率 (因为B树索引本身就是一个排好序的结构,因此在排序时可以直接使用) 索引的缺点: 索引本身很大,可以存放在内存/硬盘(通常为硬盘) 索引不是所有情况均适用:(比如:数据量少、频繁更新的字段、很少使用的字段等情况) 所有索引会降低增删改的效率 三、索引的分类主..

2021-02-28 23:03:09 27

原创 zookeeper概要

一、Zookeeper是什么它是一个分布式服务框架,它主要用来解决分布式应用中经常遇到的一些数据管理问题,如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。 简单点来说zookeeper = 文件系统 + 监听通知机制二、Zookeeper原理特性1.文件系统:Zookeeper维护一个类似文件系统的数据结构:每个子目录项如NameService都被称作为znode(目录节点),和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除znode,.

2021-02-11 22:57:13 26

原创 Redis(3)-主从复制及哨兵模式

一、Redis主从复制一般从节点提供读操作,主节点提供写操作。(对于读多写少的情况,可给主节点配置多个从节点,从而提高相应效率) 主从复制是指主节点将当前的数据同步给从节点,后续如果有写命令也会持续发送给从节点,达到主从数据同步效果。主从复制过程: (1)从节点执行slaveof[masterIP][masterPort],保存主节点信息。 (2)从节点中的定时任务发现主节点信息,建立和主节点的Socket连接。 (3)从节点发送ping信号,主节点...

2021-01-24 21:12:56 70

原创 Redis(2)-Redis的一些问题及策略

一、Redis缓存问题缓存和数据库一致性问题 分布式环境下非常容易出现缓存和数据库一致性问题,如果想要缓存跟数据库强一致性,那就不要使用缓存。 我们只能通过采取合适的策略来降低缓存与数据库一致性问题的概率。 合适的策略包括合适的缓存更新策略、更新数据库后及时更新缓存、缓存失败时增加重试机制等。二、缓存穿透、缓存击穿、缓存雪崩(1)缓存穿透:指用户不(黑客)不断请求缓存和数据库中都没有的数据。这样不断的攻击会导致数据库压力非常大,严重会击垮数据库...

2021-01-24 20:52:37 47

原创 Redis(1)-基本概念及使用

一、Redis是什么Redis是一个由C 语言开发的一个高性能键值对(key-value)的内存数据库,可以用作数据库、缓存、消息中间件等。 它是一种NoSQL(not-only sql,泛指非关系型数据库)的数据库。 特点: 1.性能优越,数据存储在内存中,读写速度非常快,支持10W QPS。 2.单线程单进程,线程是安全的,同时避免了线程上下文的切换带来的损耗。 3.采用多路IO多路复用机制。 ...

2021-01-24 20:44:05 89

原创 Spring事务

Spring中七种事务传播行为事务传播行为类型 解释说明 个人理解 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择 必须确保有一个事务 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行 对于事务,有就有,没有就算了 PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常 必须依附当

2021-01-24 20:19:37 22

原创 Spring Bean 是什么及其生命周期阶段

一、Spring Bean是什么Spring Bean是被实例的,组装的及被Spring容器管理的Java对象。Spring容器会自动完成@Bean对象的实例化二、Spring Bean生命周期Spring Bean的生命周期只有四个阶段: 实例化 -> 属性赋值 -> 初始化 -> 销毁 1.实例化Instantiation 2.属性赋值Populate 3.初始化Initialization ...

2021-01-17 22:52:04 121

原创 Spring AOP介绍及其原理

一、Spring AOP是什么AOP:面向切面,是一种编程思想,OOP的延续。 将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在一段程序之前或者之后做一些事。二、Spring AOP源码AOP源码中用到了两种动态代理来实现拦截切入功能:jdk动态代理和cglib动态代理。(1)jdk动态代理:由java内部的反射机制来实现的。反射机制在生成类的过程中比较高效,但前提是目标类基于统一的接口,如果没有jdk代理不能应用。/**** jdk动态代.

2021-01-17 22:30:57 35

原创 Spring IOC介绍及其原理

一、Spring IOC是什么IOC:控制反转,是一种设计模式。 一层含义是控制权的转移,由传统的在程序中控制依赖转移到由容器来控制。 第二层是依赖注入:将相互依赖的对象分离,在Spring配置文件中描述他们的依赖关系,他们的依赖关系只在使用的时候才建立,简单来说就是不需要的NEW一个对象了。 二、Spring IOC简单原理实现步骤:加载并且保存Spring配置文件路径信息,然后保存到configLocation中。 刷新Spring上下文。 创建并且载入DefaultL...

2021-01-17 22:28:03 509

原创 SpringBoot是什么?原理是怎么样的?

一、SpringBoot是什么是一个快速开发的框架吗,能够快速整合第三方框架。 整合的基本原理是Maven依赖关系,Maven的集成,完全采用注解化,简化XML配置,内嵌HTTP服务器(Tomcat,jetty),默认嵌入Tomcat,最终以Java应用程序进行执行。二、为什么要用SpringBoot以往的项目整合起来是比较繁琐复杂的,而且存在架构包冲突的问题。SpringBoot的设计目的就是用来简化Spring应用的创建。三、SpringBoot的核心功能1.可独立运行的...

2021-01-17 21:18:26 59

原创 总结篇(34)---JUC工具类(4)Exchanger

ExchangerExchanger用于两个线程间的数据交换,它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。 使用场景:两个线程相互等待处理结果并进行数据传递。 一、Exchanger使用public void latch() throws InterruptedException,IOException{ int count = 5; Exchanger<String> exchanger = new Exchanger<>...

2021-01-07 22:42:51 27

原创 总结篇(33)---JUC工具类(3)Semaphore

SemaphoreSemaphore信号量维护一个许可集,每次使用时执行acquire()从Semaphore获取许可,如果没有则阻塞,每次使用完执行release()释放许可。 使用场景:Semaphore对用于对资源的控制,比如数据连接有限,使用Semaphore限制访问数据库的线程数。一、Semaphore的使用:public void latch() throws InterruptedException,IOException{ int count = 5; S...

2021-01-07 22:39:18 24

原创 总结篇(32)---JUC工具类(2)CyclicBarrier

CyclicBarrier它允许一组线程相互等待,直到达到某个公共屏障点,也就是阻塞在调用cyclicBarrier.await()的地方。 使用场景:类似CountDownLatch,但CyclicBarrier提供了几个countDownLatch没有的方法以应付更复杂的场景。备注:看上去功能跟CountDownLatch差不多,但CountDownLatch的计数无法被重置,如果需要重置,还是需要考虑使用CyclicBarrier。 另外,CyclicBarrier初始化时还可添..

2021-01-07 22:36:42 27

原创 总结篇(31)---JUC工具类(1)CountDownLatch

CountDownLatchCountDownLatch初始化时会给定一个计数,然后每次调用countDown()计数减1,当计数未达到0之前调用await()方法会阻塞直到计数减到0; 使用场景:多用于划分任务由多个线程执行,例如:最近写个豆瓣爬虫,需要爬取每个电影的前五页短评,可以划分成5个线程来处理线程。通过latch.await()保证全部完成再返回。 一、CountDownLatch使用样例:public void latch() throws Interrupte...

2021-01-07 22:32:33 30

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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