前言
时间过的好快呀,转眼马上到了金九银十,又是一年跳槽面试季,最近有很多网友都在求大厂面试题,希望可以提前准好面试,如果不准备充分的面试,完全是浪费时间,更是对自己的不负责。所以小编在这里给大家准备了一套Java技术岗面试真题,综合了今年上半年粉丝去阿里、字节、蚂蚁等互联网大厂的面试总结+小编整理的一起分享给大家,希望可以帮助大家,祝大家求职顺利。
一、Java基础专题面试
二、Java并发专题面试
三、Java框架专题面试
四、Java性能调优专题面试
五、分布式专题面试
六、数据库专题面试
七、微服务专题面试
八、中间件专题面试
面试真题获取地址:金九银十Java面试资料集锦!
一、Java基础专题面试
Java 基础,是进行 Java 开发的前提,同样也是最容易被忽视的基础点。在开发中总会有一些知识点,很基础的、很重要,就是在使用时,突然想不起来。针对,在开发过程中遇到这些痛点,我进行了 Java 基础知识的梳理。
I.Java基础
1、何为编程
编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。
2、面向对象和面向过程的区别
面向过程
优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发,性能是最重要的因素。
缺点: 没有面向对象易维护、易复用、易扩展
面向对象
优点: 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点: 性能比面向过程低
3、什么是Java
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
4、Java 语言有哪些特点
- 1.简单易学;
- 2.面向对象(封装,继承,多态);
- 3.平台无关性( Java 虚拟机实现平台无关性);
- 4.可靠性;
- 5.安全性;
- 6.支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);
5、jdk1.5之后的三大版本
6、关于 JVM JDK 和 JRE 最详细通俗的解答
7、创建一个对象用什么关键字?对象实例与对象引用有何不同?
8、抽象类能使用 final 修饰吗?
9、import java 和 javax 有什么区别
10、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
11、什么是反射机制?
12、static存在的主要意义
13、线程有哪些基本状态?
14、内部类相关,看程序说出运行结果
15、float f=3.4;是否正确
16、 Integer a= 127 与 Integer b = 127相等吗
17、抽象类和接口的对比
18、反射机制的应用场景有哪些?
19、Java应用程序与小程序之间有那些差别?
20、Java有哪些数据类型
21、 String有哪些特性
22、对象的相等与指向他们的引用相等,两者有什么不同?
23、字符型常量和字符串常量的区别
24、static的独特之处
25、在 Java 中定义一个不做事且没有参数的构造方法的作用
- super关键字的用法
27、Java 面向对象编程三大特性: 封装 继承 多态
28、String 类的常用方法都有那些?
29、String str="i"与 String str=new String(“i”)一样吗?
30、什么是方法的返回值?返回值在类的方法里的作用是什么?
31、一个类的构造方法的作用是什么 若一个类没有声明构造方法,该程序能正确执行吗 ?为什么?
32、 String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的
33、是否可以继承 String 类
34、Java 中的异常处理
35、创建一个对象用什么运算符?对象实体与对象引用有何不同?
36、重载和重写的区别
37、内部类有哪些应用场景
38、Java 应用程序与小程序之间有那些差别
39、什么是内部类?
40、 this关键字的用法
41、Java获取反射的三种方法
42、 final finally finalize区别
43、== 和 equals 的区别是什么
44、String 是最基本的数据类型吗
45、 构造方法有哪些特性
46、 静态变量与普通变量区别
47、 面向对象的特征有哪些方面
48、什么是Java程序的主类?应用程序和小程序的主类有何不同?
49、hashCode 与 equals(重要)
30、集合框架底层数据结构
50、import java和javax有什么区别
51、 一个类的构造方法的作用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为什么?
52、JDK 中常用的包有哪些
53、 Math.round(11.5) 等于多少?Math.round(-11.5)等于多少
54、 如何将字符串反转?
55、自动装箱与拆箱
56、Jdk和Jre和JVM的区别
57、final 有什么用?
58、构造器 Constructor 是否可被 override
59、内部类的分类有哪些
60、Oracle JDK 和 OpenJDK 的对比
61、 BIO,NIO,AIO 有什么区别?
62、 Java和C++的区别
63、 简述线程,程序、进程的基本概念。以及他们之间关系是什么
64、内部类的优点
65、 &和&&的区别
66、关于 final 关键字的一些总结
67、 java 中 IO 流分为几种?
68、在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?
69、 Java 有没有 goto
70、 反射机制优缺点
II.Java集合
Java 集合,面试必备,也是 Java 的核心 API,本文将从结构,实现及特性深入讲解各集合的特点。
1、Array 和 ArrayList 有何区别?
Array 可以存储基本数据类型和对象,ArrayList 只能存储对象。
Array 是指定固定大小的,而 ArrayList 大小是自动扩展的。
Array 内置方法没有 ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList有。
2、常用的集合类有哪些?
-
- Collection接口的子接口包括:Set接口和List接口
-
- Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及
- Properties等
-
- Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等
-
- List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等
3、Collection 和 Collections 有什么区别?
- java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。
- Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。
4、什么是链表
- 链表是可以将物理地址上不连续的数据连接起来,通过指针来对物理地址进行操作,实现增删改查等功能。
- 链表大致分为单链表和双向链表
链表的优点
- 插入删除速度快(因为有next指针指向其下一个节点,通过改变指针的指向可以方便的增加删除元素)
- 内存利用率高,不会浪费内存(可以使用内存中细小的不连续空间(大于node节点的大小),并且在需要空间的时候才创建空间)
- 大小没有固定,拓展很灵活。
链表的缺点
- 不能随机查找,必须从第一个开始遍历,查找效率低
5、为什么HashMap中String、Integer这样的包装类适合作为K?
6、ConcurrentHashMap 和 Hashtable 的区别?
7、如何边遍历边移除Collection中的元素?
8、HashMap在JDK1.7和JDK1.8中有哪些不同?HashMap的底层实现
9、集合和数组的区别
10、HashMap 与 HashTable 有什么区别?
11、集合的特点
12、 什么是Hash算法
13、使用集合框架的好处
14、comparable 和 comparator的区别?
15、多线程场景下如何使用 ArrayList?
16、HashMap的put方法的具体流程?
17、HashSet如何检查重复?HashSet是如何保证数据不可重复的?
18、为什么 ArrayList 的 elementData 加上 transient 修饰?
19、TreeMap 和 TreeSet 在排序时如何比较元素?Collections 工具类中的 sort()方法如何比较元素?
20、说一下 HashSet 的实现原理?
21、ConcurrentHashMap 底层具体实现知道吗?实现原理是什么?
22、Collection 和 Collections 有什么区别?
23、TreeMap 和 TreeSet 在排序时如何比较元素?Collections 工具类中的 sort()方法如何比较元素?
24、HashSet与HashMap的区别
25、lterator和Listlterator有什么区别?
26、哪些集合类是线程安全的?
27、Java集合的快速失败机制“fail-fast"?
28、能否使用任何类作为 Map 的 key?
29、HashMap为什么不直接使用hashCode()处理后的哈希值直接作为table的下标?
30、集合框架底层数据结构
31、如何实现 Array 和 List 之间的转换?
32、什么是集合
33、什么是TreeMap 简介
34、ArrayList和LinkedList的区别是什么?
35、 HashMap的扩容操作是怎么实现的?
36、如何实现数组和List之间的转换?
37、 List 和 Set 的区别
38、 什么是红黑树
39、HashMap是怎么解决哈希冲突的?
40、遍历一个List有哪些不同的方式?每种方法的实现原理是什么? Java中List遍历的最佳实践是什么?
41、说一下ArrayList的优缺点
42、ArrayList 和Vector的区别是什么?
43、lterator 怎么使用?有什么特点?
44、怎么确保一个集合不能被修改?
45、如何决定使用 HashMap 还是 TreeMap?
46、List,Set,Map三者的区别?
47、HashMap 的长度为什么是2的幂次方
48、插入数据时,ArrayList、LinkedList、Vector谁速度较快?阐述 ArrayListVector、LinkedList 的存储性能和特性?
49、HashMap 和 ConcurrentHashMap 的区别
50、迭代器lterator是什么?
51、说一下HashMap的实现原理?
52、如果使用Object作为HashMap的Key,应该怎么办呢?
50、不要忽略异常
1、Java异常关键字
- try – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
- catch – 用于捕获异常。catch用来捕获try语句块中发生的异常。
- fifinally – fifinally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有fifinally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果fifinally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
- throw – 用于抛出异常。
- throws – 用在方法签名中,用于声明该方法可能抛出的异常。
2、怎么确保一个集合不能被修改?
3、常见异常处理方式
直接抛出异常
- 通常,应该捕获那些知道如何处理的异常,将不知道如何处理的异常继续传递下去。传递异常可以在方法签名处使用 throws 关键字声明可能会抛出的异常。
private static void readFile(String filePath) throws IOException {
File file = new File(filePath);
String result;
BufferedReader reader = new BufferedReader(new FileReader(file));
while((result = reader.readLine())!=null) {
System.out.println(result);
}
reader.close();
}
4、lterator 怎么使用?有什么特点?
5、HashMap是怎么解决哈希冲突的?
6、List 和 Set 的区别
7、ArrayList和LinkedList的区别是什么?
8、声明异常
9、说一下HashMap的实现原理?
10、异常会影响性能
11、Java异常架构
12、HashMap的扩容操作是怎么实现的?
13、如何实现数组和List之间的转换?
14、类 ExampleA 继承 Exception,类 ExampleB 继承ExampleA。
15、对异常进行文档说明
16、Java常见异常有哪些
17、List,Set,Map三者的区别?
18、HashMap 的长度为什么是2的幂次方
19、Java异常简介
20、ArrayList 和Vector的区别是什么?
21、优先明确的异常
22、什么是集合
23、throw 和 throws 的区别是什么?
24、如何选择异常类型
25、不要使用异常控制程序的流程
26、NoClassDefFoundError 和 ClassNotFoundException 区别?
27、不要捕获 Throwable 类
28、运行时异常和一般异常(受检异常)区别是什么?
29、优先捕获最具体的异常
30、捕获异常
31、遍历一个List有哪些不同的方式?每种方法的实现原理是什么? Java中List遍历的最佳实践是什么?
32、说一下ArrayList的优缺点
33、如果使用Object作为HashMap的Key,应该怎么办呢?
34、插入数据时,ArrayList、LinkedList、Vector谁速度较快?阐述 ArrayListVector、LinkedList 的存储性能和特性?
35、什么是TreeMap 简介
36、使用描述性消息抛出异常
37、在 finally 块中清理资源或者使用 try-with-resource 语句
38、try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
39、不要记录并抛出异常
40、使用标准异常
41、final、finally、finalize 有什么区别?
42、包装异常时不要抛弃原始的异常
43、HashMap 和 ConcurrentHashMap 的区别
44、JVM 是如何处理异常的?
45、try-catch-finally 中哪个部分可以省略?
46、抛出异常
47、什么是红黑树
48、Error 和 Exception 区别是什么?
49、如何决定使用 HashMap 还是 TreeMap?
50、不要忽略异常
51、常见的 RuntimeException 有哪些?
52、迭代器lterator是什么?
IV.Linux面试题
1、 什么是CLI?
- 命令行界面(英语**:command-line interface**,缩写]:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面(CUI)。
- 通常认为,命令行界面(CLI)没有图形用户界面(GUI)那么方便用户操作。因为,命令行界面的软件通常需要用户记忆操作的命令,但是,由于其本身的特点,命令行界面要较图形用户界面节约计算机系统的资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。所以,图形用户界面的操作系统中,都保留着可选的命令行界面。