fyzn12
RSS SITEMAP

Articles

  • Java基础篇

    JVM加载class文件的原理机制 JVM中类的装载是由类加载器(ClassLoader)和他的子类来实现的,java中的类加载器是一个重要的 java运行时系统组件,他负责在运行时查找和装入类文件中的类。 JDK和JRE的区别 * JDK :java development kit的简称,java开发的环境和运行环境 * JRE :java runtime environment的简称,java运行环境。 * 具体来说JDK其实包含了jre,如下图所示 同时还包含了编译java远吗的编译器javac,还包含了很多java调试和分析的工具。 ==和equals的区别 ==解读 对于基本类型和引用类型 == 的作用效果是不同的, * 基本类型:比较的是值是否相等 ; * 引用类型:比较的是引用是否相同; 如下代码 String x = "string"; String y = "string"; System.out.println(x==y); // true System.out.println(x==z); // false System.out.println(x.equals(y)); // true System.out.println(x.equals(z)); // true 因为x和y指向的是同一个“引用”,所以 == 是true,换句话说: == 是对引用类型作比较。 而new String()方法则重新开辟了内存空间,所以 == 比较的是两个不同的引用,== 比较的结果则为false。 而equals比较的是 “值” ,所以结果都为true。 equals解读 equals的本质就是 ==,只不过String和Integer等重写了equals的方法,把他变成了 " 值 的 比 较 " equals的源码如下 public boolean equals(Object obj){ return (this == obj); } 在没有重写equals方法时 equals就是==,他们比较的都是引用类型是否相等,而不是值是否相等; 如下代码可以很清晰的解释这一观点: class Cat { public Cat(String name) { this.
  • JVM

    jvm初学篇 1 JVM的启动流程 通过编辑器将java代码编辑好之后编译成java字节码,也就是.class文件; 装载JVM 会通过当前路径或者系统的版本去寻找 JVM.cfg文件; 通过JVM.cfg文件寻找到 JVM.dll文件 —该文件是JVM的具体实现; 初始化本地接口 JNI —如Env接口 JNI接口的作用就是负责将.class文件装载到JVM中; 找到main方法并执行 2 JVM的内存分区 1 PC寄存器 — 每个线程拥有一个PC寄存器 — 在线程创建时 创建(PC寄存器) — 指向下一条指令的地址 — 执行本地方法时,PC的值为undefined(未定义) 2 方法区 — 保存装载的类信息 类型的常量池 —– 这一点得注意 : 在JDK6时,String等常量信息是保存在方法区,但是在JDK7时,已经移到了堆; 字段、方法信息 方法字节码 — 线程共享 — 通常和永久区(Perm:保存一些相对来说静止稳定的数据)关联在一起 3 Java堆 — 和程序开发密切相关
  • JVM初始化初步理解

    要了解JVM首先得了解JVM如何创建,然后深入JVM的内存分析 首先java程序在执行时会被编译成java字节码即.class文件 ————>其次加载配置文件 jvm.cfg(会根据系统的版本去寻找该配置文件) ————>根据加载后的配置文件找到 jvm.dll文件,该文件是 jvm 的主要实现 ————> 初始化java本地接口JNI接口 ————> 找到main方法,执行程序 注意JNI的作用:当一个程序被编译成java字节码之后是保存在硬盘中,而JVM是如何从硬盘中找到该.class文件, JNI接口的作用就是将该.class文件装载到JVM中,然后才能找到main方法执行程序,所以JNI接口的作用 非常重要。 进而是如何装载.class文件的下面继续详细介绍 JVM 的思维导图如下图所示
  • Redis基础知识

    1 Redis的简介 1.1 了解什么是redis redis是一个开源的使用ANSI c语言编写、遵循BSA协议、支持网络、可基于内存亦可持久化的日志型、key-value数据库, 并提供多种语言的API。 他通常被称为数据结构服务器,因为值value可以是String、哈希(hash)、列表(list)、集合(sets)、和有序集合(sorted sets)等类型。 1.2 redis的特点 * Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 * Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 * Redis支持数据的备份,即master-slave模式的数据备份。 1.3 redis的优势 * 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 * 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。 * 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务, 即原子性,通过MULTI和EXEC指令包起来。 * 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。 1.4 Redis支持的数据类型 * string(字符串) * hash(哈希) * list(列表) * set(集合) * zset或sorted set(有序集合) 2 Redis 命令 2.
  • 几种结构

    数据结构的分析 1 队列 队列采用先进先出策略的集合类型,如图所示 1.1 队列的入队演示 如图将 89 添加到队列中,采用的是 : 在队列队尾添加,整个事件时间复杂度为O(1) 1.2 队列的出队演示 当队列收到出队的命令后,会将指针指向head,从而移除head的值,原先head值指向的下一个值变为head,整个事件时间复杂度为 O(1) 注意:java中还有先进先出队列,策略和基本队列相反,和下面的栈的策略相同 1.3 队列的总结,队列是采用先进先出的策略,添加元素时是在队尾添加,出队时是在队头移除或出队 2 链表 2.1 链表插入策略的演示 2.1.1 头插 2.1.2 尾插 2.1.3 中间任意部位插入 任意部位的插入首先要指定一个插入点,在插入过程中会先遍历插入点前面的元素,找到插入点元素 之后在修改插入点元素的指针,让其指向新增元素 3 栈 栈(stack)是操作受限的线性表,限定元素的插入和删除运算只能在表的一端进行,通常把进行插入删除的一端称作栈顶(top) 另一端称为栈底(bottom) 3.1 栈的五种运算 置空栈setnull(s):将栈s设置成空栈,即不管栈的原来状态如何一律置为空栈; 判断栈是否为空empty(s):返回一个布尔值,当栈为空时返回1,否则返回返回0; 进栈push(s,x):把元素x压入栈s中,成为新的栈顶元素; 出栈pop(s):该操作从栈顶弹出栈顶元素并返回,栈为空时返回NULL; 读栈顶元素gettop(s):返回栈顶元素,该操作栈的状态不变; 栈与队列的总结 栈可以形象的比喻为一个瓶子,先进的元素只能从瓶口进,然后往瓶底走,出的时候也只能从瓶口出,而后面进的元素往往先出 队列可以看成一条管道,该管道从bottom入,top出