
Java
文章平均质量分 71
hbyangland
一个普通的公务员
展开
-
Tomcat学习(一):启动过程(1)
目录1. 启动入口2.Bootstrap启动过程2.1 Tomcat类加载器结构2.2 Bootstrap的启动3.Catalina的启动之Server的加载3.1 server.xml的加载和解析3.2 StandardServer的初始化3.3 启动的后处理以Tomcat 9.0.30为例,参考资料:《Tomcat架构解析》1. 启动入口一般使用To...原创 2019-12-21 18:15:19 · 351 阅读 · 0 评论 -
JUC学习(七):ReentrantLock和Condition
目录1.Condition的使用1)await方法2)signal、signalAll方法2.ReentrantLock的原理1)lock方法2)unlock方法初学并发时,一般都是使用synchronized关键字来保证线程安全,它具有使用方便的优点,尽管旧版本性能不佳,经过长期的优化,目前它的性能并不输给ReentrantLock。这两种锁都是可重入锁,即同一个线程...原创 2019-02-24 19:48:48 · 305 阅读 · 0 评论 -
JUC学习(八):AQS的CLH队列
目录一.简介二.Node类三.CLH队列一.简介AQS是JUC的核心,无论是信号量、CDL还是可重入锁,背后都有AQS的影子。这些类的同步过程一般如下:tryAcquire和tryRelease过程很好理解,就是CAS地修改AQS的state值,关键是doAcquire和doRelease如何管理众多线程的状态,又如何决定哪个线程可以获得锁。答案就是,AQS在其内部管理...原创 2019-02-25 18:38:32 · 4632 阅读 · 0 评论 -
Spring源码学习(一):Bean的加载和初步解析
目录1.一个示例2.定位和加载配置文件2.1沿继承链向上调用父类构造函数2.2设置配置文件路径3容器的刷新与Bean的加载3.1prepareRefresh3.2obtainFreshBeanFactory1.一个示例下面是一个最基本的Spring示例:配置文件config.xml:<?xml version="1.0" enco...原创 2019-03-19 15:22:36 · 260 阅读 · 0 评论 -
Spring源码学习(二):默认标签的解析与Bean的注册
目录1parseBeanDefinitionElement方法1.1BeanDefinition的组装1.2产生BeanName2decorateBeanDefinitionIfRequired方法3注册BeanDefinition4其它默认标签的解析4.1alias标签4.2import标签4.3beans标签在parseDefaultE...原创 2019-03-19 21:43:14 · 368 阅读 · 0 评论 -
Spring源码学习(三):容器的功能扩展·一
目录1.prepareBeanFactory方法1.1扩展容器的组件1.2忽略依赖接口1.3注册可解析依赖1.4注册环境2.invokeBeanFactoryPostProcessors2.1一个例子2.2核心方法介绍3.registerBeanPostProcessors容器完成配置文件的解析和Bean的加载、注册之后,ApplicationCo...原创 2019-03-20 19:11:57 · 432 阅读 · 0 评论 -
Spring源码学习(四):容器的功能扩展·二
目录1.initMessageSource2.initApplicationEventMulticaster3.registerListeners4.finishBeanFactoryInitialization5.finishRefresh到目前,容器的启动过程还剩下下面几个方法:this.initMessageSource(); //初始化消息源,用于国际化th...原创 2019-03-21 21:11:02 · 290 阅读 · 0 评论 -
Spring源码学习(五):Bean的创建和获取
目录1.获取Bean单例实例2.完整创建Bean2.1Bean创建的前置处理2.2创建Bean:doCreateBean的createBeanInstance方法2.2.1 通过Supplier实例化 —— obtainFromSupplier2.2.2 通过factory-method实例化 —— instantiateUsingFactoryMethod2.2....原创 2019-03-25 22:40:25 · 778 阅读 · 0 评论 -
Spring源码学习(七):Spring MVC的请求响应流程
目录1.方法到达service1.1 processRequest方法1.2父类service方法2.doDispatch方法2.1检查上传请求 —— checkMultipart方法2.2查找处理器 ——getHandler方法2.2.1 RequestMappingHandlerMapping 的 getHandlerInternal 方法实现2.2.2...原创 2019-03-31 13:30:47 · 817 阅读 · 0 评论 -
Spring源码学习(六):Spring MVC的初始化过程
目录1.ContextLoaderListener1.1创建WebApplicationContext1.2设置和刷新WebApplicationContext2.DispatcherServlet2.1init方法2.2initServletBean方法2.3 OnRefresh方法3.九大组件的注册3.1文件上传解析器MultipartResolv...原创 2019-03-28 19:30:25 · 805 阅读 · 0 评论 -
Spring源码学习(八):Spring Boot原理
目录1.Spring Boot简介2.Spring Boot启动原理 ——构造方法2.1 deduceFromClasspath方法2.2配置ApplicationContextInitializer、ApplicationListener3.Spring Boot启动原理 ——run方法3.1SpringApplicationRunListener3.2环境...原创 2019-04-02 19:04:46 · 556 阅读 · 0 评论 -
JUC学习(六):ForkJoin框架
目录1.简介2.RecursiveAction的使用3.RecursiveTask的使用4.CountedCompleter的使用5.原理介绍1)submit方法:2)signalWork方法:3)runWorker、runTask方法:4)invokeAll方法5)setCompletion方法6)doJoin方法7)getRawResult方法...原创 2019-02-24 17:58:33 · 316 阅读 · 0 评论 -
JUC学习(五):Future & Callable
目录一.简介二.Future的一些方法1)cancel方法2)get方法3)run方法一.简介一般使用Thread时,都是传入Runnable,但是这种方式有一个问题:无法获取返回值,也不能抛出异常;只能通过全局变量等手段获取值,通过try-catch块捕获异常。Callable就是为了解决这个问题而产生的,它的call方法既可以有返回值,也可以抛出异常。Future则...原创 2019-02-23 17:39:07 · 169 阅读 · 0 评论 -
JUC学习(四):线程同步之Phaser
目录一.简介二.构造方法三.doRegister方法四.arrive系列方法四.await系列方法一.简介CyclicBarrier解决了CDL不能重用的问题,但是仍有以下不足:1)不能动态调整计数器值,假如线程数不足以打破barrier,就只能reset或者多加些线程,在实际运用中显然不现实2)每次await仅消耗1个计数器值,不够灵活Phaser就是用来...原创 2019-02-23 16:55:39 · 720 阅读 · 0 评论 -
Java Annotation的一些学习
1.使用注解实现生成器1)生成器模式原始代码:PC类:public class PC { private String CPU; private String HDD; private String RAM; private String GPU; public void setCPU(String CPU) { this...原创 2018-10-28 19:54:24 · 138 阅读 · 0 评论 -
Spring Boot 同一URL返回不同资源
Spring 的 View 和 ViewResolver 都有很多实现类,支持如Json、XML、模版(Freemaker、Velocity)甚至Excel、PDF等形式的输出。相关类在org.springframework.web.servlet.view包中。其中有一个实现类:ContentNegotiatingViewResolver 可以根据对资源的描述来返回不同形式的视图首先...原创 2018-10-31 21:07:47 · 1876 阅读 · 0 评论 -
Spring + Ajax 同时传输文本和文件
需求:上传docx文件,输入待替换的 人名、地名或组织名 ,然后在后端执行替换,再异步返回给前端下载直接将文件和文本拼接赋给data属性测试失败Html:<div id="page2" class="col s12" style="margin-top: 5%;margin-bottom: 5%"> <form action="#" name="fileF原创 2018-11-01 17:30:38 · 1060 阅读 · 0 评论 -
学习Mybatis(1):独立使用
1.编写配置文件:这里取名为:mybatis_config.xml,放在resource目录下(classpath)<?xml version="1.0" encoding="UTF-8" ?>//写上这行就可以开启输入提示和校验了<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ...原创 2018-11-21 13:44:39 · 484 阅读 · 0 评论 -
C++函数符以及Java类似功能
C++的函数符概念函数符也称为函数对象,或伪函数,是将函数或者类对象当作实参使用其中,将类实例对象当作函数对象使用的,称为类函数符类函数符是通过重载"()"操作符实现的两者使用方法:#include <list>bool tooBig(int n) { return n > 100; }class toobig {public: bool ope...原创 2018-12-28 12:19:45 · 294 阅读 · 0 评论 -
《码出高效》学习:TreeMap与红黑树
首先先看TreeMap的继承关系:继承了抽象类AbstractMap,实现了NavigableMap(SortedMap)、Cloneable、Serializable三个接口NavigableMap(SortedMap):使Key有序,可以获取头尾K-V对,或者获取指定范围内的SubMap Cloneable:支持clone方法 Serializable:支持序列化基于红黑树实...原创 2019-01-06 17:44:44 · 371 阅读 · 2 评论 -
《码出高效》学习:ConcurrentHashMap
目录 简介基本认识初始化:initTable方法插入元素:实际为putVal方法链表进化:treeifyBin方法协助扩容:helpTransfer & Transfer删除节点:实际为replaceNode方法计数方法的改进简介 ConcurrentHashMap主要应用于高并发环境下,使用了大量的lock-free技术来减轻锁竞争导致的性...原创 2019-01-07 19:39:26 · 294 阅读 · 0 评论 -
《码出高效》学习:ThreadPoolExecutor
目录概述关键变量构造方法execute方法addWorker方法Worker内部类总结概述线程是为了更充分合理地利用计算机各种系统资源,但是线程的创建需要开辟虚拟机栈、本地方法栈、程序计数器等私有空间,线程销毁时还要进行回收,在高并发条件下,频繁地进行线程创建、销毁操作,会造成系统资源的大量浪费,增加并发风险。另外,并发量过大时,需要让新线程等待或拒绝服务,这些...原创 2019-01-09 21:42:06 · 322 阅读 · 0 评论 -
JUC学习(一):Semaphore信号量
目录一.简介二.构造方法三.acquire系列方法四.release方法五.其它方法5.1 availablePermits & drainPermits5.2 reducePermits5.3 isFair5.4 hasQueuedThreads & getQueuedThreads & getQueueLength六.生产者-消费...原创 2019-02-22 21:05:49 · 476 阅读 · 0 评论 -
JUC学习(二):线程同步之CountDownLatch
目录一.简述二.构造方法三.await方法四.countDown方法一.简述在 JUC学习(一):Semaphore信号量 中可以看到,信号量可以做到控制不同批次的线程同步运行,但是对于同一批线程,它们之间还是乱序执行的。在某些情况下,需要控制线程同时开始运行,这时候就需要使用CountDownLatch。从名字来看,这是一个计数值只降不升的“闩”,可以猜到,它的使用方...原创 2019-02-23 13:21:16 · 192 阅读 · 0 评论 -
JUC学习(三):线程同步之CyclicBarrier
目录一.简介二.构造方法三.await方法一.简介在 JUC学习(二):线程同步之CountDownLatch 中,介绍了CDL,它可以实现线程同步,但是也有一个不足:无法重用。一旦计数器清零,CDL对象就无法再使用。如果一个任务中,需要多次进行线程同步,那么就要设置多个CDL,不但浪费资源,而且对象多了也容易搞混,不利于维护。CyclicBarrier就能够实现重用。不同的是...原创 2019-02-23 14:28:35 · 203 阅读 · 0 评论 -
Java SPI & JDBC相关源码解析
Java SPI的具体约定为:当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。 基于这样一个约定就能很好的找到服务接口的实...原创 2018-10-28 19:37:18 · 758 阅读 · 0 评论