感谢光临此博客,希望小编的博客能帮到您,如果对您有帮助,不要忘了👍,收藏,找不到了哦!
目录
五,ConcurrentHashMap的原理,jdk7.0与jdk8.0的区别
一,hashcode与equals是什么,有什么联系
hashcode :
hashcode方法是用来获取哈希码,也称为散列码,返回是一个int值,作用是确定该对象在哈希表的位置。定义在object.Java中,Java中任何类都存在hashcode方法
equals :
Java提供程序员定义对比二个对象是不是相等的方法,(一般情况下都需要程序员自己重写equals方法,设置比较规则,如果不重写,默认就是Object中的比较方法”就是 == 判断“,String的equals方法是重写过的)
联系:
哈希表来更加详细理解二者关系https://blog.csdn.net/weixin_47514459/article/details/121214140
当我们需要在hsahSet中添加数据时,hashcode方法是用来计算值,equals方法来判断该数据是否重复,重复则不添加。也出现了如下一些联系。
1,二个对象相等,则二个对象的hashcode一定相等。(二个hashcode相等,二个对象不一定相等,因为hashcode是通过规则计算出来的值,通过规则计算下值可能重复)
2,二个对象相等,则二个对象分别调用equals方法返回的是true.
3,因此equals方法被重写,则hashcode方法也必须重写。
4,hashcode方法默认是对堆中的对象产生索引值,如果没有重写hashcode方法,则这二个对象无论如何都不会相等(即使二个对象的指向相同的数据)
二,接口与抽象类的区别
1,抽象类存在普通的成员函数(有抽象方法,有实现方法),而接口则只能存在public abstract方法(只能有抽象方法)
2,抽象类的成员变量可以是各种类型的,而接口成员变量只能是public statis final 类型的 (静态常量)
2,抽象类只能继承一个,接口可以继承多个(很重要!!!)
(中高级程序员的回答)
接口的设计目的是对类进行约束,也就是提供一种机制,强制不同的类有这相同的行为。只对行为的有无进行约束,对行为的实现不关心。
接口是对行为的抽象:接口的核心是定义行为,也就是类可以做什么。至于类怎么做,接口不关心
抽象类的设计目的是代码的复用,当不同的类具有相同的行为时,并且一部分行为的实现一致时,可以把这些类都派生为一个类(这个类也被称为派生类),派生类来实现来一致行为的类,避免了其子类的实现,提高了代码的复用性(抽象类含有抽象方法,所以抽象类是不允许实例化)。
抽象类是对类本质的抽象:抽象类包含并实现子类的通用特性,将子类存在的差异特性,交给子类自己实现
三,重载与重写的区别
重载:
发生在同一个类中,方法名必须相同,参数不同,参数个数不同,顺序不同,方法返回值没有关系,访问修饰符可以不同,发生在编译时
public int add(int n){
}
public String add(int n){
//不是重载,编译时报错
}
重写:
发生在继承的子类当中,父类与子类的方法名,参数列表必须相同,当访问父类访问修饰符为private时,子类不能重写。返回值小于等于父类,抛出异常小于等于父类,访问修饰符范围大于等于父类
四,Hashmap与HashTable的区别,底层实现
区别
HashTable中每一个方法都加了central nice ,所以HashTable是线程安全的,Hashmap是线程不安全的。
Hashmap允许key与value为null,HashTable是不允许的
底层实现
HashMap: 数组+链表
jdk8.0后当链表达到8时,数组长度达到64时,链表会转换为红黑数。元素以内部类Node节点存在。
HashMap添加元素过程
1,计算key的hash值,二次计算hash值(hash值进行hash计算)对数组长度取模,对应数组的下标
2,如果没有产生hash冲突,直接常见node节点存入数组中
3,如果产生冲突,equals方法进行比较,相同则取代该元素,不同,则判断链表高度,当链表高度超过8,并且数组的长度到64,则转变为红黑树,长度低于6,红黑树转化回链表。
4,key值为null,储存在下标0位置。
五,ConcurrentHashMap的原理,jdk7.0与jdk8.0的区别
六,如何实现一个Spring的IOC容器
1,配置文件,配置包的扫描路径
2,递归包扫描获取.class文件
3,反射,确定需要交给IOC管理的类
4,对需要注入的类进行依赖注入
七,Java中的类加载器有哪些
JDK自带有三个类加载器: bootstrap ClassLoader、ExtClassLoader、AppClassLoader。
BootStrapClassLoader是ExtClassLoader的父类加载器,默认负责加载%JAVA_HOME%6lib下的jar包和class文件。(父类并不是继承关系,而是维护关系)
ExtClassLoader是AppClassLoader的父类加载器,负责加载%JAVA_HOME%/ib/ext文件夹下的jar包和class类。
AppClassLoader是自定义类加载器的父类,负责加载classpath下的类文件。(默认的系统类加载器,还是一个线程上下文加载器)
继承ClassLoader实现自定义类加载器
八,什么是字节码,有什么作用
在Java中,Java虚拟机(JVM)能够理解认识的代码就叫做字节码。不面向如何特定的处理器,只面向虚拟机。