# 前言 使用NameSpace技术来修改进程视图,创建出独立的文件系统、主机名、进程号、网络等资源空间,再使用Cgroups来实现对进程的 CPU、内存等资源的优先级和配额限制,最后使用chroot更改进程的根目录...举个例子 NameSpace可以让当前进程只能看到当前Namespace里的进程,看不到宿主机创建的进程。并且运行容器的命令为1号进程。...但是我们在使用ps aux时,还是看到整个宿主机的进程,并且进程ID为1的还是Systemd,为什么呢? 这是因为ps命令是读/proc文件系统的,所以我们还需要进行文件系统的隔离。...所以我们需要在子进程中修改当前的挂载点,并且子进程在新的namespace的挂载动作只影响自身的挂载文件系统。...\n"); return 1; } 再次运行进入容器中,当前的根目录是上面我们构造的testfs,并且ps aux命令只能看到当前namespace的进程,而看不到宿主机namespace的进程了。
光的本质 The nature of light 光传播的全部过程,有光源运动,传播过程,与其它物体的超距离相互作用,这三个过程。...关于光的本质,早在十七世纪中叶就被牛顿与麦克斯韦分别以“微粒说”、“波动说”进行了详细探讨,并成为当前所公论的光具有“波粒二重性”的理论基础。...关于光速 光速是指光波或电磁波在真空或介质中的传播速度。真空中的光速是目前所发现的自然界物体运动的最大速度。它与观测者相对于光源的运动速度无关,即相对于光源静止和运动的惯性系中测到的光速是相同的。...物体的质量还跟它运动的速度有关(前提是物体的速度要相当大,能跟光速能比较,比如说光速的1/4),物体的质量将随着速度的增大而增大,当物体的速度接近光速时,它的质量将趋于无穷大,所以有质量的物体达到光速是不可能的...只有静止质量为零的光子,才始终以光速运动着。光速与任何速度叠加,得到的仍然是光速。速度的合成不遵从经典力学的法则,而遵从相对论的速度合成法则。
前言 写过动画的人都知道Interpolator,翻译成插入器,主要是控制动画的速度。 我对他的理解Interpolator的本质就是一个函数在0到1的区间内的表现。...接下来逐一分析一下安卓源码中的Interpolator,来进一步阐述我的观点。...,可以看到整个过程的斜率在增加,也就是说明在做加速运动。...y=x*x*(3*x-2) 4.3 函数曲线 我们只要关注0到1的区间,一看图我们就明白了,如果把x当时间,y当距离,就是先从原点往回运动,然后再快速的往终点运行。...五、总结 Interpolator的本质就是一个函数在0到1的区间内的表现。 如何自定义Interpolator,只需要将函数表达式写到getInterpolation中即可。
一、从网卡接收数据说起 下图是一个典型的计算机结构图,计算机由CPU、存储器(内存)、网络接口等部件组成。了解epoll本质的 第一步 ,要从 硬件 的角度看计算机怎样接收网络数据。...计算机结构图 下图展示了网卡接收数据的过程。在①阶段,网卡收到网线传来的数据;经过②阶段的硬件电路的传输;最终将数据写入到内存中的某个地址上(③阶段)。...了解epoll本质的 第二步 ,要从 CPU 的角度来看数据接收。要理解这个问题,要先了解一个概念——中断。 计算机执行程序时,会有优先级的需求。...了解epoll本质的 第三步 ,要从 操作系统进程调度 的角度来看数据接收。...epoll的要义是 高效 的监视多个socket。从历史发展角度看,必然先出现一种不太高效的方法,人们再加以改进。只有先理解了不太高效的方法,才能够理解epoll的本质。
什么是进制,进制的本质又是什么,为什么在计算的时候都会把十进制作为中间转换,其实这样的思维完全是错误的,进制的本质并不是我们熟悉的十进制。...进制的本质 进制的本质就是查表,与各种的转换没有任何关系,并不是说计算八进制,就把它转为十进制计算后再转回八进制,这种思想本来就是错误的,进制的本质就是写表和查表,我们之所以对十进制的特别熟悉,就是因为我们把十进制相关的表记住了...w=531&h=189&f=png&s=7600] 基本运算 进制的加减乘除运算依靠前面写出来的两个加发表和乘法表就可以满足了,一切依旧是查表,记住进制的本质就是查表。...也是没有问题的;而且在这样的情况下,还有一个好处,不知道你的进制规范的是看不懂其中具体的内容的,这也就是通过自定义进制元素的方式实现了所谓的进制加密。...w=398&h=346&f=png&s=27695] 总结 进制的本质就是查表,进制的本质就是掰手指头数数。 公众号:无心的梦呓(wuxinmengyi)
架构也是如此,如果能领悟架构的本质,就不会拘泥于现有的实践和理论框框,而以最直接的方式解决问题,无招胜有招。本文的内容包括架构的本质、架构的服务对象、架构师能力模型 、架构境界等。...抽象思维是往高层次的总结升华,由实到虚;而透过问题看本质则是由虚到实,往深层次地挖掘。...透过问题看本质使架构师能够敏锐地发现底层之真实,系统性端到端地思考问题,识别木桶的短板并解决之。 ...此时看到的已经是问题本质,看山不是山。 ...第四境界的方案,在了解问题本质的基础上,同时考虑现状,评估未来,不多做,不少做。
多数的软件厂商都在应用敏捷来解决瀑布式中导致的诸多问题。简而言之,使用固定时间长度的sprint来达成预先设定好的目标以及敏捷所主张的整个实施风格能够解决软件项目中痛处。...在适应型生命周期中,它遵循一个反馈环,那就是先创建一个小的但可以使用的产品的子集,并通过对它们的使用获得反馈,然后根据获得的反馈设计和创建下一个产品子集。...比如说一个软件系统:你可以拥有一个简单的版本,并通过每隔几周添加新特性来创建一个新版本(增量)。每个版本都是可用的,新的特性为用户/客户带来了更多的价值。...敏捷项目管理是一种遵循敏捷宣言中传达的价值观和原则的方法,并遵循简短的开发周期是提供产品或服务的最有效方式的理念,因为它允许持续改进并且易于变更。...它使用的项目管理框架, Scrum(其中开发以递增和迭代的进度提供) 迭代开发。这是大多数软件开发过程的例程需要的图片,不管是不是敏捷的。
只是函数 考虑以下代码,它实现了一个简单的时钟,猜猜最终打印在chrome控制台中的是什么?...JSX本质上是一种语法糖,它将被编译为一些函数调用: const Something = () => { return ( foo bar</span...事实上,每次渲染都会得到一颗新的元素树。 所以其实为每次渲染都创建一颗新的dom树也是可能的, 然而这样会有巨大的开销。...一个React的渲染器只需要实现一个供 Reconciler调用的接口, Reconciler就可以使用它提供的方法来更新。...完整的方法列表可以在这里查看。 如果想要知道更多关于React Renderer的知识, 这里有一篇很好的博客推荐阅读。
多态 **场景:**创建一个Animal类,有Dog和Cat类继承Animal类,并重写say( )方法,创建一个Woman类,该类有个Animal类型的成员变量和一个pet( )方法调用对应的say(...经发现,womanA.Pet();本质上调用的是运行时类的say()方法而不是引用类型的say() 探究多态的本质 - 动态绑定 Human human = new Man();虽然我们new的对象是一个...Man()但是它调用的却是Animal()的Say()方法 package com.sukai.test01; public class Human { public static void...此时实际上在父类的内部有一个指向Say( )方法的指针,在程序运行期间,你new的是哪个对象,指针就指向哪个对象的Say( )方法,这就是动态绑定,通过这种动态绑定的方式就可以实现多态了 ?...总结 总结动态绑定(多态):动态绑定是指在“执行期间”(而非编译期间)判断所引用的实际对象类型,根据其实际的类型调用其相应的方法
但是,那两篇教程主要介绍基本概念、探讨协议的可行性,没回答一个根本的问题:加密货币到底是什么? 下面就是我对这个问题的思考。...所以,钱的本质,或者说货币的本质,就是它的可信性。它必须使人们相信,它是有价值的,然后才能成为钱,才能被收藏和支付。 二、可信性 为什么钱必须是可信的?因为对方必须相信它的价值,否则你没法支付出去。...那么,接下来的问题就是,可信的东西是否就是钱? 我的回答是 Yes。一样东西能否成为钱,只取决于人们是否相信它的价值,至于它是不是真的有价值,根本不重要。...重要的是,它必须保证自己是可信的,这样才能让足够的人相信它的价值,然后才能成为钱。 三、比特币的可信性 比特币要解决的核心问题,就是创造一种可信的数字凭证。由于这种凭证可信,所以能够当做货币。...或者反过来说,它使得你无法去偷别人,你只能花你自己的钱。因为必须要有别人的私钥,才能取出他的钱。正常情况下,你拿不到别人的私钥。 其次,它无法伪造。
内核启动的过程中会通过函数 do_initcalls,将按顺序从 __initcall_start 开始,到 __initcall_end 结束的 section 中以函数指针的形式取出这些编译到内核的驱动模块中初始化函数起始地址...,来依次完成相应的初始化。...这些初始化函数由 __define_initcall(level,fn) 指示编译器在编译的时候,将这些初始化函数的起始地址值按照一定的顺序放在这个section中。...__initcall_start 到 __initcall_end 之间的 section,通过 vmlinux.lds 可以看到: 宏 INIT_CALLS 中定义的这些 section 中放了一系列的函数...,这些函数是用 pure_initcall,core_initcall 等宏定义的。
程序执行的本质 程序执行的过程:代码区的指令不断执行,驱使动态数据区和静态数据区产生数据变化。 这一过程需要计算机的管控。下面我们着重介绍对代码区和动态数据区的管控。...对代码区和动态数据区的管控 其中eip永远指向代码区将要执行的下一条指令,它的管控方式有两种,一种是“顺序执行”,即程序执行完一条指令后自动指向下一条执行;另一种是跳转,也就是执行完一条跳转指令后跳转到指定的位置...初始情景: eip指向main函数的第一条指令,此时程序还没有运行,栈空间里还没有数据,ebp和esp指向的位置是程序加载时内核设置的(详情请看《Linux内核设计的艺术》一书)。...什么是EIP、ESP、EBP 堆栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。 允许插入或删除操作的一端称为栈顶,另一端称为栈底,对堆栈的插入和删除操作被称入栈和出栈。...第一条指令的执行,致使ebp的地址值被保存在栈中,保存的目的是本程序执行完毕后,ebp还能返回现在的位置,复原现在的栈。随着ebp地址值的压栈,esp自动向栈顶方向移动,它将永远指向栈顶。
作为 web 工程师,我们每天都在和端口、socket 打交道,用的话可能很多人会用,但是问到它们的本质,可能能答出来的就很少了。 这篇文章,我们就来探究下端口和 socket 的本质。...每台主机都有很多的进程,怎么知道交给哪个进程?这就是运输层的 TCP、UDP 做的了。 如何定位一台主机的进程呢? 直接指定进程 id 行么?比如 x.x.x.x:进程id 的形式。...因为硬件中也有端口这个概念,如图: 硬件的端口是设备和外界通信的入口,软件的端口也是一样的定位,所以采用了端口的名字。...端口的本质就是一段内存中的数据结构,我们可以通过监听它的变化,当数据写入的时候就能收到消息。...希望这篇文章可以帮助大家理解端口的本质(内存中用于接受网络数据的数据结构),socket 的本质(POSIX 定义的网络通信 api),以及熟悉 Node.js 的 net 的 api。
什么是容器技术 云原生的基础就是容器化。可以说正是容器技术的快速发展,才推动了云原生的时代浪潮。 要想理解容器的本质,我们先来聊聊是容器技术。...广义上来说:容器技术 = 动态的容器 + 静态的镜像 + 远端的仓库。容器、镜像和仓库构成了容器技术的三要素,其中最核心的概念就是容器。...简单来说,镜像就是把应用程序运行所依赖的环境、配置等打包成的一个文件;而仓库则是保存和管理这些镜像的地方。这两个概念我们后面的章节会详细展开,本节就先来说一下容器。 容器的本质 那么到底什么是容器呢?...有了集装箱之后,相比于原始的零散式运输有以下的优势: 标准规格:每个集装箱的尺寸、大小都是完全相同的,这就使得货物的存放可以十分紧凑,空间利用率高,且便于高效的运输和统计。...其实容器和集装箱做的是同样的事情。结合对集装箱的理解,我们尝试给容器下一个定义: 容器,英文 Container,本质就是对进程的封装。
一 一场以大数据为核心的智能盛宴 时下仿佛大家都在谈人工智能,就像当年人人都在谈大数据一样。在不同场合上,阿里巴巴的马云、百度的李彦宏及腾讯的马化腾分别谈过自己对人工智能的看法和观点。...这种对话有点儿像金庸小说中的华山论剑。到底是气宗( 大数据)还是剑宗(人工智能)更有战略意义?我认为,两者是相辅相成的。...罗斯把他们正在研发的革命性技术称为对话式人工智能(Conversational AI)。...我在阿里就经历了从“数据产品”到“数据作为产品”的阶段,后者其实才是大数据的真正产物,也是人工智能的源泉。...这意味着,“本性纯善”的大数据也容易变成一个累赘。 四 数据是一种信仰,“善”用才是本质 2016 年,一场围棋大战让人类引以为傲的智力顶配瞬间被AlphaGo 践踏得体无完肤。
image.png 先说结论:Docker容器的本质是一个特殊的进程。 学过操作系统的大家应该知道进程其实是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。...其并看不到操作系统视角的其他进程,比如每个docker容器看到的都是各自独立的文件系统,相互之间不会影响。...所以还需要使用Linux的Cgroup技术来实现容器对资源使用的限制。Linux Cgroups 的全称是 Linux Control Group。...它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。 总结:针对Linux内核的容器,比如Docker容器来说,其本质是一个特殊的进程。...相比其他进程其特殊在基于NameSpace技术实现了进程的视图的隔离,基于Cgroup技术实现了资源使用的限制,从而实现了容器之间的资源隔离与限制。
来源:码农翻身 | 作者:刘欣 前言: Spring 这个轻量级的框架已经成为Web开发事实上的标准, 不少同学建议我写一些Spring相关的技术, 我刚开始是拒绝的, 因为现在网上相关的文章是在太多了...后来想想,这些文章更多的关注细节和实现,教大家怎么用, 关注how , 真正讲解why 的还不多, 我觉得我可以给大家分享下我对Spring本质的感想和体会,这就是这篇文章的由来, 如果大家喜欢,就继续的写下去...当然,单独的一个或几个对象根本没办法完成复杂的业务, 实际的系统是由千千万万个对象组成的, 这些对象需要互相协作才能干活,例如对象A调用对象B的方法,那必然会提出一个问题:对象A怎么才能获得对象B的引用呢...最简单的办法无非是: 当对象A需要使用对象B的时候, 把它给new 出来 ,这也是最常用的办法, java 不就是这么做的?...由演艺公司对整个娱乐项目完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。
那么,我们可以得出:软件 = 程序 + 数据 + 文档 程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能 数据:使得程序能够适当地操作信息的数据结构 文档:描述程序的研制过程、...方法、和使用的图文资料 软件的本质特性 微软花了55年制作了Word 1.0,大约有25w行代码,晚交付了4年,不经思考软件的本质特性是什么?...毫不夸张地说软件是人类开发的最复杂的物体,足以可见软件开发是非常困难的 一致性 软件不能独立存在,需要依附一定的环境(硬件 、网络以及其他软件) 软件必须遵循认为的习惯,并适应已有的技术和系统 软件需要随接口不同而改变...没有任何变化的软件一定是没用的,我们要以积极的态度和有效的方法控制变更,使软件在演化的过程中保证高质量 不可见性 软件是一种 “看不见、摸不着” 的逻辑实体,不具有空间的形体特征 开发人员可以直接看到程序代码...,但是源代码不是软件本身 软件是以机器代码的形式运行,但是开发人员无法看到源代码使如何执行的 这种不可见行不仅限制了软件的设计过程,同时严重的阻碍了相互之间的人与人的交流 ?
领取专属 10元无门槛券
手把手带您无忧上云