43道Java架构师面试题以及答案解析,快测试一下你会不会?

2021年6月16日 13点热度 0条评论 来源: 琪琪202

前言

2021年通用架构师面试问题,面试中较为笼统的部分不一定只专注于您的简历。它还可能包含一些有关您从事的项目以及如何管理时间和优先级的问题。作为架构师去参加面试的时候只有自己平时的积累可能是源源不够的,我们还要去了解一些平时工作中可能不会接触到的技术相关来丰富我们自己的眼界,也需要去了解所要面试公司的架构的演进,有一个对应的了解,会对我们的职业生涯带来更多的帮助。

## 一、架构师的日常职责是什么 ?

总体而言,架构师负责软件领域的顶层设计。 架构师需要根据公司的发展,规划企业未来若干年的架构,制定可落地的架构方案,解决技术难题,做技术选型与攻关,落地具体的架构。优秀的架构师既能做架构方案,也能写具体的架构代码。

## 二、开发工程师和架构师有何区别

工作重点不同:架构师重点在于前期的架构规划,需要制定可落地的架构方案,结合公司的业务场景、团队的技术水平等因素做技术选型,解决技术难题等等;而开发工程师重点在于具体的落地,特别的, 开发工程师的工作重点落地具体的功能。

能力要求不同:架构师要求比较高,要有架构的广度、深度,需要掌握一系列的架构技术栈,要求有架构实战经验,要有很强的系统分析、系统架构、系统设计的能力。 开发工程师主要是要求熟悉基本的技术栈,熟悉相关业务,快速落地产品的相关功能。

## 三、业务架构师与基础架构师区别

对于java程序猿而言,架构师分为业务架构师,基础架构师两大类,从高级开发转成业务架构师,难度小,出成绩快。业务架构和基础架构有70%是一样的,那就是都要求有架构能力,剩下的30%是业务架构要求熟练掌握业务,制定架构方案,架构落地,基础架构则是100%要求纯技术。短期而言,看似基础架构更风光,其实不然。业务架构发展前景更好一些,因为35岁以后,拼的是综合能力,不再是纯架构能力。业务架构要求有更好的沟通能力,架构规划,架构落地能力,一定的行业业务背景,甚至管理能力,所以从业务架构更容易做到技术总监或cto。如果一直做基础架构,那么可能是首席架构师。一般的架构老司机是业务架构,基础架构通吃的,好就业,到什么山唱什么歌。

## 四、 UML对系统架构重不重要?

UML是架构基本功,但又容易被开发童鞋忽视。架构师要有很强的系统分析,系统架构,系统设计,架构表达能力,通过掌握UML,提高这些能力。业务架构师 通过 UML可以抽象出业务平台的核心用例,可以把复杂的业务流程以分析模型表达清楚,高阶设计阶段,利用包图,组件图,部署图把设计,部署表达清楚。基础架构师设计中间件,可以画uml协作图,或活动图表达技术功能的流程,设计阶段,可以画包图,表达各个包的功能,然后多人可以一起撸技术中间件的具体代码,做具体架构落地。

## 五、Springcloud和Dubbo用哪个?

Dubbo相对而言,成熟稳定,文档齐全门槛低一些,但是很多服务治理方面的功能是缺失的。Springcloud大而全,但很多功能不强大,不成熟。长期而言,个人更看好Spring cloud,虽然目前还有一些坑,而且门槛也比Dubbo高,但整体发展趋势比Dubbo强,Spring cloud生态体系比Dubbo更好,功能更全面。掌握Dubbo和Spring cloud是不冲突的,二者有很多相同的地方,又有很多地方不同。

## 六、分布式定时任务和一般的任务都什么区别?

分布式定时任务一般是多台服务器可以同时跑定时任务,效率要比一般的任务高,可用性要比一般的任务高(可以做失效转移,架构上没有单点问题,任务节点可以监控),性能要比一般任务的强(架构是强伸缩性,多台机器一起运行,执行时间要短),支持的并发能力远远超过一般的任务(多台机器执行,可以把海量数据分配给不同的机器执行,并发能力非常好)。

## 七、高并发和高性能的区别和联系是什么?

简单而言,高并发是访问数量,高性能是访问响应时间,两个不同的角度。 并发量化的常见参数指标,qps,tps等等,性能量化指标一般是处理时间,比如:接口响应时间是10ms和5分钟,性能是完全不一样的。qps为100和qps为50万的并发架构完全不一样。如果架构不合理,并发量越大,性能越差。如果架构合理,并发量的大小对性能基本没影响,加机器即可,软件架构不需要任何改变。

## 八、reactor线程指的是reactor模型中的哪个部分?

这个问题本身是有问题的。 reactor线程模型分为单线程,多线程,主从多线程。 实际编程过程中,第二种用的是最多的,

## 九、消息中间件目前使用频率最大是RabbitMQ吗?

技术选型是从技术的使用场景,优缺点等方面综合评估的。很多企业用RocketMQ和kafka,大数据基本100%选kafka.

##十、为什么要用spring?

spring能够很好的和各大框架整合spring 通过IOC容器管理了对象的创建和销毁 工厂模式在使用hiberna,mybatis的时候,不用每次都编写提交的事务的代码,可以使用spring的AOP来管理事务 AOP其实就是一个动态代理的实现声明式事务和编程式事务。

## 十一、mybatis的优缺点?

优点:SQL写在XML中,便于统一管理和优化提供映射标签,支持对象和数据库的orm字段关系映射可以对SQL进行优化。

缺点: SQL工作量大mybagtis移植姓不好不支持级联。

[图片上传失败…(image-944c8a-1623847862834)]

## 十二、谈谈SSH整合?

struts(表示层)+spring(业务层)+hibernate(持久层)struts是一个表示层的框架,主要用于接收请求,分发请求。struts其实属于MVC中的VC层次的hibernate是一个持久层的框架,主要负责与关系数据库的操作spring是一个业务层的框架,是一个整合的框架,能够很好的黏合表示层和持久层。

## 十三、maven是什么?有什么作用?

是一个项目管理、构建工具

作用:帮助下载jar 寻找依赖,帮助下载依赖 热部署、热编译

## 十四、WEB 前端优化?

减少HTTP请求的数量(合并css、js、图片)利用浏览器的缓存机制、利用GZIP压缩机制:只针对文本类资源有效把CSS文件放在HTML开头把javascript文件放在HTML结尾避免CSS表达式(判断浏览器)使用javascript压缩减少DNS查找避免重定向使用ajax。

## 十五、安全性测试。

利用安全性测试技术,找到潜在的漏洞

## 十六、事务隔离级别(4种)

1、Serializable(串行化):一个事务在执行过程中完全看不到其他事物对数据库所做的更新(事务执行的时候不允许别的事务并发执行,事务只能一个接着一个地执行,而不能并发执行)。

2、Repeatable Read(可重复读):一个事务在执行过程中可以看到其它事务已经提交的新插入的记录,但是不能看到其它事务对已有记录的更新。

3、Read Commited(读已提交数据):一个事务在执行过程中可以看到其它事务已经提交的新插入的记录,而且能看到其它事务已经提交的对已有记录的更新。

4、Read Uncommitted(读未提交数据):一个事务在执行过程中可以看到其它事务没有提交的新插入的记录的更新,而且能看其它事务没有提交到对已有记录的更新。

## 十七、MYSQL存储引擎(4种)

1、MyISAM它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。

2、每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:.frm(存储表定义) ,YD(MYData,存储数据) , MYI(MYIndex,存储索引),InnoDB,InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

3、memory使用存在内存中的内容来创建表。每个MEMORY表实际对应一个磁盘文件,格式是.frm。MEMORY类型的表访问非常快,因为它到数据是放在内存中的,并且默认使用HASH索引,但是一旦服务器关闭,表中的数据就会丢失,但表还会继续存在。

4、merge存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,MERGE表中并没有数据,对MERGE类型的表可以进行查询、更新、删除的操作,这些操作实际上是对内部的MyISAM表进行操作。

## 十八、事务传播特性。

1、 PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启

2、 PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行

3、PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

4、 PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

5、PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。

6、 PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常

7、 PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务,

## 十九、TCP协议(传输控制协议Transmission Control Protocol )

建立链接:三次握手(1.给对方拨号 2.喂,您好,请问是哪位 3 我是小刘)

关闭链接:四次挥手保证可靠

## 二十、shiro 是什么

Apache Shiro 是一个强大易用的java安全框架,提供了认证、授权、加密和会话管理等功能。

认证 :验证用户来核实他们的身份

授权:会话管理

## 二十一、什么RESTful(表现层状态转化)架构?

(1)每一个URI代表一种资源;

(2)客户端和服务器之间,传递这种资源的某种表现层;

(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

## 二十二、 服务限流有哪些算法?

服务限流常见算法有并发计数器算法,漏桶算法,令牌桶算法。前两种算法不支持突发流量的限流,令牌桶算法支持突发流量的限流。 一般用谷歌guava落地令牌桶算法,用sentinel作为服务限流的中间件。

## 二十三、 数据同步有哪些方式 ?

这个问题其实涉及到很多场景的。 如果是数据库方面的,可以用SqlLoader、GoldenGate等相关工具同步数据; 大数据方面的,可以用ETL、Hadoop等相关技术同步数据;如果是定时调度发起的,可以考虑用SpringBatch,Quartz,Elastic-Job等分布式任务中间件发起同步数据;如果是异步的场景,可以用mq来实现监听并且同步增量数据。 大批量的数据情况下,尽可能地考虑用mq、线程池、多线程、数据批量操作等相关技术手段提升性能。

## 二十四、上亿数据如何大规模更新 ?

可以用分布式任务调度中间件的大任务分片来做,把上亿的数据分给多台机器来做。 如果实时性要求不高,完全可以设置一定的时间间隔,减少DB压力;如果实时要求高,数据层需要分库。如果每天增量数据较多,可以考虑周期性地做数据归档。

## 二十五、dubbo是否有什么缺陷?

dubbo缺陷很多呀,特别是服务治理方面,服务限流算法有缺陷,突发流量有问题的,服务熔断才刚刚有,但也有缺陷,监控方面只支持点到点的监控,不能做到分布式链路监控,没有服务网关,服务分组能力太弱。dubbo性能还有提升的空间,编解码不支持messagpack,通信方式有待改进。监控中心功能太简单,监控中心和管理后台没有整合。dubbo才刚刚和springcloud打通,支持还不是很友好。

## 二十六、在分布式环境下,如何防止RocketMQ消息重复消费?

消费方可以基于分布式锁来解决rocketmq的消息幂等性的问题。用分布式锁可以从纯技术角度messageid,或者业务角度业务主键唯一性都可以实现rocketmq消息消费的幂等性。另外,rocketmq生产方发送消息,本身就保证了消息的幂等性,主要是消费方消费消息要保证幂等性。

## 二十七、MongoDB和Redis有什么区别?

定位不一样,前者是基于分布式文件存储的数据库,后者是缓存,很多公司是禁止把redis当数据库来使用的,一般而言,有经验的架构团队会规定把缓存失效时间至多设置为7天。超过7天,再重新生成热点数据。

## 二十八、rocketmq是否会丢消息

rocketmq一般是不会丢消息,所谓的rocketmq丢消息,有两种常见的原因,1、开发童鞋写的消费者代码逻辑有bug,比如,消费消息的代码逻辑有异常,却把异常吃掉了,且返回成功的状态,人为的导致丢消息。2、运维层面有问题,把消息写到分布式存储有问题,导致丢消息。 这两种情况导致所谓的丢消息,以第一种居多,有不少开发童鞋会犯第一种错误。

## 二十九、Spring cloud 和dubbo用哪个?

dubbo相对而言,成熟稳定,文档齐全门槛低一些,但是很多服务治理方面的功能是缺失的。spring cloud大而全,但很多功能不强大,不成熟。长期而言,个人更看好spring cloud,虽然目前还有一些坑,而且门槛也比dubbo高,但整体发展趋势比dubbo强,spring cloud生态体系比dubbo更好,功能更全面。掌握dubbo和spring cloud是不冲突的,二者有很多相同的地方,又有很多地方不同。并且阿里技术团队开发了spring-cloud-alibaba,为dubbo向spring-cloud靠拢,整合做了技术准备。

## 三十、您是否使用过开源技术?告诉我们您使用它时遇到的一些问题。

如何回答:当面试官问这样的具体问题时,公司要么正在考虑将来使用开源技术,要么已经在使用它。如果您有相关经验,请举一些具体的例子。并且确保您还强调了修改开放源代码编程代码的能力。如果您在使用它时没有遇到任何问题,请提及您所知道的开源技术的任何可能的缺点。

答案示例:我在使用Hadoop和MySQL时都没有遇到任何重大问题。不过,我意识到使用开源数据库或软件实用程序有其缺点。例如,您必须依赖用户论坛的建议,因为没有正式的客户支持来解决您的问题。另一件事是,开发人员不会在用户界面上花费大量时间,因此您可能缺少入门所需的资源。

## 三十一、陈述并描述不同类型的SQL连接。

如何回答:SQL连接的基本类型是:内部,左和右(在SQL理论中,还有另一种类型的连接-完整。但是,今天很少使用)。解释内部,左侧和右侧连接之间差异的最简单,最直观的方法是使用维恩图,该图显示数据集之间所有可能的逻辑关系。 只要列之间存在匹配项,SQL INNER JOIN允许我们从表A和表B中选择所有记录。SQL LEFT JOIN返回左侧表中的所有记录,以及右侧表中的匹配值。如果没有匹配项,则左联接仍返回左表中的所有行,并返回右表中的NULL值。 关于SQL RIGHT JOINS的功能–它与LEFT JOINS相同,但操作方向相反。

[图片上传失败…(image-9e44e5-1623847862834)]

## 三十二、什么是主键和外键?

如何回答:主键是一列(或一组列),其值存在并且对于表中的每个记录都是唯一的。重要的是要知道每个表可以只有一个主键。因此,您可以将主键视为以独特方式标识表内容的字段(或字段组)。因此,主键也称为表的唯一标识符。主键的另一个关键特性是它们不能包含空值。这意味着,在具有单列主键的示例中,此列下的行中必须始终插入一个值。您不能将其留空。关于主键的最后一句话–尽管所有数据库中的几乎所有表都将具有单列或多列主键,但并非您使用的所有表都具有主键。相反,外键是引用另一个表的列(通常是主键)的一列(或一组列)。外键也可以称为标识符,但是它们标识表之间的关系,而不是表本身。

在表示的关系模式形式中,表之间的关系以以下方式表示–指定逻辑匹配的列名称是一个表中的外键,并且与另一个表中的对应列相连。通常,关系从外键变为主键,但是在更高级的情况下,情况并非如此。为了捕捉建立数据库的关系,我们应该始终寻找外键,因为它们向我们展示了关系的位置。

## 三十三、R有几种类型的数据结构?

如何回答:

这个问题很重要,因为实际上您在R中所做的一切都涉及某种形状或形式的数据。R中最常用的数据结构是:

1、向量(原子和列表);

2、矩阵

3、数据帧;

4、因素。

## 三十四、 项目技术

前台:面向的客户

前端:css div js jquery

后端:springmvc spring mybatis

使用的优化技术:

1.页面静态化(Freemarker)

2.缓存

2.1 页面缓存(OSCache)

2.2 分布式缓存(memcached)

3. 图片分离(服务器)

4.负载均衡(解决高并发终极策略)

后台:(管理对象)

前端:css html js jquery

后端:springmvc spring mybatis

数据库:mysql

图片分离框架:jersey

## 三十五、到目前为止,您在工作中使用了哪些建模工具?您认为哪一个有效或强大?

如何回答: 即使数据建模不是您的主要职责之一,但作为数据架构师的角色也要求您对数据建模有深入的了解。如果您缺乏经验,请证明您对该主题有足够的了解,并提及您认为最有用的数据建模工具。面试官会认为您至少熟悉该主题。

答案示例:我主要使用了Oracle SQL Developer数据建模器和PowerDesigner。我可以说,Oracle Data Modeler的维度建模和支持协作开发的集成源代码控制已足以满足我的需求。但是,PowerDesigner还为数据架构师提供了一些出色的以技术为中心的元数据管理功能,为非技术人员提供了以业务为中心的技术。总体而言,我认为这两种工具都值得尝试,具体取决于公司的需求。

顺便说一句,如果您发现此答案有用,请考虑分享此文章,以便其他人也可以从中受益。帮助有抱负的数据架构师实现目标是使数据科学界与众不同的一件事。

## 三十六、您在批处理和实时数据处理方面有什么经验?

如何回答:可以根据业务情况应用这些数据处理方法中的每一种。如果您只有其中一种经验,请提供其他处理方法更适合的情况示例。这将表明您对批处理和实时数据处理都有基本的了解。

答案示例:我对两种类型的数据处理都很熟悉。但是,我更喜欢批处理。那是因为我的职责之一是编写程序,以捕获,处理和产生公司账单部门的输出。如前所述,我对实时数据处理的经验较少。但是,我知道我们公司使用它对从商店的POS系统收集的数据立即采取行动。

## 三十七、在担任数据架构师的过程中,您创建或使用了哪些度量标准来衡量新数据和现有数据的质量?

如何回答:建立确保数据质量的流程是公司数据基础架构的关键。有了这个问题,招聘经理想评估您的相关经验。确保突出显示已监控的特定维度以验证数据质量。

答案示例:作为一名数据架构师,我一直致力于确保数据质量。我和我的团队监控了一些特定的维度,以验证数据的质量。这些包括完整性,唯一性,及时性,有效性,准确性和一致性。监视这些维度有助于我们发现可能对数据分析的准确性产生负面影响的不一致之处。

行为问题:数据架构师经常与来自不同部门,背景和职责的同事一起工作。这就是为什么您应该准备回答一些行为问题的原因,这些问题侧重于您的工作风格以及在跨职能团队中处理冲突的能力。

## 三十八、与没有技术背景的同事一起工作面临什么挑战?您如何应对和克服这些挑战?

如何回答:数据架构师经常与公司内的其他部门合作。这涉及与缺乏技术背景和对数据过程的了解的人员进行协作。面试官希望评估您的沟通方式以及与同事达成共识的能力,尽管您之间存在差异。描述特定情况以说明您遇到的问题以及如何解决它们。

答案示例:我相信优秀的数据架构师应该了解公司各个部门的需求。就是说,我不得不与在很多场合都不完全了解我的角色和责任的人一起工作。由于数据架构的限制,我的一些同事提出了一些我不得不拒绝的请求。这导致了某些紧张局势。我想克服这些挑战需要时间。逐渐地,我们了解了彼此的工作,这有助于我们集思广益解决方案。总而言之,采取额外的步骤来教育自己和其他人已经改变了一切。

## 三十九、您如何描述自己的工作风格?

如何回答:这个问题不是关于您的个性,而是更多关于您如何处理工作以完成任务的问题。讨论您处理任务和项目的方式,以及如何与同事和客户沟通。您的工作风格可能是:协作,结构合理,快速,灵活或独立。无论您选择用什么词来形容它,请牢记职位描述以及您的工作风格如何适合个人情况。

答案示例:我将我的工作风格描述为协作。我喜欢参与全团队参与项目,并与队友共同创造。如果我不确定我应该承担的项目方向,我总是向我的团队咨询。通过这种方式,我们可以努力达成共识并调整我们的想法。

## 四十、您如何解决团队内部的冲突?

如何回答:招聘经理希望了解您解决团队问题时的专业能力。考虑一个示例,在该示例中,您必须使用沟通技巧来处理与同事的冲突。或者,当您设法帮助2位队友找到调解人的共同点时。

答案示例:我想认为我具有出色的冲突管理技能。作为一家大公司的数据架构师,我曾在压力很大的环境中工作。有时这会导致团队成员之间产生紧张关系。当这种情况升级为冲突时,我会尝试公开处理。通常,我会组织一个小组会议,每个人都可以表达自己的担忧。这是我们解决问题并继续进行项目工作的方式。

## 四十一、如何做技术选型?

技术选型是个能力活儿,架构师经常做技术选型,会出有答案的选择题,有几种方案,给到技术高管或者开发团队。而不是一上来就是写架构代码。失职的架构师是给技术领导或者技术团队出问答题,长期出问答题,基本可以走人了。架构师要有一定的架构功力,会给领导或技术团队出选择题,总有一款技术适合的,比较每一种技术(方案)的优缺点,技术领导或者技术团队会很喜欢的,以技服人。架构思路一般是 : 问题(背景)–》技术调研(选型)—》规划(方案)—》落地(撸代码),任何架构或者技术,都要解决问题的,要有价值。

## 四十二、那技术选型主要是谁来负责,谁来背锅呢?

谁选谁负责,比如,如果是架构师选的,架构师肯定要负责。 技术选型,要从公司的业务场景,技术多方面去比较每一种技术的优缺点,比如,对于几种MQ,kafka,rocketmq,rabbitmq,activemq,从技术适用场景,技术的成熟度,技术门槛,可维护性,性能,并发,扩展性等角度去比较每一种MQ技术在以上多个角度的优缺点,做选型的人,尽量做选择题,比较每一种技术的优缺点,做到以技服人,让相关人或相关团队,心服口服。

## 四十三、如何走上架构之路?

1、首先要有架构师的思维,对分布式、高并发、高性能、高可用、可扩展、松耦合、高内聚、可复用、系统边界、安全等方面有深刻的理解。

2、技术面要广,熟悉架构技术栈,比如:熟悉微服务,缓存,分布式消息中间件,分布式任务中间件,数据层中间件,分布式监控中间件,网关中间件,分布式配置中心等等,并不是所有的技术栈要非常精通,但重要的技术,一定要掌握得非常深 。

3、注重架构技术实践,这是开发童鞋非常缺失的。建议多和架构师多交流,多落地相关技术的实践,集中火力多实战成长会很快的。理论看100遍,不如实践一遍。

4、掌握好uml,提升个人系统分析、系统架构、系统设计、画业务架构图、技术架构图、写架构方案等方面的能力。

5、从架构思维,架构技术栈,架构职责等角度写好一份架构师的简历,重点突出个人掌握的架构技术栈,重点突出项目的架构亮点,难点 。

6、在企业内部转架构,或者去别的企业转型架构。架构面试方面多实践,如果没经验,可以让架构师老司机们多模拟面试几轮。

# 结论

面试架构师其实是一件不容易的事情,最近我针对互联网公司面试问到的知识点,总结出了Java程序员面试涉及到的绝大部分面试题及答案分享给大家,希望能帮助到你面试前的复习且找到一个好的工作,也节省你在网上搜索资料的时间来学习。

内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等技术栈。完整版Java面试题地址:JAVA后端面试题整合

    原文作者:琪琪202
    原文地址: https://blog.csdn.net/weixin_56667968/article/details/117967138
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。