java偏功能实现的面试题,教你如何做面霸( 二 )


介绍一下什么时候使用== 什么时候使用(>4)
==:比较的是地址也就是栈 。ps 或是一些常量放在方法区 。equals:比较的是值 , 也就是堆 。一般都是封装类型 。
说说int和(>4)
int:基本类型 , 放于方法区 , 使用==可以比较 。integer:封装类型 。使用equals比较 , 在对象传值时(非计算情况) , 一般建议使用integer , 因为integer有0与null可以表示不同含义
说说常用的工具类(>5)
commons包 , fastjson包等
描述一下集合类 list map hash的区别(>5)
collectioncollect为存储数据的集合类的顶级接口 。所以不能实例化 , 只能实现collection , 长度可变 , 集合为引用类型list和set是collection的实现类listlist有序 , 可以重复 , 可以为空 , 实现类有ArrayList、LinkedList 和 Vector 。linklist以链表的方式存储增删更快 , 线程不安全 , 效率高 。arraylist以数组的方式存储 , 查询更快  , 效率高 , 线程不安全 。vector线程安全 , 效率低 , 增长率为100% , 数据量较大的数据set不可以重复 , 无序 , treeset,hashset,linkhashset为set的实现类 。hashset 数据结构是哈希表,按照hash值排序 , 不存在重复值 , 通过hashcode和equals判断 。线程安全 , 存取快 。元素的哈希值是通过元素的hashcode方法 来获取的, HashSet首先判断两个元素的哈希值 , 如果哈希值一样 , 接着会比较equals方法 如果 equls结果为true  , HashSet就视为同一个元素 。如果equals 为false就不是同一个元素 。哈希值相同equals为false的元素是怎么存储呢,就是在同样的哈希值下顺延(可以认为哈希值相同的元素放在一个哈希桶中) 。也就是哈希一样的存一列 。treeset 可以自然排序 。不可重复 。LinkedHashSet 会保存插入的顺序mapmap是map的接口的实现类 , 为键值对的 , 包括hashmap,treemap,hashtable,linkedtreetablehashmap 且键唯一 , 键 值 可为空,线程不同步 。treeMap 可以对集合中的键进行排序LinkedHashMap 保存了记录的插入顺序hashtable key和value的值均不允许为null;它支持线程的同步 , 即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢 。线程安全问题linklist arraylist hashset linkhashset线程不安全vector hashtable为线程安全stringbuild为线程不安全 stringbuffer为线程安全ArrayXxx:底层数据结构是数组 , 查询快 , 增删慢LinkedXxx:底层数据结构是链表 , 查询慢 , 增删快HashXxx:底层数据结构是哈希表 。依赖两个方法:hashCode()和equals()TreeXxx:底层数据结构是二叉树 。两种方式排序:自然排序和比较器排序
在小公司 , 回答上这些已经非常好了 , 
使用什么比较数值(>7)
使用equals比较 , 但是-128-127之间 也可以使用==比较 , 因为直接使用了int (这个是重点考察哒)
介绍一下(>7)
在金额数值计算时使用 , 避免精度丢失
说说java内存模型(>8)
JVM就是java虚拟机 , 每一个JVM都包括堆 , 栈 , 本地方法栈、方法区 , 指令计数器及其他隐含寄存器 。堆:负责存储对象实例 。栈:存储基本类型和对象的引用 。方法区:存放着类的静态变量 , 常亮 , 类的信息等 。本地方法栈:与栈相类似 , 只不过存放的是方法 。