为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA基础面试题

标签:
Java

1.JDK和JRE有什么区别?

  • JDK:java Development Kit的简称,JAVA开发工具包,提供了java的开发环境和运行环境

  • JRE:java Runtime Environment的简称,java运行环境,java运行环境,为java的运行提供了所需环境

具体来说JDK其实包含了JRE,同时还包含了编译JAVA源码的编译器JAVAC,还包含了很多java程序调试和分析的工具。

Java语言经过编译,生成一种与平台无关的字节码(*.class文件)。必须使用Java解释器来解释执行(特定平台的机器码)。因此Java语言既是编译型语言,也是解释型语言。Java程序的执行过程必须经过先编译、后解释两个步骤。

2.==和equals的区别是什么?

(1)== 对于基本类型和引用数据类型==的作用效果是不同的,如下所示:

  • 基本类型:比较的是值是否相同

  • 引用类型:比较的是引用是否相同

(2)equals,本质上就是==,但是String和Integer等重写了equals方法,把它变成了值比较、

3.两个对象的hashCode()相同,则equals也一定为true对吗

  • 不对,两个对象的hashCode()相同,equals不一定为true。hashcode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等

4.final在JAVA中有什么作用?

  • final修饰的类叫最终类,该类不能被继承

  • final修饰的方法不能被重写

  • final修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改

5.String不属于基本数据类型

6.Java中操作字符串都有哪些类?它们之间有什么区别?

    操作字符串的类有:String、StringBuffer、StringBuilder

  • String声明的是不可变的对象,每次操作都会生成新的String对象,然后将指针指向新的String对象,而StringBuffer和StringBuilder可以在原有的对象基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String

  • StringBuffer和StringBuilder最大的区别在于,StringBuffer是线程安全的,而StringBuilder是非线程安全,但StringBuilder的性能却高于StringBuffer,所以在电线程的情况下推荐使用StringBuilder,多线程情况下推荐使用StringBuffer

7.String str="i"与String str=new String("i")一样吗?

  • 不一样,因为内存分配方式不一样.String str="i"的方式,Java虚拟机会将其分配到常量池中;而Stringstr=new String("i")则会分到堆内存中.

8.如何将字符串反转?

  • StringBuilder或者StringBuffer的reverse()方法

9.普通类和抽象类有哪些区别?

  • 普通类不能包含抽象方法,抽象类可以包含抽象方法

  • 抽象类不能直接实例化,普通类可以直接实例化

10.抽象类不能被final修饰

11.Java中Io分为几种?

  • 按照功能来分:输入流(input)和输出流(output)

  • 按类型来分:字节流和字符流

  • 字节流和字符流的区别是:字节流按8位传输以字节为单位输入输出数据,字符流按16位传输以字符单位输入输出数据

12.接口和抽象类什么区别?

  • 抽象类的子类使用extends来继承;接口必须使用implements来实现接口

  • 构造函数:抽象类可以有构造函数;接口不能有

  • 类可以实现多个接口 但是单继承

  • 访问修饰符:接口中的方法默认使用public修饰;抽象类中的方法可以是任意访问字符

  • 抽象类中可以有普通的成员变量;接口中的变量必须是static final类型的,必须被初始化,接口中只有常量,没有变量

  • Java8中接口会有default方法,即方法可以被实现

13.BIO、NIO、AIO有什么区别?

  • BIO:Block IO同步阻塞式IO,就是我们平常使用的传统IO,他的特点是模式简单使用方便,并发处理能力低

  • NIO:Non IO同步非阻塞IO,是传统IO的升级,客户端和服务器端通过Channel(通道)通讯,实现多路复用

  • AIO:Asynchronous IO是NIO的升级,也叫NIO2,实现了异步非阻塞IO,异步IO的操作基于事件和回调机制

集合

1.Collection和Collections有什么区别?

  • Collection是一个结合接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是它的子类,比如List,Set等

  • Collections是一个包装类,包含了很多静态方法,不能被实例化,就像一个工具类,比如提供的排序方法:Collections.sort(list)

2.List\set\map之间的区别:

  • list 元素有序  允许元素重复

  • set元素无序 TreeSet 有序  不允许元素重复

  • Map元素无序  TreeMap 是   key值必须唯一,value可以重复

3.HashMap和Hashtable有什么区别?

  • 存储:hashmap运行key和value为null,而Hashtable不允许

  • 线程安全:Hashtable是线程安全的,而Hashtable是非线程安全的

  • 推荐使用:在Hashtable的类的注释可以看到,Hashtable是保留类不建议使用,推荐在单线程环境下使用HashMap替代,如果需要多线程使用ConcurrentHashMap替代

4.如何决定使用HashMap还是TreeMap?

    对于在Map中插入、删除、定位一个元素这类操作,HashMap是最好的选择,因为相对而言HashMap的插入更快,但如果你要对一个key集合进行有序的遍历,那TreeMap是更好的选择。

5.说一下HashMap的实现原理:

    hashMap基于Hash算法是实现的,我们通过put(key,value)存储,get(key)来获取。当传入key时,HashMap会根据key.hashcode()计算出hash值,根据hash值将value保存在bucket里。当计算出的hash值相同时,我们称之为Hash冲突,HashMap解决Hash冲突的办法是链表加红黑树。当节点数量超过8时链表转换成红黑树

6.说一下HashSet的实现原理?

    HashSet是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,是通过组合基础类,通过调用基础类的方法,来复用基础类的能力。add方法的入参对应是put方法的key value是自定义的一个静态对象

7.ArrayList和Linked的区别是什么?

  • ArrayList是动态数据的数据结构结构实现,而LinkedList是双向链表的数据结构实现。

  • 随机访问速率:ArrayList比LinkedList在随机访问的时候效率要高

  • 增加和删除效率:在非首尾的增加和删除操作,LinkedList要比ArrayList要高,因为Arraylist增加删除要影响数据内的其他数据的下标

8.ArrayList和Vertor区别:

  • 线程安全:Vector使用了Synchronized来实现线程同步,是线程安全的,而ArrayList是非线程安全的

  • 性能:ArrayList在性能方面要优于Vector

  • 扩容:ArrayList和Vector都会根据实际的需要动态的调整容量,只不过在Vector扩容每次会增加一倍,而ArrayList之后增加百分之50

9.Array和ArrayList有什么区别:

  • Array可以存储基本数据类型和对象,ArrayList只能存储对象。

  • Array是指定固定大小的,而ArrayList大小是自动扩展的

  • Array内置方法没有ArrayList多,比如addAll、removeAll、。。。

10.在Queue中的Poll和remove有什么区别?

  • 相同点:都是返回第一个元素,并且在队列中删除返回的对象

  • 不同点:如果没有元素poll会返回null,而remove会直接抛出NoSuchElementException异常

11.哪些集合类是线程安全的?

  • Vector、Hashtable、Stack都是线程安全的,而像HashMap则是非线程安全的,不过JDK1.5之后随着Java.util.concurrent并发包的出现,他们也有了自己对应的线程安全类,比如Hashmap对应的线程安全类就是ConcurrentHashMap

12.迭代器Iterator是什么?

iterator接口提供遍历任何Collection的接口。

13. Iterator 和 ListIterator 有什么区别? 

Iterator 可以遍历 Set 和 List 集合,而 ListIterator 只能遍历 List。 

Iterator 只能单向遍历,而 ListIterator 可以双向遍历(向前/后遍历)。 

ListIterator 从 Iterator 接口继承,然后添加了一些额外的功能,比如添 加一个元素、替换一个元素、获取前面或后面元素的索引位置。




点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消