java基础-常见面试题

Posted lj1507899927

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础-常见面试题相关的知识,希望对你有一定的参考价值。

  1. 动态代理基于什么原理?谈谈java反射机制。
    • 代理模式是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个真实对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。
    • 反射机制是java 语言提供的一种基础功能,赋予程序在运行时自省的能力。通过反射我们可以直接操作类或对象,比如获取某个对象的类定义,获取类声明的属性和方法,

      调用方法或者构造对象,甚至可以运行时修改类定义。

    •  动态代理是一种方便运行时动态构建代理、动态处理代理方法调用的机制,很多场景都是利用类似的机制做到的,比如用来包装RPC调用、面向切面编程(AOP)。

      反射,是引用运行时的自省能力,赋予了java语言意外的活力,通多运行时操作元数据或对象,java可以灵活的操作运行时才能确定的信息,而动态代理则是一种在开发中应用广泛的技术,很多繁琐的重复编程都可以被动态代理优雅的解决。

  2. 比较 Vecter、ArrayList、LinkebList 的区别?
    • 三者都实现了集合框架中的List,也就是所谓的有序集合,因此功能比较相近,比如都提供按位置进行定位、添加、删除的操作,都提供便利器以遍历其内容等。

    •  Vector 是java 早期提供的线程安全的动态数组,如不需要考虑线程安全不推荐使用,毕竟同步是有额外的开销的。Vector 内部使用对象数组保存数据,可以根据需要自动的增加容量,当数组已满时,会创建新的数组,并拷贝原有的数组数据。

    •  ArrayList 是应用广泛的动态数组实现,本身不是线程安全的 ,性能好很多,与Vector 相似,Arraylist也可根据需要扩展容量,两者调整逻辑的区别是:Vector 扩容提高一倍,Arraylist 则提高50%。

    •  LinkedList 是java的双向链表 ,所以不需要像上面的那样扩容,他也不是线程安全的。

    •  不同容器适合的场景:

      •  Vector和ArrayList 作为动态数组,其内部元素以数组形式顺序存储的,所以非常适合随机访问的场合。除了尾部插入和删除元素,往往性能会相对较差,比如我们在中间位置插入一个元素,需移动后续所有元素。

      •  而linkedList 进行节点插入、删除高效很多,但是随机访问性能要比动态数组慢。

  3. 比较 Hashtable、HashMap、TreeMap 的不同?谈谈你对HashMap的掌握。
    • 都实现了Map接口,存储的内容是基于key-value的键值对映射,一个映射不能有重复的键,一个键最多只能映射一个值。

    •  Hashtable 早期的java类库提供的哈希表的实现,本身是同步的,不支持null 键和值,由于同步的开销,很少推荐使用。初始化的时候时,HashTable在不指定容量的情况下的默认容量是11,且不要求底层数组的容量一定要为2的整数次幂。HashMap默认的容量为16,且要求容量一定为2的整数次幂。

    •  HashMap 应用广泛的哈希表的实现,行为上大致与Hashtable 一致,主要区别在于HashMap 不同步,支持null 键和值,通常情况下,Hashmap 进行 put(),get()方法,可以达到常数时间的性能,他是绝大部分利用键值对存取场景的首选。

    •  TreeMap 则是基于红黑树的一种提供顺序访问的Map,和Hashmap 不同,他的get、put、remove操作都是O(log(n))的时间复杂度,具体顺序有Comparator 决定。

    •  HashMap的总结:HashMap基于哈希思想,实现对数据的读写。当键值对被传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,然后找到bucket位置来存储对象。当获取对象的时候,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap通过链表来解决碰撞问题,当碰撞发生时,对象将会储存在链表的下个节点中.HashMap在每个链表节点中储存键值对对象。当两个不同的键对象的hashcode相同时,它们会储存在同一个bucket位置的链表中,这时候就需要通过equals()方法来找到键值对。

以上是关于java基础-常见面试题的主要内容,如果未能解决你的问题,请参考以下文章

面试题Redis篇-常见面试题p1

面试题Redis篇-常见面试题p1

Java基础知识 | 常见面试题(上):基本数据类型

Java基础常见面试题总结(上)

Java基础常见面试题总结(下)

Java 并发基础常见面试题总结