Java SE面试题

java基础面试题

1、String类能被继承吗?
:不能,因为String是被final修饰的。

2、ArrayList和LinkedList的区别?
:1)ArrayList的底层相当于数组,LinkedList的底层相当于链表,所以前者查找速度更快,前者是时间复杂度是O(1),后者是O(n)。
2)LinkedList的更删改速度更快,因为他不需要像数组那样重新计算大小或更新索引
3)LinkedList更占内存,因为他的每一个节点都存储了两个引用,一个指向前一个元素,一个指向后一个元素

3、抽象类和接口的区别
:1)抽象类和接口都不能被实例化,但是抽象类中如果含有main方法是可以被调用的
2)一个类可以实现多个接口,但是只能继承一个抽象类
3)实现一个接口就必须实现接口中的所有方法,但是可以不实现抽象类中的所有方法
4)接口中的方法都没有方法体,抽象类中的方法可以有方法体

4、请你讲讲数组(Array)和列表(ArrayList)的区别?什么时候应该使用Array而不是ArrayList?
:1)Array可以包含基本数据类型和对象类型,ArrayList只能包含对象类型
2)Array的大小是固定不变的,ArrayList的大小是d动态变化的
3)ArrayList提供了更多的方法和特性,addAll(),removeAll()等
在处理基本数据类型并且大小固定的时候,Array的速度要比ArrayList快。

5、请你解释什么是值传递和引用传递?
:对基本数据类型而言,相当于传递的是该变量的一个副本,改变副本不会影响原变量,对于对象类型的变量而言,传递的是该对象地址的一个副本,对其进行操作会改变原对象。

6、请你解释为什么会出现4.0-3.6=0.40000001这种现象?
:计算机在进行10进制运算的时候会先将其转换为2进制进行运算,会出现一定误差。

7、方法的重载与重写的区别?
:1)方法的重载和重写都是java多态性的一个体现,但重载是编译时多态,重写是运行时多态。
2)重载是发生在同一个类中,重写发生在子类与父类之间
3)重载要求方法的参数列表必须不一样,返回类型可以不一样(但是不能通过返回类型来区分是否重载),也可以抛出新的异常,但是重写要求方法的返回类型和参数列表完全一样,并且访问修饰符不能小于父类的访问权限,也不能抛出比父类范围更广的异常。

8、 请你说明符号“==”比较的是什么?
: 对于基本数据类型,比较两边数值是否相等,对于对象类型,比较两个对象的内存引用是否完全相同(是否是同一个对象),是返回true,不是返回false。

9、Map接口有4个实现类,HashMap,TreeMap,Hashtable,LinkedHashMap
:1)HashMap是最常用的,线程不同步,速度比较快,最多允许key有一个null值,value可以有多个null值
2)TreeMap实现SortMap接口,能够把保存的记录根据键排序,默认是键的升序,也可以自定义排序比较器,当用Iterator进行遍历时,获得的记录是排序过的,当需要按自然顺序进行排序时用TreeMap比较好,当需要输出的顺序和输入的顺序一样用LinkedHashMap比较好
3)Hashtable是线程同步的,速度较慢,不允许key和value有null值。
4)LinkedHashMap是HashMap的一个子类,保存了记录的插入顺序,用Iterator遍历时先插入的先得到,速度比HashMap要慢,但是当HashMap的容量很大实际数据很小时LinkedHashMap速度可能更快,因为HashMap的速度取决于容量的大小,LinkedHashMap的速度取决于实际数据大小。

10、请你谈谈关于Synchronized和lock
: 1)Synchronized是java中的关键字,Lock是一个接口,当使用Synchronized修饰一个方法或一个代码块的时候,只允许最多有一个线程。
2) 当程序出现异常的时候,Sychronized会自动释放线程占有的锁,不会导致死锁,但是Lock需要调用unLock()方法来释放锁,不然可能会导致死锁,所以需要在finally中释放锁
3)Lock可以让等待中的线程中断,Sychronized不可以
4)Lock可以知道有没有成功获得锁,Sychronized不可以
11、请解释hashCode()和equals()方法有什么联系?
:1、相同的对象hashCode码一定相同,但是相同的hashCode码不一定是相同的对象,所以还需要equals()方法来确定
**12、**请解释Java中的概念,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
:1)当new一个对象时,构造函数会被调用,如果没有创建构造函数,java会自动创建一个无参构造。
2)构造函数重载和方法重载差不多,是参数列表不同的构造方法
3)java中不支持复制构造函数
13、六原则一法则
:1)单一责原则: 每一个类只做他该做的事,高内聚,低耦合
2)开闭原则:对扩展开房,对修改关闭,当需要增加新功能的时候,不需要修改原先代码,只用增加一个新的类就可以了。
3)合成聚合复用原则:优先使用合成或聚合关系,复用代码
4)迪米特法则:又叫最少知识原则,一个对象应对其他对象尽可能少的了解,再复杂的系统都可以对用户提供一个简单的门面
5)里氏替换原则:任何一个子类都可以随时替代它的父类
6)接口隔离原则:接口要小而专,不能大而全,也是高内聚,低耦合的体现
14、双亲委派机制的优点
:当一个类被加载的时候首先交给他的父类去加载,以此递归,如果父类可以完成加载则成功返回,否则再自己加载。
可以避免重复加载,并且形成了优先级层次关系,防止核心类库被修改。
15、请你谈谈StringBuffer和StringBuilder有什么区别,底层实现上呢?
:StringBuffer是线程安全的,StringBuilder是线程不安全的,后者效率更高,底层实现上StringBuffer多一个Sychronized修饰符
16、请列举你所知道的Object类的方法并简要说明。
:getClass()返回一个对象的运行时类,Object()默认构造方法,clone()创建并返回此对象的一个副本,wait()使当前线程进入等待,直到其他对象调用此对象的notify()或notifyAll()方法。finalize()是垃圾回收器调用的,释放资源,equals()判断此对象是否与某个对象相等,notify(),notifyAll()唤醒此对象监视器上等待的单个线程和全部线程
17、阐述ArrayList、Vector、LinkedList的存储性能和特性
:1)ArrayList和Vector底层都相当于数组,LinkedList底层相当于链表,所以前两者的查询速度会比后者快,时间复杂度分别是O(1)和O(n),但是Vector使用了Sychronized修饰符,使得线程安全,但是效率会比ArrayList差一点。
2)LinkedList的更删改速度更快,因为它不需要像数组那样重新计算大小或者更新索引
3)LinkedList更占内存,因为它每一个节点都存储了两个引用,一个指向前一个元素一个指向后一个元素。
4)使用如果遇到多个线程操作同一个容器时的场景,因为ArrayList和LinkedList是线程不安全的,可以使用工具类Collections的sychronizedList()方法将其转换成线程安全的容器后再使用
18、请你说说Iterator和ListIterator的区别?
:1)Iterator可以遍历List和Set集合,ListIterator只能遍历List集合
2)Iterator只能前向遍历,ListIterator可以前向也可以后向
3)ListIterator实现了Iterator接口,提供了更多的方法和特性,比如增加或替换元素,获取前一个元素和后一个元素等等。
19、什么是迭代器(Iterator)?
:迭代器提供了很多对集合进行迭代的迭代方法,每一个集合类都包括了可以返回迭代器实例的迭代方法,并且迭代器可以删除底层集合的元素,但是不能直接通过集合的remove()进行删除,可以调用迭代器的remove()方法进行删除
20、请说明ArrayList是否会越界?
:因为ArrayList是线程不安全的,当并发使用add()方法时,可能会越界
21、请说明Java集合类框架的基本接口有哪些?
:Collection:集合类的顶级接口,代表一组对象,每一个对象都是它的一个子元素
List:元素是有序的,可以包含重复元素,继承Collection接口
Set:元素是无序的,不能包含重复元素,继承Collection接口
Map:以键值对的形式存储元素,不继承Collection接口
22、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
:java虚拟机是可以执行java字节码文件的虚拟机进程,java源文件是被编译成字节码文件的,因为java虚拟机知道计算机底层硬件的执行命令的长度和其他特性,所以java是跨平台的,不需要开发者在每个平台都单独写一个
23、 JDK和JRE的区别是什么?
:JRE是java运行时环境,它包含了虚拟机,java核心类库和文件,但不包含编译器和调试器等,JDK是java完整的软件开发包,它包含了JRE和编译器调试器等。
24、什么是值传递和引用传递?
:值传递是对基本类型数据而言,传递的是该变量的一个副本,改变副本不会影响原变量
引用传递是对对象类型数据而言,传递的是该对象的地址的一个副本,并不是对象本身。
25、进程和线程的区别是什么?
:进程是正在执行着的应用程序,线程是进程内部的一个执行序列,一个进程可以包含多个线程,线程也被称作轻量级进程
26、创建线程有几种不同的方式?你喜欢哪一种?为什么?
:4种,继承Thread类,实现Runnable接口,实现Callable接口,用Excutor框架实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值