摘要:Java对象的复制三种方式 概述 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。例如下面程序展示的情况:
阅读全文
摘要:搭建轻量级Java Web框架 MVC(Model-View-Controller,模型-视图-控制器)是一种常用的设计模式,可以使用这个模式将应用程序进行解耦。 IOC 通过Controller注解来定义Controller类,在该类中,可通过Inject注解定义一系列Service成员变量,这就
阅读全文
摘要:Java并发 Java线程 线程的状态 新建(New) 创建后尚未启动。 可运行(Runnable) 可能正在运行,也可能正在等待CPU时间片 包含了操作系统线程状态中的Running和Ready 阻塞(Blocked) 等待获取一个排它锁,如果其他线程释放了锁就会结束此状态 无限期等待(Waiti
阅读全文
摘要:java集合提供的排序算法 Arrays.sort()排序算法 如果数组长度大于等于286且连续性好的话,就用归并排序,如果大于等于286且连续性不好的话就用双轴快速排序。如果长度小于286且大于等于47的话就用双轴快速排序,如果长度小于47的话就用插入排序。 Collection.sort()的排
阅读全文
摘要:线程池 线程池是什么? 线程池的概念是初始化线程池时在池中创建空闲的线程,一旦有工作任务,可直接使用线程池中的线程进行执行工作任务,任务执行完成后又返回线程池中成为空闲线程。使用线程池可以减少线程的创建和销毁,提高性能。 举个例子:我是一个包工头,代表线程池,手底下有若干工人代表线程池中的线程。如果
阅读全文
摘要:java多态的实现 Class 文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在 Class 文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址。这个特性给 Java 带来了更强大的动态扩展能力,使得可以在类运行期间才能确定某些目标方法的直接引用,称为动态连接,也有一
阅读全文
摘要:从操作系统的角度看java虚拟机的内存模型 Linux与进程内存模型 JVM以一个进程(Process)的身份运行在Linux系统上,了解Linux与进程的内存关系,是理解JVM与Linux内存的关系的基础。下图给出了硬件、系统、进程三个层面的内存之间的概要关系。 从硬件上看,Linux系统的内存空
阅读全文
摘要:java虚拟机 1.Java代码编译和执行的整个过程 Java 代码编译是由 Java 源码编译器来完成,流程图如下所示: Java 字节码的执行是由 JVM 执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制:Java源码编译机制、类加载机制、类执行机制 类
阅读全文
摘要:ThreadLocal ThreadLocal,直译为"线程本地"或"本地线程",如果你真的这么认为,那就错了!其实,它就是一个容器,用于存放线程的局部变量,我认为应该叫做 ThreadLocalVariable(线程局部变量)才对,真不理解为什么当初 Sun 公司的工程师这样命名。 早在 JDK
阅读全文
摘要:Proxy,也就是"代理"了。意思就是,你不用去做,别人代替你去处理。比如说:赚钱方面,我就是我老婆的 Proxy;带小孩方面,我老婆就是我的 Proxy;家务事方面,没有 Proxy。 它在程序开发中起到了非常重要的作用,比如传说中的 AOP(面向切面编程),就是针对代理的一种应用。此外,在设计模
阅读全文
摘要:Java中的HashMap低层实现原理 JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用位桶+链表+红黑树实现
阅读全文
摘要:Java中的synchronized以及读写锁 什么是同步? 在一个多线程的环境中,多个线程同时访问相同的资源的情况是存在的。例如,两个线程试图写入同一个文本文件。它们之间没有任何的同步,当两个或多个线程对同一文件具有写访问权时,写入该文件的数据可能会损坏。同理,在JVM中,每个线程在各自的栈上存储
阅读全文
摘要:AOP AOP(Aspect-Oriented Programming)这个东西,名字与 OOP 仅差一个字母,其实它是对 OOP 编程方式的一种补充,并非是取而代之。翻译过来就是"面向方面编程",可我更倾向于翻译为"面向切面编程"。它听起有些的神秘,为什么呢?当你看完这篇文章的时候,就会知道,我们
阅读全文
摘要:java:方法的虚分派(virtual dispatch)和方法表(method table) Java方法调用的虚分派 虚分配(Virtual Dispatch) 首先从字节码中对方法的调用说起。Java的bytecode中方法的调用实现分为四种指令: invokevirtual为最常见的情况,包
阅读全文
摘要:深入理解Java垃圾回收机制 垃圾回收机制的意义 java语言中一个显著的特点就是引入了java回收机制,是C++程序员最头疼的内存管理问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理。由于有个垃圾回收机制,java中的额外对象不在有"作用域"的概念,只有对象的引用才有"作用域"。
阅读全文
摘要:众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。 大 家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通
阅读全文
摘要:Java 注解 注解基础知识点 定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 作用分类: 编写文档:通过代码里标
阅读全文
摘要:java泛型 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] args){ List list=new ArrayList(); list.add("qqy
阅读全文
摘要:Java的反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 JAVA反射(反射)机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为
阅读全文