自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 FactoryBean是现在的执行时机

FactoryBean、解析

2023-04-04 19:27:50 433

原创 @Component实现原理

@Component、加载class文件

2023-03-08 21:34:48 324

原创 ApplicationListener实现原理

监听器、 热更新

2023-03-07 22:15:19 413

原创 注解@EnableAutoConfiguration

@EnableAutoConfiguration、spi、配置文件读取

2023-03-01 20:58:32 511

原创 @Import注解的原理

Import、ImportSelector、DeferredImportSelector、ImportBeanDefinitionRegistrar

2023-02-27 20:42:03 425

原创 不使用implements关键字实现实现类(类似于mapper)

类似于mapper功能的一个实现

2023-02-27 10:51:01 452

原创 Eureka实现高可用

Eureka作为注册中心,相信现在知道springcloud的小伙伴,自己都私下玩过这东东,但主要还是玩的单机版的。今天自己玩了下集群版,感觉坑真的很多,不仅仅是配置问题,更甚者有的问题百度的答案五花八门,当然,我这里也会变成这五花八门中的一门,哈哈哈。。。。。。先说思路:假设现在启动三台服务器(这里由于是本地,都用127.0.0.1 有服务器的小伙伴当然可以直接换成不同的ip,这没影响),每一台跑一个Eureka项目。例如:A、B、C三个程序,要实现集群,那么就要互相注册,A想B和C注册,

2020-07-04 22:38:01 447

原创 JVM的GC过程

既然创建的对象,在不使用后不会立马清除,会在GC时才真正清除,那么,JVM的GC过程是如何的?先看一下虚拟机的内存设置:这里,是JVM中各部分内存大小的设置,当我们设置好内存大小后,接下来的问题是:1.什么时候触发GC?2.那一部分触发GC?3.如何进行回收?首先,我们从对象存储的部分看起,即堆内存。我们代码在JVM上一直不停的跑,此时就会在堆内存中创建对象,此...

2020-03-23 22:52:30 648

原创 一个main方法在JVM中的生死存亡

main函数是jvm指令执行的起点,jvm会创建main线程来执行main函数,用来触发一系列的指令的执行。public class Test { public static void main(String[] args){ User user=new User(); }}编写的代码是.java文件,首先要编译成.class文件,然后JVM才能够识别。...

2020-03-22 23:20:10 381

原创 一条更新语句的执行过程

上一篇,已经写了查询语句的执行过程,那么更新语句难道还不一样?答案是肯定的。一、更新准备update语句其实都会有一个隐藏的查询更能,将需要修改的数据找到,然后才能更新。其实这一阶段跟查询是一样的。二、更新既然获取到了数据,那么要更新,这接下来的事都是与查询sql多操作的了。先知识扩展一下:1.mysql中的日志这里只介绍三种日志:1)binlog日志二...

2020-02-23 23:31:58 170

原创 mysql中,一条查询sql的执行过程

作为一个程序员,最不能避免的就是与sql打交道,那么,在我们平时写的那么多sql它们是怎么执行,并给我们返回数据的?比如最简单的一个查询:select * from user where id=10;sql简单,但问题是你知道它是如何执行的吗?先从整体看一下mysql数据库的执行构造:1)server层:所有跨存储引擎的功能都在这一层,比如:存储过程、触发器、视图等。...

2020-02-23 01:07:07 833

原创 Lock锁的原理

Lock锁是JDK实现的,在JDK1.5开始存在。这点与Synchronized不同,Synchronized是关键字,是由JVM实现的。以ReentrantLock锁为例:private Lock lock=new ReentrantLock();首先创建一个lock对象,Lock是一个接口,ReentrantLock是其一个实现类。Lock接口中的方法有:public ...

2020-01-08 17:00:20 649

原创 synchronized详解

了解synchronized的原理,首先要了解一下对象在jvm内存中的分布:1.实例数据存放类的属性数据信息,包括父类属性信息,如果是数组的实例部分,还存放数组的长度,这部分内存按4个字节对齐。2.对齐填充数据由于虚拟机要求,对象起始地址必须是8字节的整数倍,也就是对象必须是8字节的整数倍,所以不是8字节的整数倍,则需要在这里进行补齐。3.对象头Mark Word(标记...

2020-01-06 23:55:23 1080

原创 window10家庭版安装docker

首先家庭版没有Hyper-V,那我们就来安装一下:pushd "%~dp0"dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txtfor /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-pack...

2019-11-20 22:24:53 146

原创 JVM类的加载机制

在学习之前,我们现象几个问题:1.JVM的类加载机制是什么?2.它是如何实现的其功能的?3.在什么情况下在使用类加载器?带着这几个问题,我们一步一步深入学习一下。一、什么是类加载机制? 虚拟机把描述类的数据,从class文件(即一组以8位字节为基础单位的二进制流)加载到内存中,并对数据进行各种处理,最终生成能够直接被虚拟机识别的Java类型;它分为以下几个...

2019-06-16 19:14:52 180

原创 LinkedList类的源码阅读

继ArrayList之后,我们来看一下LinkedList源码,先说一下他们实现的接口的不同之处:相同处:都显现了List<E>、Cloneable、java.io.Serializable其中可能不大明白的就是Cloneable接口,它是一个空接口,哪有什么作用呢,就是保证实现object中的clone方法不会报错,否则无法实现就会报错;不同之处:ArrayList实...

2018-08-02 13:55:45 192

原创 listIterator迭代器的学习

在看listIterator迭代器之前,我们先来总结一下它与iterator迭代器的相同点和不同点。相同点:1)都是迭代器,在对集合进行遍历时都可以使用。2)都有hashNext和next方法,都能顺序遍历。3)都可以实现删除操作。说的更直白一点的话,就是iterator有的方法功能,listIterator都包含了,因为它会继承iterator在list的实现类。那我们就...

2018-07-16 16:31:42 325

原创 ArrayList源码学习

在之前已经讲解了迭代器在ArrayList中的实现,那么我们接下来看一下这个ArrayList的类的详细实现;首先它定义了一个容量:private static final int DEFAULT_CAPACITY = 10;这个容量有什么作用呢?或者说在创建list集合的时候就会给你这个容量吗?先来看一下无参构造: public ArrayList() { ...

2018-07-13 10:22:48 206

原创 iterator接口源码分析(ArrayList中的实现)

iterator是一个迭代器接口,它里面主要有:boolean hasNext();E next();这两个方法,第一个方法表示迭代器含有更多元素则返回true;否则返回false;第二个方法是返回迭代器的下一个元素;其中还有两个实现方法: default void remove() { throw new UnsupportedOperationException("rem...

2018-07-05 00:21:01 825

原创 springboot整合swagger2

由于我们在使用springboot集群时接口的调用比较多,文档整理起来也比较麻烦,所以我们整合一下自动生成api那不就很方便了,只要方法已经生成或者修改,接口都会出现自动更新,这样就让我们很方便的使用了,那么接下来我们就是去实现它:<dependency> <groupId>io.springfox</groupId> <artifactId&...

2018-06-22 15:42:43 190

原创 springcloud的一个消费者对应多个生产者获取方法底层实现

上一篇已经实现了springcloud注册中心、生产者和基本的消费者;我们会不会有这样一个疑问?如果生产者是个集群,那么我们消费者如何去获取哪一个地址作为本次的消费?这就涉及到了负载均衡:我们先看一下我们的程序: @Autowired LoadBalancerClient loadBalancerClient; @Autowired RestTemplate rest...

2018-06-14 09:22:22 2763

原创 SpringBoot搭建的注册中心

这里实现注册中心的有好几种:Consul、Zookeeper和我们将要说的Netflix Eureka;这里的区别和选择就不说了,大家可以看看:Eureka的工作原理以及它与ZooKeeper的区别和Eureka与ZooKeeper 的比较(转)这里我们只是用Consul和Netflix Eureka来实现注册中心这个功能。...

2018-06-10 21:18:55 3920

原创 Executor使用小结

我们之前创建一个线程的时候,就是直到new一个Thread创建一个线程,但是在jdk1.5之后,Java为我们提供了一个Java.util.concurrent包,这个包下有Executor接口,这就为我们提供了线程池的方法去开启多个线程,那么说到这里我们是不是会问:为什么要用Executor呢?或者new的方式有什么缺点呢?1)每次我们new Thread都会创建一个对象,不能被重用,而且对象的...

2018-06-02 19:51:35 5223 1

原创 使用Hessian进行序列化和反序列化

这东西没啥可说的直接上代码: /** * 这是讲object序列化 * @param obj * @return */ public static byte[] serialization(Object obj){ if(obj==null){ throw new NullPointerException(); } ByteArrayOutputStream o...

2018-05-28 22:22:33 1802

原创 重写request的getSession方法实现集群session共享

我们在用redis实现session共享的时候,会遇到这样的问题:当一个用户登陆后,可能集群环境下给你分配到另一台服务器,这时候你用request.getSession()获取的session是现在服务器上的session,里面没有你想要的用户信息,然后你又要重新登录,这样是你会同意吗,肯定不行的,所以我们不需要系统自动创建session了,我们来自己写一个实现共享;首先实现重写的第一步就是使用过...

2018-05-21 23:07:05 5144 10

原创 解压版redis主从分离window测试需要的命令

使用解压版的redis这样修改配置文件后启动,这时候发现还是以前的配置文件,无论你怎么修改都不会起作用,这里就要用别的方法启动了:按住 Shift键+鼠标右键然后在窗口中输入 redis-server.exe redis.conf这样你发现端口号已经改变;接下来处理redis-cli.exe同样的方法打开窗口输入:redis-cli.exe  -h 127.0.0.1 -p 端口号(这里你设置端口...

2018-05-17 16:47:27 146

原创 redis实现缓存的小例子

首先导入jar包<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.0.2.RELEASE</version>

2018-05-17 13:13:38 1142

原创 Java实现注解AOP的小例子以及一些注意事项

使用AOP实现我们想要的拦截一些方法,然后把各个对象组织成一个整体;那么我们来看一下使用@Aspect注解实现aop的方法是怎么实现的以及一些可能造成的错误分析:1.创建一个切面和通知;@Component@Aspectpublic class UserAspect { @Pointcut("execution(* serviceImpl.UserServiceImpl.findUs(..)...

2018-05-13 22:27:38 1325

原创 springBean的生命周期

这里我们只是说一下spring容器管理的Bean的生命周期,spring容器是通过依赖注入来实现对Bean的管理的;那我们来看看它是如何进行对象管理的:说道容器管理springBean,那么我们首先要去启动容器,我们来看看spring容器的启动为我们做了什么吧!1.容器的启动2.容器的关闭而springBean的生命周期肯定是在容器的启动与关闭之间进行控制的,那么我们来看看对象的生命周期:1)初始...

2018-05-13 00:11:39 247

原创 spring的依赖注入和控制反转

先看下图:传统方式就是主动创建;例如你看到一种果汁的描述如下:public class MakeOrange { private String water; private String sugar; private String orange;你看到了描述后想要喝这种果汁,然后你主动的找到了一个生产机器,然后你把它拿l过来,public class Orange ...

2018-05-07 11:25:32 207

原创 mybatis插件

在之前我们知道configuration创建过程中调用了private void parseConfiguration(XNode root) 这个方法,其中有一句pluginElement(root.evalNode("plugins"));方法,这个就是读取配置的插件的; private void pluginElement(XNode parent) throws Exception {...

2018-05-02 13:03:22 137

原创 mybatis运行过程深度解析(三)

我们知道:通过XMLConfigBuild我们获取了把xml配置文件解析成的configuration对象,然后我们使用它来创建了SQLSessionFactory,这个过程封装成了一个SQLSessionFactoryBuild类;有了SQLSessionFactory我们讲究直接可以获取到SQLSession对象了;然后我们又分析了SQLSession的运行过程,它是通过映射器的注册器动态代理...

2018-05-02 13:03:05 276

原创 mybatis运行过程深度解析(二)

接着上面的一继续往下看:SQLSession的执行过程,有了SQLSessionFactory对象就可以轻易的获取SQLSession。不过SQLSession也是一个接口。在之前写的文章中,我们看到这段代码:UserDao mapper=sqlSession.getMapper(UserDao.class);从这句代码我们看出,我们只是给了一个Mapper接口便能获取到想要的对象了;不过在这里,...

2018-05-01 20:02:55 151

原创 mybatis运行过程深度解析(一)

mybatis的运行分为两大步:1.读取配置文件缓存到Configuration对象中,用以创建SQLSessionFactory;2.SQLSession的执行过程。首先我们来说一下这个SQLSessionFactory构建;首先我们要知道,SQLSessionFactory是一个接口,而不是一个实现类,mybatis给他提供了一个默认的实现类org.apache.ibatis.session....

2018-05-01 19:00:10 377

原创 自测一下mybatis的一级缓存和二级缓存

首先我们来说一下定义:一级缓存,就是在SqlSession上的缓存;二级缓存,就是在SQLSessionFactory上的缓存。在没有任何配置的情况下,mybatis默认开启一级缓存;public static void main(String[] args) { Logger log = Logger.getLogger(Test.class); SqlSession ...

2018-04-30 02:14:41 287

原创 resultmap和resulttype的一些使用误区

mybatis的映射配置文件中的两个返回值类型resultmap和resulttype;直接来测试代码:<select id="getUser" parameterType="string" resultType="pojo.User"> select id,username,userpwd from t_users where id=#{id}</select>这是正...

2018-04-30 01:27:29 5782

原创 认识mybatis

mybatis的核心组件分为四个部分:1.SqlSessionFactorybuilder(构造器):它会根据配置文件中的配置生成SqlSessionFactory,当然,如果你使用的代码创建也是可以实现的,但是通常对于扩展性来说配置文件来创建还是很好的选择;它创建SqlSessionFactory是通过创建者(Builder)模式分步构建的。2.SqlSessionFactory(工厂接口):使...

2018-04-28 00:02:45 186

原创 jdk和CGLIB的动态代理

首先来看jdk实现的动态代理:它只能对实现接口的类生成代理,而不能针对类。换句话说,如果目标对象实现了接口,默认情况下都会采用jdk的动态代理。现在我们用最简单的代码小例子来看看怎么实现动态代理这个过程的:package flex.cc.financialManagement.accountReceivable.web;public interface TestService { publi...

2018-04-25 11:26:26 144

原创 利用java的反射创建一个联合实体类

利用java中的method类中的方法进行封装,直接上代码:public class ModelUtils { //需要一个List放置实体类 List list=null; /** * 构造函数,进行赋值 * @param list */ public ModelUtils(List list){ this.list=list; } /** *

2016-12-15 15:28:35 2018

原创 浅谈java的反射机制,只是有助于去理解这一机制。

首先,在了解java的反射的时候,我们应该先提出几个问题,第一,什么是java的反射机制?第二,java反射机制的功能是什么?第三,为什么要用java的反射机制?第四,java的反射机制是如何实现的,实现的过程是什么样子的?通过这四个问题,我们一点点如了解java的反射机制。第一个问题:java的反射机制是在运行状态,对任意一个类,能够知道这个类的所有属性和方法,对任意

2016-11-16 15:31:52 466 1

easyui.css

利用easyUI开发时,页面样式的显示效果,页面的样式

2016-02-15

jquery.easyui.min.js

用于使用easyUI页面格式显示,多多下载

2016-02-15

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

TA关注的人

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