建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

前言

对于大厂面试,我想要强调的一点就是心态真的很重要,是决定你在面试过程当中发挥的关键,若不能正常发挥,极可能就由于一个小失误与offer失之交臂,因此必定要重视起来。另外提醒一点,充分复习,是消除你紧张的心理状态的关键,但你复习充分了,天然面试过程当中就要有底气得多。java

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 内存区域

建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上
JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。

线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而 建立/销毁(在 Hotspot VM 内, 每一个线程都与操做系统的本地线程直接映射, 所以这部份内存区域的存/否跟随本地线程的生/死对应)。

线程共享区域随虚拟机的启动/关闭而建立/销毁。

直接内存并非 JVM 运行时数据区的一部分, 但也会被频繁的使用: 在 JDK 1.4 引入的 NIO 提供了基于 Channel 与 Buffer 的 IO 方式, 它可使用 Native 函数库直接分配堆外内存, 而后使用DirectByteBuffer 对象做为这块内存的引用进行操做(详见: Java I/O 扩展), 这样就避免了在 Java堆和 Native 堆中来回复制数据, 所以在一些场景中能够显著提升性能。
建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

程序计数器(线程私有)

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

Spring Cloud面试题

什么是 Spring Cloud?

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

使用 Spring Cloud 有什么优点?

使用 Spring Boot 开发分布式微服务时,咱们面临如下问题
一、与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。

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

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

四、负载平衡 --负载平衡改善跨多个计算资源的工做负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。

五、性能-问题 因为各类运营开销致使的性能问题。

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

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

当咱们开始一个项目时,咱们一般在属性文件中进行全部的配置。随着愈来愈多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会降低,而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka 服务注册和发现能够在这种状况下提供帮助。因为全部服务都在 Eureka 服务器上注册并经过调用 Eureka 服务器完成查找,所以无需处理服务地点的任何更改和处理。

负载平衡的意义什么?

在计算中,负载平衡能够改善跨计算机,计算机集群,网络连接,中央处理单元或磁盘驱动器等多种计算源的工做负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源的过载。使用多个组件进行负载平而不是单个组件可能会经过冗余来提升可靠性和可用性。负载平衡一般涉及专用软件或硬件,例如多层交换机或域名系统服务器进程。

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

Hystrix 是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,中止级联故障并在复杂的分布式系统中实现弹性。一般对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协做。思考如下微服务
建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上
假设若是上图中的微服务 9 失败了,那么使用传统方法咱们将传播一个异常。但这仍然会致使整个系统崩溃。 随着微服务数量的增长,这个问题变得更加复杂。微服务的数量能够高达 1000.这是 hystrix 出现的地方 咱们将使用 Hystrix 在这种状况下的 Fallback 方法功能。咱们有两个服务 employee-consumer 使用由 employee-consumer 公开的服务。简化图以下所示
建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上
如今假设因为某种缘由,employee-producer 公开的服务会抛出异常。咱们在这种状况下使用 Hystrix 定义了一个回退方法。这种后备方法应该具备与公开服务相同的返回类型。若是暴露服务中出现异常,则回退方法将返回一些值。



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

因为某些缘由,employee-consumer 公开服务会引起异常。在这种状况下使用Hystrix 咱们定义了一个回退方法。若是在公开服务中发生异常,则回退方法返回一些默认值。
建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上
若是 firstPage method() 中的异常继续发生,则 Hystrix 电路将中断,而且员工使用者将一块儿跳过 firtsPage 方法,并直接调用回退方法。断路器的目的是给第一页方法或第一页方法可能调用的其余方法留出时间,并致使异常恢复。可能发生的状况是,在负载较小的状况下,致使异常的问题有更好的恢复机会 。
建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上


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

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

服务降级,通常是从总体负荷考虑。就是当某个服务熔断以后,服务器将再也不被调用,此时客户端能够本身准备一个本地的fallback回调,返回一个缺省值。这样作,虽然水平降低,但好歹可用,比直接挂掉强。

SpringBoot和SpringCloud的区别?

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

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

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

说说 RPC 的实现原理

首先须要有处理网络链接通信的模块,负责链接创建、管理和消息的传输。其次须要有编解码的模块,由于网络通信都是传输的字节码,需
要将咱们使用的对象序列化和反序列化。剩下的就是客户端和服务器端的部分,服务器端暴露要开放的服务接口,客户调用服务接口的一个代理实现,这个代理实现负责收集数据、编码并传输给服务器而后等待结果返回。

微服务 面试题

微服务,又称微服务 架构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 。
通俗地说,你必须看到蜜蜂如何经过对齐六角形蜡细胞来构建它们的蜂窝状物。他们最初从使用各类材料的小部分开始,并继续从中构建一个大型蜂箱。这些细胞造成图案,产生坚固的结构,将蜂窝的特定部分固定在一块儿。这里,每一个细胞独立于另外一个细胞,但它也与其余细胞相关。这意味着对一个细胞的损害不会损害其余细胞,所以,蜜蜂能够在不影响完整蜂箱的状况下重建这些细胞。
建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

微服务架构有哪些优点?

建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

  • 独立开发 – 全部微服务均可以根据各自的功能轻松开发
  • 独立部署 – 基于其服务,能够在任何应用程序中单独部署它们
  • 故障隔离 – 即便应用程序的一项服务不起做用,系统仍可继续运行
  • 混合技术堆栈 – 可使用不一样的语言和技术来构建同一应用程序的不一样服务
  • 粒度缩放 – 单个组件可根据须要进行缩放,无需将全部组件缩放在一块儿

    微服务有哪些特色?

    建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

  • 解耦 – 系统内的服务很大程度上是分离的。所以,整个应用程序能够轻松构建,更改和扩展
  • 组件化 – 微服务被视为能够轻松更换和升级的独立组件
  • 业务能力 – 微服务很是简单,专一于单一功能
  • 自治 – 开发人员和团队能够彼此独立工做,从而提升速度
  • 持续交付 – 经过软件建立,测试和批准的系统自动化,容许频繁发布软件
  • 责任 – 微服务不关注应用程序做为项目。相反,他们将应用程序视为他们负责的产品
  • 分散治理 – 重点是使用正确的工具来作正确的工做。这意味着没有标准化模式或任何技术模式。开发人员能够自由选择最有用的工具来解决他们的问题
    • 敏捷 – 微服务支持敏捷开发。任何新功能均可以快速开发并再次丢弃

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

      建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

      微服务架构如何运做?

      微服务架构具备如下组件:
      建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

  • 客户端 – 来自不一样设备的不一样用户发送请求。
  • 身份提供商 – 验证用户或客户身份并颁发安全令牌。
  • API 网关 – 处理客户端请求。
  • 静态内容 – 容纳系统的全部内容。
  • 管理 – 在节点上平衡服务并识别故障。
  • 服务发现 – 查找微服务之间通讯路径的指南。
  • 内容交付网络 – 代理服务器及其数据中心的分布式网络。
  • 远程服务 – 启用驻留在 IT 设备网络上的远程访问信息。

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

    建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

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

    建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

  • 单片架构相似于大容器,其中应用程序的全部软件组件组装在一块儿并紧密封装。
  • 一个面向服务的架构是一种相互通讯服务的集合。通讯能够涉及简单的数据传递,也能够涉及两个或多个协调某些活动的服务。
  • 微服务架构是一种架构风格,它将应用程序构建为以业务域为模型的小型自治服务集合。

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

  • 自动化组件:难以自动化,由于有许多较小的组件。所以,对于每一个组件,咱们必须遵循 Build,Deploy 和 Monitor 的各个阶段。
  • 易感性:将大量组件维护在一块儿变得难以部署,维护,监控和识别问题。它须要在全部组件周围具备很好的感知能力。
  • 配置管理:有时在各类环境中维护组件的配置变得困难。
  • 调试:很难找到错误的每一项服务。维护集中式日志记录和仪表板以调试问题相当重要。

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

    SOA 和微服务之间的主要区别以下:
    建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

    微服务有什么特色?

    建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

    什么是领域驱动设计?

    建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

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

    Representational State Transfer(REST)/ RESTful Web 服务是一种帮助计算机系统经过 Internet 进行通讯的架构风格。这使得微服务更容易理解和实现。微服务可使用或不使用 RESTful API 实现,但使用 RESTful API 构建松散耦合的微服务老是更容易。

    小结

    因为篇幅缘由,只能展现其中一部分,更多面试题都整理成了PDF文档,具体内容以下!但愿能帮助到你面试前的复习且找到一个好的工做,也节省你在网上搜索资料的时间来学习!
    建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上
    欢迎关注个人公众号:前程有光,点击领取资料领取这份整理好的Java面试题资料!

相关文章
相关标签/搜索