Java技能树之“常见面试题”(中)
常见的面试题如下:
八种基本数据类型的大小,以及他们的封装类
引用数据类型
Switch能否用string做参数
equals与==的区别
自动装箱,常量池
Object有哪些公用方法
HashMap数据结构是怎样的
HashMap是线程安全的吗如何实现线程安全的HashMap
HashMap可以动态扩容吗
HashMap的HashCode之类的问题
HashMap的Put原理
HashMap 和 Hashtable 有什么区别
集合了解过吗介绍一下集合的原理。
线程安全的集合都有哪些
集合的原理和实现
为啥要有HashCode,Hash计算是什么
链表如何扩容
Java的四种引用,强弱软虚,用到的场景
Hashcode的作用
HashMap的hashcode的作用
为什么重载hashCode方法?
ArrayList、LinkedList、Vector的区别
String、StringBuffer与StringBuilder的区别
Map、Set、List、Queue、Stack的特点与用法
HashMap和HashTable的区别
JDK7与JDK8中HashMap的实现
HashMap和ConcurrentHashMap的区别,HashMap的底层源码
ConcurrentHashMap能完全替代HashTable吗
为什么HashMap是线程不安全的
如何线程安全的使用HashMap
多并发情况下HashMap是否还会产生死循环
TreeMap、HashMap、LindedHashMap的区别
Collection包结构,与Collections的区别
try?catch?finally,try里有return,finally还执行么
Excption与Error包结构,OOM你遇到过哪些情况,SOF你遇到过哪些情况
Java(OOP)面向对象的三个特征与含义
Override和Overload的含义去区别
Interface与abstract类的区别
Static?class?与non?static?class的区别
java多态的实现原理
foreach与正常for循环效率对比
Java?IO与NIO
java反射的作用于原理
泛型常用特点
解析XML的几种方式的原理与特点:DOM、SAX
Java1.7与1.8,1.9,10 新特性
设计模式:单例、工厂、适配器、责任链、观察者等等
JNI的使用
AOP是什么
OOP是什么
AOP与OOP的区别
部分答案解析如下:
HashMap的hashcode的作用
hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的。
如果两个对象相同,就是适用于equals(java.lang.Object) 方法,那么这两个对象的hashCode一定要相同。
如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点。
两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”。
什么时候需要重写?
一般的地方不需要重载hashCode,只有当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才会重载hashCode,那么为什么要重载hashCode呢?
要比较两个类的内容属性值,是否相同时候,根据hashCode 重写规则,重写类的 指定字段的hashCode(),equals()方法。
为什么重载hashCode方法?
一般的地方不需要重载hashCode,只有当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才会重载hashCode,那么为什么要重载hashCode呢?
如果你重写了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么很可能某两个对象明明是“相等”,而hashCode却不一样。
这样,当你用其中的一个作为键保存到hashMap、hasoTable或hashSet中,再以“相等的”找另一个作为键值去查找他们的时候,则根本找不到。
为什么equals()相等,hashCode就一定要相等,而hashCode相等,却不要求equals相等?
1、因为是按照hashCode来访问小内存块,所以hashCode必须相等。 2、HashMap获取一个对象是比较key的hashCode相等和equal为true。
之所以hashCode相等,却可以equal不等,就比如ObjectA和ObjectB他们都有属性name,那么hashCode都以name计算,所以hashCode一样,但是两个对象属于不同类型,所以equal为false。
为什么需要hashCode?
1、通过hashCode可以很快的查到小内存块。 2、通过hashCode比较比equal方法快,当get时先比较hashCode,如果hashCode不同,直接返回false。
ArrayList、LinkedList、Vector的区别
List的三个子类的特点
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
Vector相对ArrayList查询慢(线程安全的)。
Vector相对LinkedList增删慢(数组结构)。
LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
Vector和ArrayList的区别
Vector是线程安全的,效率低。
ArrayList是线程不安全的,效率高。
共同点:底层数据结构都是数组实现的,查询快,增删慢。
ArrayList和LinkedList的区别
ArrayList底层是数组结果,查询和修改快。
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢。
- Redis如何实现分布式锁
- Redis的基本数据类型
- Redis的持久化是如何实现的
- Redis的使用场景
- Redis的雪崩,缓存穿透
- 布隆过滤器
- 如何实现Redis的高可用
- Redis的过期策略,重新设置值的时候是否会刷新过期时间
- 点赞
- 收藏
- 关注作者
评论(0)