自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ArrayList的动态扩容机制

先来看一道笔试题:下面的ArrayList会扩容几次?ArrayList<String> arrayList = new ArrayList<String>(20);我们先看一下源码的动态扩容机制是如何实现的。下面以jdk1.7为例:private void grow(int minCapacity) { // overflow-cons...

2018-08-11 18:51:43 727 3

原创 Mybatis源码解读(一)解析mybatis配置文件

总览上图为mybatis配置文件与实体类的对应关系,先有个总体印象配置文件解析入口String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);进入build方法,看一下

2021-08-18 15:47:56 147 1

原创 SpringAop源码阅读(一)代理类的创建过程

添加支持自动代理的核心处理类通过@Import导入AspectJAutoProxyRegistrar@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(AspectJAutoProxyRegistrar.class)public @interface EnableAspectJAutoProxy { boolean proxyTargetClass() default false;

2021-07-28 09:21:48 113

原创 Spring源码阅读(十)循环依赖的处理

循环依赖的处理流程A和B产生循环依赖,处理过程如下:源码解读代码段一bean被实例化后,添加到三级缓存中,移除二级缓存。// Class: DefaultSingletonBeanRegistryprotected void addSingletonFactory(String beanName, ObjectFactory<?> singletonFactory) { Assert.notNull(singletonFactory, "Singleton factory m

2021-07-23 16:42:14 165

原创 Spring源码阅读(九)Bean的初始化过程

2021-07-22 22:40:06 112

原创 Spring源码阅读(八)标注Autowired的构造器是如何实例化的

挑选候选构造器// Class: AutowiredAnnotationBeanPostProcessorpublic Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, final String beanName) throws BeansException { if (!this.lookupMethodsChecked.contains(beanName)) { Refle

2021-07-21 18:04:39 293

原创 Spring源码阅读(七)通过FactoryMethod创建对象

直接上源码public BeanWrapper instantiateUsingFactoryMethod( final String beanName, final RootBeanDefinition mbd, final Object[] explicitArgs) { BeanWrapperImpl bw = new BeanWrapperImpl(); this.beanFactory.initBeanWrapper(bw); Object factoryBea

2021-07-18 01:03:20 277

原创 Spring源码阅读(六)FactoryBean的处理

直接上源码// Class: DefaultListableBeanFactorypublic void preInstantiateSingletons() throws BeansException { if (this.logger.isDebugEnabled()) { this.logger.debug("Pre-instantiating singletons in " + this); } // Iterate over a copy to allow fo

2021-07-16 18:02:39 171

原创 Spring源码阅读(五)registerBeanPostProcessors

直接上源码public static void registerBeanPostProcessors( ConfigurableListableBeanFactory beanFactory, AbstractApplicationContext applicationContext) { // 根据类型获取bean中所有的BeanPostProcessor String[] postProcessorNames = beanFactory.getBeanNamesForTyp

2021-07-12 17:20:59 76

原创 Spring源码阅读(四)invokeBeanFactoryPostProcessors

直接上源码public static void invokeBeanFactoryPostProcessors( ConfigurableListableBeanFactory beanFactory, List<BeanFactoryPostProcessor> beanFactoryPostProcessors) { // 1. 先执行所有的BeanDefinitionRegistryPostProcessors. // 保存执行过的bean S

2021-07-09 10:12:28 83

原创 Spring源码阅读(三)prepareBeanFactory

protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { // 设置类加载器 beanFactory.setBeanClassLoader(getClassLoader()); // 设置EL表达式解析器 beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver(beanFactory.ge

2021-07-07 11:25:11 73

原创 Spring源码阅读(二)obtainFreshBeanFactory

主流程// Class: AbstractApplicationContextprotected ConfigurableListableBeanFactory obtainFreshBeanFactory() { refreshBeanFactory(); ConfigurableListableBeanFactory beanFactory = getBeanFactory(); if (logger.isDebugEnabled()) { logger.debug("Bean f

2021-07-06 17:16:19 69

原创 Spring源码阅读(一)Spring配置文件中的beanName是由哪个属性决定的

Spring配置文件中的beanName是由id,还是name确定的,当只有一个class属性时,beanName又是什么呢?首先阅读BeanDefinitionParserDelegate中的parseBeanDefinitionElement(Element ele, @Nullable BeanDefinition containingBean)方法public BeanDefinitionHolder parseBeanDefinitionElement(Element ele, @Null

2021-06-29 17:53:22 161

原创 从编程世界中学习英语系列(二)

报错语句Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘age’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_byselect列表中的第三列不存在于group by字句中,并且包含非聚

2021-03-25 15:13:22 275

原创 从编程世界中学习英语系列(一)为什么学习英语

程序员为什么学习英语你的代码肯定是要用英文写的。目前主流的程序语言都是外国人发明的,绕不过去。在你学习一些新技术的时候,最好的入门文章就是官网。你如果去看中文的文章,会发现很多文档都是从官网翻译过来的,暂且不说翻译的精准与否。这些文章在CV过程中,难免会出现错误。阅读一些经典的技术书籍时,经常会发现很多书经过翻译都变得晦涩难懂。由于翻译者的水平有限,甚至有些人可能不是从事的这个职业。无法从程序员的角度来翻译书籍。怎样学习英语从平时编程过程中遇到的报错提示中去积累单词和语法。

2021-03-25 11:41:15 233 2

原创 函数

函数的定义//第一种方式(常规)function fun(name,age) {}//第二种方式(函数表达式)let fun2 = function (name,age) {}//第三种方式(构造函数)let fun3 = new Function('name','age', 'console.log(title)')//1//第四种方式(箭头函数)let fun4 = (name,age)=>{}函数的参数//函数定义时可以给形参指定默认值function fun(name,

2021-02-23 17:26:11 93

原创 变量的定义

var与let因为javascript为弱类型语言,所以声明变量时不需要指定变量类型,使用var或let即可。var允许变量的重复声明,let不允许,会报错,推荐使用let。var v = 1;var v = 2;console.log(v);//2(最后一个声明的变量会覆盖前一个)let l = 1;let l = 2;//Identifier 'a' has already been declaredvar定义的变量会被绑定到window对象上,let则不会var v

2021-02-23 13:28:21 381 1

原创 linux三剑客之sed

1.替换功能语法:s/regexp/replacement/flags1.1.常用选项-i:将改变写入原始文件-e:同时执行多个替换1.2.flagsg:替换所有匹配的内容,不仅是第一个p: 打印被替换的行,通常与-n选项配合使用w:将结果写入到新文件中2.其他功能2.1.打印内容2.2.删除内容...

2020-10-21 22:30:54 117

原创 linux三剑客之grep

Matching Control-i :Ignore case 忽略大小写-w:whole words 按照整个单词匹配-v:Invert the sense of matching, to select non-matching lines 匹配不包含指定关键字的行Output Line Prefix Control-n:line number 在行前显示行号Context Line Control-A NUM:Print NUM lines of trailing context a

2020-10-18 17:08:52 202

原创 线程的生命周期

1.线程状态介绍NEWThread state for a thread which has not yet started.新建:已经创建线程,但还没有启动RUNNABLEA thread in the runnable state is executing in the Java virtual machine but it may be waiting for other resources from the operating system such as processor.可运行:包

2020-10-14 10:00:33 71

原创 vim中的内容修改

普通删除普通模式x:删除光标下的字符dd:删除光标所在的行D:删除从光标所在处到行尾的字符d{motion}:删除指定内容:如daw虚拟模式{Visual}d:删除选中区域的内容命令模式:[range]d:删除指定范围的内容,例如:2d(删除第二行的内容),2,5(删除第2行到第5行的内容)删除并插入普通模式R:进入替换模式c{motion}:删除指定文本并进入插入模式,例如cawcc:删除当前行并进入插入模式C:删除从光标所在处到行尾的字符并进入插入模式s:删除光标下的字符

2020-08-26 17:00:16 1418

原创 vim中的插入操作

插入模式普通模式i:在光标前插入I:在光标所在行的第一个非空字符前插入a:在光标后插入A:在光标所在行的行尾插入o:在光标所在行的下一行插入O:在光标所在行的上一行插入替换模式普通模式R:进入替换模式未完待续。。。...

2020-08-03 19:53:41 3549

原创 vim移动技巧

左右移动l:向右移动一个字符h:向左移动一个字符0:移动到光标所在行的第一个字符^:移动到光标所在行的第一个非空字符$:移动到行尾f{char}:向右移动到指定字符F{char}:向左移动到指定字符t{char}:向右移动到指定字符的前一个字符T{char}:向左移动到指定字符的前一个字符;:重复f,F,t,T操作,:在相反方向重复f,F,t,T操作上下移动k:在行之间向上移动j:在行之间向下移动gk:在显示行向上移动gj:在显示行之间向上移动G: 移动到最后一行gg:移

2020-08-03 19:06:05 823

原创 使用docker搭建zookeeper集群

在docker诞生之前,想要做集群测试,最后的方式就是安装虚拟机。但自从有了docker之后大大简化了集群搭建的步骤,便于学习。下面介绍使用docker搭建zookeeper集群1. 安装docker和docker-compose2. 拉取docker镜像docker pull zookeeper:3.4.14 这里我们使用zookeeper的3.4.14版本,高版本的zookeeper会出现一些莫名其妙的错误。3. 编写docker-compose.yml文件version: '2'se

2020-07-13 21:45:35 1269 1

原创 彻底搞懂装饰器模式

什么是装饰器模式(What)动态的给一个对象添加一些额外的职责为什么使用装饰器模式(Why)继承方案会导致继承结构复杂,不易维护等问题,因此使用组合代替继承,给原始类添加增强功能怎样使用装饰器模式(How)装饰器类需要和原始类继承相同的抽象类或者实现相同的接口下面以JDK中的IO举例://抽象类输入流public abstract class InputStream { public abstract int read() throws IOException; public

2020-07-07 15:38:33 258

原创 彻底搞懂单例模式

单例模式什么是单例模式(What)为什么要使用单例模式(Why)单例模式的实现方式(How)什么是单例模式(What)在进程中,一个类只允许创建一个对象为什么要使用单例模式(Why)解决资源冲突数据只需要存在一份单例模式的实现方式(How)1.饿汉式public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public s

2020-06-28 17:17:43 116

原创 Integer的valueOf方法源码阅读

在网上看到这样一道题:System.out.println(Integer.valueOf(127)==Integer.valueOf(127));System.out.println(Integer.valueOf(128)==Integer.valueOf(128));输出结果为ture和false。为了弄明白为什么会这样,我们看一下源码是怎么实现的。private stat...

2018-08-09 12:43:00 632

原创 使用数据泵的方式导入导出数据库

在导入导出之前需要先做一些准备工作.1.创建表空间:&lt;span style="color:#ff0000"&gt;CREATE TABLESPACE ORCL datafile 'E:\app\zxp\oradata\orcl\ORCL.dbf' size 20000M autoextend on next 100m maxsize unlimited;&lt;/span&gt;...

2017-11-07 09:38:27 5596

原创 sql脚本优化

在数据库升级过程中,比如要给某个表添加字段我们都是直接alter table tablename add colname type这样的写法非常不具有重用性。为什么这么说呢?因为一旦这里添加的列名存在的条件下,我们执行这条sql肯定会报错。今天看见一个前辈写的sql脚本让我恍然大悟。他是这么写的:declare num integer; begin s

2017-07-13 17:50:55 501

用DW制作的网页

这是我大学交的网页作业,适合初学者在学习网页制作时学习使用。

2014-12-23

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

TA关注的人

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