java
wanglei0622
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
xfire客户端调用webservice测试
import java.net.MalformedURLException;import java.util.Date;import org.codehaus.xfire.XFireFactory;import org.codehaus.xfire.client.XFireProxyFactory;import org.codehaus.xfire.service.Service;im原创 2015-06-03 20:45:42 · 4704 阅读 · 0 评论 -
集合
java集合架构支持3种类型的集合:规则集(Set),线性表(List),和图(Map),分别定义在Set,List,Map中。Set实例存储一组互不相同的元素(集合),List实例存储一组顺序排列的元素(表),Map存储一组 对象—关键值的映射总的架构如下,非常重要,包含继承关系,实现的分类,一目了然:Collection接口: Set接口: HashSet具体原创 2016-04-19 14:55:45 · 453 阅读 · 0 评论 -
java深拷贝和浅拷贝
因为每个类直接或间接的父类都是Object,因此它们都含有clone()方法,但是因为该方法是protected,所以都不能在类外进行访问。要想对一个对象进行复制,就需要对clone方法覆盖。 一般步骤是(浅复制):被复制的类需要实现Clonenable接口(不实现的话在调用clone方法会抛出CloneNotSupportedException异常) 该接口为标记接口(不含任何方法)覆盖clo原创 2016-04-14 14:43:09 · 456 阅读 · 0 评论 -
JVM内存模型来解释多线程并发常见问题和volilate,final,ThreadLocal
多核CPU运行时,每个CPU都会有自己的Cache,同样jvm运行时,每个线程的私有栈在使用共享数据时,都会现将共享数据拷贝进栈顶进行运算,这份数据其实是副本,因此也同样存在多个线程修改一个内存单元的一致性问题。JVM有自己的一套内存模型(Java memory model,JMM)。JDK1.2开始有,JDK1.5(JSR-133)才逐渐成熟。JMM中将JVM内存分为“主存”和“工作内存”。原创 2016-04-08 11:35:17 · 2652 阅读 · 0 评论 -
springMvc
拦截器和过滤器的区别1.过滤器Filter依赖于Servlet容器,基于回调函数2.拦截器Interceptor依赖于框架容器,基于反射机制springMVC图示:mvc的核心思想是业务数据抽取同业务数据呈现相分离,程序分层,分工合作,相互独立又协同工作原创 2016-03-09 17:05:48 · 363 阅读 · 0 评论 -
Interceptor 拦截器 与 <mvc:annotation-driven />的冲突
最近在学习拦截器,没想到刚开始就碰到难题了。我明明配置好了拦截器,但是丝毫没有起作用,百思不得其解。这是起初的配置:?1234567891011121314151617181920转载 2016-03-25 17:21:32 · 3653 阅读 · 2 评论 -
线程基础
线程和进程的区别:线程是进程的执行单位,多线程之间可以共享一个进程资源,线程占用过多资源会使整个进程宕机,由于资源共享,现场之间会互相影响,进程之间通常不会。线程的的创建,都要通过java.lang.Thread类的start()方法,通常可以通过继承并扩展Thread原本的run()方法,或者实现Runnable接口的任务实体作为参数传入,线程是的启动是在调用Thread.start()时,这个原创 2016-04-07 11:12:54 · 378 阅读 · 0 评论 -
AOP
AOP:面向切面编程,通过预编译方式和运行期动态代理实现程序功能统一维护的一种技术原创 2016-03-14 10:17:08 · 436 阅读 · 0 评论 -
spring
spring 是一个开源框架,为解决企业应用开发的复杂性而创建的,现在已经不止应用于企业应用是一个轻量级的控制反转IOC和面向切面AOP 的容器框架从大小与开销两方面而言Spring都是轻量的通过控制反转的技术达到松耦合目的提供面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性开发包含并管理应用对象的配置和生命周期,这个意义上是一种容器将简单的组建配置原创 2016-03-14 09:44:29 · 361 阅读 · 0 评论 -
JAVA通信的三种I/O模型
BIO(阻塞IO),也就是传统的IO,在进行数据读取时,在数据准备好之前,线程一直挂起,而数据从准备好,需经过硬盘,OS内核(Kernel),JVM,这时一个漫长的过程,但是每一个SOCKET连接,都需要一个线程来监听,对于传输小数据的短连接问题还不大,如果是传输大数据的长连接,那就会有大量线程在系统中,非常浪费内存。java1.4版本出现 NIO(New IO),非阻塞型IO,由SocketCh原创 2016-04-06 15:36:13 · 1118 阅读 · 0 评论 -
jvm内存划分与GC工作机制
heap堆里的minor GC和full gc 在不断创建对象过程中Eden区会满,然后开始Young GC(minor GC),Young 空间第一次GC就是在Eden区找”活着的对象“,将这些对象拷贝到S0或S1其中一个区域,然后将Eden清空。第一次如果选了S0,第二次就会把Eden和S0里活着的对象拷贝到S1,然后开始Eden和S0清空。第三次就是将Eden和S1里活着的对象拷贝到S0原创 2016-04-05 17:07:37 · 491 阅读 · 0 评论 -
字节码增强和AOP
字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术。 应用场景:某一天系统出现OOM,通过工具分析,是莫各类的对象占用了很大空间,但是这个对象被许多程序访问,那么就很难找到,工程的全文匹配也只能找到自己的业务代码调用的地方,深入的反射,三方包调用无法匹配。这个时候AOP就可以帮助完成。 两种实现机制:一种是通过创建原始类的一个子类,也就是动原创 2016-04-05 14:58:57 · 4042 阅读 · 0 评论 -
工厂模式
1.什么情况下适合工厂模式有一组类似的对象需要创建在编码时不能预见需要创建哪种类的实例系统需要考虑扩展性,不依赖于产品实例如何被创建组合和表达的细节2.工厂模式的动机在软件系统中经常面临着对象的创建工作,由于需求的变化,这个对象可能随之也会变化,但它拥有比较文档的接口为此,我们需要提供一种封装机制来隔离这个易变对象的创建,保持系统中其他依赖该对象的对象不随着它变化而受影原创 2016-03-11 17:27:49 · 369 阅读 · 0 评论 -
从jvm编译优化角度解读String的赋值比较
下面是String对象赋值比较的例子:public class StringTest { static String a = "a"; static String b = "b"; static final String c = "a"; static String d = "a"+"b"; static String e = a+"b"; stat原创 2016-03-28 16:27:10 · 1219 阅读 · 2 评论 -
JAVA和计算机原理
计算机由CPU,DDR缓存,内存,硬盘组成。计算机的工作原理与编程语言的原理都是相通的。线程是进程(如JVM就是一个进程)的单位,进程间相互独立,进程可申请系统资源,同一进程的各线程间共享资源。某进程内的线程在其它进程不可见。目前CPU的基本单位是线程,JAVA也是基于多线程模式,当JAVA程序运行中一个线程使用资源过大,可能导致整个JVM进程挂掉,这种情况在多进程模型中不会发生,因为多进程模型原创 2016-03-30 16:01:48 · 753 阅读 · 0 评论 -
数字游戏和JAVA的一些坑
面试题,如何不用临时变量,让整型变量A和B的值互换。 一般有两种方式: 第一种用数据叠加后减回来 A=A+B; B=A-B; A=A-B; 第二中是异或运算,异或运算是按照二进制进行“异或”的,对于A.B两个数字,如果某个二进制位上都是0,或都是1,则返回0,不同返回1,这样得到一个新的数字,当这个数字在与A异或,就可以得到B,技巧是二进制位上的一个加法单不进原创 2016-03-29 17:38:32 · 546 阅读 · 0 评论 -
一些简单的算法
入门算法冒泡排序时间复杂度o(n²),空间复杂度o(1),最差的排序。快速排序,快速排序(Quicksort)是对冒泡排序的一种改进,排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想—-分治法也确实实用,方法的基本思想是: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.原创 2016-03-29 11:41:23 · 6407 阅读 · 0 评论 -
CAS机制
CAS,Compare and Swap, 翻译成比较并交换:有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 现代的CPU提供了特殊的指令,可以自动更新共享数据,而且能够检测到其他线程的干扰,而 compareAndSet() 就用这些代替了锁定。 拿出AtomicInteger来研究在没有锁的情况下是如何做到数据正确原创 2016-04-20 15:43:31 · 612 阅读 · 0 评论
分享