自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring源码分析+图解--Spring如何创建Bean对象(Bean的生命周期)

背景我们一般在做Spring项目的时候,对于用户创建的类,我们想要让Spring容器管理,我们可以通过xml配置文件或注解的方式告诉Spring哪些类需要容器管理。xml方式:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc

2021-09-13 09:53:40 460 5

原创 Spring源码分析+图解--Spring如何解决循环依赖的,为什么要用三级缓存

宏观背景在了解循环依赖之前,我们先宏观的温习一下bean生命周期,即Spring中Bean的创建过程。看过spring源码的应该都有注意到BeanFactory中有一段长长的注释,是Spring官方给我们提供的,推荐的Bean的生命周期的顺序。 * <p>Bean factory implementations should support the standard bean lifecycle interfaces * as far as possible. The full set

2021-09-12 16:42:52 329 4

原创 如何编写一个IOC容器,Spring IOC容器的内在逻辑是什么

思考如果让你手写一个IOC容器你要怎么写呢?你的思路是什么?都要考虑哪些问题?都要使用哪种设计模式?IOC容器的晋升之路当我们想要做一个IOC容器来盛放生成的对象时,我们的初步想法是通过工厂方法+配置文件来实现建议的IOC容器。但当出现循环依赖的时候,我们发现上面的简单IOC容器不能满足需求,思考我们是否可以将对象的创建过程,即实例化与初始化拆开。(本文主要是对IOC容器的讲解,代理对象及循环依赖的三级缓存暂时先不进行深入研究)思考:多个配置文件与BeanDefinition直接关联,耦合性较

2021-09-11 15:51:11 437 3

原创 InnoDB存储引擎为什么选择B+树作为存储结构--揭秘背后的逻辑

我们都知道InnoDB存储引擎的存储数据结构是B+树,那小伙伴们有没有想过,InnoDB存储引擎为什么要用B+树作为它的存储结构,而是用Hash,二叉树,AVL树,红黑树,B-树呢?今天小编就来为大家梳理一下里面的逻辑。HashHash是什么?Hash表又称散列表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。–《百度百科》Hash特点是什么?根据指定下

2021-09-01 10:52:38 861 3

原创 控制反转IOC

目录什么是控制反转?控制的是什么?反转的是什么?IOC与DI的关系是什么?IOC最基本的技术是什么?IOC的核心是什么?IOC的缺点是什么?什么是控制反转?在引入IOC之前,A类如果想要使用B类的方法,自己去创建B类,然后调用B类的方法,无论是创建B类还是使用B类,控制权都在自己手里。引入IOC之后,A类与B类失去了直接联系,A类如果想要使用B类的方法,IOC会主动去创建B类,然后将B类注入到A类,这样创建B类的“控制”权就由原来的A类“反转”到IOC容器了,A.

2021-05-30 17:38:56 151 2

原创 Vscode 批量删除代码中的console.log

公司中很多人在写前端的时候喜欢实用console.log来进行前端的测试,查看数据,但后面项目发版的时候要求将所有的console.log删除,当你遇到这个问题的时候你是怎么做的呢?一个一个的

2021-05-30 16:41:07 4545 6

原创 Eureka Server 单机到集群

思考:如何让Eureka集群中的服务相互知道呢?互相注册,相互守望。Eureka集群中的每个节点注册的服务内容是相同的呢?还是平均分配的?同时注册如果是平均分配,那如果一个节点宕机了,Client如何访问集群呢? 如何往“注册中心集群”中注册服务呢?AB等多个服务要分别注册到每一个集群中么,还是平均注册?同时注册到集群中的每一台服务器上面注册到注册中心的各种服务又是如何互相调用的呢?之前没有注册中心的时候,payment服务与order服务之间可以通过RestTemplate进

2021-05-30 16:20:00 124 1

原创 Chrome浏览器F12的奥秘

一、各种面板元素面板:使用“元素”面板可以通过自由操纵DOM和CSS来重演您网站的布局和设计。控制台面板:在开发期间,可以使用控制台面板记录诊断信息,或者使用它作为 shell,在页面上与JavaScript交互源代码面板:在源代码面板中设置断点来调试 JavaScript ,或者通过Workspaces(工作区)连接本地文件来使用开发者工具的实时编辑器网络面板:从发起网页页面请求Request后得到的各个请求资源信息(包括状态、资源类型、大小、所用时间等),并可以根据这个进行网络性能优

2021-05-22 15:10:05 670 4

原创 springmvc处理流程(处理器映射器,处理器适配器,视图解析器)

宏观的运行流程:1、用户发送请求至前端控制器DispatcherServlet2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器5、执行处理器(Controller,也叫后端控制器)。6、Controller执行完成返回M..

2021-04-25 10:39:38 849 7

原创 策略模式

策略模式是oop中最著名的设计模式之一,是对方法行为的抽象,可以归类为行为设计模式,也是oop中interface经典的应用。其特点简单又实用,是我最喜欢的模式之一。待更新

2021-04-11 23:00:26 133 4

转载 SpringBoot自动装配原理

一、SpringBoot的自动配置原理不知道大家第一次搭SpringBoot环境的时候,有没有觉得非常简单。无须各种的配置文件,无须各种繁杂的pom坐标,一个main方法,就能run起来了。与其他框架整合也贼方便,使用EnableXXXXX注解就可以搞起来了!所以今天来讲讲SpringBoot是如何实现自动配置的~1.1三个重要的注解我们可以发现,在使用main()启动SpringBoot的时候,只有一个注解@SpringBootApplication我们可以点击进去@Spri.

2021-04-04 21:04:09 767 5

原创 utools工具-让你的电脑起飞

做为一个工程师,快速获取电脑中的资源可以快速的提高我们的开发速度,之前用过Everything,Listary感觉挺好,后来看到utools工具,直接被吸粉儿了,下面介绍一下utools的简单实用。官网地址:https://u.tools/uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。当你熟悉它后,能够为你节约大量时间,让你可以更加专注地改变世界。utools 支持Windows/Mac/Linux,下载链接:https://u.to.

2021-03-31 21:50:13 1137 4

原创 elmentui 树形结构实现单选

<template> <el-tree :data="treeData" show-checkbox node-key="id" :props="defaultProps" check-strictly @check-change="handleClick" ref="treeForm"> </el-tree></template&gt.

2021-03-21 20:30:55 225 8

原创 lombok注解介绍

一、在讲解注解之前,先站在权威的角度看Lombok。lombok注解文档lombok官网下载二、Lombok的作用是什么?它产生的背景是什么?Project Lombok makes java a spicier language by adding 'handlers' that know how to build and compile simple, boilerplate-free, not-quite-java code.官网解释:大体意思是通过添加一些注解,可以让java变得

2021-03-13 19:11:45 316 5

原创 vue项目同时被localhost和ip地址访问的方法

既可以用ip访问,也可以用localhost访问的方法:1.package.json中,“dev”: “webpack-dev-server --inline --progress --config build/webpack.dev.conf.js”,后面加上 --host 0.0.0.02. index.js中, host: ‘IP号’Ps: webpack.dev.conf.js不改变, const HOST = process.env.HOST 这个将会决定running here的地址

2021-02-22 14:11:41 708 9

原创 设计模式七大原则的演变

设计原则一、单一职责(高内聚,低耦合的指导方针)为什么要有单一职责?复用角度:一个类承担的职责越多,被复用的可能性就越小。变化角度:当其中一个职责发生吧变化,可能会影响到其他职责的运作。案例分析getConnection()方法用于连接数据库,findCustomers()方法用户查询所有的客户信息,createChart()用户创建图表,displayChart()用于显示图表。一个CustomerDataChart类具有四个职能,而这四个职能的变化都会引起CustomerDataCh

2021-02-18 14:45:15 368 8

原创 类加载器

1、class文件分析https://zhuanlan.zhihu.com/p/814003662、符号引用,直接引用https://blog.csdn.net/luzhensmart/article/details/82627897?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_r

2021-02-10 14:03:57 152 8

原创 函数式接口

1、为什么要面向接口编程,它有什么好处?拓展性强,可以动态的更改实现类而不用改动代码。2、jdk1.8前后的接口变化jdk1.8以前的特性:1、可以有属性,但属性为常量。2、可以有方法,但方法必须是抽象方法或者静态方法。可以写静态方法的原因是:接口也是类,具有类的属性和方法。不可以写一般方法的原因是:接口不可以new,即没有对象,所以就没有对象所具有的一般方法。jdk1.8以后的特性:1、可以写默认方法,并且默认方法有方法体。子类可以继承,也可以重写。3、函数式接口,Lambda表达式

2021-02-07 19:14:55 196 6

原创 动态代理之cglib与jdk宏观比较

1、cglib与jdk宏观比较2、三条主线对比1、就B这条线上来讲:我会选择以jdk的形式来创建代理类。因为它是基于接口的,耦合性较低。而cglib的代理类是通过继承被代理类得来的,并且被代理类中的final方法是无法进行代理的。2、就授权这条线来讲:我会选择jdk的形式来授权。jdk1.8以前cglib的授权速度的确比jdk的授权要快,因为jdk采用的是反射的方式调取的B中的方法,而cglib采用的是FastClass机制通过索引来直接定位到B的方法,实质是通过回调函数来调取B中的方法。但在j

2021-01-29 19:22:45 428 17

转载 深度解析类加载机制

你是否真的理解Java的类加载机制?点进文章的盆友不如先来做一道非常常见的面试题,如果你能做出来,可能你早已掌握并理解了Java的类加载机制,若结果出乎你的意料,那就很有必要来了解了解Java的类加载机制了。代码如下package com.jvm.classloader;class Father2{public static String strFather="HelloJVM_Father";static{System.out.println("Father静态代码块");}}class.

2021-01-22 16:20:31 233 8

原创 为什么会有动态代理

【一、代理模式/静态代理】代理:为其他对象提供一种代理以控制对这个对象的访问。对应的代理业务图:注(以下关于“代理对象”的图标采用“←”标识)这里我们将B看做是“被代理对象”,箭头←看做是“代理对象”。代理模式的uml图:对应的代码展示:public class Client { public static void main(String[] args) { Proxy daili=new Proxy(); dail

2021-01-15 21:37:42 284 9

原创 静态代理如何演变为动态代理

首先我们来回顾一下代理的概念:为其他对象提供一种代理,以控制对这个对象的访问。更新ing...

2021-01-03 08:52:46 127 9

原创 Springboot装配Swagger的配置详解

Springboot配置Swagger可以分为以下两部曲。第一步在pom文件中引入swagger的依赖项如果不知道依赖项中的具体内容怎么写,可以通过maven库进行查找:maven库链接 <!--swagger配置--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2&lt

2020-12-20 14:46:32 535 6

原创 无法创建新虚拟机:未找到文件

新建虚拟机向导无法完成解决方法:给对应分区安全选项卡中添加authenticated users这个特殊用户组具体步骤:1.到分区根目录下右键属性,安全选项卡2.点击“编辑”3.点击“添加”4.输入框中输入authenticated users(一部分即可)5.点击检查名称(只需要部分时可以直接检索出对应用户组)6.点击确定,返回上一层7.记得权限设置中添加修改选项8.继续点确定,返回上一层9.点确定,应用权限,如果有权限应用提示,请无法取消相关操作,等待其完成提示框自然会自行关闭。.

2020-12-14 11:52:39 3954 11

原创 idea 代码生成时序图

当我们想要了解大佬的代码时,如何才能快速的了解一个方法的整个运行过程呢,uml图中的时序图可以帮助我们解决整个问题。idea中想要将代码生成时序图,需要添加一个插件:SequenceDiagram。第一步:我们可以从idea中直接下载添加:Files-->Settings-->Plugins-->Marketplace第二步:安装完插件之后,重启idea。第三步:选择一个方法名称,点击右键,弹出如下内容,点击SequenceDiagram就可以生成时序图了。第四步.

2020-12-06 11:35:53 10421 8

原创 maven构建的目录演变过程

首先我们看一下maven的构建都有哪些步骤然后我们看每一步运行之后,目录的变化情况是怎样的。前提:打开cmd命令行,进入Hello项目根目录(pom.xml文件所在目录)一、cmd中输入mvn clean,将源包文件清理。二、编译 mvn compile三、测试编译 mvn test-compile四、测试 mvn test五、打包 mvn package六、安装到本地仓库...

2020-11-27 19:17:12 186 12

原创 AOP六个专业术语在代码中的体现

AOP是我们在做项目拓展时,时常用到的技术点,这也是我们面向切面编程的核心所在,AOP的使用还是很方便的,但里面的细节往往会被忽略,即六个专业术语的使用位置,今天小编为大家分享一下,aop的6个专业术语的使用位置。首先我们了解一下概念,源自百度百科:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容...

2020-11-22 08:39:42 453 8

原创 SpringMvc视图解析器来源

我们在接触一个技术的时候,首先想到的是它是干什么的,怎么用,但很少人会去深究技术的来源。一个技术的产生必定是用来解决一定问题的,今天小编就为大家讲解一下SpringMvc视图解析器的来源。我们刚接触浏览器项目的时候,看到的时javaWeb系列,用到的是servlet。在没有springmvc之前的javaweb是如何实现视图解析的呢?springmvc不使用视图解析器前的操作通过以上代码我们会发现,每次的重定向,转发都需要我们写地址,如果有十几个我们还能接受,试想如果有成千上万条的话,一

2020-11-15 21:04:31 133 5

原创 SpringMVC运行原理(流程图)

SpringMVC运行原理图:以上的①-③是我们程序员做的,剩余的都是springmvc框架做的,对应代码如下:个人总结:SpringMvc将代码web代码运行过程封装成一个个的对象1、映射关系从具体到抽象,面向接口编程HandlerMapping接口通过映射关系寻找地址对应的具体类,之前使用的是<servlet-mapping>进行具体的地址拦截和<servlet>指定具体的Servlet类。现在springmvc使用HandlerMapping接口

2020-11-08 08:41:54 814 5

转载 Springboot过滤器和拦截器详解及使用场景

一、过滤器和拦截器的区别1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。2、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑。而过滤器是JavaEE标准,只需依赖servlet api ,不需要依赖spring。3、过滤器的实现基于回调函数.

2020-11-08 08:30:19 385 4

原创 java.sql.SQLException: The server time zone value is unrecognized

遇到这个问题的小伙伴们不用慌,这个是时区配置出现了问题,解决办法如下:以前配置文件中的url值修改后的配置文件url值:加上一个以下代码,其中&amp;表示连接符的意思。mybatis?serverTimezone=GMT%2B8&amp;以上配置中serverTimezone表示时区;userSSL表示安全设置;userUnicoode表示为unicode编码;characterEncoding=utf8表示为utf-8编码;...

2020-10-27 16:21:57 436 10

原创 IDEA连接mysql数据库---步骤详解

我们有时候在写代码的时候想直接在IDEA中查看数据表中的字段,如何快速查询呢,在IDEA中直接连接数据库吧,步骤如下:第一步:在IDEA中找到MySQL第二步:配置数据源和驱动第三步:可能出现的问题第四步:其实就是时间格式的问题,解决该问题有两种方法方法一:通过修改Advanced里面的参数方法二:修改配置中的url路径第五步:再次测试,成功第六步:IDEA中展示的效果...

2020-10-21 19:51:25 1727 8

原创 IDEA中设置Maven自动更新

第一步:选择左上角的File,在出来的下拉框中选择settings。第二步:搜索Maven中的Importing,将Import Maven project automatically选项勾选,表示接受Maven的自动导入。

2020-10-16 10:01:07 4222 5

原创 AOP解析

最近我们项目组接收到一个任务,就是在之前开发的“智物”系统中添加一些功能,当然,这种添加是要符合设计模式“开闭原则”的,“对拓展开发,对修改关闭”,也就是说我们这次的功能拓展不可以修改以前系统的代码,一句也不可以改。那么在这种背景下进行开发的话,我们第一个想到的便是利用AOP切面进行功能拓展了。所以,今天小编就来为大家分享一下AOP的细节。今天我们重点分为两部分进行介绍:1】、AOP获取目标方法的参数、返回值、异常信息的方式。2】、AOP5个通知的执行顺序。-----------------

2020-10-07 20:00:15 273 7

原创 IDEA中“scratches and consoles“的作用

scratches and consoles的作用:提供了两种临时的文件编辑环境,通过这两种临时的编辑环境,你可以写一些文本内容或者一些代码片段。这个功能是idea用来测试一小段代码的或者是某个语句某个api等,非常的方便;两种 Scratches 分别是:Scratch files 和 Scratch buffersScratch files:Scratch files 有着完整的运行和 debug 功能等等,这些文件需要指定编程语言类型并且指定后缀。Scratch buffers:Scr

2020-09-30 20:48:45 4498 6

原创 @Controller @Repository @Service @Component异同

在讨论异同之前我们看一下每个注解的源码是什么样的。@Component@Service@Repository@Controller相同点:@Controller,@Service,@Repository都有带@Component父注解,四个注解都可以说成是Component级别的注解,Spring框架自动扫描的注解也是检测是否有Component注解标记。把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" cla...

2020-09-26 09:25:54 254 15

转载 mvc和mvvm的区别

前言mvc和mvvm大概是个老生常谈的问题了,关于MVC和MVVM如此这般设计的原因以及我们应该如何思考一些相关的问题1.在看mvc和mvvm的区别之前我们来看一下前端的发展历史在上个世纪的1989年,欧洲核子研究中心的物理学家Tim Berners-Lee发明了超文本标记语言(HyperText Markup Language),简称HTML,并在1993年成为互联网草案。从此,互联网开始迅速商业化,诞生了一大批商业网站。最早的HTML页面是完全静态的网页,它们是预先编写好的存放在Web服

2020-09-21 21:25:11 226 8

原创 spring中的前置处理器和后置处理器区别

背景:SpringIOC容器它会以某种方式,加载配置文件中的 信息,将其解析为一个个的BeanDefinition.之后将BeanDefinition注册到容器之中。Spring IOC容器在实现的时候经过的过程可以使用如下图片表示:分为两个主要部分:其一 :容器启动阶段其二:bean实例化阶段。在容器的启动阶段主要做的是一些信息收集的过程(主要依赖于工具类BeanDefinitionReader),将收集的信息组成BeanDefinition.将BeanDefinition注册到相应的

2020-09-17 17:14:41 9715 13

转载 SQL语法基础-SQL查询语句的执行顺序解析

SQL语句执行顺序SQL语句执行顺序结合上图,整理出如下伪SQL查询语句。SQL语句执行顺序从这个顺序中我们可以发现,所有的查询语句都是从FROM开始执行的。在实际执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。 接下来,我们详细的介绍下每个步骤的具体执行过程。1 FROM执行笛卡尔积FROM 才是 SQL 语句执行的第一步,并非 SELECT 。对FROM子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表V...

2020-09-12 08:42:39 8797 3

原创 FastDFS_简介和原理

一、什么是FastDFS? DFS(distributed file system):分布式文件系统。 FastDFS是一种开源的轻量级分布式服务器,用来解决大容量存储的问题,并充分考虑了冗余备份,负载均衡,线性扩容等机制,注重高可用、高性能等指标。特别适合中小文件,对以文件为载体的在线服务提供了非常好的解决方案。 主要功能:文件存储,文件同步,文件访问(文件上传、文件下载)等。二、FastDFS由什么组成? Fast...

2020-09-06 17:49:17 502 8

空空如也

空空如也

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

TA关注的人

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