Java
文章平均质量分 79
技术人爱思考
积善成德,而神明自得,圣心备焉。
展开
-
图相关算法(一):无向无权图的深度优先遍历(DFS)-递归版本
核心采用邻接表作为图数据的存储结构对访问过的节点进行记录,文中采用HashSet实现根据深度优先规则递归遍历未访问节点本文建立的图结构如下:实现代码如下:package algorithms;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util...原创 2018-10-19 18:05:16 · 2353 阅读 · 0 评论 -
图相关算法(二):无向无权图的广度优先遍历(BFS)-非递归版本
核心采用邻接表作为图数据的存储结构对访问过的节点进行记录,文中采用HashSet实现采用队列存放未访问的子节点,不断更新队列BFS采用队列实现很简单,采用递归反而更复杂了本文建立的图结构如下:实现代码如下:package algorithms;import java.util.*;/** * Created by Json Wan on 2018/10/19. * ...原创 2018-10-19 18:44:47 · 1229 阅读 · 0 评论 -
Tomcat8.5.23 ApplicationFilterChain源码分析(职责链模式)
一、前言因为在前一篇文章中分析JavaWeb项目切入点时提到了一种从Filter入手的思路,所以本文来探究一下多个Filter之间究竟是怎么组织、运行的。二、正文1. 首次运行(1)引入依赖(2)关联程序的配置(3)编译构建a)IDE构建b)Maven构建2. 分析源码切入点(1)JavaWeb项目的切入点(以SpringBoot项目为例)a)由URL路由入手b)由Filt...原创 2018-10-25 05:12:13 · 3873 阅读 · 3 评论 -
Tomcat8.5.23中ApplicationFilterChain对象的线程安全性分析
一、前言在前一篇文章中分析ApplicationFilterChain的源码时遗留了线程安全问题未能彻底理解,因此有了本文,来彻底研究下filterChain对象的线程安全是如何保证的。二、正文1. 源码的运行流程分析(1)ApplicationFilterChain对象的特点与创建特点:经过一路代码跟踪发现,每一个url匹配模式对应于一个ApplicationFilterChain对象...原创 2018-10-28 02:22:25 · 1572 阅读 · 1 评论 -
JavaWeb项目分析系列(一)-从首次运行到源码切入点
一、前言最近开始研究一些优秀的JavaWeb开源项目,由于自己是新手,以前遇到开源项目时也处理得不是太好,往往浪费很多时间,希望在本次研究的过程中总结出一套方法论来,因此有了这一系列文章。二、正文首次运行拿到一个开源项目,第一步要做的一定是把它跑起来,而这个过程又包含了以下几个小步骤,只有全部搞定后项目才能正常运行。(1)引入依赖大多数Java项目采用Maven管理依赖,需要我们在计...原创 2018-10-24 13:53:33 · 2675 阅读 · 0 评论 -
Tomcat8.5.23中StandardWrapper容器对Servlet实例的多线程池化复用机制分析
一、前言在前一篇文章中分析filterChain的线程安全问题时讲到了真正需要考虑线程安全问题与复用的场景是Request与Servlet的实例,本文重点分析一下Servlet实例的线程安全问题与池化复用机制。二、正文1. 什么情况下Servlet实例会发生线程安全问题?直接给答案:(1)多个线程尝试同时修改(未做synchronized/lock/condition等同步处理)同一个实...原创 2018-10-31 22:56:16 · 461 阅读 · 0 评论 -
《Java并发编程实战》第3章-对象的共享
0.概念理解对象状态:就是对象当中的各个成员变量;对象发布:就是将对象的引用交给别人;安全发布:创建对象需要一段时间,等彻底创建完了才把引用给别人(其他线程);逸出/逃逸:不应该发布的对象被发布了;不正确构造:this在构造过程中逸出(即使在构造函数最后一行也不行);线程封闭:不要让不安全的对象被多线程共享;不可变对象:只有一种状态的对象;事实不可变对象:状态在发布后不会改变的可变...原创 2019-03-09 18:01:27 · 129 阅读 · 0 评论 -
从一个资源文件找不到的问题谈IntelliJ IDEA中的Java/Maven项目构建
1.遇到的主要问题构建一个Maven项目时,无法将resources文件夹中的资源文件打包进构建后的目录中,具体情况如下图。可见,虽然已将源码中的resources文件夹Mark Directory As Resources Root,但是构建出的target文件夹中并没有resources文件夹下的内容,导致后续在Java文件中读取资源文件找不到(开始一直认为是读取的路径配置不正确,因为...原创 2019-04-04 01:45:12 · 531 阅读 · 0 评论 -
一个Servlet线程安全问题实例
1.问题起源几年前开发的一个JavaWeb应用,用于课程实验,同一时段内每次使用的用户量大约20人左右,采用的技术框架为Tomcat+Hibernate,功能仅限于简单的增删查改,并没有复杂的逻辑。但是由于当时对JavaWeb只了解皮毛,所以根本没有考虑到线程安全的问题,导致了后来的问题发生。2.问题症状1.单机本地功能测试时完全没有问题,多人同时使用时才出现问题;2.第一年实验过程中未出...原创 2019-05-22 00:15:48 · 151 阅读 · 0 评论