- 博客(77)
- 资源 (17)
- 收藏
- 关注
原创 spring ApplicationContext启动过程
本文对spring ApplicationContext启动过程进行详细解析,介绍刷新过程中的10个阶段的作用,包括ConfigurationClassPostProcessor处理java config注入beanDefinition,注册BeanPostProcessor对所有bean的构建进行初始化,创建内嵌tomcat容器注册servlet
2022-03-31 16:53:38 1559
原创 spring boot配置类注册深入解析
解析自动化配置类生效的机制,条件注解的处理过程,spring boot自动化配置类,有的条件类不存在,工程里打开是标红的,spring boot解析时不报错的原理。@EnableXXXX的实现原理,注册BeanDefinition有哪些高端的姿势?@Configuration和@Component到底有什么区别。
2022-03-31 16:43:54 5296
原创 spring boot启动加载tomcat原理深度剖析
spring boot应用打包成Fat jar时,启动内嵌tomcat的原理;spring boot应用打包成WAR时,外部tomcat启动spring boot SpringApplication的原理;自动化配置Servlet/ServletFilter/ServletListener的原理
2022-03-05 22:57:03 5315
原创 spring boot 2.1.7启动过程源码解析
深度剖析spring boot 2.1.7.RELEASE启动的过程,以及其中的扩展点,内容包括如何构建environment、加载配置文件、初始化日志系统、如何和spring cloud进行集成、如何集成远程配置、如何加载自动化配置、如何注册到consul上
2022-02-12 22:28:02 1113
原创 基于本地仓库搭建nexus私服
在公司里运行工程代码顺风顺水,离职后,你可能有公司的部分代码,但是打开工程,满屏标红,看着是不是很难受?有没有办法不标红呢?当然是有的,只需要搭建自己的私服即可,慢慢看完下面你就知道怎么做了。
2021-12-12 16:59:24 1242
原创 简易版dubbo实现
简易版dubbo实现一、dubbo简介实现一个简易版的dubbo,首先看下dubbo是什么, dubbo是阿里开源的rpc框架,目前是apache顶级开源项目,可以用来构建微服务。社区已经到了3.0版本,生态活跃,原来是java写的,现在有go版本,支持云原生。研究dubbo的目的:一方面是dubbo浑身是宝,用到了zk/javassit/netty/spring/spi等技术,可以说看懂了dubbo源码,对自己是十分有帮助的。不仅能学习优秀
2021-11-20 23:33:16 3493 2
原创 spring boot入门
一、相对于spring的优点自动化配置,快速构建,避开依赖地狱,引进starter jar,配置yaml,即可使用相关功能。便捷部署:支持嵌入式tomcat,无需依赖外部tomcat,可以本地启动,可以打成jar运行。注解驱动编程:无任何xml,基于spring 4.0条件注解实现bean注册,基于servlet 3.0实现动态servlet等。健康监控:方便排查bean的生效情况,以及做心跳。二、IDEA构建和本地运行 详细见github仓库
2021-10-24 15:14:40 540
原创 Linux 0.11 文件系统的实现机制
Linux 0.11 文件系统的实现机制一、概述Linux 0.11的文件系统与Minix 1.0文件系统类似,是一种索引式文件系统。对于Linux而言,一切都是文件。一般有普通文件,字符设备文件,块设备文件,符号链接,目录文件,有名管道等。这是由文件系统实现的,它把底层进行了抽象,提供了统一的访问接口,如open,read,write等系统调用。其实对于文件系统,每个设备都有
2020-03-08 10:37:50 724
原创 用C++实现一个多进程回显服务器
用C++实现一个多进程回显服务器1. 服务端程序(Linux) 服务进程:通过监听所有网卡的9877接口,当有客户端来连接时,使用fork创建一个子进程对客户端连接进行服务,然后父进程继续监听连接的到来需要注意的是当服务进程未退出时,子进程在结束后将进入僵尸状态。服务父进程未使用信号对这些僵尸进程进行处理,随着连接的增多,服务端将出现很多僵尸进程。当然,如果父进
2020-03-08 10:37:14 289
原创 slf4j使用和原理简单分析
slf4j使用和原理简单分析    开发时面向slf4j-api进行编程,然后在类路径下放入具体的日志类和适配器,如log4j、logback、java util logging、common loggings等,以及对应的配置文件,log4j.properties、logback.xml等,即可使用具体的日志jar。1. slf4j + log...
2018-03-11 17:05:33 1022
原创 Spring BeanFactory源码解析
一、BeanFactory接口 1. BeanFactory接口是工厂方法的实现机制,具体定义了以下几个方法:public interface BeanFactory { // 对于FactoryBean,该前缀用于取出FactoryBean,而非getObject对应的方法 String FACTORY_BEAN_PREFIX = "&"; // 返回bean实例,如果
2017-11-18 16:51:45 627
原创 MySQL导入和导出数据
1. 将两个pdf文件转化为excel,再转化为csv文件 录取数据: 成绩数据: 对应的pdf转excel网站为http://www.pdfdo.com/pdf-to-excel.aspx,注意勾选合并为单一工作表。 再在excel文件点击另存为csv文件,在转化之前,将多余的行和列删除,转化成绩表的格式如下: 2. 创建对应的数据表 注意数据表
2017-09-23 16:53:57 1097
原创 BufferedReader源码分析与使用
1. 设计思路 BufferedReader对各种Reader提供了缓存功能,这样可以避免多次读取底层IO(如FileReader),提高效率。默认的缓冲大小是8k,也就是每次读取都是8k为单位,这适用于大多数情况。另外,BufferedReader使用了装饰器模式,继承自Reader,并且构造函数需要Reader的子类入参。同时还提供了一行一行读取的功能readLine函数,这不是Reade
2017-09-17 17:46:32 1098
原创 有用的代码片段及配置
1. fastjson解析 解析json对象和数组,需要引入com.alibaba.fastjson 1.2.29版本。实例: JSONArray jsonArray = JSONArray.parseArray("[\"abc\",\"def\"]"); List fileNameList = jsonA
2017-08-29 17:50:42 639
原创 经验汇总
1. 日志配置(1) 增删改必须打印日志。修改数据必须有据可查。 (2) 条件分支必须打印分支参数。 (3) 打印数据量,对比性能。 (4) 打印最后结果。 (5) 打印当前用户。 (6) 对于controller层可以使用拦截器来计算时间,对于service层则只能用aop。2. spring事务管理。(1) @Transactional必须配置在service层的方法...
2017-08-29 17:42:13 365
原创 Mockito的使用
1. Mockito简介 调用mock对象的方法时,不会执行真实的方法,而是返回类型的默认值,如object返回null, int返回0等,否则通过指定when(方法).thenReturn(value)来指定方法的返回值。同时mock对象可以进行跟踪,使用verify方法看是否已经被调用过。而spy对象,默认会执行真实方法,返回值可以通过when.thenReturn进行覆盖。可见mock只
2017-08-21 00:50:58 2842
原创 dubbo+spring+zookeeper的集成入门实例
一、安装zookeeper 可以参考用两台物理机搭建Storm集群里面对zookeeper的安装。需要注意的是必须确保zookeeper正常启动,也就是必须监听端口2181。可以使用如下命令:sudo lsof -i:2181 $ZK_HOME/bin/zookeeper.out可以看到绑定了端口,这个文件会记录访问zookeeper的日志。如果出现问题,可以到$ZK_HOM
2017-07-23 00:14:27 2768
原创 Java Class文件结构分析
一、简单介绍 Java编译好后的文件是Class文件,该文件在虚拟机上运行,只有虚拟机能够识别。所以编译后的Class文件不依赖于具体的平台,具有跨平台的特性,但是依赖于虚拟机。很多语言,包括Java,Python,都可以编译成class文件。Class文件与EXE文件相比,比较紧凑,不需要填充和对齐。代码在方法区的Code属性中。 将Person.java代码使用javac Per
2017-07-03 22:57:19 500
原创 Hadoop多个文件单词计数
Hadoop的安装 首先下载Hadoop的安装包,这里使用2.7.3版本。解压到/usr/local下sudo tar -zxvf hadoop-2.7.3.tar.gz -C /usr/local/ 然后更改hadoop-2.7.3的属主sudo chown -R jessin /usr/local/hadoop-2.7.3 在/etc/profi
2017-06-17 14:53:51 2085 1
原创 Ubuntu 16.04 创建无线热点
要创建一个热点,首先必须有无线网卡,且该网卡支持AP模式,具体可以用如下命令查看:sudo apt-get install iwiw list如果出现如下包含AP的关键字,则表示支持AP模式: 首先点击右上角的网络图标,然后拉到最下面,点击编辑连接,得到如下界面: 点击增加,然后选择wi-fi,点击新建,得到如下界面: 这时填写连接的名称,填写SSID,也就是
2017-05-13 21:57:04 40426 14
原创 jquery + ajax + json入门实例
1. jquery ajax使用 对于一个网页,查询数据时一般使用ajax异步请求,这样可以不用刷新页面,减少流量,减轻服务端负担,加快响应速度。而jquery是一个javascript库(不是框架),对于各个浏览器的兼容性进行了封装,使用jquery将能大大提高开发效率。在一个html页面中,可以通过如下方式引入jquery:<head> <script src="http://aj
2017-05-10 15:15:02 1210
原创 有用的文章链接
1. 单元测试,包含@Before和@After,@BeforeClass和@AfterClass,可以忽略单元测试,期待单元测试抛出异常,以及限制执行时间。http://www.open-open.com/lib/view/open1492570031594.html2. IDEA添加模块:http://www.cnblogs.com/leap/p/6251576.html3. Servl...
2017-04-20 23:26:56 499
原创 curl命令
1 查看完整的响应报文,也就是包含响应header和报文主体html:curl -i http://www.baidu.com2 只查看响应头,不包含报文主体,其实就是head请求:curl -I http://www.baidu.com3 查看详细的请求过程,包括完整的请求报文和完整的结束报文,这个命令可以用来查看curl生成的请求报文:curl -v http://www.baidu.com4
2017-03-07 23:52:22 3250
原创 dot命令生成流程图
dot命令是graphviz的一部分,通过编写一些类似脚本的语言,可以容易地生成流程图。下面在新建一个文件tmp.dot,内容如下:digraph G {# 定义全局属性 fontname = "Courier New" fontsize = 8 # 从下往上 rankdir = BT# 定义节点属性 node [ shape =
2017-02-26 19:19:01 24823 1
原创 Java 枚举类型
Java提供了枚举类型,可以将所有全局变量集中在一个类中。但枚举类的构造方法只能是private,不能被继承,要覆盖的话只能在枚举类的内部进行覆盖。同时也不能继承其他类,因为enum类型默认会继承Enum,但可以实现多个接口。所有的实例在类的内部被定义好。可以通过values()静态方法得到所有静态实例的数组。枚举类型本质上也是一种类类型,可以作为map的键,从而可以填充枚举类的所有静态实例。
2017-02-26 16:12:10 748
原创 设置vim支持Markdown
1 安装vundle vundle是用来管理vim插件的工具,之后才能安装Markdown插件。首先将vundle从github上克隆到本地。git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim 然后在HOME目录下创建一个.vimrc配置文件,具体内容如下:" ~/.vimrc""
2017-02-19 17:03:03 5503 1
原创 Storm入门实例之单词计数
1 环境搭建 关于Storm集群的搭建可以参考用两台物理机安装storm集群。本文将统一使用apache-storm-0.9.5来运行拓扑,使用Maven + IDEA的方式进行开发(参考 Ubuntu下Maven安装和使用)。2 项目源码2.1 配置pom.xml 有一个要注意的地方,就是storm-core.jar这个依赖在打包时的作用域必须是provided,因为集群环境会提供这个
2017-02-06 16:01:38 3022
原创 用两台物理机搭建storm集群
1 安装zookeeper下载zookeeper-3.4.9 下载zookeeper-3.4.9.tar.gz,解压到/opt/。sudo tar -C /opt -zxvf zookeeper-3.4.9.tar.gz在/etc/profile新建环境变量export ZK_HOME=/opt/zookeeper-3.4.9export PATH=$ZK_HOME/bin:$J
2017-02-05 19:16:39 2340
原创 Ubuntu常见问题及解决汇总
本博文将长期更新,用于记录Ubuntu下各种问题的解决办法。2015.10.11ubuntu安装搜狗输入法:http://jingyan.baidu.com/article/ad310e80ae6d971849f49ed3.html到官网下载搜狗输入法,然后在单击安装包,在命令行界面下输入命令等。2015.10.11系统刚开始装,命令行界面vi命令backspace不能使用:里面安装的是v
2017-02-02 18:01:23 3792
原创 bash语法
bash语法,包括变量的定义,数组的使用,结构化命令,条件表达式,输入和输出,函数的定义,位置参数,信号的捕获,脚本的运行等内容。
2017-01-30 16:23:56 2486
原创 bash扩展
一、bash扩展的类型 在命令执行前,会先对整个命令进行处理或者扩展。扩展共有7种类型,分别是花括号扩展、波浪线扩展、参数和变量扩展、算术扩展、命令替换、单词分割、路径扩展。当存在多种类型扩展时,这个顺序也是扩展的执行顺序。只有花括号扩展、单词分割、路径扩展会改变单词的数量。而其他扩展是一一替换。二、花括号扩展 花括号扩展的格式是:前缀{整数..整数}后缀前缀{单个字母..单个字母}后
2017-01-25 19:37:59 1346
原创 Linux Man手册的使用示例
当我们学会使用man文档时,将大大提升使用命令的能力。这里,本人认为更多人是不知道man 命令文档的格式,不知怎么使用选项,导致不想使用man。为此,本文通过mkdir命令文档做一个示例,希望对读者们有所帮助。
2017-01-24 23:32:20 10356 3
原创 Minix 1.0文件系统的实现
Minix 1.0文件系统的实现一、概述 在sys_open中,我们并没有讨论如何将文件路径名转化为具体的inode,它使用的是open_namei这个函数实现的。这里面涉及到文件系统的实现。本文将从这个函数出发,说明如何将文件路径名转化为具体的inode,以及普通文件和目录是怎么实现的,在硬盘中是怎么存储的。二、解析文件路径2.1 通过路径名获得对应的节点open_namei open
2017-01-22 20:05:47 4867
原创 Linux 0.11 块设备文件的使用
Linux 0.11 块设备文件的使用一、概述 块设备的IO操作是非常慢的,它远远赶不上内存和CPU的速度。为了减少访问块设备的次数,Linux的文件系统提供了内存高速缓冲区。当需要读取块设备的数据时,首先在缓冲区中查找,有则马上返回,没有则读到缓冲区中,然后再复制到用户数据缓冲区。这样缓冲块并没有马上消失,还会在内存中待一段时间,如果重复读取一个文件,下次就可以直接从缓冲块中读取。当缓冲块不
2017-01-19 14:37:39 2865
原创 MyBatis入门实例
MyBatis入门实例一、概述 MyBatis是一个优秀的持久层框架,可以使用XML配置文件或者接口加注解的方式来简化DAO操作,大大方便了SQL语句的管理。由于注解的功能极为有限,这里采用XML配置文件的方式。同时,MyBatis还支持动态SQL语句。二、创建数据库和数据表 在MySQL创建数据库和数据表:CREATE DATABASE test;CREATE TAB
2017-01-09 17:13:18 710
原创 Ubuntu下Maven安装和使用
Ubuntu下Maven安装和使用一、安装Maven安装Maven之前,必须安装了JDK,另外IDEA可以从https://download.jetbrains.8686c.com/idea/ideaIC-2016.2.5.tar.gz下载,里面有说明如何安装IDEA1.1 首先下载Maven的压缩包下载apache-maven-3.3.9.bin.tar.gz1....
2017-01-08 13:41:58 64407 1
原创 Git命令
Git命令 Git对同一个版本库可以有多个分支,可以在不同的分支下工作,HEAD指向当前分支。当在某个工作分支时,文件系统将呈现该分支的文件,对于新创建或者新创建且已经加到暂存区的文件,任何分支都可以看到该文件。只要不切换,下次在当前目录运行Git时还是这个状态,处在这个分支。每次本地提交给当前工作分支,都会产生一个commit id,且只会对该提交分支起作用,其他分支
2017-01-05 14:54:12 1018
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人