堪称全网最详细的Java八股面试文,面试必备(附答案)
作者:mmseoamin日期:2023-12-14

前言

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

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

 


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

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

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八股面试文,面试必备(附答案),第3张

      为什么要有包装类?

      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()的区别

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

             

            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声明中的%和_是什么意思?

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

                               

                              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?

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

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

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

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

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