汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪汪。 没保存啊,都是泪啊。 前言 心好累啊,又要写一遍。 从去年初次接触Zookeeper到现在,正好一年了,一直没总结,一方面也是因为自己对分布式系统理解很少,没有什么可说的,如果只是描述一下zk提供的几个原语实在没什么意义。(另一方面就是懒)。 感觉自己终于对分布式可以说是有一定的入门了,所以赶紧记录下自己的成长。 正文 我接触zk相对来说是挺缘分的,因为C++出身,对于Hadoop家族了解甚少,只是在项目中对于模糊的“分布式协同”而找到了zk。就像一场仓促的恋爱,摸不准对方的脾气, 闹出了很多尴尬(够了)。 明天继续。。。 什么是zk zk是hadoop全家桶的一员,后来独立为apache的顶级项目,是google的chubby的开源实现。 很高大对吧。。。但是说了好像没说。。。 通俗的理解,在一个分布式系统的开发中,我们会面对很多共同的问题,比如leader选举/分布式锁,集群管理等等等等,就像后台开发 继续阅读 >>


康艺杰 18/06/30 22:51:57
前言 《深圳男子图鉴》 继续搬砖ing,今天(4天前)看到某面向SSD的项目,赶紧学习了一下SSD的基础知识。 主要是从存储系统、DB开发的角度来看SSD,并非专业搞硬件的,完全初学者。 正文 SSD的寿命 首先是我对SSD最初了解的一点,SSD是有寿命的。由于SSD的物理性质,导致了它是有一定使用寿命的,当每个单元被读写一定次数之后就将不可用。 而主要有3种材质的 SLC MLC TLC 这三种材质最大的区别就是单元存储的bit数不同 SLC1个 TLC3个, 随着存储的bit多,性能(读取、写入延时)越来越高,寿命越来越短,当然成本也越来越低。 损耗均衡 正因为有寿命的影响,所以我们希望整块SSD最好可以达到一个损耗均衡的效果(一个512G的SSD,每天IO数目相同,总寿命有5年,那么我肯定不希望2。5年时只有256G可用。。),所以会有一定的策略来保证损耗均衡。 具体参数可见下图(出自coding for ssd–Part 2)     继续阅读 >>


康艺杰 18/06/17 17:38:26
前言 《深圳男子图鉴》搬砖ing,但是还是不要忘了学习啊。 Linux安装软件一直是一个难以形容的东西,记得刚进小组的Linux知识技能大赛就是安装一个软件(ntfs-3g?)。那么对于Linux下除了方便的包管理系统rpm yum apt-get 等等等等,可以让我们轻松愉快的安装软件之外,还有一种很重要的安装方式,就是源码编译安装。 对于C/C++这种 一次编写,反复调,啊不是,一次编写,到处编译运行的代码,用源码编译来安装几乎是最完美的方式了(ABI问题等等)。 最近在耗时好久完成一次源码编译安装+链接开发之后,又收获了很多知识,赶紧总结一下。 正文 需要安装的软件是ProtoBuffer,因为开发环境很麻烦,所以直接上传源码包安装。 照例我们需要执行 ./configure make make install Ok,那么问题来了。 我们需要编译出的可执行程序protoc,还有他的so库libprotobuf。 但是目前呢,按照这个流程会将protoc放在/usr/bin l 继续阅读 >>


康艺杰 18/06/08 21:40:51
前言 空窗期(这个词是不是很专业)的几天,没什么事做。手边从图书馆借的Ceph的书快到期了,赶紧拿出来看看。 好哒 Ceph 启动! 。。。。。。。。 enmmmmm 明天继续部署 不过在部署的过程中学到了很多ssh的小技巧,改变了这两年很low的操作。赶紧M一下 正文 ssh登录远程主机 这个几乎是很常用的操作了。 $ ssh root@192.168.30.2 但是每次要输入这么长一大串很麻烦,于是我就用了一个很low的办法实现 修改.bashrc alias sshbmw='ssh root@xxx.xx.xx.xx' 之前做分布式爬虫时,要管理3+3台腾讯/阿里云,于是在bashrc里面alias了一堆。。。 现在才知道,可以通过修改ssh的config文件 $ vim ~/.ssh/config (针对不同用户,config不同,需要新建,and设置权限,具体权限我也不太清楚给个744是ok的) 添加 Host agent HostName 19 继续阅读 >>


康艺杰 18/05/23 11:13:24
前言 银行家算法,是我们OS课上的一个非常重要的知识点,感觉可以说是必考题了,但是考试嘛,考过了以后不用就会忘,每次都要重新复(yu)习一遍,又非常麻烦,正好前段时间有机会实现了一遍,赶紧总结下,避免以后又忘了。 正文 银行家算法简介 银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死结产生的演算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。 (来自wiki) 这里的重点是避免!!! 避免!!! 避免!!! 针对死锁这种坑爹的情况有预防和避免两种大的解决思路,之前总是傻傻分不清楚。这里我们还是通过一个生动的例子来解释吧。 女朋友:康康啊,预防感冒,冲杯板x根吧。 康康:好滴。 女朋友:康康啊,出门系上我给你织的围巾吧,避免感冒。 康康:好几。 感受到预防和避免的差异了嘛,预防就是提前做好准备,而避免则是在实际操作中小心翼翼。 回到死 继续阅读 >>


康艺杰 18/05/21 16:09:33
前言 写简历时,很害怕自己没什么特点,与别人没啥区分度,而平时又感觉改bug比较多。。。于是在自我评价一栏大胆的写上 热爱trouble-shooting ChangeLog: 2018-6-10 update vmstat 从此走上被虐之路。。。 正文 因为我自己主要是Linux 下 C/C++ ,所以enmmm 还是这方面做的比较多。之前也写过一篇类似的博客,主要简述的是改bug的思想(见这篇),这篇主要是从实际工具出发,简单介绍工具的使用及思路。(当然反手一个printf也算是一种工具。。) 主要工具 GDB strace pstack valgrind iotop netstat/ss wireshark/tcpdump 辅助性的 top ps 一运行就段错误的。直接生成coredump文件,生成的方法见这篇 如果堆栈的信息完好,可以之间看到问题出在哪里,一般 print 变量,看看是否是地址越界之类的。 运行起来不动的。 可能是死循环/死锁。 对于多 继续阅读 >>


康艺杰 18/04/02 21:03:23
正文 What 引用一下知乎@骆梁宸的文章Google 编程之夏(GSoC):海量优质项目,丰厚报酬,你竟然还不知道? 这个问题,我们先来看看 Google 官方是怎么说的:(出自 What is Google Summer of Code?) Google Summer of Code (GSoC) is a global program that matches students up with open source, free software and technology-related organizations to write code and get paid to do it! The organizations provide mentors who act as guides through the entire process, from learning about the community to contributing code. The id 继续阅读 >>


康艺杰 18/02/20 20:38:19
前言 半夜登到云服务器上测代码,结果一个tab补全 bash: 无法为立即文档创建临时文件: 设备上没有空间 行了,代码也不测了,先改bug吧。 正文 出现的问题就是tab无法正常补全 这里也很明显,就是磁盘空间不足。 于是用df 命令查看 额。。。GG 磁盘满了 之前暑假的时候就遇到过这种问题,当时是学姐的电脑,开机无图形界面(我这云服务器不需要图形),查看了一下磁盘就是写满了,当时解决的不好,这次赶紧记下来。 最简单的方式就是排除法,顺着目录树从/开始找大文件。 我们切换到root用户然后到/下看看哪个目录占用空间比较大 # du -h --max-depth=1 --max-depth=1就是递归查看深度为1,我感觉也可以不加直接筛选大文件,但是一开始思路比较简单,就是看看哪个目录占用的空间大。 找了几次之后成功定位某大文件,6个多G,rm之。 可是问题依然没有解决。 在/下du查看只有14G 但是df查看依然是20G满了 文件删除的原理 继续阅读 >>


康艺杰 18/02/14 15:21:04
前言 最简单的动归,依稀记得当年小组免试题最后一关就是这样的(恩,是最后一关的前一部分哈),思路和之前的博客一样,做之前又复习了一遍博客,然后就轻松+愉快(哼,才不是呢,一开始没搞懂m,n怎么处理,又不能在类里全局数组&传数组很麻烦,整了半天表。。) 题目 有一个机器人位于一个 m × n 个网格的右上角。 机器人每一时刻只能向下或者向左移动一步。机器人试图达到网格的左下角。每个网格上有一个数字权值,机器人希望它走到左下角的路径权值和最大。 问这个最大路径权值和是多少? 注意事项 输入一个n x m 的矩阵,保证 n <= 200,m <= 200。(康康提示,nm相等,并且nums数组已经输入好了权值,不用自己手动输入了) 题目数据保证 0 <= i <= n-1 , 0 <= j <= m-1, nums[i][j] <= 100000。 样例 给出 [ [1,2,3,4], [3,5,6,7], [9,10,1,2], 继续阅读 >>


康艺杰 18/01/31 23:59:24
前言 一道感觉不难,但是涉及到负数移位运算的坑的题。 正文 题目 如果要将整数A转换为B,需要改变多少个bit位? (两个数都是32位的整数) 样例 如把31转换为14,需要改变2个bit位。 (31)10=(11111)2 (14)10=(01110)2 思路: 恩,就是找对应位上不同的个数,所以想法就是统计两个数异或后的结果中1的个数,(有1就说明对应位上两个数不相同)。 int bitSwapRequired(int a, int b) { int result = 0; int temp = a ^ b; while(temp){ result += 0x01 & temp; temp = temp >> 1; } return result; } 直接超时,卡在-1,1 这组用例上了。 emmmmm还有负 继续阅读 >>


康艺杰 18/01/24 17:34:14