java
文章平均质量分 62
qq_38071004
这个作者很懒,什么都没留下…
展开
-
Java 设计模式(五)适配器模式
一、简介 适配器模式主要用于将两个不适配的接口相结合,使得通过原有接口不用修改原有代码,就能用于新的接口需求(如现在客户提供一组接口来给我们实现,而我们原有的接口可以完成这个工作,但两个接口不匹配,此时可以使用适配器模式) 二、代码示例 要求: 一个插座需要一个三头的插头才能接通电源供电,而我们有一个两头的插头,要求写一个适配器使得两个头的插头可以使用。 插头接口及两头的插头: //三...原创 2018-02-09 17:34:56 · 207 阅读 · 0 评论 -
Java常用命令(一) jps、jstack、jmap
一、jps jps由jdk1.5提供,用于查看当前用户下的java进程的pid及基本信息 1、jps -help jps的帮助命令,可用jps -h代替: 2、jps -m 查看进程pid及main方法参数: 图中 5940 是我的eclipse进程;18648是jps进程,他的main方法参数就是-m;27800是我启动的hbuilder软件;47852是我运行的测试...原创 2018-07-11 18:03:39 · 10641 阅读 · 1 评论 -
Java数据结构(一)双端链表
一、介绍 双端链表需要链表中的每个节点持有一个前置节点和一个后置节点的引用及本身的值,链表中包含一个头节点和一个尾节点,这两个节点仅作标识使用,本身只含有对后置节点或前置节点的引用,不含值。如图所示 图中pre代表前置节点,next代表后置节点,val则是本身的值。 插入操作分析 如图所示: 做插入操作时,需要把当前节点前置节点指向原节点的前置节点,当前节点的后置节点指向原节...原创 2018-06-28 18:02:30 · 314 阅读 · 0 评论 -
Java数据结构(二)二叉查找树
一、描述: 二叉查找树是二叉树的一种,但它要求一个节点的左子节点小于该节点,右子节点大于该节点,因此二叉查找树里存储的值必须是可比较的。 二、代码实现: 以下是一些暴露的public方法,大多数都调用私有方法实现。 另外还有一个隐藏的嵌套节点类。 public class BinarySearchTree<T extends Comparable<? super T>&...原创 2018-07-05 15:36:31 · 184 阅读 · 0 评论 -
Java常用命令(二)jstat、javap
一、jstat jstat用于查看虚拟机各种状态信息。 通常格式为jstat -option pid [interval] [count]: option:功能选项,用于选择查看不同的状态信息; pid:进程号; interval:输出间隔时间; count:执行次数; 1、jstat -class pid 图中Loaded代表类装载数,Unloaded代表类卸载数,两个B...原创 2018-07-12 16:38:35 · 313 阅读 · 0 评论 -
Java的类加载机制
一、简介 Java的类加载就是JVM将.class文件加载到内存中,根据其二进制数据初始化类基本信息的过程。注:当编译完成后(执行javac后),将.class文件移除,如果程序中并未真正用到该类,或是仅声明未使用,如:Preson p;,则程序将正常运行,如果源程序中为Person p = new Person(),则程序将抛出ClassNotFoundException。这是因为在JVM加载...原创 2018-07-06 12:11:04 · 166 阅读 · 0 评论 -
Java编译与反编译
一、Java编译原理 Java 源代码编译执行的过程: 如图所示: 1、.java到.class的编译 第一行为java源程序编译为class文件的过程,其中,词法分析是将java文件一个字符一个字符读入,将其转换为标记序列,如:括号可以识别为一个标记,但该标记并不判断是否有与其匹配的括号。 语法分析则是分析程序语法是否正确,括号是否正确匹配,关键词书写的正确性,程序格式是否正确...原创 2018-07-27 16:34:01 · 1043 阅读 · 0 评论 -
String源码学习
简介 String 是 由 final 声明的一个不可被继承的类,其值在初始化后便不可更改。 属性 private final char value[]; private int hash; // Default to 0 value属性就是String类的核心,一个String字符串本质就是一个char类型的数组,另外hash属性则是用于比较的优化,后面的注释是指...原创 2018-08-13 16:59:17 · 208 阅读 · 0 评论 -
List 与 Set
一、简介 List 与 Set 是两个常用的容器接口,其中List的特点是有序,Set的特点是元素唯一。 常用的List实现有ArrayList、LinkedList、Vector。 常用的Set实现有HashSet、LinkedHashSet、TreeSet。 二、List实现 1、ArrayList: ArrayList底层由数组实现,因此查询效率很高,而对于插入删除操作,需要...原创 2018-08-31 16:55:39 · 328 阅读 · 0 评论 -
Java 自动拆装箱与缓存浅析
简介 自动拆装箱就是jvm隐式的将java中的基本数据类型与包装类型进行转换的过程,大大简化了我们的编码。 小例子: public class TestAutoUnpacking { public static void main(String[] args) { int i1 = 10; Integer i2 = 10; Intege...原创 2018-08-21 17:16:42 · 340 阅读 · 0 评论 -
JVM解释器与即时编译
1、解释器 JVM可以加载字节码即.class文件,然后边翻译边执行,因而被称为解释型编程语言(但是解释的过程就是编译一条机器码执行一条,且JVM中存在即时编译器编译热点代码,所以也被成为半解释半执行的编程语言) 2、即时编译(Jit) JVM中还存在着即时编译器优化代码执行,HotSpot中的即时编译器分为client模式与server模式,又称为c1、c2编译器(jdk1.7默认serv...原创 2018-07-04 17:58:45 · 869 阅读 · 0 评论 -
Java 垃圾回收
一、垃圾回收算法 1、引用计数: 每个对象每增加一个引用,则引用计数器加1,当计数为0时被判定为可回收对象,但对于循环引用无法处理。 2、标记清除: 从根对象开始标记所有可达对象,其余对象清除。但此时清除后的空间会产生大量内存碎片,如:a、b、c三块连续内存中,可能b被清除而a、c中有存活对象,则一些大对象的存储效率会降低。 根对象一般为方法区中的静态变量、常量以及方法栈的栈帧中局部变量...原创 2018-07-03 21:40:07 · 187 阅读 · 0 评论 -
Java 设计模式(一)观察者模式
一、简介: 观察者模式需要一个主题及多个观察者,当主题发生变化时,将变化的数据发送给每一个订阅了主题的观察者,由观察者处理数据。当主题与观察者发生变化时互不影响,可自行添加观察者,也可以为观察者自由更换注册的主题。 二、代码示例 定义观察者及主题的接口: //主题接口 interface ISubject{ //添加观察者 void addObserver(Observer原创 2018-02-05 17:08:23 · 180 阅读 · 0 评论 -
Java 设计模式(六)组合模式
一、简介 组合模式常用于含有多个集合,每个集合又可能含有子集和或者子元素的情况,如项目经理下可能有项目组长,项目组长下有普通程序员,而销售经理下可能只有业务人员(当然有的也有销售组长,举个例子而已)。 代码示例 要求: 1、公司结构有总经理–经理–组长–普通人员(仅用作简单例子,真正的结构更加复杂); 2、公司发布工作任务下去,如果当前人员有下属职员则分配到下级人员; 抽象职员类: ...原创 2018-02-11 11:51:56 · 123 阅读 · 0 评论 -
Java 设计模式(四)命令模式
一、简介 命令模式相对简单,只需要一个接收者持有命令接口,执行时直接调用命令本身的执行方法,我们只需要自己实现命令接口,将命令传给接收者,接收者就能自己执行。 二、代码示例 要求: 1、实现控制风扇的命令,风扇状态共四档,即关闭、低、中、高; 2、执行时风扇状态改变,撤销命令可以回到风扇上一个状态; 3、可扩展更多命令。 命令接口: public interface IComm...原创 2018-02-08 16:27:28 · 124 阅读 · 0 评论 -
Java 设计模式(二) 装饰者模式
一、简介 装饰者模式要求有一个被装饰对象及多个装饰者,每个装饰者与被装饰者实现同一个接口或有同一个超类,被装饰者持有一个装饰者对象,所有实现由持有对象完成,装饰者则在方法执行过程中增强方法实现(如:在方法执行前进行权限验证,在返回结果前进行加密处理等)。 二、代码示例 要求: 商家活动要求商品具有多种打折方式在不同节日使用: 1、满30元减5元,满50元减10元,满100元减3...原创 2018-02-05 22:08:46 · 116 阅读 · 0 评论 -
Java 设计模式(七)代理模式
一、简介 代理模式可以为实际对象创建一个代理,在对象的方法调用时,代理模式可以在方法调用前添加前置处理(比如权限验证),在结果返回前添加结果处理(比如加密),可以添加异常处理等等。。。总之用途十分广泛,java也为此提供了支持。 二、代码示例 要求: 1、设计一个人类,初始化姓名,拥有外出和回家两个方法; 2、通过代理模式为外出方法添加前置处理:出门前检查手机钱包; 3、通过代理模式为...原创 2018-02-12 12:09:41 · 248 阅读 · 0 评论 -
Java 设计模式(三)工厂模式
一、简介 工厂模式细分下有抽象工厂、抽象方法、简单工厂等等(这个不算一种设计模式,但也经常使用),它们的共同点就在于统一管理对象的创建,这样在修改时只需修改工厂类或工厂方法即可。 二、代码示例 要求(不要在意与上一节要求相同): 商家做活动要求有多种活动方案作为备选使用: 1、满30元减5元,满50元减10元,满100元减30元 2、满30元打9.5折,满50元打9折,满100元打8原创 2018-02-07 11:50:52 · 121 阅读 · 0 评论 -
JVM内存结构
jvm主要分三部分:堆、栈、方法区 一、栈 栈属于每个线程私有的,包含jvm栈和nativa栈和程序计数器,主要用来存储方法执行过程中需要的信息。 1、jvm栈与native栈 jvm栈与native栈功能相同,都是用于执行方法,区别在于jvm栈用于执行java中的方法函数,而nativa栈用于执行本地方法。 栈是由多个栈帧组成,即每个线程调用多个方法,产生对应的栈帧,栈帧结构主要有局部...原创 2018-06-25 10:13:53 · 125 阅读 · 0 评论 -
Java对象模型
简介 Java对象模型描述了java对象在JVM中的具体表现形式,在HotSpot(一种Java虚拟机)中使用了oop-klass 模型来实现了java对象在JVM中的存储。 一、oop Java创建出来的对象存于堆中,而这个对象具体分为三部分: _mark:存储对象的一些标记(如是否加锁,加锁次数) meta_data:存储指向元数据的指针 field:对象本身携带的数据 其中_m...原创 2018-06-29 17:35:32 · 1663 阅读 · 0 评论 -
Java内存模型
一、前置知识介绍 1、顺序一致性模型 一种计算机理论模型,要求程序必需按照顺序执行,多线程是保证所有线程(无论是否同步)能看到相同的执行顺序,每个操作具有原子性。如图所示: 两个线程的操作通过顺序一致性模型可能会按图中操作执行,总体执行顺序交叉,但对于每个线程自身的操作保持顺序一致,且每个线程都能看到相同的如图所示的执行顺序。 2、重排序 重排序是编译器、处理器对程序执行的优化,...原创 2018-06-28 12:01:18 · 139 阅读 · 0 评论 -
Mybatis 一级缓存与二级缓存(用例测试)
一级缓存: Mybatis 一级缓存作用域是一个sqlsession(缓存属于当前会话独享),即一次sqlsession从打开到关闭,这个过程中,重复的查询语句只执行一次,第一次查询会将结果放入一级缓存,sqlsession关闭之前,重复的查询语句将直接读取缓存。 当发生增删改操作时,在事务commit前会先清空sqlsession的缓存数据(此时清空的只是当前sqlsession的缓存,其他...原创 2018-09-14 16:40:38 · 797 阅读 · 1 评论