Linux容器中用来实现“隔离”的技术手段:Namespace。 Namespace实际上修改了应用进程看待整个计算机“视图”,即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容。对于宿主机来说,这些被“隔离”了的进程跟其他进程并没有区别。 在之前虚拟机与容器技术的对比图里,不应该把Docker Engine或者任何容器管理工具放在跟Hypervisor相同的位置,因为它们并不像Hype...
Linux容器中用来实现“隔离”的技术手段:Namespace。 Namespace实际上修改了应用进程看待整个计算机“视图”,即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容。对于宿主机来说,这些被“隔离”了的进程跟其他进程并没有区别。 在之前虚拟机与容器技术的对比图里,不应该把Docker Engine或者任何容器管理工具放在跟Hypervisor相同的位置,因为它们并不像Hype...
归并排序是分治法的一种应用,其思路是将数组分为左右两部分,分别递归地进行归并排序,然后将这两部分给合并起来。归并排序的c++递归实现可以参考下面的模板: int mergeSort(iterator l, iterator r) { if (r - l <= 1) return; iterator m = l + (r - l) / 2; int count ...
回溯法是一种通过暴力穷举的方式解决问题的方式,是深度优先搜索的一种具体应用。其思路不难理解,想象一下你在走一个迷宫,当在一个路口有A, B, C 三条岔路的时候你要怎么办呢? 大家可以很容易地想到先尝试道路A, 如果走不通就回到这个路口尝试道路B,如果还走不通就尝试道路C,这就是一个典型地应用回溯法的例子。如果将目光着眼于整个迷宫,就可以发现这个迷宫其实就是一颗多叉树,每个路口就是一个节点,每个路...
深度优先算法多数是应用在树上,一个比较典型的应用就是二叉树的中序遍历。所谓树的前、中、后序遍历都是以树的根节点为准的,如下图所示的二叉树中序遍历的结果就是 4,2,5,1,6,3,7。下面我们来看一下 LeetCode 中的二叉树中序遍历的题目。 LeetCode94 题目链接: https://leetcode.com/problems/binary-tree-inorder-traversal...
在LeetCode的题目讨论中,经常会有些大神将某一类的题目结题思路给整理了出来,感觉受益匪浅。受之启发,萌生了自己也总结一下常见算法的解题思路的想法,希望可以让自己在这个总结的过程中可也融汇贯通这些思路,同时可以给后来者以启发。 从哪里开始好呢?就从经典的二分查找法开始吧,这个算法几乎所有学过计算机的人都知道,而且我在之前的面试中不止一次碰到过这个算法以及这个算法的变种。 二分查找法的思路就是通...
容器!容器! 回溯历史源头 相比于盛极一时的 AWS OpenStack 以Cloud Foundry为代表的PaaS项目,却成了当时云计算技术中的一股清流 Cloud Foundry项目已经基本度过了最艰难的概念普及和用户教育阶段,开启了以开源PaaS为核心构建平台层服务能力的变革 只是,后来一个叫 Docker 的开源项目横空出世 当时还名叫dotCloud的Docker公司,也是PaaS热潮...
前言 不知道你是否遇到过这样的情况,去小卖铺买东西,付了钱,但是店主因为处理了一些其他事,居然忘记你付了钱,又叫你重新付。又或者在网上购物明明已经扣款,但是却告诉我没有发生交易。这一系列情况都是因为没有事务导致的。这说明了事务在生活中的一些重要性。有了事务,你去小卖铺买东西,那就是一手交钱一手交货。有了事务,你去网上购物,扣款即产生订单交易。 事务的具体定义 事务提供一种机制将一个活动涉及的所有操...
众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行。这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务。但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为“分布式事务”。那么在目前数据库不支持跨库事务的情况下,我们应该如何实现分布式事务呢?本文首先会为大家梳理分布式事...
对于圆周率率的求法有很多,最近看到一个Spark的例子使用了map和reduce的方法来求一个圆周率的近似值。这个算法的思想是这样的: 半径为r的圆的面积CA = π × r × r 这个园的外切正方形的面积SA = 4 × r × r π = CA / r / r = CA × 4 / SA 根据上面的推导,我们只要知道圆形和正方形的面积之比就行了。然后我们在这个正方形的面积内随机生成足够多的点...
数据类型 Kotlin的数据类型同java基本相同,但是在Kotlin中,所有的类型都是对象,即我们可以调用任何一个变量的成员方法和属性,这点同java稍微有点差别。Kotlin中的数据类型和其所占用的空间位数如下: 类型 位数 使用示例 Double 64 1.23(带小数默认为Double) Float 32 1.23F或者1.23f Long 64 100L Int 32 123 Short...