摘要:
(一)对设计原则的理解 1、开闭原则(Open-Closed Principle, OCP) 一个软件实体应当对扩展开发,对修改关闭.说的是,再设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展.换言之,应当可以在不必修改源代码的情况下改变这个模块的行为,在保持系统一定稳定性的基础上,对 阅读全文
摘要:
一、前言 设计模式代表了软件设计的最佳实践,是经过不断总结提炼出来的代码设计经验的分类总结,这些模式或者可以简化代码,或者可以是代码逻辑开起来清晰,或者对功能扩展很方便 设计模式按照使用场景可以分为三大类: 创建型模式(Creational Patterns):对对象的实例化过程进行抽象,这使得一个 阅读全文
摘要:
(一)性能指标有哪些 1、响应时间(Response time) 响应时间就是用户感受软件系统为其服务所耗费的时间,对于网站系统来说,响应时间就是从点击了一个页面计时开始,到这个页面完全在浏览器里展现计时结束的这一段时间间隔,看起来很简单,但其实在这段响应时间内,软件系统在幕后经过了一系列的处理工作 阅读全文
摘要:
(一)消息队列的使用场景 校验用户名等信息,如果没问题会在数据库中添加一个用户记录 如果是用邮箱注册会给你发送一封注册成功的邮件,手机注册则会发送一条短信 分析用户的个人信息,以便将来向他推荐一些志同道合的人,或向那些人推荐他 发送给用户一个包含操作指南的系统通知 (二)消息的重发补偿解决思路 可靠 阅读全文
摘要:
(一)Redis 有哪些类型 在 Redis 中有五种数据类型 String:字符串 Hash:字典 List:列表 Set:集合 Sorted Set:有序集合 (二)Redis 内部结构 Redis 内部使用一个 redisObject 对象来表示所有的 key 和 value。 type :代 阅读全文
摘要:
(一)如何应对微服务的链式调用异常 一般情况下,每个微服务之间是独立的,如果某个服务宕机,只会影响到当前服务,而不会对整个业务系统产生影响。但是,服务端可能会在多个微服务之间产生一条链式调用,并把整合后的信息返回给客户端。在调用过程中,如果某个服务宕机或者网络不稳定可能造成整个请求失败。因此,为了应 阅读全文
摘要:
(一)分布式数据管理之痛点 为了确保微服务之间松耦合,每个服务都有自己的数据库, 有的是关系型数据库(SQL),有的是非关系型数据库(NoSQL)。开发企业事务往往牵涉到多个服务,要想做到多个服务数据的一致性并非易事,同样,在多个服务之间进行数据查询也充满挑战。我们以一个在线 B2B 商店为例,客户 阅读全文
摘要:
(一)微服务与 SOA 的区别 微服务是 SOA 发展出来的产物,它是一种比较现代化的细粒度的 SOA 实现方式。 较早实践微服务的公司 Netflix 就曾经称他们构建的架构是「细粒度的 SOA」。 讨论「微服务和 SOA 的差别」的意义远不如讨论「微服务和单体系统的差别」更大,因为他们的区别实在 阅读全文
摘要:
(一)问题的起源 在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致性? 具体业务场景如下,比如一个业务操作,如果同时调用服务 A、B、C,需要满足要么同时成功;要么同时失败。A、B、C 可能是多个不同部门开发、部署在不同服务器上的远程服务。 在分布式系统来说,如果不想牺 阅读全文
摘要:
(一)单体应用的数据一致性 想象一下如果我们经营着一家大型企业,下属有航空公司、租车公司、和连锁酒店。我们为客户提供一站式的旅游行程规划服务,这样客户只需要提供出行目的地,我们帮助客户预订机票、租车、以及预订酒店。从业务的角度,我们必须保证上述三个服务的预订都完成才能满足一个成功的旅游行程,否则不能 阅读全文
摘要:
(一)如何理解 RESTful API 的幂等性 1、什么是幂等性 HTTP 幂等方法,是指无论调用多少次都不会有不同结果的 HTTP 方法。不管你调用一次,还是调用一百次,一千次,结果都是相同的。 GET /tickets # 获取ticket列表 GET /tickets/12 # 查看某个具体 阅读全文
摘要:
如何设计一个良好的 API 1、版本号 在 RESTful API 中,API 接口应该尽量兼容之前的版本。但是,在实际业务开发场景中,可能随着业务需求的不断迭代,现有的 API 接口无法支持旧版本的适配,此时如果强制升级服务端的 API 接口将导致客户端旧有功能出现故障。实际上,Web 端是部署在 阅读全文
摘要:
(一)前后端分离是如何做的 在前后端分离架构中,后端只需要负责按照约定的数据格式向前端提供可调用的 API 服务即可。前后端之间通过 HTTP 请求进行交互,前端获取到数据后,进行页面的组装和渲染,最终返回给浏览器。 (二)如何解决跨域 1、什么是跨域问题? 跨域,指的是浏览器不能执行其他网站的脚本 阅读全文
摘要:
(一)负载均衡 什么是负载均衡呢?用户输入的流量通过负载均衡器按照某种负载均衡算法把流量均匀的分散到后端的多个服务器上,接收到请求的服务器可以独立的响应请求,达到负载分担的目的。从应用场景上来说,常见的负载均衡模型有全局负载均衡和集群内负载均衡,从产品形态角度来说,又可以分为硬件负载均衡和软件负载均 阅读全文
摘要:
(一)分布式一致性 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的 CRUD 等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。 为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复 阅读全文
摘要:
使用场景 首先,我们看这样一个场景:客户下单的时候,我们调用库存中心进行减库存,那我们一般的操作都是: update store set num = $num where id = $id 这种通过设置库存的修改方式,我们知道在并发量高的时候会存在数据库的丢失更新,比如 a, b 当前两个事务,查询 阅读全文
摘要:
(一)谈谈业务中使用分布式的场景 首先,需要了解系统为什么使用分布式。 随着互联网的发展,传统单工程项目的很多性能瓶颈越发凸显,性能瓶颈可以有几个方面: 应用服务层:随着用户量的增加,并发量增加,单项目难以承受如此大的并发请求导致的性能瓶颈。 底层数据库层:随着业务的发展,数据库压力越来越大,导致的 阅读全文
摘要:
Spring MVC 运行流程 Spring MVC 将所有的请求都提交给 DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。 DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的 Controller. Disp 阅读全文
摘要:
如何自定义注解实现功能 创建自定义注解和创建一个接口相似,但是注解的 interface 关键字需要以 @ 符号开头。 注解方法不能带有参数; 注解方法返回值类型限定为:基本类型、String、Enums、Annotation 或者是这些类型的数组; 注解方法可以有默认值; 注解本身能够包含元注解, 阅读全文
摘要:
(一)BeanFactory 和 ApplicationContext 有什么区别 BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化。 BeanFactory 还能在实例化对象的时生 阅读全文