自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(132)
  • 资源 (1)
  • 收藏
  • 关注

原创 spring-servlet.xml 和 application.xml 配置含义及bean被加载两次的问题

最近在迁移一个项目,原本是RPC服务与API水平拆分的,现在需要垂直拆分,每个RPC服务自己提供http接口,我负责迁移RPC部分,另一个同事负责迁移API部分,涉及到一些配置迁移的时候出现了些小状况,所以查了一些资料,大致梳理了下Spring、SpringMVC配置文件之间的关系及一些问题。在我们进行Spring-servlet进行开发的时候,经常会遇到配置文件配置的问题,要彻底的解决这

2018-01-07 20:34:36 830

原创 javaweb的四大域对象

四个域的作用域范围大小:PageContext (page域) 一、ServletContext1、生命周期:当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。2、作用范围:整个Web应用。3、作用:a) 在不同Servlet 之间转发 

2018-01-07 20:32:18 337

原创 synchronized

synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类

2017-08-13 21:33:51 358

原创 引用传递和值传递

关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑。关于值传递和引用传递其实需要分情况看待,今天学习和分析一下,着急可以先看最后的结论。1.基本类型和引用类型在内存中的保存Java中数据类型分为两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。基本

2017-08-12 20:47:39 388

原创 Session与Cookie

会话现实生活中我们会用手机跟对方对话,拿起手机,拨号,然后对面接听,跟着互相通话,最后会话结束。这个过程也可以用我们的B/S模式来描述:            打开浏览器—>输入地址->发出请求->服务器收到请求->向浏览器发出响应->..重复.->关闭浏览器 这样的过程我们用 “会话” 来描述,上面就一次会话的例子。 会话管理

2017-07-31 15:44:59 378

转载 Java NIO系列教程(十一) Pipe

Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示:创建管道通过Pipe.open()方法打开管道。例如:1Pipe pipe = Pipe.open();向管道

2017-07-06 16:48:27 233

转载 Java NIO系列教程(十) Java NIO DatagramChannel

Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:1DatagramChannel channel = DatagramChan

2017-07-06 16:46:33 188

转载 Java NIO系列教程(九) ServerSocketChannel

Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。这里有个例子:01ServerSocketChannel serverSocketChannel = Serv

2017-07-06 16:44:12 233

转载 Java NIO系列教程(八) SocketChannel

Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:

2017-07-06 16:43:12 354

转载 Java NIO系列教程(七) FileChannel

Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAcc

2017-07-06 16:42:41 197

转载 Java NIO系列教程(六) Selector

Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。下面是本文所涉及到的主题列表:为什么使用Selector?Selector的创建向Selector注册通道SelectionKey通过Selector选择通道wakeUp()close()完整

2017-07-06 16:41:48 255

转载 Java NIO系列教程(五) 通道之间的数据传输

在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。transferFrom()FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此

2017-07-06 16:40:09 242

转载 Java NIO系列教程(四) Scatter/Gather

Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。聚集(ga

2017-07-06 16:38:18 176

转载 Java NIO系列教程(三) Buffer

Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。下面是NIO Buffer相关的话题列表:Buffer的基本用法Buffer的capacity,position和l

2017-07-06 16:37:14 231

转载 Java NIO系列教程(二) Channel

ava NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:Channel的实现这些是Java NIO中最重要的通道的实现:

2017-07-06 16:36:13 227

转载 Java NIO系列教程(一) Java NIO 概述

Java NIO 由以下几个核心部分组成:ChannelsBuffersSelectors虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。

2017-07-01 22:56:02 175

原创 硬盘的读写原理

在1956年IBM的一个工程小组向世界展示第一台磁盘存贮系统Ramac,1968年Winchester技术被提出,硬盘走过了50年的历程,虽然硬盘技术上有很多的进步,衍生出了SCSI、IDE、SATA等多种不同的形式,那只是为了适应新的应用需要开发的不同接口而已,硬盘的结构依然没有超越Wenchester技术的定义:密封、固定并高速旋转的镀磁盘片,磁头延盘片向径移动,磁头悬浮在高速旋转的盘片上方而

2017-07-01 21:44:20 702

原创 jedis

使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar,下载地址:http://files.cnblogs.com/liuling/commons-pool-1.5.4.jar.zip

2017-05-25 16:36:48 230

原创 消息队列在项目中的使用总结

一、传统通信模式的不足常用的传统进程通信模式一般是client调用server的服务,等待server的响应。但是在网络情况不好或者在server需要较长的处理时间的时候,就可能导致client的调用失败或超时。业务场景中经常会有一些非常耗时的操作容易阻塞通信,就需要选择独立、耦合性低的消息中间件来完成业务系统间的交互和数据传递。二、消息队列的优势消息队列可以作为通信的中介

2017-05-22 21:26:43 18492

原创 欢乐西游通用缓存系统设计—应用Redis

一、需求背景:       欢乐西游是一款手机卡牌游戏,采用分区分服架构,目前已经登录手Q和微信平台。有些全区玩法需要使用到离线玩家数据:1、天梯PVP系统(按竞技积分匹配全区玩家,包括离线玩家),2、大闹天宫(按战斗力匹配全区玩家,包括离线玩家)。       欢乐西采用Tcaplus的KV方式存储玩家数据,数据读写以角色gid作为key进行,因此通过积分或者战斗力的方式匹配玩家

2017-05-22 21:03:39 850

原创 死锁

Java中当我们的开发涉及到多线程的时候,这个时候就很容易遇到死锁问题,刚开始遇到死锁问题的时候,我们很容易觉得莫名其妙,而且定位问题也很困难。因为涉及到java多线程的时候,有的问题会特别复杂,而且就算我们知道问题出现是因为死锁了,我们也很难弄清楚为什么发生死锁,那么当我们遇到了死锁问题,我们应该如何来检测和查看死锁呢?Java中jdk 给我们提供了很便利的工具,帮助我们定位和分

2017-04-11 15:02:44 358

原创 volatile

Java并发编程:volatile关键字解析   volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。  volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java

2017-04-05 10:52:27 264

原创 Http协议

一、什么是HTTP协议  HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。二、HTTP协议的版本  HTTP协

2017-03-13 22:49:22 427

原创 HttpServletRequest

一、HttpServletRequest介绍  HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。二、Request常用方法2.1、获得客户机信息  getRequestURL方法返回客户端发出请求时的完整URL。  

2017-03-13 22:29:31 265

原创 Cookie

一、会话的概念  会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。  有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾经来过,这称之为有状态会话。二、会话过程中要解决的一些问题?  每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些

2017-03-13 22:21:19 295

原创 Session

一、Session简单介绍  在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。二、Session和Coo

2017-03-13 21:56:51 222

原创 【MyBatis学习07】动态sql

1. 动态sql  动态sql是mybatis中的一个核心,什么是动态sql?动态sql即对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。就拿上一篇博文中对用户的综合查询一例来说: select * from user where user.sex = #{user.sex} and user.username like '%${user.user

2017-03-13 14:30:52 191

原创 【MyBatis学习06】输入映射和输出映射

在前面几篇博文的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结。我们知道mybatis中输入映射和输出映射可以是基本数据类型、hashmap或者pojo的包装类型,这里主要来总结一下pojo包装类型的使用,因为这个在开发中比较常用。1. 输入映射输入映射,是在映射文件中通过parameterType指定输入参数的

2017-03-13 14:13:30 245

原创 【MyBatis学习05】SqlMapConfig.xml文件中的配置总结

经过上两篇博文的总结,对mybatis中的dao开发方法和流程基本掌握了,这一节主要来总结一下mybatis中的全局配置文件SqlMapConfig.xml在开发中的一些常用配置,首先看一下该全局配置文件中都有哪些可以配置的东西:配置内容作用用来加载属性文件用来设置全局参数用来设置类型的别名

2017-03-13 14:12:04 252

原创 【MyBatis学习04】mapper代理方法开发dao

上一篇博文总结了mybatis使用 原始dao的方法存在的一些弊端,我们肯定不会去用它,那么mybatis中该如何开发dao呢?如题所述,这篇博文主要来总结一下使用mapper代理的方法来开发dao的步骤。   使用mapper代理的方法来开发dao时,程序员只需要干两件事即可: 需要编写mapper.xml映射文件需要编写mapper接口(相当于dao接口) 从做的工

2017-03-13 14:10:27 180

原创 【MyBatis学习04】mapper代理方法开发dao

上一篇博文总结了mybatis使用 原始dao的方法存在的一些弊端,我们肯定不会去用它,那么mybatis中该如何开发dao呢?如题所述,这篇博文主要来总结一下使用mapper代理的方法来开发dao的步骤。   使用mapper代理的方法来开发dao时,程序员只需要干两件事即可: 需要编写mapper.xml映射文件需要编写mapper接口(相当于dao接口) 从做的工

2017-03-13 14:10:09 190

原创 【MyBatis学习03】原始dao开发方法及其弊端

上一篇博文总结了一下mybatis的入门,接下来就要开发dao方法了,这篇博文主要总结一下mybatis中原始dao开发的方法,最后并总结一下原始dao开发方法的弊端。mybatis中dao开发应该使用mapper代理的方法,这将在下一篇博文中介绍。   原始dao开发思路比较简单,写个dao接口和dao实现类即可。需要向dao实现类中注入sqlSessionFactory,在方法体内通过sq

2017-03-13 14:09:25 197

原创 【MyBatis学习02】走进MyBatis的世界

mybatis是个持久层的框架,用来执行数据库操作的,无外乎增删改查,上一节对mybatis有了宏观上的了解后,这一篇博客主要通过一个小示例来入门mybatis,先看一下要写的示例需求:根据用户id查询用户信息 根据用户名称模糊查询用户信息 添加用户、删除用户、更新用户其实也就是增删改查,掌握这些,基本上就掌握了mybatis的基本操作了,下面一个个模块来完成。 1

2017-03-11 22:47:03 191

原创 【MyBatis学习01】宏观上把握MyBatis框架

mybatis框架是一个持久层框架,是Apache下的顶级项目。mybatis可以让开发者的主要精力放在sql上,通过mybatis提供的映射方式,自由灵活的生成满足需要的sql语句。MyBatis可以将向preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象(输出映射)。   下面在整体上把握一下mybatis框架,总结一下mybatis的执行流程

2017-03-11 22:05:26 318

原创 NIO

前言: 最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。可以参考:http://baike.baidu.com/view/32726.htm )机制时,发现hadoop的RPC机制的实现主要用到了两个技术:动态代理(动态代理可以参考博客:http:/

2017-03-05 22:10:25 1139 1

原创 notify(),wait()

认识Object.wait()方法:       导致当前线程等待,直到该对象的notify或notifyAll被执行。换句话说,这个方法行为效果完全与简单调用wait(0)一样。当前线程必须拥有对象监视器。线程释放对象监视器的所有权,等待直到另一个线程通过调用notify或notifyAll来通知等待对象监视器的线程们并唤醒。然后,当前线程等待重新获取对象监视器并继续执行。因为在一个参数的版

2017-02-18 21:13:28 281

原创 负载均衡算法

1、轮询法  将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。2、随机法     通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。

2016-12-20 16:53:05 334

原创 spring的init-method 和 destory-method

关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种:第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作第二种是:通过 在xml中定义init-method 和  destory-method方法第三种是: 通过bean实现InitializingBean和 DisposableBean

2016-12-14 17:27:59 560

原创 bean的延迟加载

在默认情况下,spring的ApplicationContext容器在启动的时候,会自动实例化所有singleton的Bean并缓存在容器中。虽然启动时会花费一些时间,但带来两个好处:1、对Bean提前实例化操作会及早发现一些潜在的配置问题;2、Bean以缓存的方式保存,当运行期使用到该Bean的时候无需再实例化,加快运行的效率。如果用户不希望容器启动的时候提前实例化sin

2016-12-14 17:02:57 2115

原创 动态代理

在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾。在java的动态代理机制中,有两个重要的类或

2016-12-09 10:19:57 345

java设计模式 api

java设计模式API,就和平常的javaapi一样很好用很全

2016-05-08

空空如也

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

TA关注的人

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