“全面总结遇到的面试问题,和大家一起学习,也是对自己的总结。”
今天跟小伙伴们分享一下我花了近一个月的时间参考了网上很多优质的博文和项目,以及面试前复习过的题,整理了一套比较全面的Java面试题。 很多朋友就是靠着这些内容进行评测,并得到了各大厂商的报价。 他们也帮助了很多Java学习者。 我希望它也能帮助你。
另外,再宣传一下我做过的一些java项目:
希望有兴趣的同学可以一起学习。
也可以直接访问(直接在线观看最新版Java面试题+入门教程):
微服务框架: 1、Boot有什么优势?
答:Boot的优点是:
减少开发、测试时间和精力。
使用有助于避免使用 XML。
避免大量Maven导入和各种版本冲突。
提供开发方法思路。
通过提供默认值快速开始开发。
不需要单独的网络服务器。 这意味着您不再需要启动或执行其他操作。
由于没有 web.xml 文件,因此需要较少的配置。 只需添加@注解的类,然后添加@Bean注解的方法,对象就会像以前一样自动加载和管理。 您甚至可以将 @ 添加到 bean 方法以自动加载所需的依赖项。
基于环境的配置 使用这些属性,您可以将正在使用的环境传递给应用程序:-.. = {}。 加载主应用程序属性文件后,后续应用程序属性文件将加载到 ({} .) 中。
2. 如何在不重新启动服务器的情况下在启动时重新加载更改?
答:这可以使用DEV工具来实现。 通过此依赖项,您可以保存所有更改,并且嵌入式将重新启动。 Boot 有一个 () 模块,有助于提高开发人员的工作效率。 Java 开发人员面临的一个主要挑战是自动将文件更改部署到服务器并自动重新启动服务器。 开发人员可以在启动时重新加载更改,而无需重新启动服务器。 这将消除每次手动部署更改的需要。 Boot 在发布第一个版本时并没有这个功能。 这是开发人员最需要的功能。 模块充分满足开发者的需求。 该模块在生产环境中将被禁用。 它还提供H2数据库控制台,以便更好地测试应用程序。
3. 常见的系统架构风格有哪些? 各自的优点和缺点是什么?
1. 单体架构
单体架构也称为单体系统或单体应用程序。 它是一种将系统中的所有功能和模块耦合到一个应用程序中的架构方法。
单体架构的特点:打包成独立的单元(定向成唯一的jar包或war包),并作为进程运行。
单体架构的优点和缺点
优势:
项目易于管理
易于部署
缺点:
测试成本高
可扩展性差
可靠性差
迭代是困难的
跨语言能力差
团队合作很难
2.MVC架构
MVC架构特点:
MVC是三个词的缩写:模型(Model)、视图(View)和控制器()。 下面我们就从这三个方面来讲解MVC中的三要素。
模型是指数据模型,是对客观事物的抽象。 例如,博客文章可以由 Post 类表示。 那么,这个Post类就是一个数据对象。 同时,博文也有一些业务逻辑,比如发布、回收、评论等,一般表现为类方法,这也是该模型的内容和范围。 对于Model来说,主要是数据、业务逻辑和业务规则。 相对而言,这是MVC中比较稳定的部分,一般完成后不会发生变化。 开发初期最重要的任务主要是模型的实现。 这部分写得好的话,后面改动就会少一些,开发也会快一些。
View指视图,是呈现给用户的界面。 它是模型的具体表现形式,也是收集用户输入的地方。 例如,您在博客上看到的一篇文章就是 Post 类的体现。 View的目的是为用户交互提供一个界面。 也就是说,对于用户来说,只有View是可见、可操作的。 事实上,这也是事实。 你不会让用户看到Model,更不会让用户直接操作Model。 您只让用户看到您希望他们看到的内容。 这就是View 要做的事情。 它往往是MVC中经常更改的部分,也是客户经常要求更改的地方。 今天您可能以一种形式呈现您的博客文章,明天它们可能会以另一种形式呈现。
指控制器,主要负责与模型和视图打交道。 换句话说,模型和视图通常不会直接相互交互,也永远不会相互交互。 视图不会对模型执行任何操作,模型也不会输出任何用于呈现的内容,例如 HTML 代码。 如果这两个人不再合作,那么就必须有人来做,而他们也只能做。 它用于决定使用哪个模型、对模型执行哪些操作以及为视图准备哪些数据。 它是MVC中沟通的桥梁。
MVC架构的优缺点
优势:
各司其职,互不干扰。
在MVC模型中,三层各司其职,因此如果任一层的需求发生变化,只需要更改相应层的代码,而不会影响其他层的代码。
有利于分工发展。
在MVC模型中,由于系统是分层的,所以可以更好地实现开发中的分工。 Web设计人员可以在视图层开发JSP,熟悉业务的开发人员可以开发业务层,其他开发人员可以开发控制层。
有利于组件的复用。
分层更有利于组件的复用。 例如,控制层可以独立做成一个可用的组件,视图层也可以做成通用的操作界面。
缺点:
增加了系统结构和实现的复杂性。
视图和控制器之间的连接太紧。
通过视图访问模型数据的效率低下。
3.面向服务的架构(SOA)
面向服务的体系结构 (SOA) 是一种组件模型,它将应用程序拆分为功能单元(称为服务),这些功能单元通过这些服务之间定义良好的接口和契约进行链接。 接口以中立的方式定义,应该独立于实现服务的硬件平台、操作系统和编程语言。 这使得各种系统中构建的服务能够以统一且通用的方式进行交互。
面向服务架构的特点:
系统由多个服务组成
每个服务都可以独立部署
每个服务彼此松散耦合。 该服务内部高内聚,外部低耦合。 高内聚意味着每个服务只专注于完成一项功能。
服务的优点和缺点
优势:
易于测试
高度可扩展
可靠性强
跨语言关卡将更加灵活
团队合作很容易
系统迭代很容易
缺点:
运维成本过高且部署数量较多
接口兼容多版本
分布式系统的复杂性
分布式交易
4、AKF分裂原理是什么?
业界对于可扩展的系统架构设计有一个简单的理念,就是通过增加机器来解决容量和可用性问题。 (如果一个不起作用,则使用两个)。
我开玩笑:(世界上没有什么是一顿烧烤解决不了的,有的话就两个。)
在“云计算”概念疯狂流行的今天,这个概念已经被广泛认可! 对于规模快速增长的系统来说,容量和性能问题无疑是最重要的。 然而,随着时间的推移,系统规模的增大,除了性能和容量的问题外,我们还需要面对功能和模块数量的增加带来的系统的复杂性以及差异性。因业务变化而带来的拨备。 服务问题。 对于很多系统来说,这些问题在架构设计时没有充分考虑,导致系统重构成为常态,从而影响业务交付能力,浪费人力财力! 对此,《The Art of 》一书提出了一种更加系统的可扩展模型——AKF可扩展立方体(Cube)。 沿着这个立方体设置的三个坐标轴是:X、Y、Z。
Y 轴缩放将巨大的单体应用程序拆分为多个服务。 每个服务都实现了一组相关的功能,例如订单管理、客户管理等。工程中常见的解决方案是面向服务的架构(SOA)。例如,对于一个电子商务平台,我们可以将其拆分为不同的服务
X轴扩展和我们之前简单的概念是一致的,通过绝对平等地复制服务和数据来解决容量和可用性的问题。 其实就是运行微服务的多个实例,创建集群加负载均衡的模型。
Z轴扩展通常是指根据请求者或用户的独特需求对系统进行划分,并使划分后的子系统彼此隔离但又完整。 以一家汽车生产工厂为例:为了发展在中国的业务,或者说是为了利用中国廉价劳动力的优势,福特在中国建立了一个完整的分工厂,与它的美国工厂一样,负责整车生产。生产。 这是Z轴扩展。
5.什么是云?
云是一个微服务框架。 与Dubbo等RPC框架相比,Cloud提供了一整套分布式系统解决方案。
Cloud封装了微服务基础框架的多个开源组件,同时实现了与云平台、Boot开发框架的集成。
云提供了一种简单的方式来操作配置管理、服务治理、熔断机制、智能路由、微代理、控制总线、一次性令牌、全局一致性锁、选举、分发、集群状态管理等开发涉及的操作的微服务架构。 开发方法。
云为开发者提供了快速构建分布式系统的工具。 开发者可以快速启动服务或构建应用,并可以快速连接云平台资源。
6、Cloud和Dubbo有什么区别?
7. 什么是注册中心?
它是一个开发的服务发现组件,本身是一个基于 REST 的服务。 Cloud将其集成到其子项目cloud中,实现云服务的注册和发现,同时还提供负载均衡、故障转移等能力。
8. 《Brief Talk》中的三个角色是什么?
1、
通过Get、Renew等接口提供服务注册和发现。
2、()
服务提供者
注册您自己的服务实例
3. ( )
服务调用者
通过获取服务列表来消费服务。
9.什么是
1.它是一个基于Http和TCP的客户端负载均衡工具,基于实现。
2、它不像云服务注册中心、配置中心、API网关那样独立部署,但几乎存在于每个云微服务中。 Feign提供的声明式服务调用也是基于此实现的。
3、默认提供了很多负载均衡算法,比如轮询、随机等,甚至还包括自定义的负载均衡算法。
10、集中式和进程内负载均衡的区别
目前业界主流的负载均衡方案可以分为两类:
第一种:集中式负载均衡,即之间使用独立的负载均衡设施(可以是硬件,如F5,也可以是软件,如nginx);
第二类:进程内负载均衡,集成负载均衡逻辑,从服务注册中心获知有哪些地址可用,然后从这些地址中选择一个合适的。
它属于后者。 它只是一个类库,集成到进程中,通过它获得地址。
11、常见的负载均衡策略有哪些?
12.简单介绍一下什么是Feign?
Feign 是一种声明式、模板化的 HTTP 客户端技术(仅用于)。
13.什么是声明式,它有什么作用,它解决什么问题?
声明式调用调用远程方法就像调用本地方法一样; 不知道远程http请求。
1. 使用HTTP请求远程服务时,云的声明式调用可以提供与调用本地方法相同的体验。 开发人员完全不知道这是一个远程方法,更不用说 HTTP 请求了。
2、和Dubbo一样,直接调用接口方法调用,不需要通过常规的Http构造请求,然后解析返回数据。
3、解决了让开发者像调用本地方法一样调用远程接口的问题。 无需关注与远程交互的细节,更不用关注分布式环境的开发。
14.什么是服务的灾难性雪崩效应?
在微服务架构中,一个请求调用多个服务是很常见的。 例如,客户端访问服务A,服务A需要调用服务B,服务B需要调用服务C。如果服务B或服务C由于网络原因或自身原因无法及时响应,服务A将被处于阻塞状态,直到服务 BC 服务响应。 如果此时大量请求涌入,会消耗容器的线程资源,导致服务瘫痪。由于服务之间的依赖关系,故障会传播,造成连锁反应,会给整个微服务系统带来灾难性的后果。 这就是服务故障的“雪崩”效应。
15.如何解决灾难性的雪崩效应?
降级
超时或资源不足(线程或信号量)时会降级。 降级后,可以配合降级接口返回底层数据。 实现一个方法,当请求后端服务出现异常时,可以使用该方法返回的值。
隔离(线程池隔离和信号量隔离)
限制调用分布式服务的资源使用。 某个被调用服务出现问题不会影响其他服务调用。
保险丝
当故障率(如因网络故障/超时导致故障率较高)达到阈值时,自动触发降级,熔断触发的快速故障将快速恢复。
缓存
提供请求缓存。
请求合并
提供合并拉取请求。
16、线程池隔离和信号量隔离的区别
17.请回答微服务架构常见的六种设计模式是什么?
答:有以下六种
代理设计模式
聚合设计模式
链条设计模式
聚合链设计模式
数据共享设计模式
异步消息传递设计模式
18.什么是网关服务?
答:网关服务通常是外部访问服务的唯一接口。 所有内部服务的访问都必须首先经过网关服务。 网关服务的主要功能是消息解析、过滤、路由、转发等。
19、网关服务中,路由器的四种路由规则方式是什么?
答案:使用URL指定的路由方式
使用服务名称指定路由方法
如何排除路由故障
如何给路由添加前缀
20.为什么要使用云配置中心? 它解决什么问题?
21.什么是云总线
22.消息驱动解决什么问题?
23. 为什么使用微服务跟踪? 它解决什么问题?
24.什么是ELK (, , )
ELK是三个工具的集合,++。 这三个工具的结合形成了实用且易于使用的监控架构。 很多公司用它来搭建可视化的海量日志分析平台。
1.
是一个基于. 它提供了一个基于 Web 界面的分布式多用户全文搜索引擎。 它采用 Java 开发,并根据许可条款作为开源发布,目前是流行的企业级搜索引擎。 专为云计算应用而设计,可实现实时搜索,稳定、可靠、快速、易于安装和使用。
2.
它是管理日志和事件的工具。 您可以使用它来收集日志、转换日志、解析日志并将其作为数据提供给其他模块调用,例如搜索、存储等。
3.
它是一个优秀的前端日志展示框架,可以将日志非常详细地转换成各种图表,为用户提供强大的数据可视化支持。
25. 为什么使用ELK,它解决什么问题?
26.什么是分布式追踪:Zipki?
由于篇幅原因,这里只能分享一些面试题的截图。 如果您需要以上面试题及答案完整指南,可以在评论区留言! !
采访总结
其实心态也是整个备考过程中非常重要的一环,就像我们参加高考的时候,心态一定要好。 也许学生已经准备了很长时间的考试,然后提交了很多简历却没有面试机会。
首先,你需要检查一下简历是否写得不好。 一般来说,多半是因为这个原因,没有机会。 你可以和你的学长讨论一下如何修改你的简历。 然后尝试再次发送。 或者如果你有面试机会但没有获得下一轮面试,可能是因为你的技能还不够扎实。 做好基础准备。 我推荐你:
写一篇技术博客
你不需要自己建立一个博客(如果可以就更好了),选择一个平台,CSDN或者掘金都是不错的平台,然后你就可以开始你的表演了。 可以写一些最近的学习经历、面试技巧、黑科技工具的使用等等,写博客的好处有很多。 它不仅可以锻炼你的表达逻辑,还可以巩固你的知识体系。 两全其美,为什么不呢?
另外,可以多逛逛技术社区,了解前端的动态,多关注最近的新技术、新框架、新八卦等,尽量帮助别人解答一些问题。 其他人愿意倾听,但不要找借口。 分享的意愿比技术本身更重要。
写项目
找到一个想法,使用以前学到的知识,或者用新知识重建旧项目都是生产力的方法。 如果担心自己的知识不够扎实,可以查阅一些优质的开源项目,看看别人写的。 你应该对项目中使用技术的部分进行注释,否则你不会知道它是你在一个月内写的。
交流想法
如果可能的话,你可以找同学分享你最近的学习成果。 技术学习的过程是枯燥的。 找到相同的学习伙伴非常重要,这可以给你继续学习的动力。 两个人互相学习、互相提高也是一种生产力的方式。
面试。 如果你觉得自己的技术不错,基本功也不错,就尝试去面试。 面试官通常比你水平高很多,知识也比你多,所以面试是一个非常重要的过程。 您还可以检查差距并加以改进。 自己的知识体系。
包起来
我知道内容很多,你可以先点赞并保存,但一定要读。 当你读懂了大厂面试题的所有知识点,以后就没有过不了的Java面试了。 资源已经给你整理好了,如果你还不学习的话会有点混乱。
如果你不想每次面试都像市场上的廉价白菜一样被挑,那就让自己变得更强吧。 奋斗吧,年轻人! ! !