前言
听一些小伙伴说,近期的面试越来越难了!为了帮大家节约时间,给大家搞来了今年上半年碰到的大厂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