自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode动态规划笔记

动态规划问题的⼀般形式就是求最值。求解动态规划的核⼼问题是穷举。⾸先, 动态规划的穷举有点特别, 因为这类问题存在「重叠⼦问题」 , 如果暴⼒穷举的话效率会极其低下, 所以需要「备忘录」 或者「DP table」 来优化穷举过程, 避免不必要的计算。⽽且, 动态规划问题⼀定会具备「最优⼦结构」 , 才能通过⼦问题的最值得到原问题的最值。只有列出正确的「状态转移⽅程」 才能正确地穷举。重叠⼦问题、 最优⼦结构、 状态转移⽅程就是动态规划三要素。...

2021-03-25 09:05:35 118

原创 RabbitMQ的消息模式

1.简单模式简单模式是最简单的消息模式,它包含一个生产者、一个消费者和一个队列。生产者向队列里发送消息,消费者从队列中获取消息并消费。2.工作模式工作模式是指向多个互相竞争的消费者发送消息的模式,它包含一个生产者、两个消费者和一个队列。两个消费者同时绑定到一个队列上去,当消费者获取消息处理耗时任务时,空闲的消费者从队列中获取并消费消息。...

2021-03-11 15:08:39 1115

原创 Oauth2(开放授权)

1.OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,2. 应用场景2.1第三方应用授权登录:在APP或者网页接入一些第三方应用时,时长会需要用户登录另一个合作平台,比如QQ,微博,微信的授权登录。2.2原生app授权:app登录请求后台接口,为了安全认证,所有请求都带token信息,如果登录验证、请求后台数据2.3前后端分离单页面应用(spa):前后端分离框架,前端请求后台数据

2021-01-18 14:38:49 722 2

原创 拦截器和过滤器的区别

1.过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等2.拦截器:依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一

2020-12-16 10:28:02 144

原创 spring总结

Spring IoC的初始化过程:Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,这时候Spring AOP会使用Cglib ,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理,Spring AOP 和 AspectJ AOP 有什么区别?Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。 Spring AOP 基于代理(Pro

2020-11-17 16:23:23 196

原创 redis学习笔记

redis学习笔记之数据结构redis有五种数据结构,分别是String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)redis的集合和列表都可以存储多个字符串,它们之间的不同是:列表可以存储多个相同的字符串;集合通过使用散列表保证自己存储的每个字符串是各不相同的;散列可以存储多个键值对之间的映射,它可以存储字符串或数字;有序集合存储键值对,键被称为成员,每个成员不同。...

2020-11-17 16:22:48 283

原创 数据库优化笔记

1.查询优化在保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;在查询时,不要过多地使用通配符如SELECT * FROM T1语句,要用到几列就选择几列如:SELECT COL1,COL2 FROM T1;在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,COL3 FROM T1,因

2020-11-12 09:33:04 331

原创 Dubbo笔记

1. 什么是 DubboApache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC 框架,它提供了三大核心能力:**面向接口的远程方法调用(RPC),智能容错和负载均衡,以及服务自动注册和发现。**简单来说 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。2. 什么是 RPC?RPC原理是什么?2.1 RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从

2020-11-11 15:10:02 216

转载 MySQL和Oracle的区别

(1) 对事务的提交MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮(2) 分页查询MySQL是直接在SQL语句中写"select… from …where…limit x, y",有limit就可以实现分页;而Oracle则是需要用到伪列ROWNUM和嵌套查询(3) 事务隔离级别MySQL是read commited的隔离级别,而Oracle是repeatable read的隔离级别,同时二者都支持serializab

2020-11-02 17:21:08 130

原创 SpringBean的循环依赖

1. 什么是循环依赖循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件以两个类A和B为例进行讲解,如下是A和B的声明public class A { private B b; public void setB(B b) { this.b = b; }}public class B { priva

2020-11-02 17:14:36 872

原创 Mysql与mongodb的区别

MySQL是关系型数据库。优势:在不同的引擎上有不同 的存储方式。查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。缺点:在海量数据处理的时候效率会显著变慢。Mongodb是非关系型数据库(nosql ),属于文档型数据库存储方式:虚拟内存+持久化。查询语句:是独特的Mongodb的查询方式。适合场景:事件的记录,内容管理或者博客平台等等。架构特点:可以通过副本集,以及分片来实现高可用。数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在

2020-10-30 19:27:45 282

原创 SpringCloud之微服务应用监控

Spring Boot Admin 可以对SpringBoot应用的各项指标进行监控,可以作为微服务架构中的监控中心来使用1.Spring Boot AdminSpring Boot Admin 可以提供应用的以下监控信息:监控应用运行过程中的概览信息;度量指标信息,比如JVM、Tomcat及进程信息;环境变量信息,比如系统属性、系统环境变量以及应用配置信息;查看所有创建的Bean信息;查看应用中的所有配置信息;查看应用运行日志信息;查看JVM信息;查看可以访问的Web端点;查看HTT

2020-10-29 10:32:17 2132

原创 SpingCloud之API网关服务Gateway

Gateway是在Spring生态系统之上构建的API网关服务,提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能, 例如:熔断、限流、重试等Spring Cloud Gateway 具有如下特性:基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 进行构建;动态路由:能够匹配任何请求属性;可以对路由指定 Predicate(断言)和 Filter(过滤器);集成Hystrix的断路器功能;集成 Spring Cl

2020-10-28 08:48:26 92

原创 Java多线程笔记

线程共包括以下5种状态。新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。运行状态(Running) : 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。阻塞状态(Bl

2020-10-26 18:51:07 186

原创 Jvm笔记四

类加载机制类是在运行期间第一次使用时动态加载的,而不是一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。类的生命周期包括以下 7 个阶段:加载(Loading)验证(Verification)准备(Preparation)解析(Resolution)初始化(Initialization)使用(Using)卸载(Unloading)类加载过程包含了加载、验证、准备、解析和初始化这 5 个阶段1. 加载加载是类加载的一个阶段加载过程完成以下三件事:通过类的完全限定名称

2020-10-14 09:37:47 54

原创 Jvm笔记三

内存分配与回收策略1.Minor GC 和 Full GCMinor GC:回收新生代,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行,执行的速度一般也会比较快。Full GC:回收老年代和新生代,老年代对象其存活时间长,因此 Full GC 很少执行,执行速度会比 Minor GC 慢很多2.内存分配策略2.1. 对象优先在 Eden 分配大多数情况下,对象在新生代 Eden 上分配,当 Eden 空间不够时,发起 Minor GC。2.2. 大对象直接进入老年代大对象是指

2020-10-13 11:13:52 38

原创 Jvm笔记二

二.垃圾收集垃圾收集主要是针对堆和方法区进行。程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后就会消失,因此不需要对这三个区域进行垃圾回收。1.判断一个对象是否可被回收1.1引用计数算法(由于循环引用的存在,jvm不使用它)为对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。1.2.可达性分析算法以 GC Roots 为起始点进行搜索,可达的对象都是存活的,不可达的对象可被回收。Ja

2020-10-13 10:56:23 51

原创 Jvm笔记一

一.运行时的数据区域1、程序计数器记录正在执行的虚拟机字节码指令的地址,如果正在执行的是本地方法则为空。2.java虚拟机栈每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小java -Xss2M HackTheJava该区域可能抛出以下异常:当线程请求的栈深度超过最大值,会抛出 S

2020-10-12 14:35:16 56

原创 mysql索引

B+树索引是最常见也是数据库中使用最为频繁的一种索引。文件系统及数据库系统普遍采用 B+ Tree 作为索引结构,这是因为使用 B+ 树访问磁盘数据有更高的性能。在学习B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。1.二叉查找树二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的键值。但是二叉树的查询效率太低低了。因此若想二叉树的查询效率尽可能高,需要这棵二叉树是平衡的,从而引出新的定义——平衡二叉树,或称A

2020-09-22 15:33:17 136

原创 Mysql技术内幕之笔记一

在启动实例时,mysql会根据配置文件参数启动数据库(Oracle如果没有配置文件会启动失败,mysql不会)mysql会在下面位置查找配置文件位置1.mysql体系结构mysql由以下几个组件组成:连接池组件管理服务和工具组件sql接口组件查询分析器组件优化器组件缓冲组件插件式存储引擎物理文件mysql区别于其他数据库最重要的特点是它的插件式的表存储引擎,存储引擎是基于表的,不是基于数据库2.Innodb存储引擎(基于磁盘存储)它支持事务,特点是行锁设计、支持外键、支持类似

2020-08-28 10:53:30 111

原创 Nginx简介

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。1.代理在Java设计模式中,代理模式是这样定义的:给某个对象提供一个代理对象,并由代理对象控制原对象的引用。(形象比喻为中介,我们想做什么,但又不想直接去做,那么这时候就找另外一个人帮我们去做)Nginx 主要能够代理如下几种协议,其中用到的最多的就是做H

2020-08-20 09:15:57 116

原创 SpringCloud之服务熔断Hystrix

在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。服务雪崩效应当一个请求依赖多个服务的时候:正常情况但是,当请求的服务中出现无法访问、异常、超时等问题时(图中的I),那么用户的请求将会被阻塞。如果多个用户的请求中,都存在无法访问的服务,那么他们都将陷入阻塞的状态

2020-08-14 10:32:50 154

原创 SpringCloud之负载均衡Ribbon

Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。也可为Ribbon实现自定义的负载均衡算法。在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。下图展示了Ribbo

2020-08-14 09:25:12 76

原创 Spring Cloud之服务注册与发现组件Eureka

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。Eureka包含两个组件:Eureka Server和Eureka Client。Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服

2020-08-10 15:21:55 359

原创 mybatis笔记

持续整理常用标签,以防忘记:low(str):将所有字符串更改为小写,然后返回.例子:low(‘AbDEg112’)//返回abdeg112.concat()使用方法:CONCAT(str1,str2,…) //拼接字符串,如有任何一个参数为NULL ,则返回值为 NULL。注意:如果所有参数均为非二进制字符串,则结果为非二进制字符串。如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。...

2020-08-06 09:37:46 128

原创 事务管理实例与常见问题

@Transactional注解只能应用到public可见度的方法上,可以被应用于接口定义和接口方法,方法会覆盖类上面声明的事务。例如用户新增需要插入用户表、用户与岗位关联表、用户与角色关联表,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作, 这样可以防止出现脏数据,就可以使用事务让它实现回退。只需在方法或类添加@Transactional注解即可。@Transactionalpublic int insertUser(User user){ // 新增用户信息 in

2020-08-04 15:16:45 127

原创 版本控制工具Git常用操作

git init初始化版本库在E盘新建一个gitworkspace作为git工作空间,然后右击 Git Bash here,执行git init如下图,在该目录下生成.git目录.git目录下是版本库管理的一些配置文件和控制程序,以及存储目录;init初始化版本后,这个目录下的所有文件的任何操作都能被git跟踪到,然后可以进行版本库管理;git status查看操作状态假如有可添加和可提交的操作,会提示;git add添加到暂时区git add 文件 是把新增或者修改文件添加

2020-08-03 16:30:48 111

原创 版本控制工具Git简介

Git简介Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。Git特点:Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。1、Git 是分布式的;2、Git 把内容按元数据方式存储:所有的资源控制系统都是把文

2020-08-03 15:47:09 265

原创 Stream API笔记

Java 8 引入了全新的 Stream API,可以使用声明的方式来处理数据,极大地方便了集合操作,让我们可以使用更少的代码来实现更为复杂的逻辑。什么是Stream?Stream(流)是一个来自数据源的元素队列,它可以支持聚合操作。数据源:流的数据来源,构造Stream对象的数据源,比如通过一个List来构造Stream对象,这个List就是数据源;聚合操作:对Stream对象进行处理后使得Stream对象返回指定规则数据的操作称之为聚合操作,比如filter、map、limit、sorted等都

2020-07-03 10:13:20 91

转载 定时任务框架Quartz

一、什么是Quartz什么是Quartz? Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java...

2020-06-08 10:19:17 247

原创 redis主从复制原理及实现

redis主从复制原理及详细实现通过持久化功能redis可以保证即使在服务器重启的情况下也不会损失(或者少量损失)数据。但是数据是存储在一台服务器上的,如果服务器出现硬盘故障等问题就会造成数据的丢失。为避免单一故障,可以将数据库复制多个副本以部署在不同服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。为此,redis引入了复制功能。原理当一个从数据库启动后,会向主数据库发送SYNC命令,同时主数据库收到命令后开始在后台保存快照(RDB持久化的过程),并将保存快照期间收到的命令缓存

2020-05-24 14:53:21 224

空空如也

空空如也

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

TA关注的人

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