Java教程

从零开始学Java编程!我总结了所有面试题

本文主要是介绍从零开始学Java编程!我总结了所有面试题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。 # 微服务落地存在的问题 虽然微服务现在如火如荼,但对其实践其实仍处于探索阶段。很多中小型互联网公司,鉴于经验、技术实力等问题,微服务落地比较困难。 如著名架构师Chris Richardson所言,目前存在的主要困难有如下几方面: * 单体应用拆分为分布式系统后,进程间的通讯机制和故障处理措施变的更加复杂。 * 系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现,服务调用的分布式事务问题变的非常突出。 * 微服务数量众多,其测试、部署、监控等都变的更加困难。 随着RPC框架的成熟,第一个问题已经逐渐得到解决。例如springcloud可以非常好的支持restful调用,dubbo可以支持多种通讯协议。关注公众号码猿技术专栏获取更多面试资源。 对于第三个问题,随着docker、devops技术的发展以及各公有云paas平台自动化运维工具的推出,微服务的测试、部署与运维会变得越来越容易。 而对于第二个问题,现在还没有通用方案很好的解决微服务产生的事务问题。分布式事务已经成为微服务落地最大的阻碍,也是最具挑战性的一个技术难题。 # ACID * **原子性(Atomicity):**?一个事务的所有系列操作步骤被看成是一个动作,所有的步骤要么全部完成要么一个也不会完成,如果事务过程中任何一点失败,将要被改变的数据库记录就不会被真正被改变。 * **一致性(Consistency):**?数据库的约束 级联和触发机制Trigger都必须满足事务的一致性。也就是说,通过各种途径包括外键约束等任何写入数据库的数据都是有效的,不能发生表与表之间存在外键约束,但是有数据却违背这种约束性。所有改变数据库数据的动作事务必须完成,没有事务会创建一个无效数据状态,这是不同于CAP理论的一致性"consistency". * **隔离性(Isolation):**?主要用于实现并发控制, 隔离能够确保并发执行的事务能够顺序一个接一个执行,通过隔离,一个未完成事务不会影响另外一个未完成事务。 * **持久性(Durability):**?一旦一个事务被提交,它应该持久保存,不会因为和其他操作冲突而取消这个事务。很多人认为这意味着事务是持久在磁盘上,但是规范没有特别定义这点。 # 一致性理论 分布式事务的目的是保障分库数据一致性,而跨库事务会遇到各种不可控制的问题,如个别节点永久性宕机,像单机事务一样的 ACID 是无法奢望的。 另外,业界著名的 CAP 理论也告诉我们,对分布式系统,需要将数据一致性和系统可用性、分区容忍性放在天平上一起考虑。 两阶段提交协议(简称2PC)是实现分布式事务较为经典的方案,但 2PC 的可扩展性很差,在分布式架构下应用代价较大,eBay 架构师 Dan Pritchett 提出了 BASE 理论,用于解决大规模分布式系统下的数据一致性问题。关注公众号码猿技术专栏获取更多面试资源。 BASE 理论告诉我们:可以通过放弃系统在每个时刻的强一致性来换取系统的可扩展性。 # CAP 理论 在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)3 个要素最多只能同时满足两个,不可兼得。其中,分区容忍性又是不可或缺的。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210705/1625443031530298.jpg) * 一致性:分布式环境下,多个节点的数据是否强一致。 * 可用性:分布式服务能一直保证可用状态。当用户发出一个请求后,服务能在有限时间内返回结果。 * 分区容忍性:特指对网络分区的容忍性。 举例:Cassandra、Dynamo 等,默认优先选择 AP,弱化 C;HBase、MongoDB 等,默认优先选择 CP,弱化 A。 # BASE 理论 核心思想: * 基本可用(?**B**asically?**A**vailable):指分布式系统在出现故障时,允许损失部分的可用性来保证核心可用; * 软状态(?**S**oft state):指允许分布式系统存在中间状态,该中间状态不会影响到系统的整体可用性; * 最终一致性(?**E**ventual consistency):指分布式系统中的所有副本数据经过一定时间后,最终能够达到一致的状态; * 原子性(A)与持久性(D)必须根本保障; * 为了可用性、性能与降级服务的需要,只有降低一致性( C ) 与 隔离性( I ) 的要求; * 酸碱平衡(ACID-BASE Balance); BASE 是对 CAP 中 AP 的一个扩展 # 一致性模型 数据的一致性模型可以分成以下三类: * 强一致性:数据更新成功后,任意时刻所有副本中的数据都是一致的,一般采用同步的方式实现。 * 弱一致性:数据更新成功后,系统不承诺立即可以读到最新写入的值,也不承诺具体多久之后可以读到。 * 最终一致性:弱一致性的一种形式,数据更新成功后,系统不承诺立即可以返回最新写入的值,但是保证最终会返回上一次更新操作的值。 分布式系统数据的强一致性、弱一致性和最终一致性可以通过 Quorum NRW 算法分析。 # 本地事务 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210705/1625443031319646.jpg) * 在单个数据库的本地并且限制在单个进程内的事务 * 本地事务不涉及多个数据来源 # 分布式事务典型方案 * 两阶段提交(2PC, Two Phase Commit)方案; * 本地消息表 (eBay 事件队列方案); * TCC 补偿模式; 分类: * 两阶段型 * 补偿型 * 异步确保型 * 最大努力通知型 服务模式: * 可查询操作 * 幂等操作 * TCC操作 * 可补偿操作 # 完结 Redis**基于内存**,常用作于**缓存**的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。 Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210705/1625443031409190.jpg) **感兴趣的朋友可以通过[点赞+戳这里的方式免费获取](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)腾讯专家手写Redis源码日志笔记pdf版本!**
这篇关于从零开始学Java编程!我总结了所有面试题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!