关于jvm:建议收藏2020阿里面试题JVMSpring-Cloud微服务上

27次阅读

共计 5915 个字符,预计需要花费 15 分钟才能阅读完成。

前言

对于大厂面试,我想要强调的一点就是心态真的很重要,是决定你在面试过程中施展的要害,若不能失常施展,很可能就因为一个小失误与 offer 失之交臂,所以肯定要器重起来。另外揭示一点,充沛温习,是打消你缓和的心理状态的要害,但你温习充沛了,天然面试过程中就要有底气得多。

JVM 面试题

java 中会存在内存透露吗,请简略形容。

会。本人实现堆载的数据结构时有可能会呈现内存泄露,可参看 effective java.

64 位 JVM 中,int 的长度是少数?

Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在 32 位 和 64 位 的 Java 虚拟机中,int 类型的长度是
雷同的。

Serial 与 Parallel GC 之间的不同之处?

Serial 与 Parallel 在 GC 执行的时候都会引起 stop-the-world。它们之间次要不同 serial 收集器是默认的复制收集器,执行 GC 的时候只有一个线程,而 parallel 收集器应用多个 GC 线程来执行。

32 位和 64 位的 JVM,int 类型变量的长度是少数?

32 位和 64 位的 JVM 中,int 类型变量的长度是雷同的,都是 32 位或者 4 个字节。

Java 中 WeakReference 与 SoftReference 的区别?

尽管 WeakReference 与 SoftReference 都有利于进步 GC 和 内存的效率,然而 WeakReference,一旦失去最初一个强援用,就会被 GC 回收,而软援用尽管不能阻止被回收,然而能够提早到 JVM 内存不足的时候。

JVM 选项 -XX:+UseCompressedOops 有什么作用?为什么要应用

当你将你的利用从 32 位的 JVM 迁徙到 64 位的 JVM 时,因为对象的指针从 32 位减少到了 64 位,因而堆内存会忽然减少,差不多要翻倍。这也会对 CPU 缓存(容量比内存小很多)的数据产生不利的影响。因为,迁徙到 64 位的 JVM 次要动机在于能够指定最大堆大小,通过压缩 OOP 能够节俭肯定的内存。通过 -XX:+UseCompressedOops 选项,JVM 会应用 32 位的 OOP,而不是 64 位的 OOP。

怎么通过 Java 程序来判断 JVM 是 32 位 还是 64 位?

你能够查看某些零碎属性如 sun.arch.data.model 或 os.arch 来获取该信息。

32 位 JVM 和 64 位 JVM 的最大堆内存别离是少数?

实践上说上 32 位的 JVM 堆内存能够达到 2^32,即 4GB,但实际上会比这个小很多。不同操作系统之间不同,如 Windows 零碎大概 1.5
GB,Solaris 大概 3GB。64 位 JVM 容许指定最大的堆内存,实践上能够达到 2^64,这是一个十分大的数字,实际上你能够指定堆内存大小
到 100GB。甚至有的 JVM,如 Azul,堆内存到 1000G 都是可能的。

JRE、JDK、JVM 及 JIT 之间有什么不同?

JRE 代表 Java 运行时(Java run-time),是运行 Java 援用所必须的。JDK 代表 Java 开发工具(Java development kit),是 Java 程序的开
发工具,如 Java 编译器,它也蕴含 JRE。JVM 代表 Java 虚拟机(Java virtual machine),它的责任是运行 Java 利用。JIT 代表即时编译
(Just In Time compilation),当代码执行的次数超过肯定的阈值时,会将 Java 字节码转换为本地代码,如,次要的热点代码会被准换为
本地代码,这样无利大幅度提高 Java 利用的性能。

解释 Java 堆空间及 GC?

当通过 Java 命令启动 Java 过程的时候,会为它分配内存。内存的一部分用于创立堆空间,当程序中创建对象的时候,就从对空间中分配内存。GC 是 JVM 外部的一个过程,回收有效对象的内存用于未来的调配。

JVM 内存区域


JVM 内存区域次要分为线程公有区域【程序计数器、虚拟机栈、本地办法区】、线程共享区域【JAVA 堆、办法区】、间接内存。

线程公有数据区域生命周期与线程雷同, 依赖用户线程的启动 / 完结 而 创立 / 销毁(在 Hotspot VM 内, 每个线程都与操作系统的本地线程间接映射, 因而这部分内存区域的存 / 否追随本地线程的生 / 死对应)。

线程共享区域随虚拟机的启动 / 敞开而创立 / 销毁。

间接内存并不是 JVM 运行时数据区的一部分, 但也会被频繁的应用: 在 JDK 1.4 引入的 NIO 提供了基于 Channel 与 Buffer 的 IO 形式, 它能够应用 Native 函数库间接调配堆外内存, 而后应用 DirectByteBuffer 对象作为这块内存的援用进行操作(详见: Java I/O 扩大), 这样就防止了在 Java 堆和 Native 堆中来回复制数据, 因而在一些场景中能够显著进步性能。

程序计数器(线程公有)

一块较小的内存空间, 是以后线程所执行的字节码的行号指示器,每条线程都要有一个独立的程序计数器,这类内存也称为“线程公有”的内存。
正在执行 java 办法的话,计数器记录的是虚拟机字节码指令的地址(以后指令的地址)。如果还是 Native 办法,则为空。这个内存区域是惟一一个在虚拟机中没有规定任何 OutOfMemoryError 状况的区域。

Spring Cloud 面试题

什么是 Spring Cloud?

Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与内部零碎的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于疾速构建执行无限数据处理的应用程序。

应用 Spring Cloud 有什么劣势?

应用 Spring Boot 开发散布式微服务时,咱们面临以下问题
1、与分布式系统相干的复杂性 - 这种开销包含网络问题,提早开销,带宽问题,平安问题。

2、服务发现 - 服务发现工具治理群集中的流程和服务如何查找和相互交谈。它波及一个服务目录,在该目录中注册服务,而后可能查找并连贯到该目录中的服务。

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

4、负载平衡 – 负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,地方处理单元,或磁盘驱动器的散布。

5、性能 - 问题 因为各种经营开销导致的性能问题。

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

服务注册和发现是什么意思?Spring Cloud 如何实现?

当咱们开始一个我的项目时,咱们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,增加和批改这些属性变得更加简单。有些服务可能会降落,而某些地位可能会发生变化。手动更改属性可能会产生问题。Eureka 服务注册和发现能够在这种状况下提供帮忙。因为所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器实现查找,因而无需解决服务地点的任何更改和解决。

负载平衡的意义什么?

在计算中,负载平衡能够改善跨计算机,计算机集群,网络链接,地方处理单元或磁盘驱动器等多种计算源的工作负载散布。负载平衡旨在优化资源应用,最大化吞吐量,最小化响应工夫并防止任何繁多资源的过载。应用多个组件进行负载平而不是单个组件可能会通过冗余来进步可靠性和可用性。负载平衡通常波及专用软件或硬件,例如多层交换机或域名零碎服务器过程。

什么是 Hystrix?它如何实现容错?

Hystrix 是一个提早和容错库,旨在隔离近程零碎,服务和第三方库的拜访点,当呈现故障是不可避免的故障时,进行级联故障并在简单的分布式系统中实现弹性。通常对于应用微服务架构开发的零碎,波及到许多微服务。这些微服务彼此合作。思考以下微服务

假如如果上图中的微服务 9 失败了,那么应用传统办法咱们将流传一个异样。但这依然会导致整个零碎解体。随着微服务数量的减少,这个问题变得更加简单。微服务的数量能够高达 1000. 这是 hystrix 呈现的中央 咱们将应用 Hystrix 在这种状况下的 Fallback 办法性能。咱们有两个服务 employee-consumer 应用由 employee-consumer 公开的服务。简化图如下所示

当初假如因为某种原因,employee-producer 公开的服务会抛出异样。咱们在这种状况下应用 Hystrix 定义了一个回退办法。这种后备办法应该具备与公开服务雷同的返回类型。如果裸露服务中出现异常,则回退办法将返回一些值。

什么是 Hystrix 断路器?咱们须要它吗?

因为某些起因,employee-consumer 公开服务会引发异样。在这种状况下应用 Hystrix 咱们定义了一个回退办法。如果在公开服务中产生异样,则回退办法返回一些默认值。

如果 firstPage method() 中的异样持续产生,则 Hystrix 电路将中断,并且员工使用者将一起跳过 firtsPage 办法,并间接调用回退办法。断路器的目标是给第一页办法或第一页办法可能调用的其余办法留出工夫,并导致异样复原。可能产生的状况是,在负载较小的状况下,导致异样的问题有更好的复原机会。

什么是服务熔断?什么是服务降级

熔断机制是应答雪崩效应的一种微服务链路爱护机制。当某个微服务不可用或者响应工夫太长时,会进行服务降级,进而熔断该节点微服务的调用,疾速返回“谬误”的响应信息。当检测到该节点微服务调用响应失常后复原调用链路。在 SpringCloud 框架里熔断机制通过 Hystrix 实现,Hystrix 会监控微服务间调用的情况,当失败的调用到肯定阈值,缺省是 5 秒内调用 20 次,如果失败,就会启动熔断机制。

服务降级,个别是从整体负荷思考。就是当某个服务熔断之后,服务器将不再被调用,此时客户端能够本人筹备一个本地的 fallback 回调,返回一个缺省值。这样做,尽管程度降落,但好歹可用,比间接挂掉强。

SpringBoot 和 SpringCloud 的区别?

SpringBoot 专一于疾速不便的开发单个个体微服务。

SpringCloud 是关注全局的微服务协调整顿治理框架,它将 SpringBoot 开发的一个个单体微服务整合并
治理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务 SpringBoot 能够来到 SpringCloud 独立应用开发我的项目,然而 SpringCloud 离不开 SpringBoot,属于依赖的关系.

SpringBoot 专一于疾速、不便的开发单个微服务个体,SpringCloud 关注全局的服务治理框架

说说 RPC 的实现原理

首先须要有解决网络连接通信的模块,负责连贯建设、治理和音讯的传输。其次须要有编解码的模块,因为网络通讯都是传输的字节码,需
要将咱们应用的对象序列化和反序列化。剩下的就是客户端和服务器端的局部,服务器端裸露要凋谢的服务接口,客户调用服务接口的一个代理实现,这个代理实现负责收集数据、编码并传输给服务器而后期待后果返回。

微服务 面试题

微服务,又称微服务 架构,是一种架构格调,它将应用程序构建为以业务畛域为模型的小型自治服务汇合。
艰深地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物。他们最后从应用各种资料的小局部开始,并持续从中构建一个大型蜂箱。这些细胞造成图案,产生坚硬的构造,将蜂窝的特定局部固定在一起。这里,每个细胞独立于另一个细胞,但它也与其余细胞相干。这意味着对一个细胞的侵害不会侵害其余细胞,因而,蜜蜂能够在不影响残缺蜂箱的状况下重建这些细胞。

微服务架构有哪些劣势?

  • 独立开发 – 所有微服务都能够依据各自的性能轻松开发
  • 独立部署 – 基于其服务,能够在任何应用程序中独自部署它们
  • 故障隔离 – 即便应用程序的一项服务不起作用,零碎仍可持续运行
  • 混合技术堆栈 – 能够应用不同的语言和技术来构建同一应用程序的不同服务
  • 粒度缩放 – 单个组件可依据须要进行缩放,无需将所有组件缩放在一起

微服务有哪些特点?

  • 解耦 – 零碎内的服务很大水平上是拆散的。因而,整个应用程序能够轻松构建,更改和扩大
  • 组件化 – 微服务被视为能够轻松更换和降级的独立组件
  • 业务能力 – 微服务非常简单,专一于繁多性能
  • 自治 – 开发人员和团队能够彼此独立工作,从而进步速度
  • 继续交付 – 通过软件创立,测试和批准的零碎自动化,容许频繁公布软件
  • 责任 – 微服务不关注应用程序作为我的项目。相同,他们将应用程序视为他们负责的产品
  • 扩散治理 – 重点是应用正确的工具来做正确的工作。这意味着没有标准化模式或任何技术模式。开发人员能够自由选择最有用的工具来解决他们的问题

    • 麻利 – 微服务反对麻利开发。任何新性能都能够疾速开发并再次抛弃

设计微服务的最佳实际是什么?

微服务架构如何运作?

微服务架构具备以下组件:

  • 客户端 – 来自不同设施的不同用户发送申请。
  • 身份提供商 – 验证用户或客户身份并颁发平安令牌。
  • API 网关 – 解决客户端申请。
  • 动态内容 – 包容零碎的所有内容。
  • 治理 – 在节点上均衡服务并辨认故障。
  • 服务发现 – 查找微服务之间通信门路的指南。
  • 内容交付网络 – 代理服务器及其数据中心的分布式网络。
  • 近程服务 – 启用驻留在 IT 设施网络上的近程访问信息。

微服务架构的优缺点是什么?

单片,SOA 和微服务架构有什么区别?

  • 单片架构相似于大容器,其中应用程序的所有软件组件组装在一起并严密封装。
  • 一个面向服务的架构是一种互相通信服务的汇合。通信能够波及简略的数据传递,也能够波及两个或多个协调某些流动的服务。
  • 微服务架构是一种架构格调,它将应用程序构建为以业务域为模型的小型自治服务汇合。

在应用微服务架构时,您面临哪些挑战?

  • 自动化组件:难以自动化,因为有许多较小的组件。因而,对于每个组件,咱们必须遵循 Build,Deploy 和 Monitor 的各个阶段。
  • 易感性:将大量组件保护在一起变得难以部署,保护,监控和辨认问题。它须要在所有组件四周具备很好的感知能力。
  • 配置管理:有时在各种环境中保护组件的配置变得艰难。
  • 调试:很难找到谬误的每一项服务。保护集中式日志记录和仪表板以调试问题至关重要。

SOA 和微服务架构之间的次要区别是什么?

SOA 和微服务之间的次要区别如下:

微服务有什么特点?

什么是畛域驱动设计?

什么是 REST / RESTful 以及它的用处是什么?

Representational State Transfer(REST)/ RESTful Web 服务是一种帮忙计算机系统通过 Internet 进行通信的架构格调。这使得微服务更容易了解和实现。微服务能够应用或不应用 RESTful API 实现,但应用 RESTful API 构建涣散耦合的微服务总是更容易。

小结

因为篇幅起因,只能展现其中一部分,更多面试题都整顿成了 PDF 文档,具体内容如下!心愿能帮忙到你面试前的温习且找到一个好的工作,也节俭你在网上搜寻材料的工夫来学习!

欢送关注我的公众号:前程有光,点击支付材料支付这份整顿好的 Java 面试题材料!

正文完
 0