Docker 原理三(镜像与分层)

概述 上一篇文章中提到了,rootfs 的存在将整个操作系统的文件和目录作为依赖打包进了容器中,使得容器具有了一个非常重要的特性:一致性。 难道我每开发一个应用,或者升级一下现有的应用,都要重复制作一次 rootfs 吗?比如,我现在用 Ubuntu 操作系统的 ISO 做了一个 rootfs,然后又在里面安装了 Java 环境,用……

阅读全文

Docker 原理二(容器的文件系统)

概述 在上一篇文章中介绍了容器实现隔离用的是 Namespace 技术,而实现资源限制使用的是 Cgroups 技术,并提到了 Mount Namespace,用于让被隔离进程只看到当前 Namespace 里的挂载点信息。 那么容器的文件系统是怎么实现的呢,实际上它跟 Mount Namespace 有着千丝万缕的联系。 Mount Namespace Mount Namespace 修改的,是容器进程对文件系统“挂载点”的认知。但是……

阅读全文

Docker 原理一(隔离与限制)

Docker 与传统虚拟机的区别 容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去。 这幅图的左边,画出了虚拟机的工作原理。其中,名为 Hypervisor 的软件是虚拟机最主……

阅读全文

Java 并发之 Double Check

在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时,程序员可能会采用延迟初始化。但要正确实现线程安全的延迟初 始化需要一些技巧,否则很容易出现问题。比如,下面是非线程安全的延迟初始化对象的示例代码。 1 2 3 4 5 6 7 8 9 public class UnsafeLazyInitialization{ private static……

阅读全文

我是如何破解公司 400K 网速限制下载 Docker 镜像的

声明:私设外网 VPN 是违法行为,本文仅作技术分享,如有参考本文技术手段的违法乱纪行为,产生的一切法律后果与作者无关。 我司的办公网络限制下载 400Kb/s,对于常规办公来说足够用了,然而对于我等动辄下载几百 Mb 的 jar 包的程序猿来说简直无法忍受这龟速。前些天折腾Docker时就用技术手段小小……

阅读全文

javascript:void(0) 是什么意思

前端开发中,我们经常会用到 <a> 标签,但是想阻止他的默认行为。如点击超链接时阻止在新标签中访问 href 所定义链接的行为,此时通常会有两种做法: 1 2 1. <a href = "#">点我</a> 2. <a href = "javascript:void(0)">点我<……

阅读全文

Git 协同工作流实战二(最佳实践)

概述 本流程的分支管理维护两个长期分支,Master分支为主分支;维护两类临时分支:BUG修复分支和特性分支。Stable分支总是落后于或等于Master分支的进度,且Stable分支总是由Master分支合并而来,当整个产品进行大的功能升级或者达到版本发布条件时,合并Master……

阅读全文

Git 协同工作流实战一(综合分析)

概述 随着项目越来越复杂,以至于出现一种现象:开发完成的代码不敢提交到远程仓库,怕升级系统时引发问题。这也暴露出测试、管理上的缺陷。 软件系统的升级发布与开发人员和代码管理是密不可分的,良好的代码管理有助于提升团队的开发效率,使软件版本的迭代变得清晰可控,因此有必要建立一套代码分支管……

阅读全文

在 2016 年学 JavaScript 是一种什么样的体验

嘿,我最近接到一个 Web 项目,不过老实说,我这两年没怎么接触 Web 编程,听说 Web 技术已经发生了一些变化。听说你是这里对新技术最了解的 Web 开发工程师? 准确地说,我是一名「前端工程师」。不过你算是找对人了。我对今年的技术别提多熟了,前端可视化、音乐播放器、能踢足球的无人机,你尽管问吧。我刚去 JS 大……

阅读全文

ES6 语法实战

ES6的…展开运算符 1 2 3 4 5 6 7 let a = [1,2,3]; let b = [0, ...a, 4]; // [0,1,2,3,4] let obj = { a: 1, b: 2 }; let obj2 = { ...obj, c: 3 }; // { a:1, b:2, c:3 } let obj3 = { ...obj, a: 3 }; // { a:3, b:2 } let obj4 = {a:3,...obj}; // { a:1, b:2 } mapState store.js 1 2 3 4 5 6 7 8 9 const state = { activeFirstMenu: 'overView', loginUser: { userName: '', deptName: '', logined: false, loginTime: new Date() } } 未使用mapState 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18……

阅读全文