自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 从简单的示例,进入Mybatis的世界!

本篇文章我们将以一个简单java的示例来开启mybatis之旅。这里大家不必关注过多的细节,仅仅了解mybatis如何使用即可。 本项目及其以后的代码都是使用maven进行管理了,如有不了解maven的可以先去简单的学习。1. 依赖的引入首先我们需要在pom.xml文件中引入需要的依赖,包含以下几个方面: (1)mysql的驱动; (2)mybaits的jar包; (3)单元测...

2018-04-28 11:27:14 154

转载 拥有了JDBC,为什么还要有Hibernate和Mybatis等持久层框架?

JDBC,我想对于学Java的人简直太熟悉了,如果谁说不知道,那么狠遗憾的告诉你,你不是Java人!这篇文章的主要目的还是想把大家引入后面我们重点要说的内容,那就是Mybatis和Hibernate两个持久层框架。既然要研究这两个框架,那么就该知道为什么会出现这两个框架。我记得,我刚步入Ja...

2018-04-28 09:57:08 428

转载 java Web大牛之路—Java Web 基础之Filter 综述

摘要:  伴随J2EE一起发布的Servlet规范中还包括一个重要的组件——过滤器(Filter)。过滤器可以认为是Servlet的一种加强版,它主要用于对用户请求进行预处理以及对服务器响应进行后处理,是个典型的处理链。Servlet规范使用了三个接口对过滤器进行了抽象,即Filter是对具体过...

2018-04-27 15:09:07 174

转载 java Web大牛之路—JSP中文乱码问题终极解决方案(下)

摘要:  本文首先从四个方面给出了在使用JSP过程中可能出现中文乱码的情形,具体包括JSP页面中文乱码、JSP源文件中文乱码、GET 请求的请求参数为中文乱码 和 POST 请求的请求参数为中文乱码四种情形,并针对每种情形给出了相应的终极解决方案。一. JSP页面与JSP源文件乱码 ...

2018-04-27 14:58:06 204

转载 java Web大牛之路—JSP中文乱码问题终极解决方案(上)

摘要:  本文首先介绍了一个JSP的源文件执行过程,即需要经过三个阶段,两次编码,才能完成一次完整的输出。特别需要注意的是,在这个过程中,编码问题贯穿始终。我们知道在JSP/Servlet中,主要有以下四种方式可以设置编码,即 pageEncoding、contentType、request.s...

2018-04-27 14:52:24 2560

转载 Java Web大牛之路—使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码

摘要:  URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之间的相互转换。在本文中,我们以使用URLDecoder解决GET请求中文乱码问题为场景说明 URLDecoder/URLEnco...

2018-04-27 14:45:24 397

转载 Java Web大牛之路—Java Web基础 之Jsp 综述(下)

摘要:  JSP脚本中包含九个内置对象,它们都是Servlet-API接口的实例,并且JSP规范对它们进行了默认初始化。本文首先通过一个JSP实例来认识JSP内置对象的实质,紧接着以基于请求/响应架构应用的运行机制为背景,引出JSP/Servlet的通信方式与内置对象的作用域,并对每个内置对象的常见用法进行深入介绍和总结。一. JSP 九大内置对象...

2018-04-27 14:08:32 156

转载 Java Web大牛之路—Java Web基础 之Jsp 综述(上)

摘要:  J2EE是一套规范,而Servlet/Jsp是J2EE规范的一部分,是Tomcat的主要实现部分。在最初的应用实践中,当用户向指定Servlet发送请求时,Servlet利用输出流动态生成HTML页面,这导致Servlet开发效率极为低下。JSP技术通过实现普通静态HTML和动态部分混...

2018-04-27 11:17:43 320

转载 Java Web大牛之路—Java Web基础之 Servlet 综述(理论篇)

摘要:  Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础。本文首先从请求/响应架构应用的大背景谈起 Servlet 的由来,明确 Servlet 的产生动机,并揭示了 Servlet 的本质以及其在标准MVC模式中所扮演的角色。紧接着,给出了 Servl...

2018-04-27 10:46:03 240

转载 MySQL性能调优与架构设计-架构篇

架构篇(1) 读书笔记1.Scale(扩展):从数据库来看,就是让数据库能够提供更强的服务能力ScaleOut: 是通过增加处理节点的方式来提高整体处理能力ScaleUp: 是通过增加当前处理节点的处理能力来提高整体的处理能力2.事务最小化原则:避免分布式事务的解决方案a)进行S...

2018-04-27 10:34:26 362

转载 一亿用户增长背后的架构秘密 之 腾讯微信技术架构

微信——腾讯战略级产品,创造移动互联网增速记录,10个月5000万手机用户,433天之内完成用户数从零到一亿的增长过程,千万级用户同时在线,摇一摇每天次数过亿…   在技术架构上,微信是如何做到的?日前,在腾讯大讲堂在中山大学校园宣讲活动上,腾讯广研助理总经理、微信技术总监周颢在两小时的演讲中揭开了微信背...

2018-04-27 09:38:50 409

转载 从MVC到前后端分离(REST-个人也认为是目前比较流行和比较好的方式)

摘要:MVC模式早在上个世纪70年代就诞生了,直到今天它依然存在,可见生命力相当之强。MVC模式最早用于Smalltalk语言中,最后在其它许多开发语言中都得到了很好的应用,例如,Java中的Struts、Spring MVC等框架。1. 理解MVCMVC是一种经典的设计模式,全名为Model-View-Controller,即模型-视图-控制器。其中,模型是用于封装数据的载体,例如,在...

2018-04-27 09:00:04 321

转载 过滤器(Filter)和拦截器(Interceptor)的区别

摘要:  本文介绍主要介绍了Java Web Filter 与 Struts2 Interceptor 及其之间的联系与区别。一. Filter 介绍  Filter可以认为是Servlet的一种“加强版”,它主要用于对用户请求进行预处理,也可以对HttpServletRespons...

2018-04-26 20:17:32 222

原创 spring源码深度解析——数据库连接JDBC(2)

spring源码深度解析——数据库连接JDBC(2)1. query方法在之前的数据库连接JDBC(1)中我们分析了insert/update方法,接下来我们分析下query功能的实现。在之前的示例中我们用了List users = this.jdbcTemplate.query(“select * from t_user”,new UserRowMapper());来进行数据库查询操...

2018-04-26 16:09:12 407

原创 spring源码深度解析——数据库连接JDBC(1)

spring源码深度解析——数据库连接JDBC(1)JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行Sql语句的java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 JDBC连接数据库的流程及原理如下: (1)加载指定的数据库驱动程序。 (2)在java程序中加载驱动程序。通过Class.for...

2018-04-26 14:56:36 2339 1

转载 Redis系列——内存模型

一、前言Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。我们使用Redis时,会接触Redis的5种对象类型(字符串、哈希、列表、集合、有序集合),丰富的类型是Redis相对于Memcached等的一大优势。在了解Redis的5种对象类型的用法和特点的基础上,进一步了解Redis的内存模型,对Redis的使用有很大...

2018-04-25 15:53:09 316

转载 Mybatis缓存的使用及源码分析

前言基于个人的兴趣,开了这场chat,主题是Mybatis一级和二级缓存的应用及源码分析。希望在本场chat结束后,能够帮助读者朋友明白以下三点。Mybatis是什么。Mybatis一级和二级缓存如何配置使用。Mybatis一级和二级缓存的工作流程及源码分析。本次分析中涉及到的代码和数据库表均放在Github上,地址: mybatis-cache-demo。目录为达到以...

2018-04-25 15:37:44 244

转载 JVM逃逸分析对性能的影响

逃逸分析(Escape Analysis)逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,称为方法逃逸。甚至还有可能被外部线程访问到,譬如赋值给类变量或可以在其他线程中访问的实例变量,称为线程逃逸。方法逃逸的几种方式如下:publ...

2018-04-25 15:28:37 366

原创 系统架构原理分析(4)——负载均衡

1. 什么是负载均衡1.1 负载均衡的定义负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器列阵,籍此提供快速获取重要数据,解决大量并发访问服务问题。这种...

2018-04-25 15:02:35 793

原创 系统架构原理分析(3)——代理服务器简介及分类

1. 简介代理(英语:Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。 [1 提供代理服务的电脑系统或其它类型的网络终端称为代理服务器(英文:Proxy Server)。一个完整的代理请求过程为:...

2018-04-25 14:17:13 1199

原创 spring源码深度解析---创建AOP代理之创建代理

创建代理在获取了所有对应bean的增强后,便可以进行代理的创建了。回到AbstractAutoProxyCreator的wrapIfNecessary方法中,如下图所示: 这里就是创建代码的代码,我们进入到方法内部:protected Object createProxy(Class<?> beanClass, @Nullable String beanName, ...

2018-04-25 11:23:13 1166

原创 spring源码深度解析---创建AOP代理之寻找匹配的增强器

寻找匹配的增强器前面的函数中已经完成了所有增强器的解析,但是对于所有增强器来讲,并不一定都适用于当前的Bean,还要挑取除适合的增强器,也就是满足我们配置的通配符的增强器。具体的实现在findAdvisorsThatCanApply中。我们回头看下AbstractAdvisorAutoProxyCreator中的findEligibleAdvisors方法,如下图所示: 这里使用了fin...

2018-04-25 11:21:27 272

原创 spring源码深度解析---创建AOP代理之获取增强器

spring源码深度解析—创建AOP代理之获取增强器在上一篇的博文中我们讲解了通过自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册,那么这个类到底做了什么工作来完成AOP的操作呢?首先我们看看AnnotationAwareAspectJAutoProxyCreator的层次结构,如下图所示: 从上图的类层次结构图中我们看到这个类...

2018-04-25 10:57:00 445 1

原创 系统架构原理分析(2)——CDN内容分发网络

1. CDN简介CDN全称:Content Delivery Network或Content Ddistribute Network,即内容分发网络。1.1 基本思路尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况...

2018-04-24 16:49:44 373 2

原创 系统架构原理分析(1)-一-DNS负载均衡

1. DNS简介DNS(Domain Name System)是因特网的一项服务,它作为域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。人们在通过浏览器访问网站时只需要记住网站的域名即可,而不需要记住那些不太容易理解的IP地址。在DNS系统中有一个比较重要的的资源类型叫做主机记录也称为A记录,A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。如果...

2018-04-24 15:36:44 743 1

原创 深入浅出一致性Hash原理

一、背景一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。二、前言现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人都知道,me...

2018-04-23 19:44:01 511

转载 java9新特性

1.目录结构 2.repl工具 jShell命令 3.模块化 4.多版本兼容jar包 5.接口方法的改进(在接口中 jdk7 只能声明全名常量和抽象方法 jdk8 添加了静态方法和默认方法 jdk9添加了私有方法)6.钻石操作符升级 可以有{} 7.异常处理try升级 8.下划线标识符命名的限制 _ 不允许了 9.String底...

2018-04-23 19:17:11 218 1

原创 spring源码深度解析---AOP:动态AOP自定义标签

spring源码深度解析—AOP:动态AOP自定义标签之前讲过Spring中的自定义注解,如果声明了自定义的注解,那么就一定会在程序中的某个地方注册了对应的解析器。我们搜索这个代码,尝试找到注册的地方,全局搜索后我们发现了在org.springframework.aop.config包下的AopNamespaceHandler中对应着这样一段函数:@Overridepublic void...

2018-04-20 14:46:32 262

原创 spring源码深度解析---AOP:动态AOP使用

spring源码深度解析—AOP:动态AOP使用我们知道在面向对象OOP编程存在一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志,安全检测等,我们只有在每个对象里引入公共行为,这样程序中就产生了大量的重复代码,所以有了面向对象编程的补充,面向切面编程(AOP),AOP所关注的方向是横向的,不同于OOP的纵向。接下来我们就详细分析下spring中的AOP。首先我们从动态A...

2018-04-20 11:30:00 563

原创 spring源码深度解析---容器的功能扩展(下)

spring源码深度解析—容器的功能扩展(下)接容器的功能扩展(上)6. BeanFactory的后处理BeanFactory作为spring中容器功能的基础,用于存放所有已经加载的bean,为例保证程序上的高可扩展性,spring针对BeanFactory做了大量的扩展,比如我们熟悉的PostProcessor就是在这里实现的。接下来我们就深入分析下BeanFactory后处理...

2018-04-20 10:33:56 421

原创 spring源码深度解析---容器的功能扩展(上)

spring源码深度解析—容器的功能扩展(上)在之前的博文中我们一直以BeanFactory接口以及它的默认实现类XmlBeanFactory为例进行分析,但是Spring中还提供了另一个接口ApplicationContext,用于扩展BeanFactory中现有的功能。 ApplicationContext和BeanFactory两者都是用于加载Bean的,但是相比之下,Applicat...

2018-04-19 14:39:56 1036 2

原创 spring源码深度解析---bean的加载(下)

spring源码深度解析—bean的加载(下)我们继续接着之前的两篇bean的加载继续分析bean的实例创建1. 创建bean实例上面介绍了循环依赖还后置处理器处理的操作后接下来就到了创建bean的操作了,创建bean是在方法doCreateBean(beanName, mbdToUse, args)完成的,我们看下方法体:protected Object doCreateBe...

2018-04-17 14:59:01 1648

原创 教你如何用思维导图把一本书内容绘制成一张A4纸!

教你如何用思维导图把一本书内容绘制成一张A4纸!如何把一本书变成一张纸。如果一本书的关键内容能够体现在一张A4纸上那无疑是为我们节省了很多的时间,不光可以快速地理解书里的内容而且还能够体会作者想表达的意思。 话不多说,我们就来看看应该如何操作吧。 上图绘制的思维导图,对一本书做思维导图的技巧主要分为两类:准备及应用。1. 准备1.1 浏览(10分钟)1.1.1 纵观...

2018-04-17 09:34:14 20435

原创 spring源码深度解析---bean的加载(中)

spring源码深度解析—bean的加载(中)1. 缓存中获取单例bean之前一篇我们介绍过FactoryBean的用法之后,就可以了解bean加载的过程了。单例在Spring的同一个容器内只会被创建一次,后续再获取bean直接从单例缓存中获取,当然这里也只是尝试加载,首先尝试从缓存中加载,然后再次尝试从singletonFactorry加载因为在创建单例bean的时候会存在依赖注入的情况...

2018-04-16 11:07:00 3340

原创 spring源码深度解析---bean的加载(上)

spring源码深度解析—bean的加载(上)1. 概述前面我们已经分析了spring对于xml配置文件的解析,接下来我们将对bean的加载进行探索。bean的加载比配置文件的解析要复杂的多。还记得我们在测试读取配置文件后获取bean用的方法吗?context.getBean(“testContructor”),如下所示,这段代码具体实现了什么功能呢?接下来我们将详细分析下。publi...

2018-04-13 16:36:20 2209 1

原创 spring源码深度解析---自定义标签解析

spring源码深度解析—自定义标签解析1. 概述之前我们已经介绍了spring中默认标签的解析,解析来我们将分析自定义标签的解析,我们先回顾下自定义标签解析所使用的方法,如下图所示: 我们看到自定义标签的解析是通过BeanDefinitionParserDelegate.parseCustomElement(ele)进行的,解析来我们进行详细分析。2. 自定义标签的使用...

2018-04-13 11:53:18 659

原创 spring源码深度解析---默认标签解析(下)

spring源码深度解析—默认标签解析(下)在spring源码深度解析—默认标签解析(上)中我们已经完成了从xml配置文件到BeanDefinition的转换,转换后的实例是GenericBeanDefinition的实例。而GenericBeanDefinition是AbstractBeanDefinition的子类,那我们优先看下AbstractBeanDefinition中的属性,代码如...

2018-04-12 17:01:14 362

原创 spring源码深度解析---默认标签解析(上)

spring源码深度解析—默认标签解析 1. 概述Spring的标签中有默认标签和自定义标签,两者的解析有着很大的不同,这次重点说默认标签的解析过程。 默认标签的解析是在DefaultBeanDefinitionDocumentReader.parseDefaultElement函数中进行的,分别对4种不同的标签(import,alias,bean和beans)做了不同处理。我们先看下此...

2018-04-12 15:02:15 970

原创 spring源码深度解析—容器的基本实现

spring源码深度解析—容器的基本实现1. 概述分析源码是一件非常具有挑战性的工作,在正是分析spring的源码之前我们先来简单回顾下spring核心功能的简单使用2. 容器的基本用法bean是spring最核心的东西,spring就像是一个大水桶,而bean就是水桶中的水,水桶脱离了水也就没有什么用处了,我们简单看下bean的定义,代码如下:public class MyB...

2018-04-12 09:43:20 31805

原创 spring源码深度解析---Spring的整体架构和环境搭建

spring源码深度解析—Spring的整体架构和环境搭建1. 概述Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级...

2018-04-11 10:57:37 1727 2

空空如也

空空如也

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

TA关注的人

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