系统架构
未读系统设计面试可能是开放式的,需要广泛的知识。
为了为此类采访做好准备,重要的是覆盖不同的领域,而不是专注于单个主题。我们花了很多时间来选择系统设计问题进行分析,我们的主要标准是:
这个问题很流行而且很经典
我们关心选择的问题的多样性
该分析可能对其他面试问题有所帮助
本周,我们将讨论如何设计Google文档。您会发现它与我们先前问题的分析完全不同。
问题–如何设计Google文档我假设所有人都知道Google文档是什么,并且不会浪费时间介绍此产品。
乍看起来,这个问题看起来很笼统,确实如此。Google文档是一个具有大量功能的庞大系统。如果您花几分钟时间思考他的问题,您可能会意识到Google文档比看起来要复杂得多。
作为一名面试官,我不想将讨论范围限于该产品的特定功能。相反,我倾向于使问题更广泛和更笼统,以便我知道候选人将如何逐步解决模糊的问题。
分为组成部分我们在以前的文章中多次强调,建议在问题很大时提供高级解决方案。抽象解决方案的一种方法是将大型系统划分为较小的组件。
显然,Google文档是一个庞大的系统,具有许多功能,包括文档存储,共享文档,格式设置,编辑等。实际上,如果 ...
Spring Boot 2.0将大量新功能带入了我们最喜欢的Java框架。这些新功能之一是将测微计集成到Spring Boot Actuator中。Micrometer是一种维度度量和监视外观,帮助开发人员将其应用程序度量集成到各种监视系统中,同时使应用程序独立于实际的监视实现。正如该项目的首页所述,它类似于SLF4J,但用于metrics准。
Micrometer在深入探讨使用测微表定义自定义指标的细节之前,让我们花一些时间在此定义上。首先,我们说Micrometer是一个检测适配工具。真正的含义是,使用该库,您作为开发人员可以使用一种方式将您的度量标准传送到各种监视系统中。您可能会认为这没什么大不了的。好吧,是的。有很多用于监视应用程序的解决方案,每种解决方案都有不同的方法来满足您的监视需求。这些差异可能与它们使用的命名约定一样细微,或者甚至在收集数据的基本方法上也可能有所不同。在这里,在AutSoft,我们使用Prometheus轮询应用程序中的新数据,而不是依赖于推入模型的DataDog。Micrometer可以为您解决所有这些差异,因此您可以为所有这些解决方案使用统一的界面。 ...
shell-tutorial
未读Tutorial一个数组可以用一个名称保存多个值。数组命名与变量命名相同。通过分配()中包含的以空格分隔的值来初始化数组
12my_array=(apple banana "Fruit Basket" orange)new_array[2]=apricot
数组成员不必是连续的或连续的。数组的某些成员可以保留为未初始化。
1234数组中元素的总数由${#my_array[@]} 引用my_array=(apple banana "Fruit Basket" orange)echo ${#my_array[@]} # 4
可以使用数字索引访问数组元素。第一个元素的索引为0。
123456my_array=(apple banana "Fruit Basket" orange)echo ${my_array[3]} # orange - note that curly brackets a ...
shell-tutorial
未读Tutorial数组比较Shell可以处理数组数组是包含多个值的变量。任何变量都可以用作数组。数组的大小没有最大限制,也没有要求成员变量被连续索引或连续分配。数组从零开始:第一个元素的编号为0。
basic construct# array=(value1 value2 ... valueN)
array=(23 45 34 1 2 3)
#To refer to a particular value (e.g. : to refer 3rd value)
echo ${array[2]}
#To refer to all the array values
echo ${array[@]}
#To evaluate the number of elements in an array
echo ${#array[@]}
Exercise在本练习中,您将需要比较三个数组列表并编写所有三个数组的公共元素:
a=(3 5 8 10 6),b=(6 5 4 12),c=(14 7 5 7)结果是共同点5。
Tutorial ...
Spring AOP mechanismsin a word, Spring AOP is proxy-based. That’s, AOP by proxying. and Spring use one of the following two ways to create the proxy for a given target bean.
JDK dynamic proxies, preferred wheneven the proxied target implements at least one interface.
CGLIB, if the target object does not implement any interfaces, can be force to use by:
set the value of the proxy-target-class attribute of the element to true:
set the ‘proxy-target-class’ attribute of the element to true when ...
有时我们只需要在应用程序启动时运行一小段代码,要么只是记录某个bean已加载,要么应用程序已准备好处理请求。
Spring Boot在启动时提供了至少5种不同的执行代码的方式,那么我们应该选择哪一种呢?本文概述了这些不同的方法,并说明了何时使用哪种方法。
不过,让我们从一些用例开始。
代码示例本文随附GitHub上的工作代码示例。
为什么我要在启动时执行代码?在应用程序启动时做某事的最关键的用例是,当我们希望我们的应用程序仅在设置所有内容以支持该处理时才开始处理某些数据。
假设我们的应用程序是事件驱动的,并从队列中提取事件,对其进行处理,然后将新事件发送到另一个队列。在这种情况下,我们希望应用程序仅在与目标队列的连接已准备好接收事件时才开始从源队列中提取事件。因此,我们包含了一些启动逻辑,一旦与目标队列的连接准备就绪,便可以激活事件处理。
在更常规的设置中,我们的应用程序响应HTTP请求,从数据库加载数据,并将数据存储回数据库。我们只想在数据库连接准备好开始工作时才开始响应HTTP请求,否则,我们将以HTTP状态500提供响应,直到连接准备好为止。
Spring Boot会自动处理 ...
原文地址:The Illustrated Children’s Guide to Kubernetes
原文作者:CLOUD NATIVE COMPUTING FOUNDATION
Kubernetes 儿童插图指南
献给所有试图向孩子们解释软件工程的家长。
很久很久以前,有一个叫 Phippy 的应用程序。她是一个简单的应用程序,由 PHP 编写且只有一个页面。她住在一个需要和其他可怕的应用程序分享环境的主机中,她不认识这些应用程序并且不愿意和他们来往。她希望她能拥有一个属于自己的环境:只有她自己和她可以称之为家的 Web 服务器。
每个应用程序都有个运行所依赖的环境。对于 PHP 应用程序来说,这个环境可能包括 Web 服务器,一个可读文件系统和 PHP 引擎本身。
有一天,一只善良的鲸鱼出现了。他建议小 Phippy 住在容器里,这样可能会更快乐。所以应用程序 Phippy 迁移到了容器中。这个容器很棒,但是……它有点像一个漂浮在大海中央的豪华起居室。
容器提供了一个独立的环境,应用程序可以在这个环境中运行。但是这些孤立的容器常常需要被管理并与外面的世界连接。 ...
selenium-ide
未读
Selenium IDE使用指南一(爬虫脚本录制器)
Selenium IDE使用指南二(命令行运行器)
Selenium IDE使用指南三(控制流)
Selenium IDE使用指南四(代码导出)
Selenium IDE使用指南五(常见问题)
Selenium IDE使用指南六(指令列表)
Selenium IDE使用指南七(参数定义)
add selection将选择添加到多选元素中的选项集。
论点
locator:元素定位器。
value:要输入的值。
answer on next prompt影响下一个警报提示。此命令将向其发送指定的答案字符串。如果警报已存在,请改用“可见提示时的webdriver回答”。
论点
答案:提示弹出窗口时给出的答案。
assert检查变量是否为期望值。变量的值将转换为字符串以进行比较。如果断言失败,则测试将停止。
论点
变量名:不带括号的变量名。
期望值:您期望变量包含的结果(例如,true,false或其他某个值)。
assert alert确认已使用提供的文本呈现警报。如果断言失败,则测试将停止。
论点
提示文 ...
selenium-ide
未读
Selenium IDE使用指南一(爬虫脚本录制器)
Selenium IDE使用指南二(命令行运行器)
Selenium IDE使用指南三(控制流)
Selenium IDE使用指南四(代码导出)
Selenium IDE使用指南五(常见问题)
Selenium IDE使用指南六(指令列表)
Selenium IDE使用指南七(参数定义)
alertText名称:alertText
描述:要检查的文字
answer名称:answer
描述:响应弹出提示而给出的答案。
attributeLocator名称:attributeLocator
描述:元素定位符,后跟一个@符号,然后是属性名称,例如“ foo @ bar”。
arrayVariableName名称:arrayVariableName
描述:包含JavaScript数组的变量的名称。
conditionalExpression名称:conditionalExpression
描述:返回一个布尔结果以用于控制流命令的JavaScript表达式。
coord名称:coord string
description:指定 ...
这是有关如何设计Youtube的第二篇文章。我们将从第一个开始继续我们的讨论, 如果您还没有阅读,请检查一下。
在上一篇文章中,我们主要讨论了数据库和存储。本周,我们将讨论更多主题,包括可伸缩性,Web服务器,缓存和安全性。
扩展数据库一旦产品拥有数百万甚至数十亿的用户,就需要解决许多问题。可伸缩性是要解决的最重要的问题之一。基本上,将所有数据存储到单个数据库中不仅效率低下而且不可行。那么您将如何扩展YouTube的数据库?
扩展数据库时,我们可以遵循许多通用规则。最常见的方法是仅在需要时进行缩放。换句话说,不建议您在第一天就完成所有工作,例如对数据库进行分区,因为几乎可以肯定的是,在您确实需要扩展的那一点上,整个基础架构和产品已经发生了巨大的变化。
因此,想法是从单个服务器开始。稍后,您可以转到具有多个读取从属设备的单个主设备(主设备/从设备模型)。并且在某个时候,您将必须对数据库进行分区并采用分片方法。例如,您可以按用户的位置拆分数据库,当请求到来时,您会将请求路由到相应的数据库。
对于Youtube,我们可以进一步对其进行优化。YouTube的最重要功能是视频。因此 ...
