前言
最近针对互联 公司面试问到的知识点,总结出了Java程序员面试涉及到的绝大部分面试题及答案分享给大家,希望能帮助到你面试前的复习且找到一个好的工作,也节省你在 上搜索资料的时间来学习。
内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等技术栈。
完整版Java面试题地址:JAVA后端面试题整合
1、您对微服务有何了解/h2>
微服务,又称微服务 架 构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 。
通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物。
他们最初从使用各种材料的小部分开始,并继续从中构建一个大型蜂箱。
这些细胞形成图案,产生坚固的结构,将蜂窝的特定部分固定在一起。
这里,每个细胞独立于另一个细胞,但它也与其他细胞相关。
这意味着对一个细胞的损害不会损害其他细胞,因此,蜜蜂可以在不影响完整蜂箱的情况下重建这些细胞。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-63qtq2jl-1618994260720)(https://upload-images.jianshu.io/upload_images/26078969-d085f6c0e0f71c88.pngmageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
图 1:微服务的蜂窝表示 – 微服务访谈问题请参考上图。
这里,每个六边形形状代表单独的服务组件。与蜜蜂的工作类似,每个敏捷团队都使用可用的框架和所选的技术堆栈构建单独的服务组件。
就像在蜂箱中一样,每个服务组件形成一个强大的微服务架构,以提供更好的可扩展性。
此外,敏捷团队可以单独处理每个服务组件的问题,而对整个应用程序没有影响或影响最小。
2、微服务架构有哪些优势/h2>
图 5:微服务 架构 – 微服务面试问题
· 客户端 – 来自不同设备的不同用户发送请求。
· 身份提供商 – 验证用户或客户身份并颁发安全令牌。
· API 关 – 处理客户端请求。
· 静态内容 – 容纳系统的所有内容。
· 管理 – 在节点上平衡服务并识别故障。
· 服务发现 – 查找微服务之间通信路径的指南。
· 内容交付 络 – 代理服务器及其数据中心的分布式 络。
· 远程服务 – 启用驻留在 IT 设备 络上的远程访问信息。
6、微服务架构的优缺点是什么/h2>
图 6: 单片 SOA 和微服务之间的比较 – 微服务访谈问题
· 单片架构类似于大容器,其中应用程序的所有软件组件组装在一起并紧密封装。
一个面向服务的架构是一种相互通信服务的集合。
通信可以涉及简单的数据传递,也可以涉及两个或多个协调某些活动的服务。
微服务架构是一种架构风格,它将应用程序构建为以业务域为模型的小型自治服务集合。
8、在使用微服务架构时,您面临哪些挑战/h2>
开发一些较小的微服务听起来很容易,但开发它们时经常遇到的挑战如下。
自动化组件:难以自动化,因为有许多较小的组件。
因此,对于每个组件,我们必须遵循 Build,Deploy 和 Monitor 的各个阶段。
易感性:将大量组件维护在一起变得难以部署,维护,监控和识别问题。
它需要在所有组件周围具有很好的感知能力。
配置管理:有时在各种环境中维护组件的配置变得困难。
调试:
很难找到错误的每一项服务。
维护集中式日志记录和仪表板以调试问题至关重要。
9、SOA 和微服务架构之间的主要区别是什么/h2>
SOA 和微服务之间的主要区别如下:
图 8: DDD 原理 – 微服务面试问题
12、为什么需要域驱动设计(DDD)/h2>
图 10: Spring Boot 的因素 – 微服务面试问题
18、什么是 Spring 引导的执行器/h2>
Spring Boot 执行程序提供了 restful Web 服务,以访问生产环境中运行应用程序的当前状态。
在执行器的帮助下,您可以检查各种指标并监控您的应用程序。
19、什么是 Spring Cloud/h2>
根据 Spring Cloud 的官方 站,Spring Cloud 为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,领导选举,分布式会话,集群状态)。
20、Spring Cloud 解决了哪些问题/h2>
在使用 Spring Boot 开发分布式微服务时,我们面临的问题很少由 Spring Cloud解决。
· 与分布式系统相关的复杂性 – 包括 络问题,延迟开销,带宽问题,安全问题。
· 处理服务发现的能力 – 服务发现允许集群中的进程和服务找到彼此并进行通信。
· 解决冗余问题 – 冗余问题经常发生在分布式系统中。
· 负载平衡 – 改进跨多个计算资源(例如计算机集群, 络链接,中央处理单元)的工作负载分布。
· 减少性能问题 – 减少因各种操作开销导致的性能问题。
21、在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处/h2>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-heLTYOGs-1618994260729)(https://upload-images.jianshu.io/upload_images/26078969-aadec10fbe5f8cc3.pngmageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
在测试目标只关注 Spring MVC 组件的情况下,WebMvcTest 注释用于单元测试Spring MVC 应用程序。
在上面显示的快照中,我们只想启动 ToTestController。
执行此单元测试时,不会启动所有其他控制器和映射。
22。你能否给出关于休息和微服务的要点/h2>
虽然您可以通过多种方式实现微服务,但 REST over HTTP 是实现微服务的一种方式。
REST 还可用于其他应用程序,如 Web 应用程序,API 设计和 MVC 应用程序,以提供业务数据。
微服务是一种体系结构,其中系统的所有组件都被放入单独的组件中,这些组件可以单独构建,部署和扩展。
微服务的某些原则和最佳实践有助于构建弹性应用程序。
简而言之,您可以说 REST 是构建微服务的媒介。
23、什么是不同类型的微服务测试/h2>
在使用微服务时,由于有多个微服务协同工作,测试变得非常复杂。因此,测试分为不同的级别。
在底层,我们有面向技术的测试,如单元测试和性能测试。这些是完全自动化的。
在中间层面,我们进行了诸如压力测试和可用性测试之类的探索性测试。
在顶层, 我们的 验收测试数量很少。这些验收测试有助于利益相关者理解和验证软件功能。
24、您对 Distributed Transaction 有何了解/h2>
分布式事务是指单个事件导致两个或多个不能以原子方式提交的单独数据源的突变的任何情况。
在微服务的世界中,它变得更加复杂,因为每个服务都是一个工作单元,并且大多数时候多个服务必须同工作才能使业务成功。
25、什么是 Idempotence 以及它在哪里使用/h2>
幂等性是能够以这样的方式做两次事情的特性,即最终结果将保持不变,即好像它只做了一次。
用法:在远程服务或数据源中使用 Idempotence,这样当它多次接收指令时,它只处理指令一次。
26、什么是有界上下文/h2>
有界上下文是域驱动设计的核心模式。DDD 战略设计部门的重点是处理大型模型和团队。
DDD 通过将大型模型划分为不同的有界上下文并明确其相互关系来处理大型模型。
27、什么是双因素身份验证/h2>
双因素身份验证为帐户登录过程启用第二级身份验证。
图 14:测试层次 – 微服务面试问题
35、Container 在微服务中的用途是什么/h2>
容器是管理基于微服务的应用程序以便单独开发和部署它们的好方法。您可以将微服务封装在容器映像及其依赖项中,然后可以使用它来滚动按需实例的微服务,而无需任何额外的工作。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mJrcS9xB-1618994260732)(https://upload-images.jianshu.io/upload_images/26078969-1ede46836804d3e5.pngmageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
图 15: 容器的表示及其在微服务中的使用方式 – 微服务访谈问题
36、什么是微服务架构中的 DRY/h2>
DRY 代表不要重复自己。它基本上促进了重用代码的概念。这导致开发和共享库,这反过来导致紧密耦合。
37、什么是消费者驱动的合同(CDC)/h2>
这基本上是用于开发微服务的模式,以便它们可以被外部系统使用。
当我们处理微服务时,有一个特定的提供者构建它,并且有一个或多个使用微服务的消费者。
通常,提供程序在 XML 文档中指定接口。但在消费者驱动的合同中,每个服务消费者都传达了提供商期望的接口。
38、Web,RESTful API 在微服务中的作用是什么/h2>
微服务架构基于一个概念,其中所有服务应该能够彼此交互以构建业务功能。
因此,要实现这一点,每个微服务必须具有接口。
这使得 Web API 成为微服务的一个非常重要的推动者。
RESTful API 基于 Web 的开放 络原则,为构建微服务架构的各个组件之间的接口提供了最合理的模型。
39、您对微服务架构中的语义监控有何了解/h2>
语义监控,也称为 综合监控, 将自动化测试与监控应用程序相结合,以检测业务失败因素。
40、我们如何进行跨功能测试/h2>
跨功能测试是对非功能性需求的验证,即那些无法像普通功能那样实现的需求。
41、我们如何在测试中消除非决定论/h2>
非确定性测试(NDT)基本上是不可靠的测试。所以,有时可能会发生它们通过,显然有时它们也可能会失败。
当它们失败时,它们会重新运行通过。
从测试中删除非确定性的一些方法如下:
1、 隔离
2、 异步
3、 远程服务
4、 隔离
5、 时间
6、 资源泄漏
42、Mock 或 Stub 有什么区别/h2>
存根 一个有助于运行测试的虚拟对象。
在某些可以硬编码的条件下提供固定行为。
永远不会测试存根的任何其他行为。
例如,对于空堆栈,您可以创建一个只为 empty()方法 返回 true 的存根。
因此,这并不关心堆栈中是否存在元素。
嘲笑 一个虚拟对象,其中最初设置了某些属性。
此对象的行为取决于 set 属性。
也可以测试对象的行为。
例如:
对于 Customer 对象,您可以通过设置名称和年龄来模拟它。
您可以将 age设置为 12,然后测试 isAdult()方法,该方法将在年龄大于 18 时返回 true。
因此,您的 Mock Customer 对象适用于指定的条件。
43、您对 Mike Cohn 的测试金字塔了解多少/h2>
Mike Cohn 提供了一个名为 Test Pyramid 的模型。这描述了软件开发所需的自动化测试类型。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJiAd9Io-1618994260732)(https://upload-images.jianshu.io/upload_images/26078969-06ed8d8ee0884b0d.pngmageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
图 16: Mike Cohn 的测试金字塔 – 微服务面试问题
根据金字塔,第一层的测试数量应该最高。
在服务层,测试次数应小于单元测试级别,但应大于端到端级别。
44、Docker 的目的是什么/h2>
Docker 提供了一个可用于托管任何应用程序的容器环境。
在此,软件应用程序和支持它的依赖项紧密打包在一起。
因此,这个打包的产品被称为 Container,因为它是由 Docker 完成的,所以它被称为 Docker 容器!
45、什么是金丝雀释放/h2>
Canary Releasing 是一种降低在生产中引入新软件版本的风险的技术。
这是通过将变更缓慢地推广到一小部分用户,然后将其发布到整个基础架构,即将其提供给每个人来完成的。
46、什么是持续集成(CI)/h2>
持续集成(CI)是每次团队成员提交版本控制更改时自动构建和测试代码的过程。
这鼓励开发人员通过在每个小任务完成后将更改合并到共享版本控制存储库来共享代码和单元测试。
47、什么是持续监测/h2>
持续监控深入监控覆盖范围,从浏览器内前端性能指标,到应用程序性能,再到主机虚拟化基础架构指标。
48、架构师在微服务架构中的角色是什么/h2>
微服务架构中的架构师扮演以下角色:
决定整个软件系统的布局。
帮助确定组件的分区。因此,他们确保组件相互粘合,但不紧密耦合。
与开发人员共同编写代码,了解日常生活中面临的挑战。
为开发微服务的团队提供某些工具和技术的建议。
提供技术治理,以便技术开发团队遵循微服务原则。
49、我们可以用微服务创建状态机吗/h2>
我们知道拥有自己的数据库的每个微服务都是一个可独立部署的程序单元,这反过来又让我们可以创建一个状态机。
因此,我们可以为特定的微服务指定不同的状态和事件。
例如,我们可以定义 Order 微服务。订单可以具有不同的状态。
Order 状态的转换可以是 Order 微服务中的独立事件。
50、什么是微服务中的反应性扩展/h2>
Reactive Extensions 也称为 Rx。
这是一种设计方法,我们通过调用多个服务来收集结果,然后编译组合响应。这些调用可以是同步或异步,阻塞或非阻塞。
Rx是分布式系统中非常流行的工具,与传统流程相反。
完整版Java面试题地址:JAVA后端面试题整合
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92402 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!