2. 请解释控制反转(IoC)的原理和举例说明在什么情况下用到 IoC?
3. AJAX 分别通过什么机制实现标准化呈现、实现动态显示和交互、进行数据交换与处理、 进行异步数据读取、绑定和处理所有数据?
4. 请比较描述机器学习的分类模型 XGboost、Adaboost、Catboost、随机森林和 GBDT?
6. Apriori 算法有五种改进性能方法,请分别解释它们的原理?
7. 什么是 DevOps?DevOps 工具链中常用的工具有哪些(至少 3 个)?DevOps 模式的应用领域有哪些?
8. 简述 REST 和 SOAP 协议,并说明相比于 SOAP,REST 有哪些优点?
9. 云计算系统的 5 个层次?以及云计算的基本特征(至少 5 个)?
10. Django 是一个开放源代码的 Web 应用框架?请详细描述该应用框架
12. 一个项目能否被设计成微服务的架构,需要考虑的因素是什么?
13. 微服务中划分服务有哪些可以参考的设计策略?判断良好服务的标准是什么?
14. 请比较 Dubbo 还是 Spring Cloud 的区别?
15. Service Mesh (网格服务)是什么机制?请加以描述
16. 在微服务最初设计时,对于轻量级的通信协议选择遵守哪些规则?
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次数据库扫描。它不用生成候选集,不使用候选集,直接压缩数据库成一个频繁模式树,最后通过这棵树生成关