前言

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

    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

    • 绝对路径用什么符号表示?当前目录、上层目录用什么表示?
    • 主目录用什么表示” />

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

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