本人发现网上虽然有不少Java相关的面试题,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案。
1. JDK 和 JRE 有什么区别?
2. 说下你对== 和 equals 的认识,它们有什么差别?
对于==
篇幅限制下面就只能给大家展示小册部分内容了。包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题
需要全套资料及答案的在【翻到文章底部,点击名片】即可免费获取 备注:“CSDN”
对于equals 方法
3. 如果两个对象的 hashCode值一样,则它们用equals()比较也是为 true,是不是?
不是
4. 综合说下final的作用
5. Math.round(-2.5) 等于多少?
结果是-2,因为该函数在数轴上,表现是向右取整,由此 Math.round(1.3) = 2。
6. String 是基本数据类型吗?
String 不是基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而 String 是对象。
但说到这里,你要多说句。
7. 对字符串的都有哪些方法?详细说明下。
具体有String、StringBuffer和StringBuilder这三个类。
8. String str="abc"与 String str=new String(“abc”)的定义方法一样吗?
不一样,String str="abc"的方式,java 虚拟机会将其分配到常量池中;所以建议这种写法。
而 String str=new String(“abc”) 则会被分到堆内存中,如果再频繁修改,会导致内存碎片。
9. 如何将字符串反转?
使用 StringBuilder 或stringBuffer 的 reverse() 方法。
10. String 类的常用方法都有那些?
你面试时,说出其中的一两个即可,但需要说明如下的意思。
String s = “abc”;,这是常量,放常量池管理。
不建议频繁对String修改,因为会产生内存碎片。
如果要频繁对字符串修改,建议采用StringBuffer 和 StringBuilder
11. 抽象类必须要有抽象方法吗?
不需要的,抽象类不一定非要有抽象方法。但从面向对象思想角度来分析,不建议这样做。
因为在设计的时候,会把逻辑上存在但实际不存在的类设置成抽象类,比如动物类,毕竟不能直接展示“动物”。
正因为不存在,所以里面的方法未必能实现,比如“奔跑”方法,所以此类方法需要设置成没方法体的抽象方法。
如果在抽象类里方法,全都有方法体,那么要么是抽象类设计不当,或者实现了未必能实现的方法,所以建议修改。
12. 一般的类和抽象类有哪些区别?
13. 抽象类能使用 final 修饰吗?
首先说明,语法上不能,然后再进一步从面向对象思想角度来说明。
定义抽象类的本意是,让其它类继承的,从而进一步完善对象。如果定义为 final 该类就不能被继承,这样就会有矛盾,所以 final 不能修饰抽象类。
14. 接口和抽象类有什么区别?
上述是从语法上来归纳,然后建议大家再从面向对象思想的角度来说明
15. java 中 IO 流分为几种?
按功能来分可以分输入流(input)和输出流(output)。从类型来分可以是字节流和字符流。
16. BIO、NIO、AIO 有什么区别?
17. Files的常用方法都有哪些?
18. java 的集合容器都有哪些?
如下给出了大致的结构
19. Collection 和 Collections 有什么区别?
20. List、Set、Map 之间的区别是什么?
21. HashMap 和 Hashtable 有什么区别?
首先说,两者都是键值类的对象
22. 如何决定使用 HashMap 还是 TreeMap?
对于在Map中进行插入、删除和定位元素这类操作,可以选HashMap。但如果你要对一个有序的key集合进行遍历,需要选TreeMap。
篇幅限制下面就只能给大家展示小册部分内容了。包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题
需要全套资料及答案的在【翻到文章底部,点击名片】即可免费获取 备注:“CSDN”
23. 说一下 HashMap 的实现原理?
HashMap是基于数据结构里的散列表,在大数据情况下,能保证get的高效性。
HashMap不保证映射的顺序,特别是它不保证该顺序恒久不变。
HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
当向Hashmap对象里put元素时,会根据key的hashcode计算hash值,根据hash值得到这个元素在数组中的位置,如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。
注意Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn)