设计模式学习笔记
创建模式模式名称工厂模式单例模式结构模式模式名称模式描述适配器模式将不兼容的组件,通过添加一个适配器兼容起来桥接模式将多种属性组合起来进行配置,而不是死板的放在一个类中去定义*组合模式树状的结构,一层一层的向下去推进装饰模式父类引用指向子类对象,一个接口对应着多个不同的实现外观模式对复杂的对象进行一层封装,只暴露出少量的自己所需要的功能享元模式通过工厂方法创建对象,这些对象内部不可变并且被所有的引用所共享,以实现对内存的节省代理模式实现对某种操作的封装,以实现一种对目标对象的代理行为模式模式名称模式描述责任链模式任务被交给职责链,每一个接受者都依次处理这个任务命令模式把操作封装起来作为一个命令,GUI上面的模块只需要调用这个命令即可以实现命令操作迭代器模式一个模块一个模块的向后递归遍历(链表)中介者模式在..
更多

学习etcd核心机制Raft协议的一点随想
前言最近开始学习k8s相关的东西,不可避免的和etcd搭上了交道,说来使用etcd的日子也不短了 中途开源过Python和Golang的etcd的api,代码在github上,公布一下 Golang的代码: 1https://github.com/Alexanderklau/Go_poject/tree/master/Go-Etcd 我只能说我会用,但是,会用是远远不够的,所以,这几天看了一些书和博客,将etcd相关的一些重要的知识点进行梳理总结,并且整理输出 作为自己的笔记,希望可以帮到大家。 感谢 《etcd技术内幕》的作者!您的书给了我很大的启发,也推荐大家去看看! etcd到底是什么是一个分布式的KV存储数据库,通过raft算法保持数据的..
更多

为什么早期的 Windows 需要整理碎片
为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。记得十几年前还在用早期 Windows 系统的时候,每用一段时间系统都会变得很卡顿,这时候需要打开系统提供的下面的磁盘碎片整理程序,当碎片整理完成后会感觉到系统变得稍微流畅了一些。图 1 - Windows 磁盘碎片整理程序在文件系统中,碎片整理(Defragmentation)是减少文件系统中碎片的过程1,该过程会将磁盘上相同文件的内容按照顺序重新排列并利用压缩算法去除文件之间的空隙,有点类似垃圾回收中的标记压缩算法2。作者已经很多年都不使用 Windows 操..
更多JS 文件转换
最近需要将 base64 格式的图片转化成 JS 里的 File 对象进行上传,于是学习了一下这方面的知识前言最近需要将 base64 格式的图片转化成 JS 里的 File 对象进行上传,于是学习了一下这方面的知识Base64 转 Blob分割 Base64 数据,生成类文件对象,base64 -> Uint8Array -> Blob123456789101112131415161718192021function dataURI2Blob(dataURI) { // 分割数据 const [meta, data] = dataURI.split(',') // 对数据编码 let byte if (meta.includes('base64')) { byte = ato..
更多

Serverless 与轻量级虚拟化 Firecracker · NSDI '20
『看看论文』是一系列分析计算机和软件工程领域论文的文章,我们在这个系列的每一篇文章中都会阅读一篇来自 OSDI、SOSP 等顶会中的论文,这里不会事无巨细地介绍所有的细节,而是会筛选论文中的关键内容,如果你对相关的论文非常感兴趣,可以直接点击链接阅读原文。本文要介绍的是 2020 年 NSDI 期刊中的论文 —— Firecracker: Lightweight Virtualization for Serverless Applications1,该论文实现的 Firecracker 能够在宿主机上提供轻量级的虚拟化支持。很多开发者在今天都会选择使用 Serverless 的容器和服务以为了减少系统的运维开销、提高硬件的资源利用并实现快速的扩缩容,然而 Serverless 的场景却对容器的隔离性、安全..
更多

你该如何为 Kubernetes 定制特性
Kubernetes 是非常复杂的集群编排系统,然而哪怕包含丰富的功能和特性,因为容器的调度和管理本身就有较高的复杂性,所以它无法满足所有场景下的需求。虽然 Kubernetes 能够解决大多数场景中的常见问题,但是为了实现更加灵活的策略,我们需要使用 Kubernetes 提供的扩展能力实现特定目的。每个项目在不同的周期会着眼于不同的特性,我们可以将项目的演进过程简单分成三个不同的阶段:最小可用:项目在早期更倾向于解决通用的、常见的问题,给出开箱即用的解决方案以吸引用户,这时代码库的规模还相对比较小,提供的功能较为有限,能够覆盖领域内 90% 的场景;功能完善:随着项目得到更多的使用者和支持者,社区会不断实现相对重要的功能,社区治理和自动化工具也逐渐变得完善,能够解决覆盖内 95% 的场景;扩展能力:因..
更多

集群管理系统 Mesos 的设计原理 · NSDI '11
『看看论文』是一系列分析计算机和软件工程领域论文的文章,我们在这个系列的每一篇文章中都会阅读一篇来自 OSDI、SOSP 等顶会中的论文,这里不会事无巨细地介绍所有的细节,而是会筛选论文中的关键内容,如果你对相关的论文非常感兴趣,可以直接点击链接阅读原文。本文要介绍的是 2011 年 NSDI 期刊中的论文 —— Mesos: A Platform for Fine-Grained Resource Sharing in the Data Center1,该论文实现的 Mesos 能够在集群中管理不同的计算框架,例如 Hadoop 和 MPI 等。虽然 Mesos 集群管理系统是 10 多年前发布的技术,今天已经逐渐被更主流、更通用的容器编排系统 Kubernetes 取代,但是它确实可以解决集群管理上的..
更多

Golang进阶-必须知道的一些事
前言最近感觉自己又陷入了无尽的自我循环和自我否定,不知道自己到底是怎么了 我,出生于忧患之中,但是告诫自己,不能死于安乐。 这篇文章是收集的一些Golang进阶的知识,作为我自己更上一层楼的笔记,也希望可以帮助大家 未来将会持续性输出面试之类的八股文和算法之类的笔记,因为我感觉自己需要时间去沉淀 1234567怀才不遇只是欺骗自己的安慰剂胸无点墨想学太白一字千金?泛舟池上不如随风远去人生不止生命不息 Golang进阶需要知道的知识理解Golang垃圾回收垃圾回收,一般简称GC,你理解为,释放不需要的资源就行 GC的核心机制,就是后台维护一个守护线程,监控对象状态,识别不需要的对象,释放资源 Golang的垃圾回收机制进行了多次演变 123456..
更多

为什么 Kubernetes 要替换 Docker
为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。Kubernetes 是今天容器编排领域的事实标准,而 Docker 从诞生之日到今天都在容器中扮演着举足轻重的地位,也都是 Kubernetes 中的默认容器引擎。然而在 2020 年 12 月,Kubernetes 社区决定着手移除仓库中 Dockershim 相关代码1,这对于 Kubernetes 和 Docker 两个社区来说都意义重大。图 1 - Dockershim相信大多数的开发者都听说过 Kubernetes 和 Docker,也知道我们可以使用..
更多读诗的感悟
前言今年我陷入迷茫 我不知道我的路是否还在远方? 到底停下还是持续hold on? 难道这就是生活给予我的前路渺茫? ONE算命先生说我天赋异禀,功成名就 20年后,格子间的工蚁是我难辞其咎 身边朋友来了又走,life move on 对影成三人的生活,is my feture 塞上耳机,beats never stop 闭上了眼,已经是晚间十点 身体靠后,看地铁奔赴下一个旅程的终点 回归生活本质,吃饭得闲饮茶 所以,将进酒且君杯莫听 且听一首诗云子曰 TWOlisten 曾经仰天大笑出门 可我辈旧是蓬蒿人 曾经在会当凌绝顶 但高楼遮住我的眼 曾经狂放诗百篇 现在空空如也 江郎才尽?ye,这是生活做的孽 回到过去,回到充满希望的年代 活着也不只是为..
更多