自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 tomcat:pipeline与valve机制

协作模式每个容器包含一个pipeline,每个pipeline包含一个valve集合,位于前面的的valve做完业务处理后将调用后面的valve做业务处理,而容器的缺省valve位于集合的最后一个位置,负责调用下层容器的pipeline的第一个valve做业务处理,调用会从Engine的第一个valve调用开始,一直执行到调用Wrapper的缺省valve:StandardWrapperValve,

2016-11-30 18:30:12 1634

原创 tomcat架构:Connector

配置与配置项<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />tomcat中connector配置如上,如何处理来访是由protocol属性决定的,对HTTP协议而言,这个属性可以配置的值有: HTTP/1.

2016-11-30 18:10:16 808

原创 tomcat架构:容器类

容器类及其 标准实现1. Engine:org.apache.catalina.core.StandardEngine 2. Host:org.apache.catalina.core.StandardHost3. Context:org.apache.catalina.core.StandardContext4. Wrapper:org.apache.catalina.core.Standa

2016-11-30 17:33:53 722

原创 tomcat架构:核心架构模块

核心模块关系图简单说明1)tomcat对外表现为一个server 2)一个server包含一个或者多个service 3)一个service包含一个或者多个Connector和一个Container, 4)Connector负责接收请求,Container负责处理请求 5)Connector包含ProtocolHandler、Adapter、Mapper三部分,ProtocolHandler

2016-11-30 16:38:12 1037

原创 快速排序

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

2016-11-13 14:50:05 322

原创 sp:Mybatis #{} 和 ${}的区别

区别简单说,#{}是经过预编译的,而${}是未经过预编译的#{}为了说明,建立简单的表test如下: +——-+————-+——+—–+———+—————-+ | Field | Type | Null | Key | Default | Extra | +——-+————-+——+—–+———+—————-+ | id

2016-11-13 12:45:49 577 1

原创 sp:SpringMVC配置Restful风格的请求

概念这里Restful风格指通过HTTP请求对应的POST,GET,PUT,DELETE方法来完成对应的CRUD操作。如何做?Controller@ResponseBody@RequestMapping(value="/oper/{str}", method = RequestMethod.GET)public Object get(@PathVariable("str") String str

2016-11-10 10:43:51 519

原创 SP:SpringMVC架构

业务流程图架构(类图)流程总结DispatcherServlet:流程载体,首脑,总指挥官 Handler:具体处理请求 HandleMapping:匹配URL到具体的Handler HandleAdapter:将匹配到的Handler适配至特定的接口 ModleAndView : 封装视图与数据 viewResolver:解析ModleAndView,得到具体的view流程: URL到

2016-11-09 18:06:33 904

原创 jdk:CopyOnWriteArrayList

解决问题如何理解CopyOnWrite?关键词数组、new数组、复制、数组更新、数组引用更新codeCopyOnWriteArrayList.set(int index, E element)public E set(int index, E element) { final ReentrantLock lock = this.lock; lock.lock(); try {

2016-06-24 18:55:30 404

原创 skill:RabbitMq

如何使用安装RabbitMq服务安装 Eralng OTP ,安装 Rabbit MQ Server,具体可以到网上搜教程。spring 集成 RabbitMqspring配置文件<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-

2016-05-06 15:37:43 1814

原创 sp:Propagation.REQUIRED vs Propagation.REQUIRES_NEW

Introductionspring事务propagation(事务传播特性)配置,常用的配置项为Propagation.REQUIRED或者Propagation.REQUIRES_NEW。Propagation.REQUIRED:如果当前有事务,则在当前事务中执行,如果没有事务,则创建一个事务执行。 Propagation.REQUIRES_NEW:无论如何创建一个新的事务执行。这里的事务指的

2016-05-04 17:16:18 933

原创 exp:<aop:config/> 事务配置无效

事务管理表现为无效,同时还有一个非常奇怪的现象:如果将com.qyd.sms.service.api.student.service.StudentService这个类,以`<bean/>`的形式显式的配置在配置文件中,事务管理就可以生效不得其解,很幸运在网上找到了这个:[spring+springMVC,声明式事务失效,原因以及解决办法](http://blog.csdn.net/yu412346928/a

2016-04-26 11:29:05 3360

原创 summary:http乱码

解决方案httpPost.setEntity(new UrlEncodedFormEntity(nvps,”UTF-8”)); 延伸解读new UrlEncodedFormEntity(nvps,”UTF-8”) 源码:public UrlEncodedFormEntity ( final List <? extends NameValuePair> parameters, fina

2016-04-15 19:43:34 1013

原创 java开发常用的linux命令

ps -ef | grep tomcat:查看tomcat相关线程

2016-04-07 18:11:38 435

原创 skill:Kindeditor

简单记录下使用方式:页面使用textarea元素作为容器:<textarea id="content" name="content" ></textarea>使用Kindeditor的js渲染textarea,生成一个富文本编辑框(并不是原来的textarea)$(function(){ KindEditor.create('#content',{ height : '500

2016-03-11 17:34:58 499

原创 linux命令:vim

vim文件编辑命令。vim用法有很多,只记录简单的几条。以下用法是我觉得比较有用,又比较简单的,均已测试有效。vim + 文件名:进入vim模式vim模式有两种状态: 1 通过键盘输入进行文件编辑 2 键盘输入被解释为命令状态切换: i : 进入键盘输入编辑状态 esc:进入键盘输入命令状态键盘输入命令状态下的常用命令: dd 删除一行 dw 删除单词 j 下移一行 k 上衣一

2015-11-11 14:05:58 427

原创 1号 到 100号 数数 123 数到 3 退出 最后剩下几号

大神fookwood提供的思路:写个循环链表,模拟删除操作。public class Count123 { public static void main(String[] args){ Node node = Node.initCycle(10); int count = 1; while(node.next != node){

2015-11-09 13:57:17 1268

原创 javap:String +

源代码:public class Test{ public static void main(String[]args){ String x = ""; for(int i=0;i<10;i++){ x+="abc"; } System.out.println(x); }}javap:反编译结果

2015-10-30 20:28:19 582

原创 依赖权重的随机选择

权重分配,A:1 B:5 C:10需求是随机选择一个,要求权重越高选中的几率越大解决思路: 在1到16(权重之和)之间生成一个随机数x,如果x在(1,10]区间内则选择A,如果x在(10,15]区间内选择B,如果在(15,16]区间内选择C。

2015-08-10 13:35:57 566

原创 Serializable:序列化代理

序列化代理简单来说,A有序列化的需求,但是不直接序列化A,而是序列化一个A的代理对象B,我们可以将A的信息保存在B中,在反序列化时,再通过B得到A的信息,实例化一个A对象 为什么这么费劲呢?因为反序列化是java机制之外的东西,不通过构造方法生成实例,这样有机会被入侵(具体说不上,就是有可能被黑的意思吧),采用序列化代理可以有效的避免通过反序列化来生成实例,所有的实例都通过构造函数来生成,这样就可

2015-07-08 14:40:06 958

原创 Serializable:writeReplace

如果一个序列化类中含有Object writeReplace()方法,那么实际序列化的对象将是作为writeReplace方法返回值的对象,而且序列化过程的依据是实际被序列化对象的序列化实现。People定义了writeReplace方法,并且自定义了writeObject/readObject方法。public class People implements Serializable{

2015-07-08 14:24:42 2118

原创 Serializable:readResolve

如果序列化类定义了Object readResolve() ,那么将无视readObject的实现,直接返回作为readResolve() 方法返回值的对象。public class People implements Serializable{ /** * */ private static final long serialVersionUID = 265

2015-07-08 14:06:24 848

原创 Serializable:自定义序列化

序列化对象可以自定义序列化,也可以使用默认序列化 如何选择呢? 这就要从序列化的目的说起,序列化的目的简单来说就是保存,之后可以还原,这就是说只要我们能达到这个目的,都是ok的。如果都ok那么就可以选择更ok的形式。看下面这个例子: OddNum 这是一个极其没有道理的例子,只是为了说明问题public class OddNum implements Serializable{ /*

2015-07-08 13:49:24 986

原创 Serializable:writeObject/readObject有的限制?

writeObject/readObject的实现有没有什么限制?答案是没有任何限制,可以任意实现。 比如说如下面这样:private void writeObject(ObjectOutputStream out) throws IOException{ System.out.println("这里的方法吧?");}private void readObject(ObjectInpu

2015-07-08 13:17:56 1572

原创 Serializable:serialVersionUID

序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException。可序列化类可以通过声明名为 “serialVersion

2015-07-08 10:05:05 408

原创 Serializable: 默认序列化

PeopleName 是一个人名对象,包含三个成员变量:firstName、middleName、lastName,非常适合用默认的序列化形式。下面说什么是默认序列化形式,默认序列化形式表现上来说就是只要实现Serializable ,任何其它的事情都不需要做了。public class PeopleName implements Serializable { private static

2015-07-08 09:53:00 1177

原创 java.util.concurrent

在java1.5发行版本中,java平台新增了java.util.concurrent。包括了三部分:Executor Framework、并发集合(Concurrent Collection)、以及同步器(Synchronizer)1 Executor FrameworkExecutor 接口publi

2015-07-06 17:34:50 484

原创 为了在线程间进行可靠的通信,也为了互斥访问,同步是必要的。

为了在线程间进行可靠的通信,也为了互斥访问,同步是必要的。

2015-07-06 16:36:02 464

原创 jdk:HashSet基于HashMap实现

以前就听过,HashSet基于HashMap实现,HashMap的键部分就是一个HashSet,但是今天看了一眼源码之后,我就觉得这些说法并不够清晰,至少没有我看了一眼源码来的痛快。HashSet源码中的两行代码:private transient HashMap<E,Object> map;public HashSet() { map = new HashMap<E,Object>();

2015-06-23 14:39:48 578

原创 jdk:HashMap的keySet(),values(),entrySet()

在api文档中这三个方法返回的都是视图,今天从源码层面上分析,为什么是视图。keySet(): public Set<K> keySet() { Set<K> ks = keySet; return (ks != null ? ks : (keySet = new KeySet())); } private final class KeySet exte

2015-06-23 14:07:07 1084

原创 jdk:HashMap

首先看我们通常使用的HashMap构造函数:public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR); table = new Entry[DEFAULT_INIT

2015-06-23 11:17:44 558

原创 jdk:ArrayList

public boolean add(E e) { ensureCapacity(size + 1); // Increments modCount!! elementData[size++] = e; return true; }

2015-06-19 11:56:45 565

原创 jdk:Arrays.asList&Collection.toArray

Arrays.asList 与 Collection.toArray

2015-06-19 11:26:41 552

原创 Pattern:group

Pattern pattern = Pattern.compile("(.)(.)\\1\\2");

2015-05-22 14:42:28 739

原创 javap:count = count ++

int count = 0;for(int i=0;i<10;i++){ count = count++;}

2015-05-21 18:06:28 793

空空如也

空空如也

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

TA关注的人

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