- 博客(102)
- 收藏
- 关注
原创 SpringMVC源码分析(5)剖析重要组件HandlerMapping
HanlerMapping是沟通请求和后端controller映射,是所有请求的入口。1.类结构介绍该图只对属性和类层级进行了描述,屏蔽了方法,主要是为了根据内部属性,重点理解Spring HandlerMapping提供功能。1.1 AbstractHandlerMapping HandlerMapping 抽象类,提供了排序,默认Handler,和handler 拦截器。publ...
2019-03-23 22:26:41
380
原创 SpringMVC源码分析(4)剖析DispatcherServlet重要组件
本文主要总结DispatcherServlet几个重要组件的关系。1.类图该类图并没有全面的描述SpringMVC相关类,重点说明组件的关系。该类图基于springmvc3.0.5版本。很多类属性并没有完全罗列,进行了取舍。基于DispatcherServlet,而且深度尽量适可而止,否则造成图复杂混乱。2.HanlerMapping组件介绍2.1 HanlerMapping类图...
2019-03-23 21:35:14
368
1
原创 SpringMVC源码分析(3)DispatcherServlet的请求处理流程
要点维护url和controller的映射这部分工作由DefaultAnnotationHandlerMapping.setApplicationContext的父类org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping.initApplicationContext实现。具体方法为detectHan...
2019-03-23 21:29:49
622
原创 SpringMVC源码分析(2)DispatcherServlet的初始化
DispatcherServlet的初始化,是在org.springframework.web.context.ContextLoaderListener完成加载后,才开始的。这时候WebApplicationContext(包含DAO,Service等)已经初始完毕。DispatcherServlet的初始过程主要完成1.WebApplicationContext父子容器维护2.初始化Se...
2019-03-23 21:23:03
388
原创 SpringMVC源码分析(1)标签解析
本文主要内容是根据一个常见的springmvc 配置文件,剖析分解每个标签的工作内容。一个非常熟悉的springmvc配置样例<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3....
2019-03-23 20:31:47
210
原创 Spring MVC 传值方式总结
前端传到Controller:方法1通过HttpServletRequest 。写法如下:@Controllerpublic class MyTestController {@RequestMapping("/print")public String PrintInfo(HttpServletRequest request) {System.out.println("name:" +...
2019-03-23 19:44:37
185
原创 MySQL实现序列(Sequence)效果以及在Mybatis中如何使用这种策略
前言:在oracle中一般使用序列(Sequence)来处理主键字段,在MySQL中是没有序列的,但是MySQL有提供了自增长(increment)来实现类似的目的,但也只是自增,而不能设置步长、开始索引、是否循环等。最重要的是一张表只能设置一个字段使用自增,但有的时候我们需要两个或两个以上的字段实现自增(单表多字段自增),MySQL本身是实现不了的,但我们可以用创建一个序列表,使用函数来获取序...
2019-03-22 21:44:40
5170
原创 Java爬虫实战(一):抓取一个网站上的全部链接
一 算法简介 程序在思路上采用了广度优先算法,对未遍历过的链接逐次发起GET请求,然后对返回来的页面用正则表达式进行解析,取出其中未被发现的新链接,加入集合中,待下一次循环时遍历。 具体实现上使用了Map<String, Boolean>,键值对分别是链接和是否被遍历标志。程序中使用了两个Map集合,分别是:oldMap和newMap,初始的链接在oldMap中,然后对o...
2019-03-22 21:31:09
5034
原创 死磕Spring系列之二,bean标签的解析和BeanDefinition的注册
到现在环境已经配置完毕,已经可以跑一个简单的HELLOWORLD了。正式进入源码阅读的阶段。使用过Spring的都知道,我们只需要在配置文件中配置好对象规则(比如类,依赖,属性…),然后我们就可以在程序中使用对象了。我们可以做一个假设,如果让我们写一个程序,根据XML配置信息,生成想要的对象。可以简单想象成:XML:某产品的设计图纸工厂类:生产流水线对象:想要的产品。生产流水线,想要根...
2019-03-22 21:16:33
177
原创 利用Zabbix低级发现结合jstat命令自动监控Java进程
一 应用场景描述最近线上业务的Tomcat总是崩溃停止服务。使用jstat命令查看Java进程的JVM内存信息。但是使用命令jstat只能查看一段时间的数据,不能总是盯着屏幕手动查看,于是想到了将jstat的数据通过zabbix进行绘图展现并报警。同时,一台服务器上可能会有多个Java程序在运行,包括不同的Tomcat,或者是其他Java应用,例如Logstash,Elasticsearch等。...
2019-03-22 18:06:31
677
原创 Spark 读取 Hbase 优化 --手动划分 region 提高并行数
一. Hbase 的 region我们先简单介绍下 Hbase 的 架构和 region :从物理集群的角度看,Hbase 集群中,由一个 Hmaster 管理多个 HRegionServer,其中每个 HRegionServer 都对应一台物理机器,一台 HRegionServer 服务器上又可以有多个 Hregion(以下简称 region)。要读取一个数据的时候,首先要先找到存放这个数...
2019-03-21 20:56:33
467
原创 疑难杂症-MyBatis一级缓存引起的分页插件失效
症状:使用自定义MyBatis分页插件,只有分页参数不同的方法在短时间内使用不同分页参数查询出来的结果相同。病因:自定义MyBatis插件拦截目标为StatementHandler,而在同一个SqlSession中,在StatementHandler.prepare之前,MyBatis的已经命中了一级缓存,所以直接返回了缓存中的内容。治疗方案:重写自定义MyBatis分页插件使之拦截Execu...
2019-03-21 20:31:54
825
原创 【Java】从源码角度分析String,StringBuffer和StringBuilder
很多人都知道String是不可变的,StringBuffer和StringBuilder是可变的,那么为什么呢?首先我们确定一个概念性问题,什么是不可变对象!什么是不可变对象:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能...
2019-03-20 20:52:31
221
原创 HashMap深度分析
这次主要是分析下HashMap的工作原理,为什么我会拿这个东西出来分析,原因很简单,以前我面试的时候,偶尔问起HashMap,99%的程序员都知道HashMap,基本都会用Hashmap,这其中不仅仅包括刚毕业的大学生,也包括已经工作5年,甚至是10年的程序员。HashMap涉及的知识远远不止put和get那么简单。本次的分析希望对于面试的人起码对于面试官的问题有所应付一、先来回忆下我的面试过程...
2019-03-20 20:45:02
134
原创 package、import、import static傻傻分不清楚
刚刚接触代码的童鞋肯定会对头几行出现的诸如:package tempo;import tempo.test;import static java.lang.Math.*;弄得不是特别明白,或者就直接忽略了。今天就想谈谈这三个兄弟的区别,跟平时一样先例出本文需要解决的问题。package是啥?有何作用?import又是什么意思,和package有何区别?import static有何i...
2019-03-20 20:30:57
287
原创 阿里巴巴Java开发手册评述
2016年底的时候阿里巴巴公开了其在内部使用的Java编程规范。随后进行了几次版本修订,目前的版本为v1.0.2版。下载地址可以在其官方社区-云栖社区https://yq.aliyun.com/articles/69327找到。笔者作为一名有数年工作经验的Java程序员,仔细研读了这份手册,觉得其是一份不可多得的好材料。阿里巴巴在发布时所说,“阿里巴巴集团推出的《阿里巴巴Java开发手册(正式版...
2019-03-20 20:20:39
224
1
原创 Java自定义类中重写equals方法
equals方法的要求:a.自反性:对于任何非空的x,x.equals(x)都应该返回trueb.对称性:对于任何引用x和y,当且仅当x.equals(y)返回true时,y.equals(x)也应该返回truec.传递性:对于任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回trued.一致性:如果x和y的...
2019-03-20 18:01:52
2582
1
原创 关于Iterator探究和思考
前两天,一哥们拿着同一个问题连续找了我两次。一开始以为没什么说的东西,后来越研究越觉得有意思,今天闲来无事,写出来跟大家分享。问题是这样的:“迭代集合时,Iterator it=c.iterator() 返回的到底接口Iterator的哪个实现类?”。刚开始我随口就是“查查API不就知道了么”,后来证明查API还真就“不知道”。API显示Iterator只有三个实现类(BeanContextSu...
2019-03-19 22:26:12
162
1
原创 sqlserver性能调优第一步
相信不少的朋友,无论是做开发、架构的,还是DBA等,都经常听说“调优”这个词。说起“调优”,可能会让很多技术人员心头激情澎湃,也可能会让很多人感觉苦恼,不知道如何入手。当然,也有很多人对此不屑一顾,因为并不是每个人做的项目都对性能要求很高。在主流的企业级开发和互联网应用中,数据库的重要性是不言而喻的,而数据库的性能对于整个系统的性能而言也是至关重要的,这里无庸赘述。sqlserver的性能调优...
2019-03-19 22:12:36
772
1
原创 源码分析Dubbo NettyServer与HeaderExchangeServer
本文主要分析一下NettyServer,HeaderExchangeServer实现细节。NettyServerNettyServer整个类图如下:首先从全貌上大概看一下NettyServer对象所持有的属性:AbstractPeer1、private final ChannelHandler handler : 事件处理Handler。2、private volatile URL ...
2019-03-19 21:37:35
480
原创 ES Pipeline Aggregation(管道聚合)
管道聚合处理来自其他聚合而不是文档集的输出,将信息添加到输出树中。注:关于脚本聚合目前在本文中暂时不会涉及。主要有如下两种管道聚合方式:parentsibling下面一一介绍ES定义的管道聚合。Avg Bucket 聚合同级管道聚合,它计算同级聚合中指定度量的平均值。同级聚合必须是多桶聚合,针对的是度量聚合(metric Aggregation)。示例如下:1{2 "av...
2019-03-19 21:24:44
2079
原创 300个面试故事中筛选出22个,笑中带泪你信不信!
今儿我们来围观一下别人都怎么成功上岸或者以什么姿势完美溺水的吧【靠八字带运气型面试】@小A应聘职位:美术设计完全没想到出面的不是HR,而是广告公司总监和老板真身,当场紧张起来,表现也受了影响。对方职位高眼光高,对我的作品和我本人的评价都不高。但是当老板问我最喜欢的广告是哪一个时,我举的例子刚好是老板本人制作并获奖无数的。结果:被录用了。这马屁,到底是有意拍的,还是有意拍的呢?@ 小...
2019-03-19 14:54:26
319
原创 阿里架构师汇总了45个牛逼的Java技术点
作为一个程序员想要在技术深耕,一定要在技术上不断的下功夫。Java程序员一定要学好重点的技术,如下面这些:1.架构师基础专题2.微服务框架技术3.开源源码分析4.高性能框架分享5.团队协作开发6.B2C商城项目实战7.搜索引擎8.容器化技术专题Java程序员一定要学好重点的技术,如下面这些并发包:理解 ConcurrentHashMap原理,线程池,异步并发,锁。集合类,线...
2019-03-18 22:08:09
307
原创 源码分析kryo对象序列化实现原理
kryo对象序列化入口为Kryo的writeClassAndObject。Kryo#writeClassAndObject 1public void writeClassAndObject (Output output, Object object) { 2 if (output == null) throw new IllegalArgumentException("output c...
2019-03-18 17:49:14
1784
1
原创 Es Bucket聚合(桶聚合) Terms Aggregation与Significant Terms Aggregation
本章将介绍elasticsearch最重要的桶聚合terms aggregation。Terms Aggregation多值聚合,根据库中的文档动态构建桶。基于词根的聚合,如果聚合字段是text的话,会对一个一个的词根进行聚合,通常不会在text类型的字段上使用聚合,对标关系型数据中的(Group By)。官方示例如下:1GET /_search2{3 "aggs" : {4 ...
2019-03-18 17:42:23
2763
1
原创 我们总结了每个技术开发团队都会遇到的 4 个难题
我们整理了一篇《每个技术团队都会遇到的4个难题》,帮助即将从校园进入公司实习的后端程序员,以实践的视角,看看一个后端技术团队会遇到的一些难题。虽然,技术上的难题远不止于此,但如果能从这篇文章中获得一些职业体感,也许对你的实习面试会有所帮助。从单个应用到多个应用,从百千级别的访问流量到十万、百万级别,从两三个人的创业技术团队到上千人的技术团队矩阵,这些过程中,技术团队都避不开了以下 4 个问题:...
2019-03-18 17:18:02
1502
原创 未来的Java程序员是怎样的呢?Java还有前景吗?
最近有几个小伙伴一直在Java讨论群里抱怨,说现在学Java的人太多了搞得他们一直没找到工作,一个人说该不会是市场已经饱和了吧?现在好几个学习群都在讨论Java饱和的问题,不少人怨声载道,Java市场真的如他们所说的已经饱和了?学Java没前途了吗?先来看看Java开发的市场现状Java发展现状今天的“Java”作为所有编程语言中最热门技术,可以说它无处不在,目前全球有着数十亿的设备正在运...
2019-03-18 17:08:49
2086
1
原创 阿里面试题BIO和NIO数量问题附答案和代码
一、问题BIO 和 NIO 作为 Server 端,当建立了 10 个连接时,分别产生多少个线程?答案: 因为传统的 IO 也就是 BIO 是同步线程堵塞的,所以每个连接都要分配一个专用线程来处理请求,这样 10 个连接就会创建 10 个线程去处理。而 NIO 是一种同步非阻塞的 I/O 模型,它的核心技术是多路复用,可以使用一个链接上的不同通道来处理不同的请求,所以即使有 10 个连接,对于...
2019-03-18 15:59:14
906
1
原创 mybatis查询语句的背后
一、前言在先了解mybatis查询之前,先大致了解下以下代码的为查询做了哪些铺垫,在这里我们要事先了解,myabtis会默认使用DefaultSqlSessionFactory作为sqlSessionFactory的实现类,而sqlSession的默认实现类为DefaultSqlSession public static SqlSessionFactory getSessionFactory...
2019-03-18 15:55:17
147
原创 Java高级开发必会的50个性能优化的细节(珍藏版)
在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。● 1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的并发访问;第二,控制实例的产生,以达到节约资源的目的;第...
2019-03-16 22:42:13
286
原创 没想到,这次引起程序员恐慌的居然是网易云音乐!
大家应该都知道,每年临近年关,各大app都出了年度总结,某音乐app也出了年度听歌报告,也有很多人会把自己的年度歌曲晒在朋友圈。去年年底就有一位网友就发愁了:领导在朋友圈晒了年度歌单,要怎么回复,在线等…打开图片,我笑出声了…同情这位哥们儿领导在一年里听《莫生气》听了253次,哈哈哈这哥们是有多让人生气啊一百度员工直言:你还敢回复,直接当没看见吧…有道理,毕竟回也让人尴尬,不回也尴尬...
2019-03-16 21:57:28
192
原创 静态工具方法的并发控制
静态工具方法并发时候不能简单的用同步关键字来同步方法,因为静态方法是类级别的方法,锁定的是这个类class本身,这样的结果就是任何一个同步的静态方法运行,都会导致其他同步方法调用的阻塞。这个也是问题所在。这里给出一个简单的方法来避免这个问题:通过给每个方法一个锁来控制并发,就可以巧妙的解决阻塞问题。import java.util.concurrent.locks.Lock;import ...
2019-03-15 17:43:56
185
原创 opencms 发布过程深入研究
引入:比起创建Resource,发布过程要困难很多,我上周在support team时候曾经设想不通过调试器,光走读代码来明白其中的奥秘,后来因为堆栈太深而放弃了,现在有了调试器,终于把这些细节弄明白了,果然非常复杂。细节分析:在发布Resource时,它的入口是CmsPublishProject类的actionPublish()方法,发布过程复杂到变态,全包装在performDialogO...
2019-03-15 17:08:42
476
1
原创 如何在 Spring 中自定义 scope
大家对于 Spring 的 scope 应该都不会默认。所谓 scope,字面理解就是“作用域”、“范围”,如果一个 bean 的 scope 配置为 singleton,则从容器中获取 bean 返回的对象都是相同的;如果 scope 配置为prototype,则每次返回的对象都不同。一般情况下,Spring 提供的 scope 都能满足日常应用的场景。但如果你的需求极其特殊,则本文所介绍自定...
2019-03-15 16:31:00
401
1
原创 互联网公司的面试官是如何360°无死角考察候选人的?
一、写在前面最近收到不少读者反馈,说自己在应聘一些中大型互联网公司的Java工程师岗位时遇到了不少困惑。这些同学说自己也做了精心准备,网上搜集了不少Java面试题,然而实际去互联网公司面试才发现,人家问的,和你准备的对不上号,这就很尴尬了。二、先来体验一个真实的面试连环炮好,闲话不多说,我们进入正题!本系列文章,我们将会从消息中间件、分布式缓存、分布式搜索、分布式架构、海量数据、NoS...
2019-03-14 15:10:59
191
1
原创 Java中的main()方法详解
在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。在看Java中的main()方法之前,先看一个最简单的Java应用程序HelloWorld,我将通过这个例子说明J...
2019-03-13 21:39:09
783
1
转载 jenkins自动发布java代码
一、git私有仓库创建可参考GIT笔记中远程仓库搭建部分,此处java源码使用zrlog,将源码pull到github上,将jenkins公钥配置到github上,即可下一波。二、web服务器tomcat配置在需要将代码发布的web服务器上需要配置tomcat的manager页面。yum install java-1.8.0-openjdk.x86_64 -y && wg...
2019-03-13 21:33:03
1538
1
原创 金三银四季!java面试题,让你无所畏惧
2019,相对往年我们会发现今年猎头电话少了,大部分企业年终奖缩水,加薪幅度也不如往年,选择好offer就要趁早,现在开始准备吧,刷一波Java面试题,能回答70%就去BATJTMD大胆试试~以下是2018年发布过的Java面试真题、BATJ等各大互联网公司的面试真经,为方便大家查看,特意做了个导航集合(见文末)。一、面试真题涵盖内容:Java常考题目、JVM、多线程、MySQL、Redis...
2019-03-13 21:07:02
360
原创 助力你的年度大戏:“金三银四”的折腾
1, 什么是内部类?Static Nested Class和Inner Class的不同。内部类就是在一个类的内部定义的类,内部类中不能定义静态成员(静态成员不是对象的特性,只是为了找一个容身之处,所以需要放到一个类中而已,这么一点小事,你还要把它放到类内部的一个类中,过分了啊!提供内部类,不是为让你干这种事情,无聊,不让你干。我想可能是既然静态成员类似c语言的全局变量,而内部类通常是用于创建内...
2019-03-13 20:48:58
141
1
原创 缓存框架OSCache部分源码分析
在并发量比较大的场景,如果采用直接访问数据库的方式,将会对数据库带来巨大的压力,严重的情况下可能会导致数据库不可用状态,并且时间的消耗也是不能容忍的,尤其对于某些获取起来比较昂贵的数据。在这种情况下,一般采用缓存的方式。将经常访问的热点数据提前加载到内存中,这样能够大大降低数据库的压力。OSCache是一个开源的缓存框架,虽然现在已经停止维护了,但是对于OSCache的实现还是值得学习和借鉴的。...
2019-03-13 15:47:08
183
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人