我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java架构师面试必备题(含答案)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java架构师面试必备题(含答案)

第一题:一条sql执行过长的时间,你如何优化,从哪些方面?


答:1、查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化)
2、涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合
3、如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引。加快查询速度
4、针对数量大的表进行历史表分离(如交易流水表)
5、数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,MySQL有自带的binlog实现 主从同步
6、explain分析sql语句,查看执行计划,分析索引是否用上,分析扫描行数等等
7、查看mysql执行日志,看看是否有其他方面的问题

第二题:深入理解CAP


CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)这三个要素最多只能同时实现两点,不可能三者兼顾。分布式系统肯定优先保证P,多数时候是在C和A之间做权衡选择!
C:各个节点查询的数据都一致;
A:所有节点尽量可用;
P:节点之间无法通信;
AP架构
向一个节点A写入数据成功后,立刻给客户端响应写成功的信号。
如果此时集群节点之间网络断开了,由于其可用性,其他节点仍然提供服务,但是A节点的数据还未写入到其他节点,当访问除A之外的其他节点时,就会出现数据不一致的问题,当网络恢复后,才会通过心跳保证最终一致性!
CP架构
在向一个节点A写入数据成功后,并不是马上给客户端响应写成功的信号,而是等待数据同步到其他节点后(个数取决于配置),才响应客户端,表示此次写数据成功了!这在一定程度上保证了数据一致性。为了防止数据混乱,写数据时只允许往Leader节点写,读数据时可以从所有节点读取!
CP架构下具有特殊的Leader - Flower机制,当发生网络分区时,非Leader分区下的节点会变成不可用,重新进入选举状态。

第三题:双十一秒杀高可靠如何实现?


Sentinel承接了阿里10年的促销场景,利用:流量控制(通过设置QPS来控制),容错(熔断就是切断坏路,让后续新流量再走这个坏路),降级(备选B角,走了try-cath的机制,),三板斧解决高可靠。熔断机制:通过滑动时间窗口实现的,对前一段时间的错误比例来设置熔断点。

第四题:分布式事务问题如何解决?


Seata:服务端也是通过安装和配置来实现,使用很简单,实现了事务协调功能,需要加一个依赖包,然后加一个注解@globalTranscational, AT模式,是最推荐的一种,举例:Seata如何协调订单和库存?要求同时成功或者失败。一阶段:订单和库存,都先做回滚日志记录在本地事务中,二阶段:如果有一个失败,通过回滚日志来回到回到初始。

第五题:nacos和zookeeper是如何防止脑裂的?


集群的脑裂通常是发生在集群之间通信不可达(分区)的情况下,一个大集群会分裂成不同的小集群,小集群中又各自选举出自己的master节点,导致原先的集群出现多个master节点对外提供服务的情况!
leader选举时,要求节点获取到的投票数量 > 总节点数量/2,有了这个选举原则,当发生网络分区时,无论如何最多只有一个小集群选出leader,避免集群发生脑裂。

第六题目:Redis为什么单线程还很快?

 第七题:Spring Cloud 和dubbo区别?


1)服务调用方式
dubbo是RPC
SpringCloud采用Rest Api
2)注册中心
dubbo 是nacos、zookeeper
SpringCloud是eureka,也可以是nacos、zookeeper
3)服务网关
dubbo本身没有实现,只能通过其他第三方技术整合,
SpringCloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。

第八题:线程间是怎么通信的,通过调用几个方法来交互的?
        

线程是通过wait , notify等方法相互作用进行协作通信;

wait()方法使得当前线程必须要等待,直到到另外一个线程调用notify()或者notifyAll()方法唤醒
wait()和notify()方法要求在调用时线程已经获得了对象锁,因此对这两个方法的调用需要在  synchronized修饰的方法或代码块中。
Wait,notify,notifyAll都必须在synchronized修饰的方法或代码块中使用,都属于Object的方法,可以被所有类继承,都是final修饰的方法,不能通过子类重写去改变他们的行为

第十题:SpringMVC工作流程?


1.用户请求旅程的第一站是DispatcherServlet。
2.收到请求后,DispatcherServlet调用HandlerMapping,获取对应的Handler。
3.如果有拦截器一并返回。
4.拿到Handler后,找到HandlerAdapter,通过它来访问Handler,并执行处理器。
5.执行Handler的逻辑。
6.Handler会返回一个ModelAndView对象给DispatcherServlet。
7.将获得到的ModelAndView对象返回给DispatcherServlet。
8.请求ViewResolver解析视图,根据逻辑视图名解析成真正的View。
9.返回View给DispatcherServlet。
10.DispatcherServlet对View进行渲染视图。
11.DispatcherServlet响应用户。

第十一题:阐述设计模式的责任链?

责任链模式定义:
使多个对象都有机会处理请求,从而避免请求的发送 者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一 个对象处理它为止。
责任链模式应用场景:
1) 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
2) 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
3) 可处理一个请求的对象集合应被动态指定。

责任链模式由两个角色组成:
1) 抽象处理者角色(Handler):它定义了一个处理请求的接口。当然对于链子的不同实现,也可以在这个角色中实现后继链。
2) 具体处理者角色(Concrete Handler):实现抽象角色中定义的接口,并处理它所负责的请求。如果不能处理则访问它的后继者。

举例如下:

第十二题:阐述设计模式的适配器?

目标角色(Target):客户所期待得到的接口。

源角色(Adaptee):需要适配的类。

适配器角色(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。

具体代码:

目标角色类

package com.szcatic.adapter;
public interface Target {
    void demand();
}
2.源角色类

package com.szcatic.adapter;
public class Adaptee {
    public void specialRequirements() {
        System.out.println("特殊要求");
    }
}
3.适配器角色类

package com.szcatic.adapter;
public class Adapter implements Target {
    private Adaptee adaptee;
    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }
    @Override
    public void demand() {
        adaptee.specialRequirements();
    }
}
4.测试类

package com.szcatic.adapter.test;
import org.junit.jupiter.api.Test;
import com.szcatic.adapter.Adaptee;
import com.szcatic.adapter.Adapter;
public class AdapterTest {
    @Test
    void testDemand() {
        new Adapter(new Adaptee()).demand();
    }
}

优点:

可以让任何两个没有关联的类一起运行。

提高了类的复用。

增加了类的透明度。

灵活性好。

缺点:

过多地使用适配器,会让系统非常零乱,不易整体进行把握。

来源地址:https://blog.csdn.net/Peter_Changyb/article/details/127135994

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java架构师面试必备题(含答案)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java常见面试题目(含答案)

如何用数组实现队列?用数组实现队列时要注意 溢出 现象,这时我们可以采用循环数组的方式来解决,即将数组收尾相接。使用front指针指向队列首位,tail指针指向队列末位。 (推荐学习:java常见面试题)内部类访问局部变量的时候,为什么变量必须加上final
java常见面试题目(含答案)
2021-07-19

java实习生面试题(含答案)

1.Java容器框架有哪些?Java容器框架中有两个名称分别为Collection和Set的接口2.list,map,set,array,它们有什么区别 (推荐学习:java实习生面试题)List接口主要有三个实现类:Link
java实习生面试题(含答案)
2016-12-25

Python面试题及答案:12个 Python 程序员面试必备问题与答案

这段时间很多伙伴问我有没有关于Python的面试题和答案,哈哈哈,7月确实也是面试跳槽的高峰哈!这两天总结了一下,这12个Python面试题和答案是必考的,给大家列了下来,认真看哈!
2023-06-02

java智慧流面试笔试题大全含答案

1 下列关于栈的描述错误的是(B)A. 栈是先进后出的线性表 (推荐学习:java程序员面试题)B. 栈只能顺序存储C. 栈具有记忆功能D.对栈的插入和删除操作中,不需要改变栈底指针2 对于长度为 n 的线性表,在最坏的情况下,下列个排序法所对应
java智慧流面试笔试题大全含答案
2020-01-27

2023 Java 面试题精选40道,包含答案

Java中什么是重载?什么是覆盖?它们有什么区别? 重载是指在同一个类中,方法名相同但参数类型、个数或顺序不同的情况下,编译器会根据参数列表的不同自动调用不同的方法。覆盖是指子类重写父类的同名方法,使得子类在调用该方法时执行子类的实现而不是
2023-08-16

java笔试手写算法面试题大全含答案

1.统计一篇英文文章单词个数。public class WordCounting { public static void main(String[] args) { try(FileReader fr = new FileReader("
java笔试手写算法面试题大全含答案
2017-08-02

【2022最新Java面试宝典】—— SpringCloud面试题(49道含答案)

目录 Spring Cloud1. 什么是微服务架构2. 为什么需要学习Spring Cloud3. Spring Cloud 是什么4. SpringCloud的优缺点5. SpringBoot和SpringCloud的区别?6.
2023-08-18

java多线程面试题选择题大全含答案

1.下面程序的运行结果()(选择一项)public static void main(String[] args) { Thread t=new Thread(){ public void run(){ pong();
java多线程面试题选择题大全含答案
2015-06-10

【2022最新Java面试宝典】—— SpringBoot面试题(44道含答案)

目录 1. 什么是 Spring Boot?2. 为什么要用SpringBoot3. SpringBoot与SpringCloud 区别4. Spring Boot 有哪些优点?5. Spring Boot 的核心注解是哪个?它主要
2023-08-17

Java架构师面试题有哪些

这篇“Java架构师面试题有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java架构师面试题有哪些”文章吧。基础题目J
2023-06-17

2020面试必知:中高级工程师面试题集整理(题目+答案)

这些面试题是我准备换工作的时候整理,没有重点。包括java基础,数据结构,网络,Android相关等等。
2023-06-04

华为C++开发工程师面试总结整理,面试问题你能答上几个?含答案

前言:虽然全世界每个月都可能会出现新的语言,但从TIOBE世界编程语言排行榜的数据来看,从2009年到现在,C/C++一直都在前3甲中。不论历史的车轮如何滚滚向前,学好C/C++永远不会落后。面试官问的面试题:一面:1.先自我介绍;2.把自
2023-06-05

Java集合框架的面试题及答案有哪些

这篇文章主要介绍“Java集合框架的面试题及答案有哪些”,在日常操作中,相信很多人在Java集合框架的面试题及答案有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java集合框架的面试题及答案有哪些”的疑
2023-06-17

Java 面试必备:接口与抽象类的常见问题解答

掌握接口和抽象类是 Java 面试中必不可少的,了解其中差异、应用场景和常见问题至关重要。本文将深入剖析面试中最常遇到的问题,提供清晰且易于理解的解答,帮助面试者自信应对。
Java 面试必备:接口与抽象类的常见问题解答
2024-03-03

软考系统架构设计师考试中的案例分析题如何准备和解答

软考系统架构设计师考试中的案例分析题是考察考生实际应用能力和综合分析能力的重要环节。案例分析题通常要求考生根据给定的情景描述,分析问题、提出解决方案,并展示出系统架构设计的相关技能。具体请见下文。
软考系统架构设计师考试中的案例分析题如何准备和解答
2024-09-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录