自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 安装Node.js和npm、cnpm

我用的是MAC,没有用brew,个人觉得brew安装指定版本的软件比较烦直接进Node官方网站下载,我下的.tar.gz解压tar -zxf node-v14.15.0-darwin-x64.tar.gz设置环境变量vi ./bash_profileexport NODE_HOME=/usr/local/node-v14.15.0-darwin-x64export PATH=$PATH:$NODE_HOME/bin#让配置生效source ./bash_profile

2020-11-09 09:43:29 338

原创 内嵌tomcat8和内嵌tomcat9与mvc的整合

之前有用过tomcat8和spring-webmvc整合,最近升级到9.0版本后发现有了不一样到地方先看看tomcat8是怎么整合的public class Main { public static void main(String[] args) throws Exception{ AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext(); ac.register(Ap

2020-10-31 23:17:36 569 1

原创 探究Http的CORS和处理方式

想要了解CORS的概念性的东西可以先看看这篇跨源资源共享(CORS)本篇只讲述如何处理CORSserver端处理server端设置响应头

2020-09-25 11:10:37 244

原创 模拟springboot

借助servlet3.0的新特性和内嵌tomcat就可以模拟springboot零配置启动github地址https://github.com/liu149/mySpringBoot

2020-09-21 22:52:57 147

原创 SpringMvc零配置的原理

在servlet3.0之前,我们必须将listener、filter、servlet声明在web.xml中。在servlet3.0之后为什么我们启动springmvc就可以不需要web.xml了呢?我们一直在说servlet3.0,但是你真的知道3.0之后有哪些改动让我们可以不需要用到web.xml了吗?首先这是servlet3.0定义的接口,它定义的规则就是:1.实现了这个接口的类要加在META-INF/services/javax.servlet.ServletContainerInitia

2020-09-16 20:17:09 243

原创 Docker之二DockerFile

官网上可以找到相关文档https://docs.docker.com/develop/develop-images/dockerfile_best-practices/本文的内容是如何通过DockerFile构建一个镜像,然后运行镜像跑一个我们自己的SpringBoot应用编写DockerFile# 以java:8作为基础镜像FROM java:8# 将springBoot jar包复制到镜像的/opt/目录下ADD eureka-demo-0.0.1-SNAPSHOT.jar /o

2020-09-10 09:15:31 84

原创 Docker之一安装

根据Docker官网文档安装https://docs.docker.com/engine/install/centos/因为系统是centos,安装docker-engine需要centos7移除旧版本$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \

2020-09-05 00:37:17 72

原创 ansible之一安装

安装ansible的宿主机只能是linux机器,因为我用的是Mac所以省去了很多麻烦。ansible是用python开发的,所以要先安装python,Mac自带python所以直接安装ansible根据官方文档来https://docs.ansible.com/ansible/latest/installation_guide/index.html$ sudo pip install ansible运行第一条ansible命令ansible的工作原理是通过ssh通过宿主机操作re

2020-09-01 23:23:13 110

原创 tomcat源码解析一tomcat整体架构

1.什么是tomcat?tomcat是servlet规范的一种实现(https://jcp.org/en/jsr/detail?id=340),通俗讲tomcat就是一个servlet的容器,每一个servlet代表了不同的业务处理逻辑,编写servlet是开发者做的事情,如何将请求分发到servlet,如何将servlet返回到数据传递给客户端这是tomcat该做的事情2.tomcat主要的功能是什么?1.处理socket连接, 将接收到到字节流数据转换成Request对象,将request分

2020-05-19 22:33:36 186

原创 ApplicationContextAware的使用理解

想象这么一个场景,一个单例bean中依赖有原型bean我们怎么去注入?spring中我了解的大致有两种方式,一种是@Lookup依赖查找,另一种就是实现ApplicationContextAware使用方法@Service@Scope("prototype")public class UserService { }@Componentpublic class Use...

2020-03-06 16:21:24 216

转载 公钥、私钥和数字证书

主角介绍:Bob and Alice提起RSA加密算法,公钥和私钥,多数文章都要使用Bob和Alice这两位人物。他们的创造者名叫Rivest,是RSA之父。他为了在避免在描述中使用A和B,就以这两个字母开头,创建一男一女两个角色,就是我们在任何文章上都能看到的Alice和Bob了。这是一些题外话,下面就来进入我们的数字证书入门学习吧。什么是数字证书Bob有两把钥匙,一把叫公...

2019-12-27 21:56:47 227

原创 centos7上安装kerberos附java使用kerberos案例

1.1安装kerberos服务端先更新yumyum update安装依赖包yum -y install krb5-libs krb5-server1.2.配置/etc/krb5.conf# Configuration snippets may be placed in this directory as wellincludedir /etc/krb5.conf.d...

2019-12-13 10:27:44 962

转载 java8新特性之stream

Java 8 StreamJava 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输...

2019-11-22 10:13:31 132

原创 java.util.function包的使用

ConsumerConsumer是一个函数式接口,表示接受一个参数,没有返回结果。@FunctionalInterfacepublic interface Consumer<T> { void accept(T t); default Consumer<T> andThen(Consumer<? super T> after) {...

2019-11-21 10:05:44 258

原创 线程池

引言线程是一种稀有的资源,java中的线程和操作系统的线程是1:1对应的,操作系统的线程是固定的,当我们有任务需要频繁调用线程执行的时候,可以用到线程池。合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,...

2019-11-05 11:14:44 97

原创 SpringCloud之feign

官方文档feign是什么用官方文档的话来解释:feign是一个声明性web服务客户端。它使编写web服务客户端变得更容易。使用feign创建一个接口并对其进行注释。它有可插入的注释支持,包括外部注释和jax-rs注释。feign还支持可插入的编码器和解码器。spring cloud增加了对spring mvc注释的支持,以及对使用spring web中默认使用的httpMessageC...

2019-10-18 22:51:01 168

原创 SpringCloud之ribbon

官方文档ribbon是什么?Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer...

2019-10-15 16:09:41 79

原创 springcloud之eureka

eureka是什么?eureka是Netflix的子模块之一,也是一个核心的模块,eureka里有2个组件,一个是EurekaServer(一个独立的项目) 这个是用于定位服务以实现中间层服务器的负载平衡和故障转移,另一个便是EurekaClient(我们的微服务) 它是用于与Server交互的,可以使得交互变得非常简单:只需要通过服务标识符即可拿到服务。与spring-cloud的关系...

2019-10-11 22:19:54 106

原创 Rabbitmq之发送端事务和确认

官网说明为什么存在确认机制根据官网翻译过来:根据定义,使用消息传递代理(如rabbitmq)的系统是分布式的。由于发送的协议方法(消息)不能保证到达对等方或被对等方成功地处理,因此发布者和消费者都需要一种传递和处理确认的机制。rabbitmq支持的几个消息传递协议提供了这样的特性。它们对于从发布服务器到rabbitmq节点以及从rabbitmq节点到消费者的可靠交付都是必不可少的。...

2019-09-25 23:38:27 820

原创 spring boot中使用Rabbitmq消息队列

SpringBoot整合RabbitMqpom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sc...

2019-09-21 21:41:15 132

原创 Rabbitmq之交换机

生产者将消息发送到消息系统的时候,不是直接发送到队列,而是发送到交换机,由交换机路由到相应的队列交换机有三种路由模式1.direct交换机通过一个routing key和队列绑定,当生产者生产消息的时候指定一个routing key,当绑定队列的routing key和生产者发送的routing key一致,那么交换机就会把消息发送到这个队列public class Co...

2019-09-16 13:00:57 137

原创 Rabbitmq之消息重复消费

消息队列出现消息重复的原因有多种消息队列并不能保证消息的唯一,所以我们只能在业务层面上做这些控制1.全局唯一id,比如通过消息队列来生成订单,那订单号就是唯一的,在进行插入数据库之前先判断是否这个订单号是否已经存在了,如果已经存在了,说明已经消费过这条消息了,直接丢弃2.消息确认表,将消息标示号存入redis或者数据库,在进行消费之前进行一个判断总之解决的方案很多,要看具体业务场景...

2019-09-16 10:47:33 2384

原创 Rabbitmq之消费端确认

当消费者从消息队列中拉取了一条消息,去处理某个业务的时候出现了异常,那这条消息没有被正确消费的时候我们该怎么处理呢?rabbitmq有一个确认机制首先看一下如果我们不做确认的话是一种什么情况public class ConnectionUtil { public static String QUEUE_NAME = "testQueue"; public static Str...

2019-09-16 10:22:11 411

原创 Rabbitmq的安装和helloWorld

安装mac安装rabbitmq很简单brew install rabbitmq更新命令brew reinstall babbitmq或者brew upgrade rabbitmq启动服务,在安装目录/usr/local/Cellar/rabbitmq/3.7.7_1执行命令brew services start rabbitmq关闭服务brew services s...

2019-09-15 20:55:33 211

原创 事务的隔离级别

存在两个事物(T1,T2)同时运行脏读:T1读取了已经被T2修改但还未提交的字段,由于某种原因,T2事物回滚,则T1读取的内容是临时且无效的。 不可重复读:T1读取一个字段,之后T2更新了该字段,T1在此读取该字段值发生了变化。 幻读:T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行,之后T1在此读取该表会多出几行。数据库事务的隔离级别:隔离级别 脏读 不可...

2019-09-08 13:58:47 71

原创 Spring声明式事务

Spring事务最顶层的接口是PlatformTransactionManager二、传播行为1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘...

2019-09-04 10:59:13 85

原创 Spring容器初始化过程(注解方式)

AnnotationConfigApplicationContext的构造方法(做了三件事)调用父类的无参构造方法,子类无参构造方法 父类构造方法中new了DefaultListableBeanFactory 子类构造方法中创建了一个reader和scaner调用register完成注册这里完成了Spring内置类和配置类的注册,将配置类转为bd...

2019-09-03 14:22:58 625

原创 GC算法

引用计数法给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值减1;计数器为0的时候就回收。但是这种算法无法解决相互引用的问题,所以虚拟机并没有用它管理内存。可达性分析算法在java语言中,可作为GC Roots的对象包括一下几种虚拟机栈(栈帧中的本地变量表)中引用的对象法法区中类静态属性引用的对象方法区中常量引用的对象本地方法栈中J...

2019-09-02 22:35:18 58

原创 引用计数算法的缺陷

public class ReferenceCountingGC { public Object instance = null; private static final int _1MB = 1024*1024; private byte[] bigSiez = new byte[2* _1MB]; public static void main(St...

2019-09-02 22:20:45 758 2

原创 OutOfMemooryError异常分析

/** * author : liuqi * createTime : 2019-09-02 * description : TODO * version : 1.0 * VM Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError * 参数意义分别为:堆最小内存20M 堆最大内存20M 出现OutOfMemoryError的时候生...

2019-09-02 21:34:59 174

原创 JVM内存区域

1.方法区(Method Area)类的所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在这里定义。简单来说,所有定义的方法的 信息都保存在该区域,静态变量+常量+类信息(构造方法/接口定义)+运行时常量池都存在方法区中,虽然Java虚拟 机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是为了和Java的 堆区分开2.堆(Hea...

2019-09-02 15:54:49 72

原创 SpringBoot2.X快速构建和配置

SpringBoot是什么?SpringBoot用于简化Spring应用配置,采用“习惯优于配置”的方式开发,可以快速构建Spring应用。准备工作JDK8以上。 建议安装Intellj Idea Ultimate(旗舰版)。 具备Maven和SpringMVC技术。SpringBoot开发要求创建Maven工程,构建项目结构。 配置pom.xml,引用各种starte...

2019-08-23 21:17:39 95

原创 innoDb行格式,数据页结构以及索引底层原理

InnoDb数据页结构页是InnoDB管理存储空间的基本单位,一个页的大小默认是16KB。SHOW GLOBAL STATUS like 'Innodb_page_size';页结构: 名称 中文名 占用空间 简单描述 File Header 文件头部 ...

2019-08-20 10:57:36 550

原创 mybatis和spring整合之后为什么一级缓存会失效

先整合mybatis和springpom.xml <!--spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId...

2019-08-17 17:08:58 1002

原创 mac 10.13.6编译jdk10

尝试了用mac10.13.6编译jdk8 jdk9,可能水平有限,出现了各种问题,最后jdk10成功了,记录下填坑之路。本机需要安装jdk,我自己安装的版本是jdk1.8编译过程根据https://www.jianshu.com/p/fcefdce5fdab在idea上使用编译后的jdk,file --> project structure中添加自己的jdk配置虚拟机参数...

2019-08-14 22:58:07 176

原创 mybatis的流程

根据mybatis官网来配置一下mybatis环境,单独使用mybatis只需要依赖mybatis和数据库连接包,resource下建个xml就可以了<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</arti...

2019-08-11 21:41:13 79

原创 @MapperScan注解的原理

spring源码看多了,就发现很多开关型的注解,以@EnableXXX开头的这些注解,大体上实现原理差不多。@MapperScan也不能免俗,没办法,谁让spring允许插手bean实例化过程的方式只那么几种呢!同样的通过@Import实现开关效应,MapperScanRegistrar实现ImportBeanDefinitionRegistrar接口,传一个registry给你,至于你想怎么...

2019-08-07 22:53:23 5214 3

原创 @EnableAspectJAutoProxy注解的原理(SpringAOP的原理)

spring使用aspectj提供的库进行切入点解析和匹配,解释与aspectj 5相同的注释。但是,AOP运行时仍然是纯SpringAOP,并且不依赖于AspectJ编译器或weaver。springAOP不管是用jdk动态代理还是cglib动态代理,跟aspectj的最大区别是SpringAOp用的是动态代理运行期织入,而aspectj是使用的静态代理在编译期织入。先看@EnableA...

2019-08-05 22:46:56 1672

原创 手动实现可开关的Cglib代理

要实现可开关的cglib代理,需要依赖@Import,ImportSelector,BeanPostProcessor原理就是依赖@Import注解的开关作用,动态将BeanPostProcessor的实现添加到spring容器,通过beanPostProcessor插手bean的实例化过程,我们就能控制是返回代理对象还是目标对象。 先定义一个我们自己的注解,依赖了@Import @R...

2019-08-03 19:50:40 260 3

转载 @EnableEurekaClient和@EnableDiscoveryClient的区别

https://blog.csdn.net/u012734441/article/details/78256256?locationNum=1&amp;fps=1 

2018-08-09 10:19:26 9088

空空如也

空空如也

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

TA关注的人

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