11 2016 档案
io与nio的区别
摘要:传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大。使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数量线程的线程池,甚至一个线程来为任意数量的连接服务。由于线程数量小于连接数量,所以每个线程进行IO操作时就不能阻塞,如果阻塞的话,有些连接就得不到处理,NIO提供了这种非阻塞的能力。 小量的线程如何...
阅读全文
反射机制
摘要:指的是可以于运行时加载,探知和使用编译期间完全未知的类. 程序在运行状态中, 可以动态加载一个只有名称的类, 对于任意一个已经加载的类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能调用他的任意一个方法和属性; 加载完类之后, 在堆内存中会产生一个Class类型的对象(一个类只有一个Class对象), 这个对象包含了完整的类的结构信息,而且这个Class对象就像一...
阅读全文
字节流与字符流的区别
摘要:输入输出字节流使用Inputstream、OutputStream来完成的,而输入输出字符流是用Reader和Writer完成的的; 字符流处理的是2个字节的Unicode,分别操作字符、字符数组、字符串;字节流处理单元为1个字节,操作字节和字节数组; 字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用缓冲区的,所以字节流在操作文件的时候,即使...
阅读全文
对IOC和DI以及AOP的理解
摘要:为了理解Spring的IoC与DI从网上查了很多资料,作为初学者,下面的描述应该是最详细,最易理解的方式了。 首先想说说IoC(Inversion of Control,控制倒转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里...
阅读全文
servlet内置对象
摘要:request 请求对象 类型javax.servlet.ServletRequest 作用域Request response 响应对象 类型javax.servlet.ServletResponse 作用域Page pageContext 页面上下文对象 类型javax.s...
阅读全文
linux常用命令
摘要:1、chgrp 改变所属群组: 例:将install.log的群组改为users chgrp users install.log ls –l 查看结果:root users 68495 25 08:53 install.log 拥有者 群组 2、chown改变拥有者 例:将install.log文件拥有者改成...
阅读全文
服务器与客户端消息推送的原理
摘要:其实服务端与客户端实现消息推送的方式有几种: 1、客户端不断的查询服务器,检查新的内容,也就是所谓的pull或者轮询的方式; 2、客户端与服务器之间维持一个TCP/IP长连接(在HTTP1.1中,所有的请求都认为是长连接),服务器向客户端push; 3、当服务端有新内容的时候,发送一条类似短信的信令给客户端,客户端收到货从服务器下载新内容,也就是SMS的推送方式; 对于第一种方式有以...
阅读全文
hashmap的底层实现
摘要:HashMap的底层实现都是数组+链表结构实现的,添加、删除、获取元素都是先计算hash值,根据hash值和table.length计算出index也就是table的数组的下标,然后进行相应的操作。 不过HashMap和HashTable计算hash的方法不同: HashMap是直接用key的hashcode对table数组长度取模;而HashMap则是对key的hashcode进行两次has...
阅读全文
sychronized 和 Lock的比较
摘要:sychronized是在jvm层面上实现的,可以通过一些监控工具监控sychronized的锁定,而且在代码执行出现异常时,jvm会自动释放锁,但是使用Lock就不行,lock是通过代码实现的,最终需要在finally中释放。 ReentranLock同样拥有synchronized相同的并发性和内存语义,不过它还多了锁投票、定时锁和中断锁,比如说对于中断锁,当一个线程等待了足够长的时间...
阅读全文
对线程安全的理解
摘要:首先,在jvm中有一个main memory,而每个线程都有自己的working memory,一个线程对一个variable进行操作的时候,会先在自己的working memory里面建立一个copy,操作完成之后再写入main memory,如果有多个线程同时操作同一个variable,就可能会出现不可预知的结果,所以线程安全就是为了避免这种情况的发生。在java中,确保线程安全的方法有两种:...
阅读全文