October 19, 2018
数据结构与算法
"平时开发中,一般很少用到手动来写算法的情况,但实际上我们一直在接触一些数据结构与算法,如JAVA中的ArrayList 就用到了数据结构与算法,从名字可以看到了用到了Array这种数组结构和链表结构。下面根据目前学习的情况做一个总结。\n数据结构\n我们常见的数组结构一般有:\nArray数组、 Stack栈、 Heap堆、 Queue队列 Hash 哈希类型 LinkedList 链表,其中又分为单向链表、双向链表、还有最少用的环形链表 Tree 这个Tree分的太多了,如B-Tree、 B+Tree(mysql使用)、Binary Search Tree二叉搜索树 、AVL高度平衡树、Red Black Tree红黑树 等 http://www.bigocheatsheet.com/\n算法\n一般开发中用到的基本上排序算法居多,而算法大体上又分为比较排序和非比较排序。我们常用的比较排序算法有(参考: http://www.cnblogs.com/eniac12/p/5329396.html):\n快速排序 (Quick Sort) 冒泡排序 (Bubble Sort) …"
October 17, 2018
常见排序算法总结与实现(冒泡、插入、选择、希尔、堆排序、归并、快排)
"https://www.cnblogs.com/alsf/p/6606287.html https://blog.csdn.net/wang_hufeng/article/details/80774761\n推荐”极客时间”的两个算法专栏,其中有个专栏是视频形式的,两个专栏讲的都是特别的通俗易懂的。\nhttps://time.geekbang.org/column/126 https://time.geekbang.org/course/intro/130"
October 13, 2018
Heap And Stack 堆与栈的区别
"堆与栈的区别\n推荐: https://www.programmerinterview.com/index.php/data-structures/difference-between-stack-and-heap/\n栈是上下顺序存储的,且“先进后出LIFO”规则,只能删除顶部的元素,而堆是没有特定的顺序的存储,您可以删除任意元素。堆分配需要维护分配的内存和未分配的内存的完整记录,以及一些开销维护以减少碎片,找到足够大以适应请求大小的连续内存段,等等。内存可以随时释放,留出自由空间。有时,内存分配器将执行维护任务,比如通过将分配的内存到处移动来对内存进行碎片整理,或者在运行时进行垃圾收集——当内存不再处于作用域中时对其进行标识并释放它。\n栈用在线程中,程序执行时由线程创建有限数量的栈空间,当线程结束的时候会自动回收,属于系统级。 堆一般是由应用程序在启动时创建,由应用程序回收,属于应用级。 The stack is attached to a thread, so when the thread exits the stack is reclaimed. The heap is …"
October 11, 2018
raft一致性算法动画演示
"http://thesecretlivesofdata.com/raft/\nThe Raft Paper\nraft算法中文版: https://github.com/maemual/raft-zh_cn/blob/master/raft-zh_cn.md"
October 11, 2018
Kubernetes学习资源
"k8s guide\n准备 对于一个新手来说,第一步是必须了解什么是 kubernetees、 设计架构 和相关 概念。只有在了解了这些的情况下,才能更好的知道k8s中每个组件的作用以及它解决的问题。\n安装工具 minikube 参考 https://minikube.sigs.k8s.io/docs/start/ kind 参考 https://kind.sigs.k8s.io/docs/user/quick-start/ 以上是安装k8s环境的两种推荐方法,这里更推荐使用kind。主要原因是 minikube 只支持单个节点,而 kind 可以支持多个节点,这样就可以实现在一台电脑上部署的环境与生产环境一样,方便大家学习。\n要实现管理控制 Kubernetes 集群资源如pod、node、service等的管理,还必须安装一个命令工具 kubectl ,请参考: https://kubernetes.io/zh/docs/tasks/tools/\n学习文档 Kubernetes 文档 https://kubernetes.io/zh/docs/home/ Play with …"
October 9, 2018
Golang中的调度器
"golang实现的协程调度器,其实就是在维护一个G、P、M三者间关系的队列。\n介绍(Introduction) ——————— Go 1.1最大的特色之一就是这个新的调度器,由Dmitry Vyukov贡献。新调度器让并行的Go程序获得了一个动态的性能增长,针对它我不能再做点更好的工作了,我觉得我还是为它写点什么吧。\n这篇博客里面大多数东西都已经被包含在了[原始设计文档]( https://docs.google.com/document/d/1TTj4T2JO42uD5ID9e89oa0sLKhJYD0Y_kqxDv3I3XMw)中了,这个文档的内容相当广泛,但是过于技术化了。\n关于新调度器,你所需要知道的都在那个设计文档中,但是我这篇博客有图片,所以更加清晰易懂。\n带调度器的Go runtime需要什么?(What does the Go runtime need with a scheduler?) ——————————————————————————- 但是在我们开始看新调度器之前,我们需要理解为什么需要调度器。为什么既然操作系统能为我们调度线程了,我们又创造了一个用户空间调度 …"
October 6, 2018
MySQL中的半同步复制
"MySQL当前存在的三种复制模式有:异步模式、半同步模式和组复制模式。注意:MySQL复制模式没有“同步复制”这一项的,文章中只是为了读者方便理解半同步复制的概念才介绍了同步复制概念 https://dev.mysql.com/doc/refman/8.0/en/replication-semisync.html\n从MySQL5.5开始,MySQL以插件的形式支持半同步复制。\n1. 异步复制(Asynchronous replication)\nMySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。\n异步复制是MySQL最早的也是当前使用最多的复制模式,异步复制提供了一种简单的主-从复制方法,包含一个主库(master)和备库(一个,或者多个) 之间,主库执行并提交了事务,在这之后(因此才称之为异步),这些事务才在从库上重新执行一遍(基于statement)或者变更数据内容( …"
September 29, 2018
kubernetes中apiserver的证书
"在kubernetes中,与api server 通讯时一般都需要使用https证书,这些证书文件存在放 /etc/kubernetes/pki 目录中(ubuntu)。主要有以下几种\n/etc/kubernetes/pki/ca.{crt,key} 如果你已有现成的证书也可以直接将证书复制到这个目录里即可。这时kubeadm就会跳过证书生成这个步骤。\n证书生成后,kubeadm 接下来会为其它组件生成访问api server 所需要的配置文件,这些文件路径为: /etc/kubernetes/xxx.conf:\nls /etc/kubernetes/ admin.conf controller-manager.conf kubelet.conf scheduler.conf 这里可以看到这四个配置文件,分别 为不同的组件之间提供配置。\n这些配置文件中存储的是Master节点的ip地址、端口号、证书目录等信息。这样对应的客户端(scheduler,kubelet, controller-manager等)就可以直接加载并读取相应的配置文件来与kube-apiserver 建立安全连接, …"
September 24, 2018
Git中的git reset的三种参数的区别
"我们平时在使用git的时候,经常会遇到需要撤销上次操作的需求,这时候需要用到git reset的这个命令,他的使用就是 “git-reset – Reset current HEAD to the specified state”, 注意这里主要操作的就是这个 HEAD。\n为了方便我们先了解一下 Git 的工作流程\n相信大家对这个图已经很熟悉了,其中index也叫stage暂存区或者暂存索引区。git reset 共有三个互斥参数分别为”–soft”、”–mixed(默认参数)” 和 “–hard”,每种参数表示一种恢复模式,下面我们将分别看一下这git reset 三个参数的用法区别。\n前提条件 我们仓库中的Git 提交顺序为 “A(a.txt) -\u0026gt; B(b.txt) -\u0026gt; C(c.txt)“,当前分支为master。 当前 HEAD 指向C,即 a47072e9f97eac4ac02c0abac82b26a9719663fc (HEAD -\u0026gt; master),我们以恢复到B(aad0c91e7b1d3577)点为准。\ntest1 git:(master) git …"
September 18, 2018
MySQL中对MVCC的理解总结
"一、MVCC简介 MVCC (Multiversion Concurrency Control),即多版本并发控制技术。InnoDB数据库的事务隔离级别就是通过UNDO和MVCC来实现的(ACID特性),旧数据存储在UNDO中,再通过DB_ROLL_PTR 回溯查找历史版本。\n二、MVCC原理 1、通过DB_ROLL_PT 回溯查找数据历史版本2、通过read view判断行记录是否可见\n理解这一块之前,我们必须先了解一下row的内部存储格式\n字段\u0008说明:\nDB_ROW_ID:长度6个字节。此值由InnoDB自动生成,聚集索引时使用。如果用户未显式指定表主键时,\u001b表优先使用第一个非null的唯一索引作为主键.否则使用DB_ROW_ID的值作为主键ID,聚集索引会使用此值。如果指定了表主键的话,则聚集索引使用指定的值。 DB_TRX_ID:6个字节的事务ID。标记了最后更新此记录的事务ID,每开起一个新事务,其值自动+1 DB_ROLL_PTR:7字节的回滚指针。指向当前记录项的undo log记录,找之前版本的数据需通过此指针。 MySQL中的MVCC原理\n首次 insert 记录 …"