乐趣区

关于java:什么是分布式系统

要了解分布式系统,次要须要明确一下 2 个方面:

1. 分布式系统肯定是由多个节点组成的零碎。其中,节点指的是计算机服务器,而且这些节点个别不是孤立的,而是互通的。2. 这些连通的节点上部署了咱们的节点,并且互相的操作会有协同。分布式系统对于用户而言,他们面对的就是一个服务器,提供用户须要的服务而已,而实际上这些服务是通过背地的泛滥服务器组成的一个分布式系统,因而分布式系统看起来像是一个超级计算机一样。

例如淘宝,平时大家都会应用,它自身就是一个分布式系统,咱们通过浏览器拜访淘宝网站时,这个申请的背地就是一个宏大的分布式系统在为咱们提供服务,整个零碎中有的负责申请解决,有的负责存储,有的负责计算,最终他们互相协调把最初的后果返回并出现给用户。
应用分布式系统次要有特点:
1. 增大零碎容量。咱们的业务量越来越大,而要能应答越来越大的业务量,一台机器的性能曾经无奈满足了,咱们须要多台机器能力应答大规模的利用场景。所以,咱们须要垂直或是程度拆分业务零碎,让其变成一个分布式的架构。

2. 增强零碎可用。咱们的业务越来越要害,须要进步整个零碎架构的可用性,这就意味着架构中不能存在单点故障。这样,整个零碎不会因为一台机器出故障而导致整体不可用。所以,须要通过分布式架构来冗余零碎以打消单点故障,从而进步零碎的可用性。

3. 因为模块化,所以 零碎模块重用度更高

4. 因为软件服务模块被拆分,开发和公布速度能够并行而变得更快

5. 零碎扩展性更高

6. 团队合作流程也会失去改善

分布式系统的类型有三种:

1. 分布式解决,但只有一个总数据库,没有部分数据库

2. 分层式解决,每一层都有本人的数据库

3. 充沛扩散的分布式网络,没有地方管制局部,各节点之间的联系方式又能够有多种,如涣散的联接,严密的联接,动静的联接,播送告诉式的联接等

什么是 JAVA 分布式应用?一个大型的零碎往往被分为几个子系统来做,一个子系统能够部署在一台机器的多个 JVM 上,也能够部署在多台机器上。然而每一个零碎不是独立的,不是齐全独立的。须要互相通信,独特实现业务性能。

一句话来说:分布式就是通过计算机网络将后端工作散布到多台主机上,多个主机一起协同实现工作。

实现分布式次要的形式 分布式应用用到的技术:网络通信,基于音讯形式的零碎间通信和基于近程调用的零碎间通信。

毛病:就是会减少技术的复杂度。基于音讯的零碎通信形式,次要是利用的网络协议,比方 TCP/IP 协定。零碎间的通信还须要对数据进行解决,比方同步 IO 和异步 IO。近程调用实现零碎间的通信: 通过调用本地的 java 接口的办法来通明的调用近程 java 的实现。具体的细节有框架来实现。
参考(daxiacode dian com)图灵 Java 架构师 6 期面试题
一、架构师的日常职责是什么?
总体而言,架构师负责软件畛域的顶层设计。架构师须要依据公司的倒退,布局企业将来若干年的架构,制订可落地的架构计划,解决技术难题,做技术选型与攻关,落地具体的架构。优良的架构师既能做架构计划,也能写具体的架构代码。

二、开发工程师和架构师有何区别?
工作重点不同:架构师重点在于后期的架构布局,须要制订可落地的架构计划,联合公司的业务场景、团队的技术水平等因素做技术选型,解决技术难题等等;而开发工程师重点在于具体的落地,特地的,开发工程师的工作重点落地具体的性能。能力要求不同:架构师要求比拟高,要有架构的广度、深度,须要把握一系列的架构技术栈,要求有架构实战经验,要有很强的系统分析、零碎架构、零碎设计的能力。开发工程师次要是要求相熟根本的技术栈,相熟相干业务,疾速落地产品的相干性能。

三、业务架构师与根底架构师区别
对于 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 移植姓不好不反对级联。

十二、谈谈 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 动词,对服务器端资源进行操作,实现 ” 体现层状态转化 ”。

退出移动版