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


康艺杰 18/06/30 22:51:57
ArrayList源码分析 ArrayList简介 我们知道,ArrayList是基于数组实现的List类,完全支持List接口的全部功能,底层实质上就是一个Object[]数组。从源码注释的第一行“Resizable-array implementation of the List interface”中,可以看出ArrayList是List接口的可变长数组实现,即这是一个动态数组,与普通的数组相比,它可以实现容量的动态增长。至于其他的特征,我们可以从类的定义中得到: public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 这是ArrayList的类结构层次图: 由以上信息,我们可以知道: ArrayList:表明ArrayList支持泛型 exten 继续阅读 >>


贺含悦 18/06/29 18:06:53
结构化与非结构化网络 非结构化的P2P网络是指网络节点之间不存在组织关系,节点之间完全是对等的,比如第一代P2P网络Napster。 结构化的P2P网络与非结构化恰好相反,我们认为网络在逻辑上存在一个人为设计的结构,比如Chord假定网络是一个环,Kadelima则假定为一颗二叉树。有了这些逻辑结构,就给我们资源查找引入了更多的算法和思路。 引言 我们在 计算机网络–详解P2P对等网络(一)—BitTorrent协议 这一篇博客中讲述了BT下载的过程:在对等用户拿到种子文件的时候,首先会联系tracker服务器,然后加入用户集群,并在用户集群中寻找自己所需的内容,最后与拥有内容的对等用户进行联系。 从BT下载的过程中引出本节所要讨论的问题:如何高效的从用户集群中找出哪些对等用户拥有你正在寻求的具体内容? 在历史中有三种比较典型的模型来解决这个问题: Napster:使用一个中心服务器接收所有的查询,服务器告知去哪下载其所需要的数据。存在的问题是中心服务器单点失效导致整个网络瘫痪。 继续阅读 >>


董恒毅 18/06/28 21:24:59
从键盘输入一系列字符(以回车结束),按数字,大小写字母分类计数,并在屏幕上打印出来。 DATA SEGMENT INFOR1 DB 0AH,0DH,"Please Press Any Key to input a letter:$" INFOR2 DB 0AH,0DH,"Lowercase Letter : $" INFOR3 DB 0AH,0DH,"Uppercase Letter : $" INFOR4 DB 0AH,0DH,"Digit : $" INFOR5 DB 0AH,0DH,"Other Letter : $" DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: PRINT MACRO STR,RHS ; MACRO 为宏 LEA DX,RHS MOV AH,09H INT 21H 继续阅读 >>


刘生玺 18/06/28 21:03:23
学习总结一下官方发布的C版本客户端 hiredis,了解hiredis 客户端大致实现细节。在理解代码之间需要了解通信协议的特点,我上一篇转载的文章已经有过介绍,大家可以去看一下。 hiredis 提供了同步、异步访问,异步 API 需要与一些事件库协同工作,主要看一下同步API的实现。 hiredis 与服务端通信的API比较简单,主要有这几个步骤: 建立连接 发送命令 等待结果并处理 释放连接 一、相关数据结构 redisContext 保存连接建立后的上下文。 err 保存错误码,如果为0表示没错,如果非0那么错误说明保存在 errstr 中;fd是连接建立后的套接字;flags表示连接的标识;obuf 保存要向 redis-server 发送的命令内容;reader 用来读取从服务端返回的消息,redisReader中的buf成员用来保存内容;connection_type 表示连接类型,有两种分别是REDIS_CONN_TCP 和 REDIS_CONN_UNIX;timeou 继续阅读 >>


杜肖孟 18/06/28 21:03:07
期末考试即将到来,赶在人机界面考试之前,先把 HTML 复习一下。 一、HTML 概述 1. HTML的基本概念 1.1 HTML 介绍 HTML是Hyper Text Markup Language(超文本标记语言)的缩写,是构成Web页面的基本元素,是一种规范,一种标准。 HTML不是一种编程语言,而是一种描述性的标记语言,通过标识符来标识网页中内容的显示方式,例如图片的显示尺寸、文字的大小、颜色、字体等。 浏览器能够对这些标记进行解释,按照要求显示出文字、图像、动画、媒体等网页内容。 HTML文件的后缀名是 .html 或 .htm ,由于HTML是一个纯文本格式的ASCII文件,可以用任何文本编辑器编写HTML网页文件。 主要功能: 格式化文本:设置文本字体、字号、颜色以及文本段落、对其方式等。 创建列表:把信息用一种易读的方式表现出来。 建立表格:表格为浏览者提供快速找到所需信息的显示方式,还可以用表格来布局网页。 插入图片:还可以设置图像的各种属性,如大小、边 继续阅读 >>


李猛 18/06/28 17:42:47
本文档翻译自: http://redis.io/topics/protocol 。 Redis 协议在以下三个目标之间进行折中: 易于实现 可以高效地被计算机分析(parse) 可以很容易地被人类读懂 网络层 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。 客户端和服务器发送的命令或数据一律以 \r\n (CRLF)结尾。 请求 Redis 服务器接受命令以及命令的参数。 服务器会在接到命令之后,对命令进行处理,并将命令的回复传送回客户端。 新版统一请求协议 新版统一请求协议在 Redis 1.2 版本中引入, 并最终在 Redis 2.0 版本成为 Redis 服务器通信的标准方式。 你的 Redis 客户端应该按照这个新版协议来进行实现。 在这个协议中, 所有发送至 Redis 服务器的参数都是二进制安全(binary safe)的。 以下是这个协议的一般形式: *<参数数量> CR LF $< 继续阅读 >>


杜肖孟 18/06/28 17:41:22
1、 概念介绍缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对I/O的数据做临时存储,这部分预留的内存空间叫缓冲区。使用缓冲区有两个好处: 1、减少实际物理读写次数 2、缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态分配和回收内存的次数一般在实际过程中,我们一般是先将文件读入内存,再从内存写入到别的地方,这样在输入输出过程中我们都可以用缓存来提升IO性能。2、前几天课设写了一个循环:#include<stdio.h>....int ch;char c;ch = getchar();while(ch !='q'){        .......       scanf("%c", &c);        ch = getchar();}....结果这个就成个死循环。(之前可能没好好了解缓冲区)原因是我在scanf输入数据后会按回车结束。结果我的回车('\n')还留在缓冲区,之后的getchar就直接接收了缓冲区的'\n'然后造成了这个死循环!这个例子中我 继续阅读 >>


朱文博 18/06/27 18:30:04
目前大一正在学习C语言。最近在leetcode上遇到一个二进制加法的问题,特此记录 Add Binary Given two binary strings, return their sum (also a binary string). For example, a = “11” b = “1” Return “100”. 在我第一次编写代码的时候,测试成功,但是在运行的时候出现了错误 char buffer[100]={0}; char *addBinary(char *a, char *b) { memset(buffer,0,sizeof(100)); long int sum=0; int i=0; long int c=0; int j=0; int n; int m; m=atoi(a); n=atoi(b); while( m || n) { sum+=(m%10)*(pow(2,j)) 继续阅读 >>


吕海东 18/06/27 14:42:06
什么是string_view std::string_view是C++ 17标准中新加入的类,正如其名,它提供一个字符串的视图,即可以通过这个类以各种方法“观测”字符串,但不允许修改字符串。由于它只读的特性,它并不真正持有这个字符串的拷贝,而是与相对应的字符串共享这一空间。即——构造时不发生字符串的复制。同时,你也可以自由的移动这个视图,移动视图并不会移动原定的字符串。 正因这些特性,当你不需要改变字符串时,应当抛弃原来使用的const string而采用新的string_view,这样可以避免多余的字符串拷贝。 构造 std::string_view允许通过C风格的字符串、字符串字面量、std::string或者其他的string_view进行构造。在构造的同时允许指定“大小”。 const char *cstr_pointer = "pointer"; char cstr_array[] = "array"; std::string stdstr = "std::string"; s 继续阅读 >>


娄泽豪 18/06/26 21:55:29