说明
本文分享Java后端真实高频面试题,有详细答案,保你稳过面试。题目包括:Java基础、多线程、JVM、数据库、Redis、Shiro、Spring、SpringBoot、MyBatis、MQ、ELK、SpringCloud、设计模式等。
包含从简单到困难、从高频到低频的题目,适合所有Java求职者,包括:应届生、转行的、三年以内经验的、三到五年经验的、五到十年经验的等。
你要跳槽时是否遇到过如下问题?
- 没有题库,不知道如何开始复习
- 有题库,但题目超级多,根本看不完
- 背完题库中的面试题了,却发现面试官的问题大部分都不在题库中,导致面试老是挂,拿不到offer
此套面试题的特点
这是一套真实、靠谱的题目。它的特点是:
- 很强大,面试官的问题基本都在这套题里(看过这套题的朋友都说,面试时85%以上的题目都在这些题目里,成为了offer收割机)
- 真实、靠谱(这套题是我在几十场面试中被面试官问到的问题)
- 精选、高频(数量合适,很快就能看完)
- 有难度和频率的标记(着急跳槽的可以只看频率为三颗星及以上的题目)
看过我这篇文章的几个朋友和同事参加了面试后跟我说,他们面试被问到的问题大部分(85%以上)都在这个文章里。
我在面试时经常会遇到这种情况:95%的题目在本文中,我对答如流,不知道面试官是否会怀疑泄题了。这些面试也都很稳地拿到了offer。
难度与频率
面试题采用五角星来评判题目的难度和被问到的频率,最高为五颗星。
如果是三年以上的经验,只看难度为三颗星及以上的题目即可。如果是一两年经验,看个人水平,水平好些的可以看一颗星到五颗星所有题目(我知道有这样的朋友:虽然经验少,但爱学习,一两年的经验拥有普通人四五年的技术能力)
基础(难度:★★★ 频率:★)
String
- String, StringBuffer, StringBuilder区别(难度:★ 频率:★★★)
- String对象数目(难度:★★★ 频率:★)
- intern方法的作用(难度:★★★ 频率:★)
- 如何修改String对象的数据?(难度:★★★ 频率:★★)
static
- static的5种用法(难度:★★ 频率:★)
- 为什么静态方法不能调用非静态方法和变量?(难度:★★★ 频率:★★★)
异常
- 异常类型(难度:★★ 频率:★★★★)
- catch里return了,finally是否执行?(难度:★★ 频率:★)
IO
- 字节流与字符流区别?(难度:★★ 频率:★★)
- BIO, NIO, AIO 区别?(难度:★★★ 频率:★)
JDK8
- JDK8新特性(难度:★★ 频率:★★)
- JDK8接口的default和static(难度:★★ 频率:★)
- JDK8 Stream API 流操作包括哪些部分?项目中怎么用的Stream?(难度:★★ 频率:★)
语法
- 项目中对泛型的使用(难度:★★ 频率:★★)
- 接口与抽象类的区别?(难度:★★ 频率:★)
类库
- SimpleDateFormat线程安全吗?怎么保证线程安全?(难度:★★★ 频率:★★★)
反射
- Java反射:forName和classLoader的区别(难度:★★★ 频率:★)
- 反射机制中可以获取private成员的值吗?(难度:★★★ 频率:★)
- 可以。法1.通过setter和getter获得 法2:通过Field类提供的set()和get()方法
- 另见《Java开发实战经典 第2版》=> 15.4 Java反射机制的深入应用
其他
- 拆箱与装箱(难度:★ 频率:★)
集合
List
- List与Set的区别(难度:★ 频率:★)
- ArrayList与LinkedList异同点?(难度:★ 频率:★★)
- List与数组的区别?(难度:★ 频率:★)
- ArrayList是否线程安全?如何线程安全地操作ArrayList?(难度:★★★ 频率:★★★★★)
- ArrayList扩容机制(难度:★★★ 频率:★★★★)
- List.subList的坑?(难度:★★ 频率:★)
- List如何安全删除(难度:★★ 频率:★)
- List如何去重?(难度:★ 频率:★★)
- List如何实现排序(难度:★ 频率:★★)
- 为什么引入迭代器?(难度:★★ 频率:★)
- List哪种遍历性能好,为什么?(难度:★★ 频率:★)
Map
1.HashMap、TreeMap、LinkedHashMap和区别?(难度:★★ 频率:★★★★★)
2.JDK8的HashMap和ConcurrentHashMap的改变?(难度:★★ 频率:★★★★)
3.HashMap数据结构、哈希冲突解决方法(难度:★★★ 频率:★★★★)
4.HashMap扩容的原理(难度:★★★ 频率:★★★★&#