前言
时间过的好快呀,转眼马上到了金九银十,又是一年跳槽面试季,最近有很多网友都在求大厂面试题,希望可以提前准好面试,如果不准备充分的面试,完全是浪费时间,更是对自己的不负责。所以小编在这里给大家准备了一套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)那么方便用户操作。因为,命令行界面的软件通常需要用户记忆操作的命令,但是,由于其本身的特点,命令行界面要较图形用户界面节约计算机系统的资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。所以,图形用户界面的操作系统中,都保留着可选的命令行界面。
2、 什么是硬链接和软链接?
3、Error 和 Exception 区别是什么?
4、 什么是LILO?
5、 请问当用户反馈网站访问慢,你会如何处理?
6、 简单 Linux 文件系统?
7、 Linux的基本组件是什么?
8、包装异常时不要抛弃原始的异常
9、 BASH和DOS之间的基本区别是什么?
10、什么是TreeMap 简介
11、什么是Linux
12、什么是红黑树
13、 Windows和Linux的区别
14、如何决定使用 HashMap 还是 TreeMap?
15、不要忽略异常
16、Unix和Linux有什么区别
17、 基本命令
18、 Linux 使用的进程间通信方式?
19、 一台 Linux 系统初始化环境后需要做一些什么安全工作?
20、 什么是BASH?
21、 Linux 有哪些系统日志文件?
22、 Linux系统安装多个桌面环境有帮助吗?
23、 开源的优势是什么?
24、 什么叫 CC 攻击?什么叫 DDOS 攻击?
25、 Linux 的体系结构
26、 如何规划一台 Linux 主机,步骤是怎样?
27、 什么是GUI?
28、 什么是交换空间?
29、使用描述性消息抛出异常
30、 Linux 的目录结构是怎样的?
31、不要记录并抛出异常
32、如何选择 Linux 操作系统版本?
33、 Linux系统缺省的运行级别?
34、 GNU项目的重要性是什么?
35、常见的 RuntimeException 有哪些?
36、 什么是root帐户
37、 Linux 性能调优都有哪几种方法?
38、final、finally、finalize 有什么区别?
39、 RAID 是什么?
40、JVM 是如何处理异常的?
41、try-catch-finally 中哪个部分可以省略?
42、 什么是 inode ?
43、使用标准异常
44、在 finally 块中清理资源或者使用 try-with-resource 语句
45、 什么是网站数据库注入?
46、try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
47、什么是Linux 内核?
48、抛出异常
49、迭代器lterator是什么?
50、 Shell 脚本是什么?
51、HashMap 和 ConcurrentHashMap 的区别
52、 Linux 开机启动过程?
V.Git命令
1、删除远端仓库
2、基于当前分支创建新分支
3、删除已合并到 master 分支的所有本地分支
4、临时任务处理完后继续之前的工作
5、将仓库内所有变更都加入到暂存区
6、新建带备注标签
7、查看本地和远端分支
8、用图示显示所有分支的历史
9、将 A 分支合入到 B 分支中且为 merge 创建 commit
10、查看所有 stash
11、将指定文件添加到暂存区
12、某文件各行最后修改对应的 commit 以及作者
13、查看变更情况
14、当前仓库配置
15、比较某文件工作区和 HEAD 的差异
16、将 A 分支基于 B 分支做 rebase,以便将 B 分支合入到 A 分支
17、将当前目录及其子目录下所有变更都加入到暂存区
18、比较暂存区和 HEAD 的所有差异
19、比较工作区和暂存区的所有差异
20、基于某个 commit 创建分支
21、删除当前仓库配置
22、查看涉及到某文件变更的所有 commit
23、查看 global 配置
24、删除 global 配置
25、查看已有标签
26、将当前分支基于 B 分支做 rebase,以便将B分支合入到当前分支
27、查看当前工作分支及本地分支
28、删除一个本地标签
29、删除一个远端标签
30、查看哪些文件没被 Git 管控
31、将工作区指定文件恢复成和暂存区一致
32、推送一个本地标签
33、取回某次 stash 的变更
34、新建标签
35、当前分支各个 commit 用一行显示
36、用 difftool 比较任意两个 commit 的差异
37、基于指定分支创建新分支
38、将暂存区指定文件恢复成和 HEAD 一致
39、给指定的 commit 打标签
40、推送全部未推送过的本地标签
41、将暂存区和工作区所有文件恢复成和 HEAD 一样
42、全局配置
43、显示就近的 n 个 commit
44、优雅修改最后一次 commit
45、将远端所有分支和标签的变更都拉到本地
46、创建并切换到该分支
47、比较某文件暂存区和 HEAD 的差异
48、查看远端分支
49、比较某文件工作区和暂存区的差异
50、创建 commit
51、添加远端仓库
52、安全删除本地某分支
53、查看当前仓库配置
54、切换到指定分支
55、将未处理完的变更先保存到 stash 中
56、将 A 分支合入到当前分支中且为 merge 创建 commit
57、重命名远端仓库
58、删除远端 origin 已不存在的所有本地分支
59、查看所有远端仓库
60、强行删除本地某分支
VI.设计模式
1、在 Java 中,为什么不允许从静态方法中访问非静态变量?
2、Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
3、什么是设计模式?你是否在你的代码里面使用过任何设计模式?
4、在 Java 中,什么叫观察者设计模式(observer design pattern)?
5、设计一个 ATM 机,请说出你的设计思路?
6、在 Java 中,什么时候用重载,什么时候用重写?
7、请列举出在 JDK 中几个常用的设计模式?
8、举一个用 Java 实现的装饰模式(decorator design pattern)?它是作用于对象层次还是类层次?
9、使用工厂模式最主要的好处是什么?在哪里使用?
10、举例说明什么情况下会更倾向于使用抽象类而不是接口?
VII.网络编程
4、为什么要对网络协议分层
5、计算机网络体系结构
6、 什么是TCP/IP和UDP
7、 TCP与UDP区别:
8、 TCP和UDP的应用场景:
9、 形容一下TCP和UDP
10、 运行在TCP 或UDP的应用层协议分析
11、什么是ARP协议 (Address Resolution Protocol)?
12、什么是NAT (Network Address Translation, 网络地址转换)?
13、从输入址到获得页面的过程?
14、 TCP的三次握手
15、 用现实理解三次握手的具体细节
16、 建立连接可以两次握手吗?为什么?
17、 可以采用四次握手吗?为什么?
18、 第三次握手中,如果客户端的ACK未送达服务器,会怎样?
19、 如果已经建立了连接,但客户端出现了故障怎么办?
20、 初始序列号是什么?
21、 用现实理解三次握手的具体细节TCP的四次挥手
22、 为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手(CLOSE_WAIT状态意义是什么)?
23、 如果第二次挥手时服务器的ACK没有送达客户端,会怎样?
24、 客户端TIME_WAIT状态的意义是什么?
25、 什么是Socket
26、 socket属于网络的那个层面
27、 Socket通讯的过程
28、什么是Http协议?
29、Socket和http的区别和应用场景
30、什么是http的请求体?
31、http的响应报文有哪些?
32、http和https的区别?
33、HTTPS工作原理
34、一次完整的HTTP请求所经历几个步骤?
35、Http协议中有那些请求方式
36、GET方法与POST方法的区别
37、http版本的对比
38、什么是对称加密与非对称加密
39、cookie和session对于HTTP有什么用?
40、什么是cookie
41、什么是session
42、cookie与session区别
二、Java并发专题面试
【需要完整答案可以查看文末领取哦!】
I.多线程
1、启动线程方法 start()和 run()有什么区别?
只有调用了 start()方法,才会表现出多线程的特性,不同线程的 run()方法里面的代码交替执行。如果只是调用 run()方法,那么代码还是同步执行的,必须等待一个线程的 run()方法里面的代码全部执行完毕之后,另外一个线程才可以执行其 run()方法里面的代码。
2、Java 实现线程有哪几种方式?
- 继承 Thread 类实现多线程
- 实现 Runnable 接口方式实现多线程
- 使用 ExecutorService、Callable、Future 实现有返回结果的多线程
3、用 Java 实现阻塞队列。
这是一个相对艰难的多线程面试问题,它能达到很多的目的。第一,它可以检测侯选者是否能实际的用 Java 线程写程序;第二,可以检测侯选者对并发场景的理解,并且你可以根据这个问很多问题。如果他用 wait()和 notify()方法来实现阻塞队列,你可以要求他用最新的 Java 5 中的并发类来再写一次。
4、Java 中你怎样唤醒一个阻塞的线程?
这是个关于线程和阻塞的棘手的问题,它有很多解决方法。如果线程遇到了 IO 阻塞,我并且不认为有一种方法可以中止线程。如果线程因为调用 wait()、sleep()、或者 join()方法而导致的阻塞,你可以中断线程,并且通过抛出 InterruptedException 来唤醒它。我之前写的《How to deal with blocking methods in java》有很多关于处理线程阻塞的信息。
5、你将如何使用 threaddump?你将如何分析 Thread dump?
6、线程池启动线程 submit()和 execute()方法有什么不同?
7、什么是重入锁?
8、一个线程运行时发生异常会怎样?
9、线程同步需要注意什么?
10、线程 yield()方法有什么用?
11、violatile 关键字的作用?
12、什么是乐观锁和悲观锁?
13、常用的几种线程池并讲讲其中的工作原理。
14、Java 中的 volatile 关键是什么作用?怎样使用它?在 Java 中它跟 synchronized 方法有什么不同?
15、你如何在 Java 中获取线程堆栈?
16、Jdk 中排查多线程问题用什么命令?
17、在 Java 中 CycliBarriar 和 CountdownLatch 有什么区别?
18、多线程同步有哪几种方法?
19、什么是守护线程?有什么用?
20、Java 中堆和栈有什么不同?
21、 为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法?
22、为什么 wait 和 notify 方法要在同步块中调用?
23、线程数过多会造成什么异常?
24、线程和进程的区别是什么?
25、什么是 CAS 算法?在多线程中有哪些应用。
26、现在有 T1
27、线程怎样拿到返回结果?
28、为什么 wait/notify/notifyAll 这些方法不在 thread 类里面?
29、什么是不可变对象,它对写并发应用有什么帮助?
30、Hashtable 的 size()方法为什么要做同步?
31、怎么控制同一时间只有 3 个线程运行?
32、说说线程安全的和不安全的集合。
33、用 Java 编程一个会导致死锁的程序,你将怎么解决?
34、用 Java 写代码来解决生产者——消费者问题。
35、什么是自旋锁?
36、什么是原子操作,Java 中的原子操作是什么?
37、ThreadLocal 是什么?有什么应用场景?
38、线程之间如何传递数据?
39、什么是原子性
40、Fork/Join 框架是干什么的?
41、为什么要使用线程池?
42、什么是活锁
43、一个线程的生命周期有哪几种状态?它们之间如何流转的?
44、Runnable 和 Thread 用哪个好?
45、Java 中 notify 和 notifyAll 有什么区别?
46、ReadWriteLock 有什么用?
47、FutureTask 是什么?
48、什么是死锁?如何避免死锁?
49、在 Java 中 Lock 接口比 synchronized 块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?
50、同步方法和同步块,哪种更好?
II.Java并发编程
1、 synchronized 和 volatile 的区别是什么?
2、 为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?
当一个线程需要调用对象的 wait()方法的时候,这个线程必须拥有该对象的锁,接着它就会释放这个对象锁并进入等待状态直到其他线程调用这个对象上的 notify()方法。同样的,当一个线程需要调用对象的 notify()方法时,它会释放这个对象的锁,以便其他在等待的线程就可以得到这个对象锁。由于所有的这些方法都需要线程持有对象的锁,这样就只能通过同步来实现,所以他们只能在同步方法或者同步块中被调用。
3、 如何在两个线程间共享数据?
一般来说,共享变量要求变量本身是线程安全的,然后在线程内使用的时候,如果有对共享变量的复合操作,那么也得保证复合操作的线程安全性。
4、 为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
5、 synchronized 和 Lock 有什么区别?
6、既然提到可以通过配置不同参数创建出不同的线程池,那么Java中默认实现好的线程池又有哪些呢?请比较它们的异同。
7、你刚才提到获取对象的锁,这个“锁”到底是什么?如何确定对象的锁?
8、 为什么要使用并发编程
9、 并发队列和并发集合的区别:
10、 线程池中 submit() 和 execute() 方法有什么区别?
11、 如何避免线程死锁
12、 什么是重排序
13、 并发关键字 synchronized ?
14、 线程和进程区别
15、 你是如何调用 wait() 方法的?使用 if 块还是循环?为什么?
16、 用过ConcurrentHashMap,讲一下他和HashTable的不同之处?
17、 原子类的常用类
18、请谈谈ThreadLocal是怎么解决并发安全的?
19、 Thread 类中的 yield 方法有什么作用?
20、 notify() 和 notifyAll() 有什么区别?
21、 finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?
22、 synchronized可重入的原理
23、 怎么判断并发队列是阻塞队列还是非阻塞队列
24、JVM对Java的原生锁做了哪些优化?
25、 常用并发列队的介绍:
26、 Java 中你怎样唤醒一个阻塞的线程?
27、如何让Java的线程彼此同步?你了解过哪些同步器?请分别介绍下。
28、 什么是ThreadPoolExecutor?
29、 什么叫线程安全?servlet 是线程安全吗?
30、 单例模式了解吗?给我解释一下双重检验锁方式实现单例模式!”
31、 Java中垃圾回收有什么目的?什么时候进行垃圾回收?
32、 创建线程的四种方式
33、请对比下volatile对比Synchronized的异同。
34、 什么是 CAS
35、 常用的并发工具类有哪些?
36、 volatile 能使得一个非原子操作变成原子操作吗?
37、 多线程应用场景
38、 说一下 Atomic的原理?
39、 Java 程序中怎么保证多线程的运行安全?
40、 乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
41、请谈谈volatile有什么特点,为什么它能保证变量对所有线程的可见性?
42、 CopyOnWriteArrayList 的使用场景?
43、 如果你提交任务时,线程池队列已满,这时会发生什么
44、 线程 B 怎么知道线程 A 修改了变量
45、 Java 中 ConcurrentHashMap 的并发度是什么?
46、 Java 中怎么获取一份线程 dump 文件?你如何在 Java 中获取线程堆栈?
47、 并发编程有什么缺点
48、 说说自己是怎么使用 synchronized 关键字,在项目中用到了吗
49、 线程类的构造方法、静态块是被哪个线程调用的
50、 线程池有什么优点?
III.Java虚拟机
1、类加载器双亲委派模型机制?
当一个类收到了类加载请求时,不会自己先去加载这个类,而是将其委派给父类,由父类
去加载,如果此时父类不能加载,反馈给子类,由子类去完成类的加载。
2、深拷贝和浅拷贝
- 浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,
- 深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,
- 浅复制:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。
- 深复制:在计算机中开辟一块新的内存地址用于存放复制的对象。
3、简述Java垃圾回收机制
在 java 中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。
4、你能给我详细的介绍Java堆吗?(重点理解)
5、说一下JVM运行时数据区
6、Java会存在内存泄漏吗?请说明为什么?
7、堆栈的区别是什么?
8、简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。
9、MinorGC
10、能不能解释一下本地方法栈?
11、对象什么时候可以被垃圾器回收
12、详解JVM内存模型
13、堆里面的分区:Eden,survival(from+to),老年代,各自的特点。
14、GC是什么?为什么要GC
15、JVM的GC收集器设置
16、你听过直接内存吗?
17、java类加载过程?
18、说说你知道的几种主要的JVM参数
19、强引用
20、常用的JVM调优的参数都有哪些?
21、JVM垃圾回收算法有哪些?
22、Jdk和Jre和JVM的区别
23、我们开发人员编写的Java代码是怎么让电脑认识的
24、能不能解释一下方法区
25、怎么打出线程栈信息。
26、GC的三种收集方法:标记清除
27、SafePoint是什么
28、为什么新生代要分Eden和两个Survivor区域?
29、GC收集器有哪些?CMS收集器与G1收集器的特点。
30、知道垃圾收集系统吗?
31、垃圾回收器的原理是什么?有什么办法手动进行垃圾回收?
32、什么是JVM字节码执行引擎
33、什么情况下会发生栈内存溢出。
34、详细的介绍下程序计数器?(重点理解)
35、JVM调优的参数可以在那设置参数值
36、简述java类加载机制?
37、说一下类装载的执行过程?
38、JVM内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作内存。
39、你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。
40、类加载的几个过程:
三、Java框架专题面试
【需要Java突击面试题可以↓滑到文末领取哈!】
I.开源框架
1、Spring IOC 如何实现
-
Spring 中的 org.springframework.beans 包和 org.springframework.context 包构成了Spring 框架 IoC 容器的基础。
-
BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContex 接口对 BeanFactory(是一个子接口)进行了扩展,在 BeanFactory 的基础上添加了其他功能,比如与 Spring 的 AOP 更容易集成,也提供了处理 messageresource 的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对 Web 应用的WebApplicationContext。
-
org.springframework.beans.factory.BeanFactory 是 Spring IoC 容器的具体实现,用来包装和管理前面提到的各种 bean。BeanFactory 接口是 Spring IoC 容器的核心接口。
2、说说业务中,Netty 的使用场景
- 构建高性能、低时延的各种 Java 中间件,例如 MQ、分布式服务框架、ESB 消息总线等,Netty 主要作为基础通信框架提供高性能、低时延的通信服务;
- 公有或者私有协议栈的基础通信框架,例如可以基于 Netty 构建异步、高性能的WebSocket 协议栈;
- 各领域应用,例如大数据、游戏等,Netty 作为高性能的通信框架用于内部各模块的数据分发、传输和汇总等,实现模块之间高性能通信
3、Spring MVC 运行流程
- 1.spring mvc 将所有的请求都提交给 DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作。
- 2.DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的 Controller.
- 3.DispatcherServlet 请请求提交到目标 Controller
- 4.Controller 进行业务逻辑处理后,会返回一个 ModelAndView
- 5.Dispathcher 查询一个或多个 ViewResolver 视图解析器,找到 ModelAndView 对象指定的视图对象
- 6.视图对象负责渲染返回给客户端。
4、为什么选择 Netty
- API 使用简单,开发门槛低;
- 功能强大,预置了多种编解码功能,支持多种主流协议;
- 定制能力强,可以通过 ChannelHandler 对通信框架进行灵活的扩展;
- 性能高,通过与其它业界主流的 NIO 框架对比,Netty 的综合性能最优;
- 成熟、稳定,Netty 修复了已经发现的所有 JDK NIO BUG,业务开发人员不需要再为NIO 的 BUG 而烦恼;
- 社区活跃,版本迭代周期短,发现的 BUG 可以被及时修复,同时,更多的新功能会被加入;
- 经历了大规模的商业应用考验,质量已经得到验证。在互联网、大数据、网络游戏、企业应用、电信软件等众多行业得到成功商用,证明了它可以完全满足不同行业的商业应用。
- 正是因为这些优点,Netty 逐渐成为 Java NIO 编程的首选框架。
5、Netty 内部执行流程
6、Spring Bean 的生命周期
7、Spring 事务实现方式
8、Spring 事务底层原理
9、TCP 粘包/拆包的解决办法
10、原生的 NIO 在 JDK 1.7 版本存在 epoll bug
11、如何自定义注解实现功能
12、Spring 的单例实现原理
13、Netty 线程模型
14、Spring AOP 实现原理
15、说说 Spring AOP
16、说说 Netty 的零拷贝
17、Spring MVC 启动流程
18、Spring 框架中用到了哪些设计模式
19、什么是 TCP 粘包/拆包
20、动态代理(cglib 与 JDK)
21、BeanFactory 和 ApplicationContext 有什么区别
II.Mybatis面试
1、通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
3、MyBatis编程步骤是什么样的?
- 1、 创建SqlSessionFactory
- 2、 通过SqlSessionFactory创建SqlSession
- 3、 通过sqlsession执行数据库操作
- 4、 调用session.commit()提交事务
- 5、 调用session.close()关闭会话
4、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
答:Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 Mybatis 在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为半自动 ORM 映射工具。
5、Xml映射文件中,除了常见的select|insert|update|delete标签之外,还有哪些标签?
注:这道题出自京东面试官。
还 有 很 多 其 他 的 标 签 , 加 上 动 态 sql 的9 个 标签,trim|where|set|foreach|if|choose|when|otherwise|bind等 , 其 中 为sql片段标签,通过标签引入 sql 片段,为不支持自增的主键生成策略标签。
6、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
7、Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
8、Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别?
9、传统JDBC开发存在什么问题?
10、Mybatis是如何进行分页的?分页插件的原理是什么?
11、IBatis和MyBatis在核心处理类分别叫什么?
12、IBatis和MyBatis在细节上的不同有哪些?
13、Hibernate和MyBatis的区别
14、Mybatis如何执行批量操作
15、{}和${}的区别
16、Mybatis中如何指定使用哪一种Executor执行器?
17、MyBatis的框架架构设计是怎么样的
18、简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系?
19、Mybatis是否可以映射Enum枚举类?
20、Mybatis比IBatis比较大的几个改进是什么?
21、Mapper编写有哪几种方式?
22、MyBatis实现一对一有几种方式?具体怎么操作的?
23、在mapper中如何传递多个参数
24、ORM是什么
25、简述Mybatis的插件运行原理,以及如何编写一个插件。
26、MyBatis是什么?
27、简述Mybatis的插件运行原理,以及如何编写一个插件?
28、Mybatis执行批量插入,能返回数据库主键列表吗?
29、如何获取自动生成的(主)键值?
30、MyBatis的功能架构是怎样的
31、MyBatis里面的动态Sql是怎么设定的?用什么语法?
32、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?
33、Mybatis优缺点
34、Mybatis的一级、二级缓存
35、JDBC编程有哪些不足之处,MyBatis是如何解决的?
36、讲下MyBatis的缓存
37、为什么需要预编译
38、Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不?
39、什么是MyBatis的接口绑定,有什么好处?
40、Mybatis中如何执行批处理?
41、Mybatis都有哪些Executor执行器?它们之间的区别是什么?
42、当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定pojo?
43、请说说MyBatis的工作原理
44、使用MyBatis的mapper接口调用时有哪些要求?
45、MyBatis与Hibernate有哪些不同?
46、Mybatis映射文件中,如果A标签通过include引用了B标签的内容,请问,B标签能否定义在A标签的后面,还是说必须定义在A标签的前面?
47、resultTyperesultMap的区别?
48、Mybatis能执行一对多,一对一的联系查询吗,有哪些实现方法
49、在mapper中如何传递多个参数?
四、Java性能调优专题面试
I.Netty
1、IO多路转接(I/Omultiplexing)
2、了解哪几种序列化协议?
3、线程池解决多线程BIO编程会出现的问题
4、如何选择序列化协议?
5、阻塞BIO(blockingI/O)
6、异步AIO(asynchronousI/O)
7、IO基本操作讲解
8、非阻塞NIO(noblockingI/O)
9、使用Netty实现网络通信
10、信号驱动IO(signalblockingI/O)
11、TCP粘包/拆包的原因及解决方法?
12、在了解不同的IO之前先了解:同步与异步,阻塞与非阻塞的区别
13、BIO和NIO、AIO的区别
14、什么是IO
15、NIOEventLoopGroup源码?
16、什么Netty
17、什么是内核空间
18、BufferedReader属于哪种流,它主要是用来做什么的,它里面有那些经典的方法
19、在实现序列化接口是时候一般要生成一个serialVersionUID字段,它叫做什么,一般有什么用
20、什么是NIO
21、什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作
22、NIO的组成?
23、Netty的高性能表现在哪些方面?
24、BIO编程会出现什么问题?
25、使用NIO实现网络通信
26、多线程解决BIO编程会出现的问题
27、Netty的零拷贝实现?
28、网络操作IO讲解
29、Netty的线程模型?
30、IO流的分类
31、怎么生成SerialversionUID
32、Netty的特点?
33、什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多少,各有什么区别
34、IO的常用类和方法,以及如何使用
35、为什么图片、视频、音乐、文件等都是要字节流来读取
36、五种IO模型
37、BIO、NIO和AIO的区别?
38、什么是BIO
39、Java中流类的超类主要有那些?
40、什么是AIO
41、网络操作IO编程演变历史
II.Nginx
1、请列举Nginx的一些特性
- Nginx 服务器的特性包括:
- 反向代理/L7 负载均衡器
- 嵌入式 Perl 解释器
- 动态二进制升级
- 可用于重新编写 URL,具有非常好的 PCRE 支持
2、请解释你如何通过不同于80的端口开启Nginx?
为了通过一个不同的端口开启 Nginx,你必须进入/etc/Nginx/sitesenabled/,如果这是默认文件,那么你必须打开名为“default”的文件。编辑文件,并放置在你想要的端口:
3、Nginx静态资源?
静态资源访问,就是存放在nginx的html页面,我们可以自己编写
4、请解释ngx_http_upstream_module的作用是什么?
ngx_http_upstream_module 用于定义可通过 fastcgi 传递、proxy 传递、uwsgi传递、memcached 传递和 scgi 传递指令来引用的服务器组。
5、限流怎么做的?
6、什么是正向代理和反向代理?
7、location的语法能说出来吗?
8、Nginx应用场景?
9、请列举Nginx服务器的最佳用途
10、解释如何在Nginx中获得当前的时间?
11、为什么要用Nginx?
12、什么是Nginx?
13、解释如何在Nginx服务器上添加模块?
14、在Nginx中,如何使用未定义的服务器名称来阻止处理请求?
15、如何用Nginx解决前端跨域问题?
16、请陈述stub_status和sub_filter指令的作用是什么?
17、Nginx配置文件nginx.conf有哪些属性模块?
18、在Nginx中,解释如何在URL中保留双斜线?
19、为什么Nginx性能这么高?
20、漏桶流算法和令牌桶算法知道?
21、怎么限制浏览器访问?
22、用Nginx服务器解释-s的目的是什么?
23、请解释Nginx如何处理HTTP请求
24、Nginx怎么做的动静分离?
25、Nginx目录结构有哪些?
26、Nginx负载均衡的算法怎么实现的?策略有哪些?
27、请解释什么是C10K问题?
28、解释Nginx是否支持将请求压缩到上游?
29、使用“反向代理服务器”的优点是什么?
30、location的作用是什么?
31、Nginx的优缺点?
32、请解释是否有可能将Nginx的错误替换为502错误、503?
33、请列举Nginx和Apache之间的不同点
34、Nginx怎么处理请求的?
35、使用“反向代理服务器的优点是什么?
36、Nginx怎么判断别IP不可访问?
37、请解释Nginx服务器上的Master和Worker进程分别是什么?
38、Nginx配置高可用性怎么配置?
39、为什么要做动静分离?
40、Nginx虚拟主机怎么配置?
41、Rewrite全局变量是什么?
III.Tomcat
1、内存调优
2、Tomcat一个请求的完整过程
Ng:(nginx) upstream yy_001{
server 10.99.99.99:8080;
server 10.99.99.100:8080;
hash $**;
healthcheck_enabled;
healthcheck_delay 3000;
healthcheck_timeout 1000;
healthcheck_failcount 2;
healthcheck_send 'GET /healthcheck.html HTTP/1.0' 'Host: wo.com' 'Connection: close';
}
server {
include base.conf;
server_name wo.de.tian;
... location /yy/ {
proxy_pass http://yy_001; }
首先 dns 解析 wo.de.tian机器,一般是ng服务器ip地址
然后 ng根据server的配置,寻找路径为 yy/的机器列表,ip和端口
最后 选择其中一台机器进行访问—->下面为详细过程
-
- 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
-
- Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
-
- Engine获得请求localhost/yy/index.jsp,匹配它所拥有的所有虚拟主机Host
-
- Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为
- 该Engine的默认主机)
-
- localhost Host获得请求/yy/index.jsp,匹配它所拥有的所有Context
-
- Host匹配到路径为/yy的Context(如果匹配不到就把该请求交给路径名为”“的Context去处理)
-
- path=”/yy”的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
-
- Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
-
- 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet
- 或doPost方法
- 10)Context把执行完了之后的HttpServletResponse对象返回给Host
- 11)Host把HttpServletResponse对象返回给Engine
- 12)Engine把HttpServletResponse对象返回给Connector
- 13)Connector把HttpServletResponse对象返回给客户browser
3、tomcat容器是如何创建servlet类实例?用到了什么原理?
当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在servlet注册时加上如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。
4、专业点的分析工具有
IBM ISA,JProfiler、probe 等,具体监控及分析方式去网上搜索即可
5、添加 JMS 远程监控
6、关于 Tomcat 的 session 数目
7、监视 Tomcat 的内存使用情况
8、Tomcat 有几种部署方式?
9、监视Tomcat的内存使用情况
10、关于Tomcat的session数目
11、Tomcat工作模式?
12、共享 session 处理
13、tomcat 有哪几种 Connector 运行模式(优化)?
14、Tomcat 工作模式?
15、Tomcat的缺省端口是多少,怎么修改?
16、Tomcat 的缺省端口是多少,怎么修改?
17、共享session处理
18、垃圾回收策略调优
19、Tomcat 一个请求的完整过程
20、Tomcat有几种部署方式?
21、添加JMS远程监控
22、tomcat 如何优化?
23、tomcat 容器是如何创建 servlet 类实例?用到了什么原理?
24、打印类的加载情况及对象的回收情况
25、tomcat 有哪几种Connector 运行模式(优化)?
IV.悲观锁于乐观锁
1、只能保证一个共享变量的原子操作
CAS 只对单个共享变量有效,当操作涉及跨多个共享变量时 CAS 无效。但是从 JDK 1.5 开始,提供了 AtomicReference 类来保证引用对象之间的原子性,你可以把多个变量放在一个对象里来进行 CAS 操作.所以我们可以使用锁或者利用 AtomicReference 类把多个共享变量合并成一个共享变量来操作。
2、悲观锁
3、乐观锁常见的两种实现方式
乐观锁一般会使用版本号机制或 CAS 算法实现。
4、循环时间长开销大
5、CAS 与 synchronized 的使用情景
6、CAS 算法
7、乐观锁的缺点
8、乐观锁
9、两种锁的使用场景
五、分布式专题面试
I.Dubbo
1、Dubbo支持哪些序列化方式?
默认使用 Hessian 序列化,还有 Duddo、FastJson、Java 自带序列化。
2、RMI协议
3、服务调用超时会怎么样?
dubbo 在调用服务不成功时,默认是会重试两次。
4、为什么要用Dubbo?
随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。就这样为分布式系统的服务治理框架就出现了,Dubbo 也就这样产生了。
5、Dubbo服务注册与发现的流程?
6、Dubbo类似的分布式框架还有哪些?
7、RPC和SOA、SOAP、REST的区别
8、dubbo连接注册中心和直连的区别
9、dubbo通信协议dubbo协议为什么采用异步单一长连接:
10、同一个服务多个注册的情况下可以直连某一个服务吗?
11、Dubbo如何优雅停机?
12、Dubbo在安全机制方面是如何解决的
13、Dubbo超时设置有哪些方式?
14、Dubbo与Spring的关系?
15、Dubbo的注册中心集群挂掉,发布者和订阅者之间还能通信么?
16、Dubbo集群提供了哪些负载均衡策略?
17、Dubbo和SpringCloud的区别?
18、Dubbo的架构设计?
19、服务调用超时问题怎么解决?
20、Dubbo的集群容错方案有哪些?
21、Dubbo的整体架构设计有哪些分层?
22、Dubbo和SpringCloud的关系?
23、Dubbo核心组件有哪些?
24、Dubbo超时时间怎样设置?
25、Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?
26、Dubbo服务降级,失败重试怎么做?
27、Dubbo和SpringCloud有什么哪些区别?
28、Dubbo可以对结果进行缓存吗?
29、DubboMonitor实现原理?
30、服务上线怎么兼容旧版本?
II.ElasticSearch
1、lucence内部结构是什么?
Lucene 是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点。可以基于这个脉络展开一些。
2、elasticsearch是如何实现master选举的
3、Elasticsearch中的节点(比如共20个),其中的10个
选了一个 master,另外 10 个选了另一个 master,怎么办?
(1)当集群 master 候选数量不小于 3 个时,可以通过设置最少投票通过数量
(discovery.zen.minimum_master_nodes)超过所有候选节点一半以上来解决脑裂问题;
(3)当候选数量为两个时,只能修改为唯一的一个 master 候选,其他作为 data节点,避免脑裂问题。
4、elasticsearch索引数据多了怎么办,如何调优,部署?
5、如何监控Elasticsearch集群状态?
6、Elasticsearch在部署时,对Linux的设置有哪些优化方法?
7、介绍一下你们的个性化搜索方案?
8、Elasticsearch是一个分布式的RESTful风格的搜索和数据分析引擎。
9、在并发情况下,Elasticsearch如果保证读写一致?
10、详细描述一下Elasticsearch更新和删除文档的过程。
11、对于GC方面,在使用Elasticsearch时要注意什么?
12、介绍下你们电商搜索的整体技术架构。
13、Elasticsearch是如何实现Master选举的?
14、Elasticsearch对于大数据量(上亿量级)的聚合如何实现?
15、elasticsearch的倒排索引是什么
16、详细描述一下Elasticsearch索引文档的过程。
17、在Elasticsearch中,是怎么根据一个词找到对应的倒排索引的?
18、拼写纠错是如何实现的?
19、详细描述一下Elasticsearch搜索的过程?
20、是否了解字典树?
21、elasticsearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些调优手段
22、Elasticsearch是一个高度可伸缩的开源全文搜索和分析引擎。它允许您快速和接近实时地存储
23、客户端在和集群连接时,如何选择特定的节点执行请求的?
24、详细描述一下Elasticsearch搜索的过程。
25、Elasticsearch在部署时,对Linux的设置有哪些优化方法
26、详细描述一下Elasticsearch索引文档的过程
III.Memcache
1、如何实现集群中的session共享存储?
34、Redis当中有哪些数据结构
过期时间最大可以达到 30 天。memcached 把传入的过期时间(时间段)解释成时间点后,一旦到了这个时间点,memcached 就把 item 置为失效状态。这是一个简单但 obscure的机制。
3、为什么单个item的大小被限制在1Mbyte之内?
4、Memcached是什么,有什么作用?
5、memcached的内存分配器是如何工作的?为什么不适用malloc/free!?为何要使用slabs?
6、memcached是如何做身份验证的?
7、memcached如何处理容错的?
8、memcached最大的优势是什么?
9、memcached和服务器的localcache(比如PHP的APC、mmap文件等)相比,有什么优缺点?
10、memcached的cache机制是怎样的?
11、memcached和MySQL的querycache相比,有什么优缺点?
12、memcached能够更有效地使用内存吗?
13、我需要把memcached中的item批量导出导入,怎么办?
14、简述Memcached内存管理机制原理?
15、memcached的多线程是什么?如何使用它们?
16、memcached能接受的key的最大长度是多少?
17、memcached最大能存储多大的单个item?
18、memcached是怎么工作的?
19、如何将memcached中item批量导入导出?
20、什么是二进制协议,我该关注吗?
21、memcached与redis的区别?
22、memcached如何实现冗余机制?
23、如果缓存数据在导出导入之间过期了,您又怎么处理这些数据呢?
24、Memcached服务分布式集群如何实现?
25、Memcached服务特点及工作原理是什么?
26、memcached是原子的吗?
六、数据库专题面试
1、 小心“永久链接”
I.MongoDB
1、如果我在使用复制技术(replication),可以一部分使用日志(journaling)而其他部分则不使用吗?
可以
2、32位系统上有什么细微差别?
- journaling 会激活额外的内存映射文件。这将进一步抑制 32 位版本上的数据库大小。因此,现在
- journaling 在 32 位系统上默认是禁用的。
3、如果块移动操作(moveChunk)失败了,我需要手动清除部分转移的文档吗?
不需要,移动操作是一致(consistent)并且是确定性的(deterministic);一次失败后,移动操作会不断重试;当完成后,数据只会出现在新的分片里
4、当更新一个正在被迁移的块(Chunk)上的文档时会发生什么?
更新操作会立即发生在旧的块(Chunk)上,然后更改才会在所有权转移前复制到新的分片上。
5、如何理解MongoDB中的GridFS机制,MongoDB为何使用GridFS来存储文件?
GridFS 是一种将大型文件存储在 MongoDB 中的文件规范。使用 GridFS 可以将大文件分隔成多个小文档存放,这样我们能够有效的保存大文档,而且解决了 BSON 对象有限制的问题。
6、更新操作立刻fsync到磁盘?
7、NoSQL数据库有哪些类型?
8、journal回放在条目(entry)不完整时(比如恰巧有一个中途故障了)会遇到问题吗?
9、什么是secondary或slave?
10、分片(sharding)和复制(replication)是怎样工作的?
11、什么是master或primary?
12、如何执行事务/加锁?
13、我可以把moveChunk目录里的旧文件删除吗?
14、当我试图更新一个正在被迁移的块(chunk)上的文档时会发生什么?
15、如果在一个分片(shard)停止或者很慢的时候,我发起一个查询会怎样?
16、你说的NoSQL数据库是什么意思?NoSQL与RDBMS直接有什么区别?为什么要使用和不使用NoSQL数据库?说一说NoSQL数据库的几个优点?
17、你怎么比较MongoDB、CouchDB及CouchBase?
18、如果一个分片(Shard)停止或很慢的时候,发起一个查询会怎样?
19、MongoDB在A:{B,C}上建立索引,查询A:{B,C}和A:{C,B}都会使用索引吗?
20、为什么我的数据文件如此庞大?
21、MySQL与MongoDB之间最基本的差别是什么?
22、数据在什么时候才会扩展到多个分片(shard)里?
23、启用备份故障恢复需要多久?
24、允许空值null吗?
25、我怎么查看Mongo正在使用的链接?
26、如果用户移除对象的属性,该属性是否从存储层中删除?
27、分析器在MongoDB中的作用是什么?
28、我应该启动一个集群分片(sharded)还是一个非集群分片的MongoDB环境?
29、MongoDB成为最好NoSQL数据库的原因是什么?
30、名字空间(namespace)是什么?
31、能否使用日志特征进行安全备份?
32、MongoDB支持存储过程吗?如果支持的话,怎么用?
33、我必须调用getLastError来确保写操作生效了么?
II.MySQL
1、区分CHAR_LENGTH和LENGTH?
CHAR_LENGTH 是字符数,而 LENGTH 是字节数。Latin 字符的这两个数据是相同的,但是对于 Unicode 和其他编码,它们是不同的。
2、如何区分FLOAT和DOUBLE?
以下是 FLOAT 和 DOUBLE 的区别:
浮点数以 8 位精度存储在 FLOAT 中,并且有四个字节。
浮点数存储在 DOUBLE 中,精度为 18 位,有八个字节。
3、简述在MySQL数据库中MyISAM和InnoDB的区别
4、Mysql中有哪些不同的表格?
共有 5 种类型的表格: 1、MyISAM2、Heap 3、Merge 4、INNODB 5、MISAM
5、ISAM是什么?
ISAM 简称为索引顺序访问方法。它是由 IBM 开发的,用于在磁带等辅助存储系统上存储和检索数据。
6、表中有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,将该字段拆成子表好处是什么?
7、Mysql的技术特点是什么?
8、为表中得字段选择合适得数据类型
9、怎样才能找出最后一次插入时分配了哪个自动增量?
10、InnoDB是什么?
11、LIKE和REGEXP操作有什么区别?
12、BLOB和TEXT有什么区别?
13、NOW()和CURRENT_DATE()有什么区别?
14、如何显示前50行?
15、主键和候选键有什么区别?
16、优化数据库的方法
17、MySQL查询缓存有什么弊端,应该什么情况下使用,8.0版本对查询缓存有什么更.
18、简单描述MySQL中,索引,主键,唯一索引,联合索引
19、MyISAMStatic和MyISAMDynamic有什么区别?
20、MYSQL数据库服务器性能分析的方法命令有哪些?
21、TIMESTAMP在UPDATECURRENT_TIMESTAMP数据类型上做什么?
22、MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?SQL标准定义的四个隔离级别为:
23、可以使用多少列创建索引?
24、MySQL的基础操作命令:
25、MyISAM表格将在哪里存储,并且还提供其存储格式?
26、federated表是什么?
27、实践中如何优化MySQL
28、与Oracle相比,Mysql有什么优势?
29、你怎么看到为表格定义的所有索引?
30、LIKE声明中的%和_是什么意思?
31、以及在mysql数据库中索引的工作机制是什么?
32、什么是非标准字符串类型?
33、什么样的对象可以使用CREATE语句创建?
34、MYSQL数据表在什么情况下容易损坏?
35、CHAR和VARCHAR的区别?
36、如何定义REGEXP?
37、请简述常用的索引有哪些种类?
38、MySQL如何优化DISTINCT?
39、如何在Unix和Mysql时间戳之间进行转换?
40、Mysql服务器默认端口是什么?
MySQL 性能优化的 21 个最佳实践
1、 小心“永久链接”
“永久链接”的目的是用来减少重新创建 MySQL 链接的次数。当一个链接被创建了,它会永远处在连接的状态,就算是数据库操作已经结束了。而且,自从我们的 Apache 开始重用它的子进程后——也就是说,下一次的 HTTP 请求会重用 Apache 的子进程,并重用相同的 MySQL 链接。
2、避免 SELECT *
3、 EXPLAIN 你的 SELECT 查询
4、 尽可能的使用 NOT NULL
- 除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持NOT NULL。这看起来好像有点争议,请往下看。
- 首先,问问你自己“Empty”和“NULL”有多大的区别(如果是 INT,那就是 0 和 NULL)?如果你觉得它们之间没有什么区别,那么你就不要使用 NULL。(你知道吗?在 Oracle 里,NULL 和 Empty 的字符串是一样的!)
- 不要以为 NULL 不需要空间,其需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。 当然,这里并不是说你就不能使用 NULL 了,现实情况是很复杂的,依然会有些情况下,你需要使用 NULL 值
5、为查询缓存优化你的查询
6、越小的列会越快
7、使用一个对象关系映射器
8、拆分大的 DELETE 或 INSERT 语句
9、在 Join 表的时候使用相当类型的例,并将其索引
10、使用 ENUM 而不是 VARCHAR
11、千万不要 ORDER BY RAND()
12、 选择正确的存储引擎
13、当只要一行数据时使用 LIMIT 1
14、Prepared Statements
15、垂直分割
16、固定长度的表会更快
17、 无缓冲的查询
18、把 IP 地址存成 UNSIGNED INT
19、永远为每张表设置一个 ID
20、为搜索字段建索引
21、 从 PROCEDURE ANALYSE() 取得建议
III.Redis
1、Redis集群如何选择数据库?
Redis集群目前无法做数据库选择,默认在0数据库。
2、Redis回收进程如何工作的?
-
- 一个客户端运行了新的命令,添加了新的数据。
-
- Redis检查内存使用情况,如果大于maxmemory的限制, 则根据设定好的策略进行回收。
-
- 一个新的命令被执行,等等。
-
- 所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。
如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越
3、Redis事务其他实现
基于Lua脚本,Redis可以保证脚本内的命令一次性、按顺序地执行,其同时也不提供事务运行错误的回滚,执行过程中如果部分命令运行错误,剩下的命令还是会继续运行完* 基于中间标记变量,通过另外的标记变量来标识事务是否执行完成,读取数据时先读取该标记变量判断是否事务执行完成。但这样会需要额外写代码实现,比较繁琐
4、什么是RedLock
Redis 官方站提出了一种权威的基于 Redis 实现分布式锁的方式名叫 Redlock,此种方式比原先的单节点的方法更安全。它可以保证以下特性:
-
- 安全特性:互斥访问,即永远只有一个 client 能拿到锁
-
- 避免死锁:最终 client 都可能拿到锁,不会出现死锁的情况,即使原本锁住某资源的 clientcrash 了或者出现了网络分区
-
- 容错性:只要大部分 Redis 节点存活就可以正常提供服务
5、Redis主要消耗什么物理资源?
6、Redis有哪些适合的场景?
7、Jedis与Redisson对比有什么优缺点?
8、Redis事务相关的命令有哪几个?
9、Redis的内存淘汰策略有哪些
10、Redis集群的主从复制模型是怎样的?
11、Redis如何做内存优化?
12、锁互斥机制
13、Redis主从架构
14、生产环境中的redis是怎么部署的?
15、说说Redis哈希槽的概念?
16、使用过Redis分布式锁么,它是什么回事?
17、基于代理服务器分片
18、Redis线程模型
19、一个字符串类型的值能存储最大容量是多少?
20、缓存降级
21、可重入加锁机制
22、什么是redis雪崩?
23、redis主从复制如何实现的?redis的集群模式如何实现?redis的key是如何寻址的?
24、你知道有哪些Redis分区实现方案?
25、Redis集群会有写操作丢失吗?为什么?
26、Rediskey的过期时间和永久有效分别怎么设置?
27、Redis集群最大节点个数是多少?
28、Redis的持久化机制是什么?各自的优缺点?
29、为什么要用Redis/为什么要用缓存
30、缓存热点key
IV.SQL优化
1、Mysql表中允许有多少个TRIGGERS?
在 Mysql 表中允许有六个触发器,如下:
- BEFORE INSERT
- AFTER INSERT
- BEFORE UPDATE
- AFTER UPDATE
- BEFORE DELETE
- AFTER DELETE
2、如果一个表有一列定义为TIMESTAMP,将发生什么?
每当行被更改时,时间戳字段将获取当前时间戳。
3、可以使用多少列创建索引?
任何标准表最多可以创建 16 个索引列。
4、mysql里记录货币用什么字段类型好
III.Spring MVC
6、如何定义REGEXP?
7、Mysql中有哪几种锁?
8、如何显示前50行?
9、列设置为AUTOINCREMENT时,如果在表中达到最大值,会发生什么情况?
10、什么是通用SQL函数?
11、如何使用Unixshell登录Mysql?
12、Mysql的技术特点是什么?
13、怎样才能找出最后一次插入时分配了哪个自动增量?
14、如何获取当前的Mysql版本?
15、在Mysql中ENUM的用法是什么?
16、ISAM是什么?
17、TIMESTAMP在UPDATECURRENT_TIMESTAMP数据类型上做什么?
18、CHAR和VARCHAR的区别?
19、myisamchk是用来做什么的?
20、列的字符串类型可以是什么?
21、如何在Unix和Mysql时间戳之间进行转换?
22、MYSQL支持事务吗?
23、mysql有关权限的表都有哪几个?
24、列对比运算符是什么?
25、MyISAM表格将在哪里存储,并且还提供其存储格式?
26、MYSQL数据库服务器性能分析的方法命令有哪些?
27、InnoDB是什么?
28、我们如何得到受查询影响的行数?
29、什么样的对象可以使用CREATE语句创建?
30、我们如何在mysql中运行批处理模式?
31、NOW()和CURRENT_DATE()有什么区别?
32、mysql_fetch_array和mysql_fetch_object的区别是什么?
33、一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15?
34、MYSQL数据表在什么情况下容易损坏?
35、如何输入字符为十六进制数字?
36、LIKE声明中的%和_是什么意思?
37、什么是非标准字符串类型?
38、主键和候选键有什么区别?
39、Mysql中有哪些不同的表格?
40、Mysql驱动程序是什么?
41、与Oracle相比,Mysql有什么优势?
42、Mysql查询是否区分大小写?
43、Mysql中使用什么存储引擎?
44、区分CHAR_LENGTH和LENGTH?
45、Heap表是什么?
46、如何控制HEAP表的最大尺寸?
47、LIKE和REGEXP操作有什么区别?
48、你怎么看到为表格定义的所有索引?
49、如何区分FLOAT和DOUBLE?
50、Mysql服务器默认端口是什么?
51、解释访问控制列表
52、MyISAMStatic和MyISAMDynamic有什么区别?
53、请简洁描述Mysql中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?
54、federated表是什么?
55、Mysql如何优化DISTINCT?
V.大数据
1、 Hadoop 的核心配置是什么?
2、 如何确定 hadoop 集群的健康状态
3、 简述 hadoop 的调度器
4、 Hive 你们用的是外部表还是内部表,有没有写过 UDF,hive 的版本
5、 解决下面的错误
6、 大数据面试汇总
7、你们数据库怎么导入 hive 的,有没有出现问题
8、hadoop 中 Combiner 的作用?
9、举一个简单的例子说明 mapreduce 是怎么来运行的 ?
10、用 mapreduce 来实现下面需求?
11、 combiner 出现在那个过程
12、 用 mapreduce 怎么处理数据倾斜问题?
13、 Redis,传统数据库,hbase,hive 每个之间的区别
14、 生产环境中为什么建议使用外部表?
15、“jps”命令的用处?
16、那当下又该如何配置?
17、 基站逗留时间
18、 datanode 在什么情况下不会备份
19、 shuffle 阶段,你怎么理解的
20、 一键执行
21、 实时流式计算 的结果内容有哪些,你们需要统计出来 么
22、 hadoop 框架中怎么来优化
23、mapreduce 的原理?
24、 我们开发 job 时,是否可以去掉 reduce 阶段。
25、公司技术选型可能利用 storm 进行实时计算,讲解一下 storm
26、 hbase 的 rowkey 怎么创建好?列族怎么创建比较 好?
27、 面试问题:
28、京东商城 - 大数据
29、Hbase 的特性,以及你怎么去设计 rowkey 和 columnFamily ,怎么去建一个 table
30、 hdfs 的体系结构
31、 不同语言的优缺点
32、 写出下面的命令
33、 请列出 hadoop 进程名
34、 3 个 datanode 中有一个 datanode 出现错误会怎样?
35、 脚本替换
36、 combiner 和 partition 的作用
37、唯一难住我的是他说实时计算,storm 如果碰上了复杂 逻辑,需要算很长的时间,你怎么去优化,怎么保证实时性
38、 HDFS 存储的机制?
39、 hive 内部表和外部表的区别
40、 列出你开发 mapreduce 的语言
41、简述 hadoop 安装
42、 共同朋友
43、 hive 有哪些保存元数据的方式,个有什么特点。
44、Mapreduce 的 map 数量 和 reduce 数量 怎么确 定 ,怎么配置
45、 描述一下 hadoop 中,有哪些地方使用了缓存机制, 作用分别是什么?
46、 书写程序
47、一个 datanode 宕机,怎么一个流程恢复
七、微服务专题面试
【需要完整答案可以查看文末领取哦!】
I.Spring Cloud
1、 SpringCloud主要项目
2、 什么是Feign?
3、 服务降级底层是如何实现的?
4、 什么是Eureka的自我保护模式,
5、 SpringBoot和SpringCloud的区别?
6、 Ribbon和Feign调用服务的区别
7、 Eureka怎么实现高可用
8、@LoadBalanced注解的作用
9、 Zuul网关如何搭建集群
10、 Ribbon底层实现原理
11、 常用网关框架有那些?
12、Spring Cloud Consul
13、 什么是Eureka
14、 既然Nginx可以实现网关?为什么还需要使用Zuul框架
15、 什么是Spring Cloud Config?
16、 什么是 Spring Cloud Bus?
17、Spring Cloud Security
18、Spring Cloud Config
19、 Zuul与Nginx有什么区别?
20、 使用 Spring Boot 开发分布式微服务时,我们面临什么问题
21、 什么是网关?
22、 分布式配置中心的作用?
23、Spring Cloud Gateway
24、 Spring Cloud和SpringBoot版本对应关系
25、 如何设计一套API接口
26、什么是 Spring Cloud Bus?我们需要它吗?
27、Spring Cloud Zookeeper
28、 服务雪崩效应产生的原因
29、Spring Cloud Sleuth
30、 SpringCloud的优缺点
II.Spring Boot
1、 SpringBoot微服务中如何实现 session 共享 ?
2、什么是 WebSockets?
3、 SpringBoot多数据源事务如何管理
4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?
5、什么是 Apache Kafka?
6、 如何实现 Spring Boot 应用程序的安全性?
7、如何集成 Spring Boot 和 ActiveMQ?
8、 SpringBoot的自动配置原理是什么
9、 我们如何监视所有 Spring Boot 微服务?
10、 Spring Boot 中的监视器是什么?
11、如何激活某个环境的配置?
12、 Spring Boot 有哪几种读取配置的方式?
13、 SpringBoot与SpringCloud 区别
14、什么是yaml?
15、什么是 Spring Batch?
16、 Spring Boot 是否可以使用 XML 配置 ?
17、 SpringBoot多数据源拆分的思路
18、 为什么要用SpringBoot
19、 SpringBoot如何实现打包
20、如何实现 Spring Boot 应用程序的安全性?
21、如何使用 Spring Boot 实现异常处理?
22、SpringBoot启动方式?
23、 比较一下 Spring Security 和 Shiro 各自的优缺点 ?
24、 什么是 JavaConfig?
25、如何在自定义端口上运行 Spring Boot 应用程序?
26、SpringBoot支持配置文件的格式?
27、获得Bean装配报告信息访问哪个端点?
28、 您使用了哪些 starter maven 依赖项?
29、 如何使用 Spring Boot 实现全局异常处理?
30、SpringBoot自动配置原理?
III.Spring MVC
1、介绍一下 WebApplicationContext:
2、SpringMVC 工作原理?
3、如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?
4、如果想在拦截的方法里面得到从前台传入的参数,怎么得到?
5、 @RequestMapping 注解用在类上面有什么作用?
6、SpringMvc 中函数的返回值是什么?
7、Spring MVC用什么对象从后台向前台传递数据的?
8、如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
9、SpringMVC 流程?
10、Spring MVC的主要组件?
11、@ResponseBody注解的作用?
12、SpringMvc 里面拦截器是怎么写的
13、我想在拦截的方法里面得到从前台传入的参数,怎么得到?
14、当一个方法向 AJAX 返回特殊对象,譬如 Object,List 等,需要做什么处理?
15、@Controller注解的作用?
16、怎样在方法里面得到Request,或者Session?
17、SpringMvc 中有个类把视图和数据都合并的一起的,叫什么?
18、Spring MVC里面拦截器是怎么写的?
19、怎么样把 ModelMap 里面的数据放入 Session 里面?
20、如果在拦截请求中,我想拦截get方式提交的方法,怎么配置
21、如果在拦截请求中,我想拦截 get 方式提交的方法,怎么配置?
22、Spring MVC怎么样设定重定向和转发的?
23、Spring MVC的异常处理?
24、SpringMVC 怎么样设定重定向和转发的?
25、SpingMvc 中的控制器的注解一般用那个,有没有别的注解可以替代?
26、SpringMvc 怎么和 AJAX 相互调用的?
27、SpringMvc 用什么对象从后台向前台传递数据的?
28、怎么样把某个请求映射到特定的方法上面?
29、Spring MVC中函数的返回值是什么?
30、Spring MVC与Struts2区别:
IV.Spring
1、控制反转(IOC)有什么作用
2、在Spring框架中如何更有效地使用JDBC?
3、什么是bean装配?
4、如何用基于XML配置的方式配置Spring?
5、Spring的俩大核心概念
6、XMLBeanFactory
7、@RequestMapping注解有什么用?
8、Spring框架中的单例Beans是线程安全的么?
9、怎样开启注解装配?
10、如何给Spring容器提供配置元数据?Spring有几种配置方式
11、JDK动态代理和CGLIB动态代理的区别
12、SpringAOPandAspectJAOP有什么区别?AOP有哪些实现方式?
13、什么是织入。什么是织入应用的不同点?
14、Spring框架中都用到了哪些设计模式?
15、Spring通知有哪些类型?
16、springDAO有什么用?
17、什么是AOP
18、请举例解释@Autowired注解?
19、解释基于注解的切面实现
20、解释Spring框架中bean的生命周期
21、使用Spring有哪些方式?
22、哪些是重要的bean生命周期方法?你能重载它们吗?
23、Spring如何设计容器的,BeanFactory和ApplicationContext的关系详解
24、@Controller注解
25、什么是基于注解的容器配置?
26、Spring支持的事务管理类型,spring事务实现方式有哪些?
27、解释一下SpringAOP里面的几个名词
28、解释不同方式的自动装配,spring自动装配bean有哪些方式?
29、什么是SpringIOC容器?
30、@Qualifier注解
八、中间件专题面试
【完整面试题和答案解析查看文末领取哦↓↓↓↓↓】
I.ActiveMQ
1、 消息的不均匀消费。
2、 ActiveMQ 服务器宕机怎么办?
3、什么是 ActiveMQ?
4、 持久化消息非常慢。
5、 死信队列。
6、 丢消息怎么办?
7、 ActiveMQ 中的消息重发时间间隔和重发次数吗?
II.Kafka
1、Kafka 创建 Topic 时如何将分区放置到不同的 Broker 中
2、Kafka 新建的分区会在哪个目录下创建
3、Kafka 高效文件存储设计特点:
4、Kafka 的消费者如何消费数据
5、Kafka 判断一个节点是否还活着有那两个条件?
6、Kafa consumer 是否可以消费指定分区消息?
7、数据有序
8、kafaka 生产数据时数据的分组策略
9、producer 是否直接将数据发送到 broker 的 leader(主节点)?
10、消费者负载均衡策略
11、Kafka 消息是采用 Pull 模式,还是 Push 模式?
12、Kafka 与传统消息系统之间有三个关键区别
13、数据传输的事物定义有哪三种?
14、kafka 的 ack 机制
15、partition 的数据如何保存到硬盘
16、Kafka 的设计时什么样的呢?
17、Kafka 存储在硬盘上的消息格式是什么?
III.RabbitMQ
1、在单node系统和多node构成的cluster系统中声明queue、exchange,以及
2、能够在地理上分开的不同数据中心使用RabbitMQcluster么?
3、RabbitMQ中的cluster、mirroredqueue,以及warrens机制分别用于解决什么问题?
4、消息基于什么传输?
5、RabbitMQ基本概念
6、RabbitMQ概念里的channel、exchange和queue这些东东是逻辑概念,还是对应着进程实体?
7、如何保证消息不被重复消费?或者说,如何保证消息消费时的幂等性?
8、durable属性,是否能够成功从其他node上重新声明该queue?
9、解耦、异步、削峰是什么?。
10、消息怎么路由?
11、若cluster中拥有某个queue的ownernode失效了,且该queue被声明具有
12、cluster中node的失效会对consumer产生什么影响?
13、设计MQ思路
14、RAMnode和disknode的区别?
15、RabbitMQ的工作模式
16、如何防止出现blackholed问题?
17、如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,怎么办?
18、什么是RabbitMQ?
19、什么情况下producer不主动创建queue是安全的?
20、你说下RocketMQ的负载均衡是如何实现的?
21、RabbitMQ允许发送的message最大可达多大?
22、如何保证高可用的?RabbitMQ的集群
23、为什么不应该对所有的message都使用持久化机制?
24、如何保证RabbitMQ消息的顺序性?
25、为什么heavyRPC的使用场景下不建议采用disknode?
26、如何保证RabbitMQ消息的可靠传输?
27、向不存在的exchange发publish消息会发生什么?
28、消息队列有什么缺点
29、什么是元数据?元数据分为哪些类型?包括哪些内容?
30、vhost是什么?起什么作用?
IV.Zookeeper
1、机器中为什么会有leader?
2、Zookeeper分布式锁(文件系统、通知机制)
3、zookeeper负载均衡和nginx负载均衡区别
4、zk节点宕机如何处理?
5、四种类型的数据节点Znode
6、Zookeeper的java客户端都有哪些?
7、ZooKeeper提供了什么?
8、Zookeeper同步流程
9、客户端回调Watcher
10、zookeeper是如何保证事务的顺序一致性的?
11、说一下ZookeeperWatcher机制
12、ZookeeperWatcher机制–数据变更通知
13、Zookeeper有哪几种几种部署模式?
14、服务端处理Watcher的流程?
15、chubby是什么,和zookeeper比你怎么看?
16、服务器有哪些角色?
17、Zookeeper节点宕机如何处理?
18、Zookeeper的典型应用场景
19、会话管理
20、数据同步
21、服务端处理Watcher实现
22、客户端注册Watcher实现
23、Zookeeper下Server工作状态有哪些?
24、ZAB和Paxos算法的联系与区别?
25、客户端回调Watcher流程?
26、ACL权限控制机制
27、Zookeeper和Dubbo的关系?
28、Zookeeper对节点的watch监听通知是永久的吗?为什么不是永久的?
29、说几个zookeeper常用的命令。
30、集群支持动态添加机器吗?
总结
以上就是小编给大家分享的干货,希望能帮助到正在准备面试的朋友们,顺顺利利找到自己心仪的工作,fighting!!!
面试真题获取地址:金九银十Java面试资料集锦!