18家大厂Java面试题整理了350道(分布式+微服务+高并发)

一、性能调优系列 1.Tomcat性能调优

JVM参数调优:
  -Xms 表示JVM初始化堆的大小,
  -Xmx表示JVM堆的最大值。这两个值的大小一般根据需要进行设置。
  当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。
  因此- -般建议堆的最大值设置为可用内存的最大值的80%。
  在catalina.bat中,设置JAVA _0PTS=\'-Xms256m-Xmx512m\',表示初始化内存为256MB,可以使用的最大内存512MB。

2.JVM性能调优

Java类加载过程

在这里插入图片描述


Java类加载需要经历一下7个过程:

加载

加载是类加载的第一个过程,在这个阶段,将完成一下三件事情
(1)通过一个类的全限定名获取该类的二进制流。
(2)将该二进制流中的静态存储结构转化为方法去运行时数据结构。
(3)在内存中生成该类的Class对象,作为该类的数据访问入口。

验证

验证的目的是为了确保Class文件的字节流中的信息不回危害到虚拟机.在该阶段主要完成以下四钟验证:
(1)文件格式验证:验证字节流是否符合Class文件的规范,如主次版本号是否在当前虚拟机范围内,常量池中的常量是否有不被支持的类型.
(2)元数据验证:对字节码描述的信息进行语义分析,如这个类是否有父类,是否集成了不被继承的类等。
(3)字节码验证:是整个验证过程中最复杂的一个阶段,通过验证数据流和控制流的分析,确定程序语义是否正确,主要针对方法体的验证。如:方法中的类型转换是否正确,跳转指令是否正确等。
(4)符号引用验证:这个动作在后面的解析过程中发生,主要是为了确保解析动作能正确执行。

3.MySQL性能调优

复制基本原理流程

主:binlog 线程——记录下所有改变了数据库数据的语句,放进 master 上的 binlog 中;

从:io 线程——在使用 start slave 之后,负责从 master 上拉取 binlog 内容,放进 自己的 relay log 中;

从:sql 执行线程——执行 relay log 中的语句;

MySQL 复制的线程有几个及之间的关联
MySQL 的复制是基于如下 3 个线程的交互( 多线程复制里面应该是 4 类线程):

Master 上面的 binlog dump 线程,该线程负责将 master 的 binlogevent 传到 slave;

Slave 上面的 IO 线程,该线程负责接收 Master 传过来的 binlog,并写入relay log;

Slave 上面的 SQL 线程,该线程负责读取 relay log 并执行;

如果是多线程复制,无论是 5.6 库级别的假多线程还是 MariaDB 或者 5.7的真正的多线程复制, SQL 线程只做 coordinator,只负责把 relay log 中的binlog 读出来然后交给 worker 线程, woker 线程负责具体 binlog event 的执行;

二、微服务系列 1.Spring Cloud面试

什么是 Spring Cloud?
Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。

使用 Spring Cloud 有什么优势?
使用 Spring Boot 开发分布式微服务时,我们面临以下问题

与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。

服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该
目录中注册服务,然后能够查找并连接到该目录中的服务。

冗余-分布式系统中的冗余问题。

负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央
处理单元,或磁盘驱动器的分布。
5.性能-问题 由于各种运营开销导致的性能问题。

部署复杂性-Devops 技能的要求。

2.spring boot面试

什么是 Spring Boot?
  多年来,随着新功能的增加,spring 变得越来越复杂。页面,我们就会看到可以在我们的应用程序中使用的所有 Spring 项目的不同功能。如果必须启动一个新的 Spring 项目,我们必须添加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置。因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。Spring Boot 是解决这个问题的方法。Spring Boot 已经建立在现有 spring 框架之上。使用spring 启动,我们避免了之前我们必须做的所有样板代码和配置。因此,Spring Boot 可以帮助我们以最少的工作量,更加健壮地使用现有的 Spring 功能。

Spring Boot 有哪些优点?
Spring Boot 的优点有:

减少开发,测试时间和努力。

使用 JavaConfig 有助于避免使用 XML。

避免大量的 Maven 导入和各种版本冲突。

提供意见发展方法。

通过提供默认值快速开始开发。

没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish 或其他任何东
西。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzsgyg.html