JavaSE一些简单面试题

1.HashMap数据存储的步骤

第一,使用put方法添加数据

第二,调用hashcode方法计算hash值以及位桶索引

第三,调用putval方法存储数据

第四,判断数组是否为空和数组长度是否为0。若是,则调用resize()方法创建数组;若不是,则判断改为同的数据是否为首节点,若不是则将数据存入作为首节点

第五,若不是将该位桶的链表数据进行遍历,用equals方法判断存储数据的key值与要存入数据的key值是否相同。若相同,则新数据将原来的重复数据覆盖;若不相等,则将新数据链接于链表末尾。

第六,判断数组中数据个数是否大于扩容阈值,若大于,则调用resize()方法进行扩容。

2.用什么方法可以在迭代集合的时候进行删除数据?

1)ListIterator迭代器中可以实现在迭代的同时对元素进行增删

2)for循环遍历的时候可以对集合中的元素进行增删

3.String,StringBuild,StringBuffer的区别?

第一,线程安全:String,StringBuffer线程安全,StringBuild线程不安全

第二,效率:StringBuild效率最高,StringBuffer次之,String效率最低

第三,是否可变:String不可变,StringBuffer和StringBuild可变

4.将一个自定义对象写入文件时的步骤及注意事项。

第一,序列化

5.ArrayList,LinkedList,Vector三者的区别。

第一,ArrayList和Vector两者都是以数组为底层结构的,所以查询效率较高,增删效率较低。但是Vector线程安全,ArrayList线程不安全。ArrayList初始容量为10,每次扩容为1.5倍,Vector初始容量为10,每次扩容为2倍。

第二,ArrayList和LinkedList两者后者底层结构为链表结构,所以增删效率高,查询效率低,而且会多一些有关首尾数据操作的方法,而ArrayList因为有索引,所以会有一些与索引相关的方法

6.堆和栈的相关介绍。

1)管理方式不同:栈由操作系统自动分配释放,无需手动操作;堆的申请和释放由程序猿控制,容易产生泄露。

2)空间大小不同:每个进程拥有的栈的大小要远远小于堆的大小。

3)生长方向不同:堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低

4)分配方式不同:堆是动态分配的,没有静态分配的堆。栈有两种分配方式:静态分配和动态分配。静态分配是由操作系统完成的,如局部变量的分配;动态分配由alloca函数分配,但是栈的动态分配和堆的动态分配不同,堆的动态分配是由操作系统进行释放,无需手动操作

5)分配效率不同:栈由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,所以栈的效率较高。堆则是由C/C++提供的库函数或运算符来完成申请与管理,实现机制较为复杂,频繁的内存申请容易产生内存碎片,所以堆的效率较低

6)存放内容不同:栈中存放函数返回地址,相关参数,局部变量和寄存器参数等,当主函数调用另外一个函数的时候,要对当前函数执行断点进行保存,需要使用栈来实现。堆一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序猿来填充的。

7.hashCode和equals方法重写的作用。

重写equals方法的作用:Object类中的equals方法默认为比较对象的引用地址是否相等,当方法经过重写后,则是判断对象中的内容是否相等

重写hashCode方法的作用:在集合中去重的时候,在equals方法比较之前再进行一次通过hash值是否相等的筛选,提高效率

重写equals()方法同时重写hashcode()方法,就是为了保证当两个对象通过equals()方法比较相等时,他们的hashCode值也一定要保证相等。

8.抽象类和接口的区别。

1)抽象类可以有构造方法,接口中不能有构造方法

2)抽象类中可以有普通成员变量,接口中没有普通成员变量

3)抽象类可以包含非抽象的普通方法,接口中所有方法必须是抽象的,不能有非抽象的普通方法

4)抽象类的子类必须重写父类的所有抽象方法,否则子类也为抽象方法

9.为什么在开发中不使用继承,而使用接口。

1)继承只有单继承,接口可以多实现

2)增强代码的可扩展性和规范性

3)提高了可维护性

4)实现解耦,降低耦合度

10.throw和throws的区别。

相同点:两者都用于抛出异常,只管抛出,由调用者进行处理

不同点:

1)throws用于方法头,表示的只是异常的声明,而throw用于方法内部,抛出的是异常对象

2)throws一次可抛出多个异常,而throw只能一个

3)throws抛出异常时,它的上级也要声明抛出异常或者捕获,不然编译报错。而throw的话,可以不声明不捕获(不负责的行为,不推荐),但编译不会报错

11.基本数据类型和包装类的作用

包装类的作用:1.作为和基本数据类型对应的引用数据类型存在,方便涉及到对象的操作;2.集合中只能存储引用数据类型的数据,所以方便存储;3.包装类型的初值为null,而基本数据类型的初值为有意义的数据,比如0,可以更好的阻断异常参数

基本数据类型的作用:有利于节省内存空间,使用简单方便

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值