Bootstrap

堪称全网最详细的Java八股面试文,面试必备(附答案)

前言

听一些小伙伴说,近期的面试越来越难了!为了帮大家节约时间,给大家搞来了今年上半年碰到的大厂Java面试题合集,内容非常的全面。耗时半月,终于把牛客网上的互联网大厂Java面试八股文整理成了PDF合集。

 


其中概括的知识点有:java基础、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈共有1000+道面试题。

JAVA基础

Java代码一次编写、到处运行

因为Java虚拟机可以实现跨平台的代码运行,不同的操作系统中有不同的JVM。

在程序运行前,JVM会将编写的Java代码编译为字节码格式,这种格式是JVM能够识别的格式。

运行程序时,Java类加载器先加载字节码文件,Java解释器会将字节码翻译为操作系统可以识别的机器码,方便操作系统去执行。为了提高Java程序运行速度,引入了JIT(即时编译器),在第一次编译后,将字节码对应的机器码保存,下次可以直接使用。

Java文件里可以有多个类吗(不包含内部类)?

一个Java文件中可以有多个类,但是最多只能有一个被public修饰的类;

如果该文件中包含public修饰的类,则类的名称和Java文件的名称必须相同。

Java访问权限

  • Java语言中共有三种访问修饰符:public、private、protected;
  • 在使用这些修饰符修饰目标时,一共可以形成四种访问权限,public、private、protected、default(不加任何修饰符)。
  • 修饰成员变量/方法时:
  • private:该成员可以被该类内部成员访问;
  • default:该成员可以被该类内部成员访问,也可以被同一包下的其他类访问;
  • protected:该成员可以被该类内部成员访问,也可以被同一包下的其他类访问,还可以被它的子类访问;
  • public:该成员可以被任意类访问。
  • 修饰类时:
  • default:该类可以被同一包下的其他类访问;
  • public: 该类可以被任意包下,任意类访问。

Java数据类型

Java数据类型包括两大类:基本数据类型,引用数据类型。

基本数据类型有8个,可以分为4类:整数类型(byte/short/int/long)、浮点类型(float/double)、字符类型(char)、布尔类型(boolean)。除了布尔类型,其他都可以看作为数组类型,可以进行类型转换。

引用类型就是对一个对象的引用,根据引用对象的不同,可以分为数组、类、接口引用类型。实质上就是通过指针,指向堆中对象所持有的内存空间。

基本数据类型所占的内存空间:

  • byte:1字节(8位),数据范围是 -2^7 ~ 2^7-1;
  • short:2字节(16位),数据范围是 -2^15 ~ 2^15-1;
  • int:4字节(32位),数据范围是 -2^31 ~ 2^31-1;
  • long:8字节(64位),数据范围是 -2^63 ~ 2^63-1;
  • float:4字节(32位),数据范围是 -3.4*10^38 ~ 3.4*10^38;
  • double:8字节(64位),数据范围是 -1.8*10^308 ~ 1.8*10^308;
  • char:2字节(16位),数据范围是 \u0000 ~ \uffff;
  • boolean:不同的JVM有不同的实现机制,没有固定的参数。

全局变量(成员变量)和局部变量

Java中没有全局变量,这是c语言中的概念,Java中对应的名称叫做成员变量。

成员变量:

成员变量是在类的范围内定义的变量;

成员变量有默认初始值;

未被static修饰的成员变量也叫实例变量,存储于对象所在的堆内存当中,生命周期与对象相同;

被static修饰的成员变量也叫类变量,存储于方法区当中,生命周期与当前类相同。

局部变量:

局部变量是在方法内定义的变量;

局部变量没有默认初始值;

局部变量存储于栈内存中,作用的范围结束,变量空间会自动的释放。

为什么要有包装类?

Java是面向对象的语言,设计理念就是“一切皆是对象”。但是8种基本数据类型却不属于对象,为了解决这个问题,Java为每个基本数据类型都定义了一个对应的引用类型,叫做包装类。

自动装箱与自动拆箱是JDK1.5提供的功能。

  • 自动装箱:可以把一个基本类型的数据直接赋值给对应的包装类型;
  • 自动拆箱:可以把一个包装类型的数据直接赋值给对应额基本类型;
  • 应用场景:例如某个方法的参数是包装类型,调用时我们所使用的数据却是基本类型的数据,这时可以不做任何处理,直接将这个基本类型的值传入给方法即可。

对面向对象的理解

重载和重写的区别

构造方法不能重写

Object中常用的方法

  • getClass():返回该对象的运行时类;
  • boolean equals(Object obj):判断对象是否相等;
  • int hashCode():返回该对象的hashCode值,默认情况下根据地址计算;
  • String toString():返回该对象的字符串表示;
  • finalize():当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源,同一个对象只会调用一次。(不建议主动调用)

hashCode()和equals()的关系

String常用的方法

String、StringBuffer、StringBuilder的区别

接口和抽象类有什么区别

Java怎么处理异常

static关键字

泛型

反射

JDK - JVM - JRE

JVM

Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现,其目的就是使用相同的字节码,这样会给出相同的结果。字节码和不同系统的JVM是实现Java语言跨平台的关键。

JVM并不是只有一种!只要满足JVM规范,每个公司、组织,甚至个人都可以开发自己的JVM,我们平时接触到的HotSpot VM仅仅是JVM规范中的一种实现。

JDK

JDK是功能齐全的SDK,拥有JRE的全部内容,还有编译器(javac)和工具(如javadoc和jdb),能够创建和编译Java程序。

JRE

JRE是Java运行时环境,它是运行和编译Java程序所需的所有内容的集合,包括Java虚拟机,Java类库,Java命令和其他的一些基础构建,但是不能用于创建新程序。

Java基本语法

  • 字符串常量和字符型常量的区别
  • 静态方法不能调用非静态成员continue、break和return的区别自增自减运算符
  • 静态方法和实例方法的不同重载和重写的区别
  • ==与equals()的区别

 

MyBatis

  • 1、什么是Mybatis?
  • 2、Mybaits的优点
  • 3、MyBatis框架的缺点
  • 4、MyBatis框架适用场合
  • 5、MyBatis与Hibernate有哪些不同?
  • 6、#{}和${}的区别是什么?
  • 7、当实体类中的属性名和表中的字段名不一样,怎么办?
  • 8、 模糊查询like语句该怎么写?
  • 9、通常一个Xml映射文件,都会写一个Dao接口与之对应, 请问,这个Dao接口的工作原理是什么?Dao接口里的方法, 参数不同时,方法能重载吗?
  • 10、Mybatis是如何进行分页的?分页插件的原理是什么?

ZooKeeper

  • 1. ZooKeeper是什么?
  • 2. ZooKeeper提供了什么?
  • 3.Zookeeper文件系统
  • 4. ZAB 协议?
  • 5. 四种类型的数据节点Znode
  • 6. Zookeeper Watcher机制--数据变更通知
  • 7. 客户端注册 Watcher实现
  • 8. 服务端处理Watcher实现
  • 9. 客户端回调Watcher
  • 10. ACL权限控制机制

Dubbo

基础知识

  • 1. 为什么要用Dubbo?
  • 2. Dubbo是什么?
  • 3. Dubbo的使用场景有哪些?
  • 4. Dubbo核心功能有哪些?

架构设计

  • 7. Dubbo的整体架构设计有哪些分层?
  • 8. Dubbo Monitor实现原理?

分布式框架

  • 9. Dubbo类似的分布式框架还有哪些?
  • 10. Dubbo和Spring Cloud有什么关系?
  • 11. Dubbo和Spring Cloud有什么哪些区别?
  • 12. Dubbo和Dubbox之间的区别?

注册中心

  • 13. Dubbo有哪些注册中心?
  • 14. Dubbo的注册中心集群挂掉,发布者和订阅者之间还能通信吗?

Elasticsearch

  • 1、elasticsearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些调优手段。
  • 2、elasticsearch的倒排索引是什么?
  • 3、elasticsearch索引数据多了怎么办,如何调优,部署?
  • 4、elasticsearch是如何实现master选举的
  • 5、详细描述一下Elasticsearch索引文档的过程
  • 6、详细描述一下Elasticsearch搜索的过程?
  • 7、Elasticsearch在部署时,对Linux的设置有哪些优化方法
  • 8、lucence内部结构是什么?
  • 9、Elasticsearch是如何实现Master选举的?
  • 10、Elasticsearch中的节点(比如共 20 个),其中的10 个选了一个master,另外10个选了另一个master,怎么办?

Memcached

  • 1、Memcached是什么,有什么作用?
  • 2、Memcached服务分布式集群如何实现?
  • 3、Memcached服务特点及工作原理是什么?
  • 4、简述Memcached内存管理机制原理?
  • 5、memcached是怎么工作的?
  • 6、memcached最大的优势是什么?
  • 7、memcached和MySQL的query
  • 8、memcached和服务器的local cache(比如PHP的APC、mmap文件等)相比,有什么优缺点?
  • 9、memcached的cache机制是怎样的?
  • 10、memcached如何实现冗余机制?

MySQL

  • 1、MySQL中有哪几种锁?
  • 2、MySQL中有哪些不同的表格?
  • 3、简述在MySQL数据库中MyISAM和InnoDB的区别
  • 4、MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?
  • 5、CHAR和VARCHAR的区别?
  • 6、主键和候选键有什么区别?
  • 7、myisamchk是用来做什么的?
  • 8、如果一个表有一列定义为TIMESTAMP,将发生什么?
  • 9、你怎么看到为表格定义的所有索引?
  • 10、LIKE声明中的%和_是什么意思?

 

Spring

一般问题

  • 1、不同版本的Spring Framework有哪些主要功能?
  • 2、什么是Spring Framework?
  • 3、列举Spring Framework的优点。
  • 4、Spring Framework有哪些不同的功能?
  • 5、Spring Framework中有多少个模块,它们分别是什么?
  • 6、什么是Spring配置文件?
  • 7、Spring应用程序有哪些不同组件?
  • 8、使用Spring有哪些方式?

依赖注入(Ioc)

  • 1、什么是Spring IOC容器?
  • 2、什么是依赖注入?
  • 3、可以通过多少种方式完成依赖注入?

Spring Boot

  • 1、什么是Spring Boot?
  • 2、Spring Boot有哪些优点?
  • 3、什么是JavaConfig?
  • 4、如何重新加载Spring Boot上的更改,而无需重新启动服务器?
  • 5、Spring Boot中的监视器是什么?
  • 6、如何在Spring Boot中禁用Actuator端点安全性?
  • 7、如何在自定义端口上运行Spring Boot应用程序?
  • 8、什么是YAML?
  • 9、如何实现Spring Boot应用程序的安全性?
  • 10、如何集成Spring Boot和ActiveMQ?

Spring Cloud

  • 1、什么是Spring Cloud?
  • 2、使用Spring Cloud有什么优势?
  • 3、服务注册和发现是什么意思?Spring Cloud如何实现?
  • 4、负载平衡的意义什么?
  • 5、什么是Hystrix?它如何实现容错?
  • 6、什么是Hystrix 断路器?我们需要它吗?
  • 7、什么是Netflix Feign?它的优点是什么?
  • 8、什么是Spring Cloud Bus?我们需要它吗?
  • 9、SpringBoot和SpringCloud的区别?
  • 10、Spring Cloud和SpringBoot版本对应关系

RabbitMQ

  • 1、什么是rabbitmq
  • 2、为什么要使用rabbitmq
  • 3、使用rabbitmq的场景
  • 4、如何确保消息正确地发送至RabbitMQ?如何确保消息接
  • 收方消费了消息?
  • 5.如何避免消息重复投递或重复消费?
  • 6、消息基于什么传输?
  • 7、消息如何分发?
  • 8、消息怎么路由?
  • 9、如何确保消息不丢失?
  • 10、使用RabbitMQ有什么好处?

Linux

  • 绝对路径用什么符号表示?当前目录、上层目录用什么表示?
  • 主目录用什么表示?
  • 切换目录用什么命令?
  • 怎么查看当前进程?怎么执行退出?怎么查看当前路径?
  • 怎么清屏?怎么退出当前命令?怎么执行睡眠?
  • 怎么查看当前用户id?
  • 查看指定帮助用什么命令?
  • Ls命令执行什么功能?可以带哪些参数,有什么区别?
  • 建立软链接(快捷方式),以及硬链接的命令。
  • 目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?
  • 查看文件内容有哪些命令可以使用?
  • 随意写文件命令?怎么向屏幕输出带空格的字符串,比如”hello world”?
  • 终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令?
  • 移动文件用哪个命令?改名用哪个命令?

最后

Java 面试的本质就是八股文,把八股文面试题背好,面试才有可能表现好。大家在考研和找工作中纠结的时候,不妨先看一下面试题,毕竟最终目标就是为了找一份心仪的工作!好工作都是早下手为强的,所以同学们要早做准备!

由于篇幅有限,就选了一些经常可见的试题展示出来。

答案文档获取方式:关注小编+转发文章+私信【面试题】获取上述资料~

;