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

    1、请解释enum和Enum的区别?

    • enum:是从JDK1.5之后提供的一个关键字, 用于定于枚举类;
    • Enum:是一个抽象类,所有使用enum关键字定义的类就默认继承此类。

    2、请解释volatile与synchronized的区别?

    • volatile主要在属性上使用,而synchronized是在代码块和方法上使用的;
    • volatile无法描述同步的处理,它只是一种直接内存的处理,避免了副本的操作,而synchronized是实现同步的。

    3、抽象类与接口的区别?

      在实际开发中可以发现抽象类和接口的定义形式是非常相似的,这一点从JDK1.8开始实际上就特别明显了,因为从JDK1.8开始接口也可以定义default和static方法了,但是这两者依旧是有着明显的定义与使用区别的。

     

      当抽象类和接口都可以使用的情况下,优先考虑接口,因为接口可以避免子类的单继承 局限。另外从正常设计角度而言,也需要先从接口来进行项目的整体设计。

    4、请问ArrayList和LinkedList有什么区别?

    • ArrayList是数组实现的集合操作,而LinkedList是链表实现的集合操作;
    • 在使用List集合中的get()方法根据索引获取数据是,ArrayList的时间复杂度为1,而LinkedList的时间复杂度为n(n为集合长度);
    • ArrayList在使用的时候默认的初始化对象数组长度大小为10,如果空间不足则会采用倍数的形式进行容量扩充,如果保存大数据量的时候可能会造成垃圾的产生以及性能下降,但是这个时候可以使用LinkedList子类保存。

    5、请解释Collection.remove()与Iterator.remove()的区别?

    • 在进行迭代输出的时候如果使用了Collection.remove()则会造成并发更新异常,导致程序删除出错,而此时只能够利用Iterator.remove()方法实现正常的删除处理。

    6、PATH和CLASSPATH的区别?

    • PATH:是操作系统提供的路径配置,定义所有可执行程序的路径;
    • CLASSPATH:是由JRE提供的,用于定义Java程序解释是类加载路径,默认设置的为当前所在目录加载,可以通过“SET CLASSPATH=路径”的命令形式来进行定义;
    • 关系:JVM ——> CLASSPATH定义的路径 ——> 加载字节码文件。

    7、if和switch的区别?

    • if分支结构主要是针对于关系表达式进行判断处理的分支操作;代码中若有符合条件的,在执行完相应代码后其余 if 不会再判断执行;
    • switch是一个开关语句,它主要是根据内容来进行判断,且只能判断 int、char、枚举(JDK1.5)、String(JDK1.7)几种数据类型;若是满足条件的代码内没有写 break ,其余部分代码会继续执行。

    8、请解释String类两种对象实例化方式的区别?

    • 直接赋值:只会产生一个实例化对象,并且可以自动保存到对象池之中,以实现该字符串实例的重用;
    • 构造方法:会产生两个实例化对象,并且不会自动入池,无法实现对象重用,但是可以利用intern()方法手动入池处理。

    9、请解释String、StringBuffer、StringBuilder的区别?

    • String类是字符串的首选类型,其最大的特点是内容不允许修改;
    • StringBuffer与StringBuilder类的内容允许修改;
    • StringBuffer是在JDK1.0的时候提供的,属于线程安全的操作,而StringBuilder是在JDK1.5之后提供的,属于非线程安全的操作。

    10、在进行HashMap的put()操作的时候,如何实现容量扩充的?

    • 在HashMap类里面提供有一个"DEFAULT_INITIAL_CAPACITY"常量,作为初始化容量配置,而后这个常量的默认大小为16个元素,也就是说默认可以保存最大内容是16;
    • 当保存的内容的容量超过了阈值(DEFAULT_LOAD_FACTOR = 0.75f),相当于"容量 * 阈值 = 12"保存12个元素的时候就会进行容量的扩充;
    • 在进行扩充的时候HashMap采用的是成倍的库充模式。

    11、请解释HashMap的工作原理(JDK1.8之后开始的)?

    • 在HashMap之中进行数据存储的依然是利用了Node类完成的,这种情况下就证明可以使用的数据结构只有链表(时间复杂度“O(n)”)和二叉树(时间复杂度“O(logn)”);
    • 从JDK1.8开始,HashMap的实现出现了改变,因为其要适应大数据时代的海量数据问题,所以对于其存储发生变化,并且在HashMap类的内部出现了一个常量:static final int TREEIFY_THRESHOLD = 8,在使用HashMap进行数据保存的时候,如果保存的数据个数没有超过8,那么会按照链表的形式进行存储,如果超过了则会把链表转为红黑树以实现树的平衡,并且利用左旋与右旋保证数据的查询性能;

    12、请解释HashMap和Hashtable的区别?

    • HashMap中的方法都属于异步操作(非线程安全),HashMap允许保存有null;
    • Hashtable中的方法都属于同步方法(线程安全),Hashtable中的key和vaiue都不允许存null;

    13、如果在使用HashMap进行数据操作的时候出现了Hash冲突(Hash码相同),HashMap是如何解决的?

    • 当出现了Hash冲突之后为了保证程序的正常执行,会在冲突的位置上将所有的Hash冲突的内容转入链表保存;

    14、请解释throws和throw的区别?

    • throw是在代码块中使用的,主要是手工进行异常对象的抛出;
    • throws是在定义方法上使用的,表示此方法中可能产生的异常明确告诉给调用处,由调用处进行处理;
  • 相关阅读:
    转:高并发场景下强一致预算/库存扣减方案
    转:Dubbo性能调优参数及原理
    转:java线程状态说明,Jstack线程状态BLOCKED/TIMED_WAITING/WAITING解释
    使用增强学习法之SQ3R主动阅读
    建立实用投资计划
    使用smarty方法实现目标
    主动学习
    小知识
    大脑的处理模式
    真正的随笔
  • 原文地址:https://www.cnblogs.com/lee-yangyaozi/p/10361856.html
Copyright © 2011-2022 走看看