软件服务工程 -- 概念性知识点总结

 

1. 请描述 RESTWeb 服务架构

2. 请解释控制反转(IoC)的原理和举例说明在什么情况下用到 IoC?

3. AJAX 分别通过什么机制实现标准化呈现、实现动态显示和交互、进行数据交换与处理、 进行异步数据读取、绑定和处理所有数据?

4. 请比较描述机器学习的分类模型 XGboost、Adaboost、Catboost、随机森林和 GBDT?

5. 欧几里得距离、皮尔逊相关系数、Cosine 相似度(余弦)、Tanimoto 系数(谷本)以上系数越大越相似,需要根据具体数据类型场景具体选用,请说明基于什么数据类型场景选用不同的相似度判断?为什么? 

6. Apriori 算法有五种改进性能方法,请分别解释它们的原理?

7. 什么是 DevOps?DevOps 工具链中常用的工具有哪些(至少 3 个)?DevOps 模式的应用领域有哪些? 

8. 简述 REST 和 SOAP 协议,并说明相比于 SOAP,REST 有哪些优点?

9. 云计算系统的 5 个层次?以及云计算的基本特征(至少 5 个)?

10. Django 是一个开放源代码的 Web 应用框架?请详细描述该应用框架

11. Dubbo 是什么?它有什么特点? 

12. 一个项目能否被设计成微服务的架构,需要考虑的因素是什么? 

13. 微服务中划分服务有哪些可以参考的设计策略?判断良好服务的标准是什么?

14. 请比较 Dubbo 还是 Spring Cloud 的区别?

15. Service Mesh (网格服务)是什么机制?请加以描述

16. 在微服务最初设计时,对于轻量级的通信协议选择遵守哪些规则?

17. 如何使用 Jenkins 进行持续集成开发? 

18. Scrum 开发有哪些组成部分?


1. 请描述 RESTWeb 服务架构

    RESTWeb服务确保能够对用户进行身份验证,并授权允许其访问和使用的资源。确保信息从收集之时起到存储之时以及以后提供给被授权人时的保密性和完整性①如果匿名用户试图访问资源,服务将返回401未经授权的响应并拒绝访问;②在基本身份验证中,密码以简单的纯文本格式通过网络传递,这种格式非常不安全,为了解决这个问题,选择一个HTTPS协议,它对携带密码的HTTP管道进行加密。③在摘要式身份验证中,客户机向服务器发送凭证摘要。默认情况下,客户端使用MD5计算摘要。它优于基本身份验证。要求高安全性的应用程序应实现自定义身份验证方案使用HMAC(自定义哈希消息身份验证代码)方法,在该方法中,服务器向客户端传递用户ID和密钥,然后可以将此密钥用于所有进一步的登录请求。④遵循应用程序安全原则,比如验证服务器上的所有输入

    RestWeb的主要约束条件:(1)使用C/S模型。将用户接口和数据存储分离。(2)通信必须在本质上是无状态的。(3)响应内容可以在通信链的某处被缓存。(4)分层系统设计。(5)统一接口。

    REST基本设计原则一: 使用HTTP的方法进行资源访问二: 使用无状态/无会话的服务设计三: 用目录结构风格的URL设计来表示资源四: 使用XML或JSON来传输数据。

2. 请解释控制反转(IoC)的原理和举例说明在什么情况下用到 IoC?

控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当IoC被使用,一个对象依赖的其它对象不会通过自己创建或者查询以来对象,而是以被动的的方式被传递。 IoC和JNDI可以被认为是相反的,当容器在对象初始化时未等对象进行请求就率先主动将依赖传递给它。   IMediaFile imf = Assembly.Load(ConfigurationManager. Settings["AssemName"]).CreateInstance(ConfigurationManager. Settings["MediaName"]);

这个具体对象是哪一个,全由配置文件控制,就是控制反转。即对象的控制权进行转移,转移到第三方,例如IoC容器。

3. AJAX 分别通过什么机制实现标准化呈现、实现动态显示和交互、进行数据交换与处理、 进行异步数据读取、绑定和处理所有数据?

Ajax使用XHTML和CSS标准化呈现; Ajax使用DOM实现动态显示和交互; Ajax使用XML和XSLT进行数据交换与处理;Ajax使用XMLHttpRequest进行异步数据读取; Ajax使用JavaScript绑定和处理所有数据。

4. 请比较描述机器学习的分类模型 XGboost、Adaboost、Catboost、随机森林和 GBDT

XGboost是梯度提升树的一种高效系统实现,是对GBDT进一步的改进,包括对代价函数进行了二阶泰勒展开,在代价函数里加入了正则项,借鉴了随机森林的列采样方法,支持并行计算等。  AdaBoost是基于boosting的思想,通过多个弱分类器的线性组合来得到强分类器,训练时重点关注被错分的样本,准确率高的弱分类器权重大。

CatBoost是Category 和 Boosting的缩写,最大的特点就是可以直接处理类别特征,不需要任何预处理来将类别转换为数字。

随机森林算法背后的思想是群体智慧的体现,它通过随机的行采样(bagging)和列采样(feature bagging)构造不同的训练集,建立一个决策树森林,利用加权平均方式或多数表决的方式得到最后的预测结果,能够并行学习,对噪声和异常数据具有很好的过滤作用,因此有很广泛的应用。

GBDT是基于boosting的思想,串行地构造多棵决策树来进行数据的预测,它是在损失函数所在的函数空间中做梯度下降,即把待求的决策树模型当作参数,每轮迭代都去拟合损失函数在当前模型下的负梯度,从而使得参数朝着最小化损失函数的方向更新。

5. 欧几里得距离、皮尔逊相关系数、Cosine 相似度(余弦)、Tanimoto 系数(谷本)以上系数越大越相似,需要根据具体数据类型场景具体选用,请说明基于什么数据类型场景选用不同的相似度判断?为什么? 

   欧几里得:适合于特征数据量较小,且完整的情况。如某T恤从100块降到了50块(A(100,50)),某西装从1000块降到了500块(B(1000,500)),那么T恤和西装都是降价了50%,两者的价格变动趋势一致,可以用余弦相似度衡量,即两者有很高的变化趋势相似度,但是从商品价格本身的角度来说,两者相差了好几百块的差距,欧氏距离较大,即两者有较低的价格相似度。

   皮尔逊相关系数:适合于特征数据量较大的情况,分数膨胀的情况。比如用户对一个物品的评价,每个用户的评价标准不同,因此衡量两个变量之间的相关性更可信。

   Cosine相似度:适用于数据是稀疏的。假设这样一个数据集,一个在线音乐网站,每个用户常听的也就其中的几十首,这种情况下使用曼哈顿或者欧几里得或者皮尔逊相关系数进行计算用户之间相似性,计算相似值会非常小,因为用户之间的交集本来就很少,这样对于计算结果来讲是很不准确的,因此需要cosine相似度。

  Tanimoto系数:适用于:数据表示为0、1这种二值化,而非有数量大小的情况。比较文本相似度,用于文本查重与去重;计算对象间距离,用于数据聚类等。

6. Apriori 算法有五种改进性能方法,请分别解释它们的原理?

1. Hash-based itemset counting(散列项集计数)将每个项集通过相应的hash函数映射到hash表中的不同的桶中,这样可以通过将桶中的项集计数跟最小支持计数相比较先淘汰一部分项集。

2、Transaction reduction(事务压缩)减少用于未来扫描的事务集的大小。一个基本的原理就是当一个事务不包含长度为k的频集,则必然不包含长度为k+1的频集。从而我们就可以将这些事务加上标记或者删除,这样在下一遍的扫描中就可以减少进行扫描的事务集的个数。

3、Partitioning(划分)挖掘频繁项集只需要两次数据库扫描。D中的任何频繁项集必须作为局部频繁项集至少出现在一个部分中。第一次扫描:将数据划分为多个部分并找到局部频繁项集,第二次扫描:评估每个候选项集的实际支持度,以确定全局频繁项集。

4、Sampling(采样)选择原始数据的一个样本,在这个样本上用Apriori算法挖掘频繁模式。通过牺牲精确度来减少算法开销,为了提高效率,样本大小应该以可以放在内存中为宜,可以适当降低最小支持度来减少遗漏的频繁模式。可以通过一次全局扫描来验证从样本中发现的模式,可以通过第二此全局扫描来找到遗漏的模式。

5、FP-growth算法FP-growth算法只进行2次数据库扫描。它不用生成候选集,不使用候选集,直接压缩数据库成一个频繁模式树,最后通过这棵树生成关联规则。两个步骤:① 利用事务数据库中的数据构造FPgrowth;②从FP-growth中挖掘频繁模。

7. 什么是 DevOps?DevOps 工具链中常用的工具哪些(至少 3 个)?DevOps 模式的应用领域有哪些? 

   DevOps是提高软件开发、测试、运维、运营等各部门的沟通与协作质量的方法和过程,DevOps强调软件开发人员与软件测试、软件运维、质量保障(QA)部门之间有效的沟通与协作,强调通过自动化的方法去管理软件变更、软件集成,使软件从构建到测试、发布更加快捷、可靠,最终按时交付软件。   DevOps(development &operations)是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障部门之间的沟通、协作与整合。

   DevOps目的:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。

   工具:GitHub 、Git/SVN、Docker、 Jenkins、 Hudson、 Ant/Maven/Gradle、QUnit、 JMeter等。

   应用领域:(传统企业 移动研发 支付宝 阿里巴巴)将开发延伸至生产中--包括拓展持续集成和发布功能至生产,集成QA和信息安全至整个工作流,确保代码和环境可在生产中直接部署。 向开发中加入生产反馈--包括建立开发和IT运营事件的完整时间表用于帮助事件的解决,使得开发融入无指责的生产反思,尽可能使开发可以自助服务,同时创建信息指示器来表明本地的决策如何影响全局的目标。 开发嵌入到IT运维中--包括开发投入到整个生产问题处理链,分配开发资源用于生产问题管理,并协助退回技术债务,并且开发为IT运维提供交叉培训,增加IT运维处理问题的能力,从而降低升级问题的数量。 将IT运维嵌入至开发--包括嵌入和联络IT运维资源至开发,帮助开发创建为运维使用的可重用的用户故事,定义一些可以被所有项目共用的非功能性需求。

8. 简述 REST 和 SOAP 协议,并说明相比于 SOAP,REST 有哪些优点?

    REST:REST是一种用于设计松散耦合的Web服务的体系结构样式。它主要用于开发轻量级、快速、可扩展和易于维护的Web服务。  RESTful应用程序使用HTTP请求发布数据(创建/更新)、读取数据(进行查询)和删除数据。因此,REST将HTTP用于所有四个CRUD(创建/读取/更新/删除)操作。 REST将Web定义为分布式超媒体(超文本中的超链接)应用程序,其链接资源通过交换资源状态表示进行通信。其余的体系结构风格为 构建分布式和松散耦合的应用程序提供了指导原则。 REST不是一个标准,而是一种体系结构样式,使用http、text/html、text/xml等标准。

    SOAP: SOAP简单对象访问协议是一种协议,主要依赖XML来提供消息传递服务。 SOAP使用不同的协议进行通信,如http、smtp或ftp。REST是一种体系结构风格,它使用现有的HTTP操作和方法;并且不创建任何新的标准。

    REST比SOAP Web服务更灵活。它比SOAP有以下好处。SOAP只对消息使用XML,REST支持不同的格式;REST消息的大小较小,占用的带宽较小;REST在性能方面更好,具有更好的缓存支持;访问REST Web服务不需要第三方工具。REST的服务学习使用更容易。

9. 云计算系统的 5 个层次?以及云计算的基本特征(至少 5 个)?

    5个层次:1.云客户端可以是计算机、移动电话等硬件,也可以是操作系统、浏览器等软件。它是云计算系统的服务对象。最终用户通过客户端向云端发送请求并接受云计算服务。 2.云应用程序使运行软件成为一种服务。这些应用程序在云计算系统而不是在用户本地运行,由云计算系统为其分配资源并维护其运行状态。用户通过网络获取运行结果。 3.云计算平台是云应用程序运行的平台。它为云应用程序分配和调度计算资源。 4.云基础设施实现了对软硬件的虚拟化,使云计算平台不用关心处理器、存储器、数据库、网络设备、软件等应如何组织。 5.云服务器指实际的计算机软硬件,包括多核处理器、面向云计算的操作系统等等。这些软硬件能够提供云计算服务。

    基本特征: 灵活性:可以在花费代价很小的情况下,为用户快速的重新配置资源。 应用程序兼容性:用户可以和调用本地API一样调用云端软件提供的API。 可靠性:云计算系统可以为用户分配冗余的资源,能够进行灾难恢复。可扩展性:云端的资源可以动态地扩展,省却了用户的配置工作。 易维护性:对于最终用户来说,只进行Web访问,不用安装客户端,易于维护。 低花费 • 硬件设备位置无关性 • 资源共享 • 可测量性 • 随需应变自助服务 • 异构访问 • 资源池

10. Django 是一个开放源代码的 Web 应用框架?请详细描述该应用框架

    Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。

    Django 框架的核心组件有:(1)用于创建模型的对象关系映射;(2)为最终用户设计较好的管理界面;(3)URL 设计(4)设计者友好的模板语言;(5)缓存系统。 Django已经成为web开发者的首选框架,是一个遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。   Django其实也是一个MTV 的设计模式。MTV是Model、Template、View三个单词的简写,分别代表模型、模版、视图  。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下模型(Model),即数据存取层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。模板(Template),即表现层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。视图(View),即业务逻辑层存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

11. Dubbo 是什么?它有什么特点? 

    Dubbo(开源分布式服务框架),阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,Dubbo是一个远程服务调用的分布式框架,致力于提供高性能和透明化的RPC远程服务调用方案以及SOA服务治理方案。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡以及服务自动注册和发现。

    特点:远程通讯:基于长连接的NIO框架抽象封装,提供多协议支持 集群容错:软负载均衡,失败容错,地址路由,动态配置等集群支持。 自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,支持平滑减少或增加机器

12. 一个项目能否被设计成微服务的架构,需要考虑的因素是什么? 

    微服务可以按照业务功能本身的独立性来划分,如果系统提供的业务是非常底层的,如:操作系统内核、存储系统、网络系统、数据库系统等等,这类系统都偏底层,功能和功能之间有着紧密的配合关系,如果强制拆分为较小的服务单元,会让集成工作量急剧上升,并且这种人为的切割无法带来业务上的真正的隔离,所以无法做到独立部署和运行,也就不适合做成微服务了。 

    能不能做成微服务,取决于四个要素: 小:微服务体积小,2 pizza 团队。 独:能够独立的部署和运行。 轻:使用轻量级的通信机制和架构。 松:为服务之间是松耦合的

13. 微服务中划分服务有哪些可以参考的设计策略?判断良好服务的标准是什么

    参考策略:参考DDD (Domain-Driven Design领域驱动设计)中的设计策略“界定的上下文”(Bounded Context),划分出系统中不同的领域模型(上下文)。 每一个领域模型拥有自己独立的数据库(或其他持久存储)。  DDD中其他对于划分服务有参考价值的设计策略 :上下文映射(Context Map) 共享内核(Shared Kernel) 客户-供应商(Customer-Supplier)顺从者(Conformist)  防崩溃层(Anticorruption Layer) 隔离通道(Separate Way) 开放主机服务(Open Host Service)

    判断良好服务的标准1.自身保持高内聚,有自己独立的领域模型(上下文) 2.封装内部变化,通过API对外暴露功能 :只有本服务自身的代码可访问本领域模型的数据库 ;其他系统只能通过本服务暴露的API间接访问本服务的数据 3. 与其他服务保持松耦合,能够独立修改和部署 ;依赖本服务的其他系统不必同时修改和部署 4.能够实现服务自治,可独立进化(Domain-Driven Design领域驱动设计)

14. 请比较 Dubbo 还是 Spring Cloud 的区别?

    总体架构:Dubbo包含ProviderConsumerRegistryMonitorContainer- Provider:暴露服务的提供方,可以通过 jar 或者容器的方式启动服务。- Consumer:调用远程服务的服务消费方。- Registry:服务注册中心和发现中心。- Monitor:统计服务和调用次数,调用时间监控中心。(Dubbo 的控制台页面中可以显示,目前只有一个简单版本。)- Container:服务运行的容器。

    Spring Cloud包含Service ProviderService ConsumerEureKa Server- Service Provider: 暴露服务的提供方。- Service Consumer:调用远程服务的服务消费方。- EureKa Server: 服务注册中心和服务发现中心。从整体架构上来看,二者模式接近,都需要服务提供方,注册中心,服务消费方。

    架构核心要素:Spring Cloud在开发过程中只要整合 Spring Cloud 的子项目就可以顺利的完成各种组件的融合,而Dubbo 却需要通过实现各种 Filter 来做定制,开发成本以及技术难度略高。协议:Dubbo 使用 RPC 通讯协议;Spring Cloud 使用 HTTP 协议的 REST API。性能比较:Dubbo 支持各种通信协议,而且消费方和服务方使用长链接方式交互,通信速度上略胜 Spring Cloud,如果对于系统的响应时间有严格要求,长链接更合适。服务依赖方式:Dubbo 服务依赖略重,需要有完善的版本管理机制,但是程序入侵少。Spring Cloud 通过 Json 交互,省略了版本管理的问题,但是具体字段含义需要统一管理,自身 Rest API 方式交互,为跨平台调用奠定了基础。组件运行流程:业务部署方式相同,都需要前置一个网关来隔绝外部直接调用原子服务的风险。Dubbo 需要自己开发一套 API 网关,而 Spring Cloud 则可以通过 Zuul 配置即可完成网关定制。使用方式上 Spring Cloud 略胜一筹。

15. Service Mesh (网格服务)是什么机制?请加以描述

    Service Mesh又称为服务网格,服务网格是因为以主机独立进程代理为基础,每个主机上同时运行了业务逻辑代码和代理,此时这个代理被形象地称之为SideCar(业务代码进程相当于主驾驶,共享一个代理相当于边车),服务之间通过SideCar发现和调用目标服务,从而形成服务之间的一种网络状依赖关系,然后通过独立部署的一种称之为控制平面的独立组件来集中配置这种依赖调用关系以及进行路由流量调拨等操作,如果此时把主机和业务逻辑从视觉图上剥离,就会出现一种网络状的架构,即服务网格。  Service Mesh 是一种基础设施层,主要处理服务间的通信,在复杂的云原生服务拓扑中,负责请求的可靠传递。一般实现为网络代理,通常与业务服务部署在一起,业务服务不感知。代理既不是独立集中部署,也不嵌入在客户应用程序中,而是作为独立进程部署在每一个主机上,一个主机上的多个消费者应用可以共用这个代理,实现服务发现和负载均衡。   Service Mesh可以实现服务发现、动态路由、负载均衡、请求熔断、安全通讯、多语言支持、多协议支持、Metric和链路追踪、重试。

16. 在微服务最初设计时,对于轻量级的通信协议选择遵守哪些规则?

 1. API的实现技术应该避免产生与客户端的耦合 :例如Java RMI,要求客户端必须使用Java语言,耦合很强 ; 应该选择与具体技术不相关的API实现方式,以保证技术的选择不被限制

2.普通场合应优先选择基于HTTP的RESTful API基于HTTP协议,互操作性好,各种编程语言都支持 ;可伸缩性好 ;松耦合 ;易于测试 ;易于形成统一的编程风格

3.在特殊场合可以选择二进制的RPC协议 对低延迟、实时性要求极高 ;服务的API极少变化,因此松耦合不重要 ;可选的二进制的RPC协议: (基于Google Protocol Buffer数据交换格式的各种RPC协议 基于Apache Thrift协议的各种RPC协议,例如唯品会的OSP )

4.不建议选择基于HTTP的RPC协议  紧耦合 可伸缩性差

17. 如何使用 Jenkins 进行持续集成开发? 

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。     Jenkins功能包括:1、持续的软件版本发布/测试项目。2、监控外部调用执行的工作。

    持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。    安装oracle-jdk,安装jenkins,修改端口(默认8080),在Jenkins主页中新建web项目并使用maven构建,现在我们可以把上传到github上的代码在jenkins上构建,就会在服务器上生成jar文件,接下来我们要做的任务就是java -jar运行到这个jar包。

18. Scrum 开发有哪些组成部分?

    3个角色①产品负责人:负责投资回报率;产品开发过程中为整个团队提供支持;负责解决所有问题;与客户沟通了解需求;保持产品列表现状②Scrum主管:确保规则运行;为团队提供指导;清除障碍;避免一切外界干扰;Scrum主管既是老师又是裁判③团队成员:完成各项艰苦工作的人。整个团队都拥有巨大的知识储备和专业程度。3个会议:计划会(发布&冲刺),每日例会,回顾会3个表格:产品列表,冲刺订单,产品增量

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白Rachel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值