zoukankan      html  css  js  c++  java
  • java 面试题

    1 同步方法和同步代码块的区别是什么?

    答: 同步方法的锁是当前类的对象,同步代码块的锁可以自定义,同步方法锁的范围较大,对性能的影响比较大,因此代码中尽量用同步代码块。

    2 什么是死锁(deadlock)?

    答:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去

    3 Iterator和ListIterator的区别是什么?


    下面列出了他们的区别:
    Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
    Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
    ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

    4 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?

    快速失败:当你在迭代一个集合的时候,如果有另一个线程正在修改你正在访问的那个集合时,就会抛出一个ConcurrentModification异常。

        在java.util包下的都是快速失败。
    安全失败:你在迭代的时候会去底层集合做一个拷贝,所以你在修改上层集合的时候是不会受影响的,不会抛出ConcurrentModification异常。
        在java.util.concurrent包下的全是安全失败的。
     
    5 HashMap 的工作原理
      答 : HashMap的底层是用hash数组和单向链表实现的 ,当调用put方法是,首先计算key的hashcode,定位到合适的数组索引,然后再在该索引上的单向链表进行循环遍历用equals比较key是否存在,如果存在则用新的value覆盖原值,如果没有则向后追加。
     
    6.hashCode()和equals()方法的重要性体现在什么地方?
    Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个不同的键可能会有相同的hash值,因此,可能会被集合认为是相等的。而且,这两个方法也用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是至关重要的。
     
    7.数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
    1. Array可以包涵基本类型和对象类型,ArrayList只能包涵对象类型。
    2. Array大小是固定的,ArrayList的大小是动态变化的,
    3. ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
    对于基本数据类型,集合使用自动装箱来减少编码的工作量。但是当处理固定大笑的基本数据类型的时候这种方式相对比较慢。
     
    8.ArrayList和LinkedList有什么区别?
    ArrayList底层是数组,LinkedList底层是链表,ArrayList随机存取速度快,LinkedList插入和删除速度快
  • 相关阅读:
    Java基础教程:多线程杂谈——双重检查锁与Volatile
    LeetCode:打印零与奇偶数【1116】
    Java基础教程:多线程基础(6)——信号量(Semaphore)
    LeetCode:交替打印【1115】
    做一件事情的3个关键指标:兴趣、能力和回报
    做一件事情的3个关键指标:兴趣、能力和回报
    Retry模式
    Java技术——String类为什么是不可变的
    2017战略No.2:开始电子化记账
    2017战略No.2:开始电子化记账
  • 原文地址:https://www.cnblogs.com/interfacehwx/p/6415611.html
Copyright © 2011-2022 走看看