java三年面试题(分布式篇)

1.什么是软件架构?

软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。

2.SOA架构和微服务架构的区别?

SOA面向服务架构:是一种软件体系结构,应用程序的不同组件通过网络上的通信协议向其他组件提供服务。SOA使用WebService进行通信。

微服务架构:从SOA架构发展而来,相比于SOA,服务的粒度更小。微服务使用REST进行通信,相比于SOA更轻量级。

3.什么是分布式系统?

分布式软件系统(Distributed Software Systems)是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。

4.分布式包含内容?

负载均衡:

Nginx:高性能、高并发的web服务器;功能包括负载均衡、反向代理、静态内容缓存、访问控制;工作在应用层
LVS: Linux virtual server,基于集群技术和Linux操作系统实现一个高性能、高可用的服务器;工作在网络层
Haproxy:
Apache:

webserver:

Tomcat,Apache,Jboss,WebLogic

service:

SOA、微服务、spring boot,django

容器:

docker,kubernetes

cache:

memcache、redis等

协调中心:

zookeeper、etcd、Dubbo,Eureka

rpc框架:

Netty,grpc、dubbo、brpc,Thrift,jsonrpc

消息队列:

kafka、rabbitMQ、rocketMQ、QSP

消息队列的应用场景:异步处理、应用解耦、流量削锋和消息通讯

实时数据平台:

storm、akka

离线数据平台:

hadoop、spark

dbproxy:

cobar也是阿里开源的,在阿里系中使用也非常广泛,是关系型数据库的sharding + replica 代理

db:

mysql、oracle、MongoDB、HBase

搜索:

elasticsearch、solr

日志:

rsyslog、elk、flume

5. 分布式理论?

CAP、BASE。
分布式CAP理论,任何一个分布式系统都无法同时满足Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性) 这三个基本需求。最多只能满足其中两项。
而Partition tolerance(分区容错性) 是必须的,因此一般是CP,或者AP。

BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

6. 数据一致性

数据一致性通常指关联数据之间的逻辑关系是否正确和完整。
在分布式系统中,数据一致性往往指的是由于数据的复制,不同数据节点中的数据内容是否完整并且相同。
一致性还分为强一致性,弱一致性,还有最终一致性。
强一致性就是马上就保持一致。
最终一致性是指经过一段时间后,可以保持一致。

7. 什么是分布式事务?

分布式事务是指会涉及到多个数据库的事务,其实就是同一数据库向分布式的扩展。目的是保证分布式系统中数据的一致性。

8. 分布式事务方案?

  1. XA方案(2PC/3PC)
    2PC(二阶段提交):准备阶段和提交阶段。
    3Pc(三阶段提交):预备阶段(CanCommit),准备阶段(PreCommit)和提交阶段(DoCommit)。

  2. TCC 方案(Try、Confirm、Cancel)

  3. 本地消息表
    A 系统在自己本地一个事务里操作同时,插入一条数据到消息表;
    接着 A 系统将这个消息发送到 MQ 中去;

    B 系统接收到消息之后,在一个事务里,往自己本地消息表里插入一条数据,同时执行其他的业务操作。

    如果 B 系统处理失败了,那么就不会更新消息表状态,那么此时 A 系统会定时扫描自己的消息表,如果有未处理的消息,会再次发送到 MQ 中去,让 B 再次处理;

    A 会不断重发消息,直到 B 那边成功为止。

  4. 可靠消息最终一致性方案(RocketMQ)

    A 系统先发送一个 prepared 消息到 mq,如果这个 prepared 消息发送失败那么就直接取消操作别执行了;
    如果这个消息发送成功过了,那么接着执行本地事务,如果成功就告诉 mq 发送确认消息,如果失败就告诉 mq 回滚消息;

    如果发送了确认消息,那么此时 B 系统会接收到确认消息,然后执行本地的事务;

    mq 会自动定时轮询所有 prepared 消息回调接口是继续重试还是回滚?

  5. 最大努力通知方案
    系统 A 本地事务执行完之后,发送个消息到 MQ;

    这里会有个专门消费 MQ 的最大努力通知服务,这个服务会消费 MQ 然后写入数据库中记录下来,或者是放入个内存队列也可以,接着调用系统 B 的接口;
    要是系统 B 执行成功就 ok 了;

    要是系统 B 执行失败了,那么最大努力通知服务就定时尝试重新调用系统 B,反复 N 次,最后还是不行就放弃。

9. 什么是幂等性?

HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。

10. 分布式锁

分布式锁,是指在分布式的部署环境下,通过锁机制来让多客户端互斥的对共享资源进行访问。

11. 分布式锁的实现形式?

基于数据库实现基于Redis实现基于ZooKeeper实现

12. 分布式锁应该具备哪些条件?

1、在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;

2、高可用的获取锁与释放锁;

3、高性能的获取锁与释放锁;

4、具备可重入特性;

5、具备锁失效机制,防止死锁;

6、具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败。

13.分布式Session的几种实现方式

1. Session复制
2. 粘性Session:当用户访问集群中某台机器后,强制指定后续所有请求均落到此机器上
3. 缓存集中式管理

14. 什么是消息队列?

消息队列( messagequeuing )使用消息将应用程序连接起来。

AMQP,即Advanced Message Queuing Protocol,
一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品、不同开发语言等条件的限制。

15. 为什么使用消息队列啊?

解耦、异步、削峰

16.常用消息队列?

kafka、activemq、rabbitmq、rocketmq

17. 什么是SpringCloud?

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

18. SpringCloud与Dubbo的区别?

SpringCloud是微服务架构下的一站式解决方案;Dubbo始终定位是一个RPC框架。

SpringCloud底层使用REST进行服务调用;Dubbo使用RPC进行服务调用。

19.SpringCloud有那些组件?

  • Spring Cloud Netflix
  • Spring Cloud Config
  • Spring Cloud Bus
  • Spring Cloud Security
  • Spring Cloud Zookeeper
  • Spring Cloud Eureka

20. 什么是 Hystrix?

在分布式环境中,许多服务依赖项不可避免地将会失败。Hystrix是一个通过添加延迟容忍和容错逻辑来帮助您控制这些分布式服务之间的交互的库。Hystrix通过隔离服务之间的访问点来实现这一点,停止跨级的级联故障,并提供备用选项,所有这些都可以提高系统的整体弹性。

21.Hystrix用途?

资源隔离,服务隔离,服务熔断,服务降级,限流。

22. 断路器原理?

  • 正常情况下,断路器关闭,服务消费者正常请求微服务
  • 一段事件内,失败率达到一定阈值(比如50%失败,或者失败了50次),断路器将断开,此时不再请求服务提供者,而是只是快速失败的方法(断路方法)
  • 断路器打开一段时间,自动进入“半开”状态,此时,断路器可允许一个请求方法服务提供者,如果请求调用成功,则关闭断路器,否则继续保持断路器打开状态。

23. 什么是zuul?

Zuul是Spring Cloud全家桶中的微服务API网关。

所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。Zuul底层利用各种filter实现如下功能:

认证和安全 识别每个需要认证的资源,拒绝不符合要求的请求。

性能监测 在服务边界追踪并统计数据,提供精确的生产视图。

动态路由 根据需要将请求动态路由到后端集群。

压力测试 逐渐增加对集群的流量以了解其性能。

负载卸载 预先为每种类型的请求分配容量,当请求超过容量时自动丢弃。

静态资源处理 直接在边界返回某些响应。

java三年面试题(分布式篇)不定期更新相关推荐

  1. 详细前端面试题javascript篇--持续更新

    最新前端面试题汇总大全(超详细含vue,react,css,js,webpack,性能优化等)–持续更新点击查看 前端HTML篇 前端CSS篇 前端面试题js篇--持续更新 1. JS 数据类型 ?存 ...

  2. java后端面试题总结(持续更新)

    (一) java基础 1.封装.继承.多态 封装:封装是指将对象的属性私有化,对外提供一些公共的方法来访问这些私有属性. 继承:如果一个类继承了另一个类,这个类就叫做子类,另一个类就叫父类,那么子类就 ...

  3. JAVA知识体系之分布式篇(七)——Redis

    1.Redis概述 1.1 Redis诞生历程   Redis的作者笔名叫antirez,2008年的时候他做了一个记录网站访问情况的系统,比如每天有多少个用户,多少个页面被浏览,访客的IP.操作系统 ...

  4. 黑马程序员-java就业面试题大全(持续更新)

    1.一个"java"源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个是public 类,并且public类名必须与文件名一致. 2.java中有没 ...

  5. 2万字8千字72道大厂JVM面试题【金三银四(金九银十)面试小抄之Java经典面试题JVM篇总结】(附答案)

  6. 个人遇到的java开发面试题汇总(持续更新,如果一直参加面试还找不到工作的话╮( ̄▽  ̄)╭)

    广度优先遍历用非递归方法实现 mysql的事务隔离级别 线程安全的单例模式的实现 从非常多的数中取得最大的几个数(大顶堆问题) 网络通信协议,如HTTP.FTP协议等

  7. Java中级面试题及答案解析(4)

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 知音专栏 Javaweb练手项目源码下载 常用设计模式完整系列篇 100套IT类简历模板下 ...

  8. Java中高级面试题部分答案解析(3)

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 知音专栏 Javaweb练手项目源码下载 常用设计模式完整系列篇 100套IT类简历模板下 ...

  9. JAVA知识体系之数据库篇——MySQL

    目录 1.一条查询语句的执行流程 1.1 MySQL基本架构 1.2 连接层 1.3 服务层 1.3.1 查询缓存 1.3.2 解析器(Parser) 词法解析 语法解析 1.3.3 预处理器(Pre ...

  10. Java中级面试题及答案解析(8)

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! Javaweb练手项目源码下载 常用设计模式完整系列篇 100套IT类简历模板下载 Jav ...

最新文章

  1. android休眠唤醒驱动流程分析【转】
  2. 图片按钮ImageButton
  3. 源码下编译APK,却是总是提示,找不到符号:SystemProperties 。。。
  4. ME_DIRECT_INPUT_INFORECORD 信息记录批量修改程序
  5. 吴恩达 coursera AI 第二课总结+作业答案
  6. 【uniapp】Error during WebSocket handshake: Unexpected response code: 302
  7. 动态规划之正则表达式匹配字符串
  8. 保存blob为本地文件
  9. MySQL 输入输出 XML
  10. VSCode远程链接Could not establish connection to “hz.matpool.com”
  11. day69-oracle 22-DBCA
  12. 视图分割与视图间通信资料汇总!
  13. 原码,补码,反码概念和计算方法详解
  14. 2018年计算机网络考研真题
  15. 《腾讯传》三、马化腾与“幸运女神”那些令人脸红的事
  16. Glide异步加载图片,设置默认图片和错误图片
  17. 计算机组成原理rs rd,计算机组成原理五章.ppt
  18. 关于高速光耦6n137的使用总结_高速光耦6n137典型应用电路图汇总(多谐振荡/光电隔离器/光耦开关) - 全文...
  19. SQLyog 新建mysql链接时 错误号码 2058
  20. Linux - 零拷贝技术

热门文章

  1. 控制理论与控制工程算计算机相关专业吗,控制理论与控制工程专业介绍
  2. java编程练习(开源):十种经典游戏
  3. 网管工具使用与技巧大全
  4. SQL Server2005下载地址
  5. JavaScript高级程序设计(第三版)pdf的下载地址
  6. 朱松纯:从人工智能的角度解读《赤壁赋》兼谈“心”与“理”的平衡
  7. c语言ds12c887,ds12c887引脚图 DS12C887中文资料.doc
  8. 甘肃刘家峡赤壁“结”出多彩冰瀑
  9. Java集合框架知识点
  10. 下载pyboard的flash中的驱动程序_HASP加密狗驱动程序没有安装成功如何解决