自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (4)
  • 问答 (2)
  • 收藏
  • 关注

原创 深入理解Go Channel

Golang使用Groutine和channels实现了CSP(Communicating Sequential Processes)模型,channles在goroutine的通信和同步中承担着重要的角色。在GopherCon 2017中,Golang专家Kavya深入介绍了 Go Channels 的内部机制,以及运行时调度器和内存管理系统是如何支持Channel的,本文根据Kavya的ppt学

2017-07-16 19:06:53 14403

原创 再读分布式一致性算法Raft论文

Raft是一个管理日志副本一致性的算法。相比Paxos结果一样,并且一样高效,但是理解起来更加的容易。Raft将一致性的主要元素分离开来,比如leader选举,log 复制,安全等。同时,也提供了一个新的机制实现cluster membership改变,其使用多数的原则来保证安全性。一致性算法一致性算法的意义就是保证一致性的一组机器能够在其部分成员出现故障的时候依然能够存活下来(提供服务)。在Raf

2017-07-16 10:21:11 2638 1

原创 对象存储对比 - Haystack

经过一段时间的调研,对分布式对象系统有了一点浅显的认识,暂不谈和文件系统的区别(其实还是有点傻傻分不清),姑且认为对象存储和文件系统最大的区别就是API,文件系统提供了完整POSIX语义,往往具有层次化的目录结构,对文件可以进行精细的操作(open, read, write, seek, delete等),相对会复杂一些。相比之下,对象存储就简单的多,对象本义是**B**inary **L**arg

2017-06-25 21:58:03 5645

原创 SeaweedFS索引-CompactMap

SeaweedFS提供了几种不同的needle索引策略,包括memory, btree, blotdb, leveldb四种,其中默认的是memory,也是其内部唯一自己实现的一种索引,btree使用google的btree开源实现,boltdb和leveldb都依赖一个db.memory的索引实现,使用了一个叫CompactMap(这是作者自己起的名)的数据结构。本文后面将会重点介绍compact

2017-06-22 09:13:43 1658 2

原创 一致性哈希算法

前面专门介绍过几种常见的数据分片(Sharding),主要包括范围分片(Range)和哈希(Hash)分片两种大的策略,其中哈希分片最简单的Round Robin方法(直接按照机器数取模)存在一个明显的缺点,当机器数增加或者减少的时候,所有的数据都要进行重新的哈希分配。这个问题的本质原因是因为机器和数据哈希分布之间强耦合,因此针对这个缺陷主要有两个解决方案一种是引入虚拟桶的概念,分两步映射(key-

2017-05-03 12:41:11 1565 1

原创 操作系统页表管理

原文地址:http://kdf5000.com/2017/03/12/操作系统页表的管理/学过操作系统的都知道,在操作系统中存在一个虚拟内存的概念,它用于内存的管理,使得应用程序认为它有一段连续的内存,大大地简化了程序员码代码的难度。程序员只用关注在这个连续的虚拟内存段中怎么使用内存,不用关心在物理内存中到底用那一段内存,进程运行的时候操作系统会自动进行映射。操作系统是怎么做到的呢?实际上操作系统为

2017-04-15 11:00:38 13526

原创 mmap内存映射

内存映射是个很有用,也很有意思的思想。我们都知道操作系统分为用户态和内核态,用户态是不能直接和物理设备打交道的,如果想把硬盘的一块区域读到用户态,则需要两次拷贝(硬盘->内核->用户),但是内存映射的设计只需要发生一次的拷贝,大大的提高了读取数据的效率。那么内存映射的原理和内核是如何实现的呢?因为内存映射涉及到虚拟内存的管理,虚拟内存到物理内存的映射,因此在详细介绍内存映射前先普及(回忆)一下相关的

2017-04-15 10:51:15 3234 3

原创 Golang RPC性能测试

最近刚好要使用Golang的RPC,因此对Golang标准库的RPC进行了一下测试,看看其性能到底如何。RPC服务端和客户端的实现完全使用RPC的net/rpc标准库,没有经过特殊的优化,主要针对下面三个场景进行测试。测试之前需要先说明一下,Go的rpc连接是支持并发请求的,就是说一个一个连接可以并发的发送很多个请求,不像http协议一问一答的模式。测试环境操作系统:Centos 6.8 (Linu

2017-04-15 10:41:11 9510

原创 使用Python和BitTorrentSync定期给Kindle推送电子书

Kindle伴侣最近发现一个很好用的Kindle电子书分享网站Kindle伴侣,资源丰富,除了提供各种热门图书免费下载,还提供了很多关于Kindle的使用技巧,里面个人最喜欢的功能就是每周一书,使用BitTorrent每周自动同步热门电子书。使用的是著名的同步软件Resilio Sync, 最开始是在自己电脑上安装了软件同步,但是要一直开着,感觉好麻烦,有时候电脑还要关了,影响同步。刚好手里有个闲置

2016-11-12 20:28:24 2983

原创 面向HBase的内存key-value缓存的实现

0x01 背景之所以要实现这个缓存主要原因如下(但是由于不是实际业务场景需求,所以可能不太准确,也可能不存在这个需求): * 非结构化数据的爆炸式增长 * 处理速度的要求越来越高 * HBase是面向硬盘的 * 内存容量越来越大 * 热点数据可以在内存放下0x02 设计方案通常的要实现缓存,主要是在有两个大方向实现,一个是在客户端实现,另一个时在服务端实现 * 客户端实现 - 修改H

2016-06-19 18:54:54 7010

原创 基于docker的hadoop分布式集群

Hydra-hadoop项目地址:https://github.com/KDF5000/hydra-hadoop 使用docker在单机部署hadoop和hbase的分布式环境,本项目具有一下特征: * 使用serf和dnsmasq 作为集群节点管理和dns解析 * 可以自定义集群hadoop和hbase的配置,配置完后只需重新build镜像即可 * ssh远程登录集群节点容器项目目录ser

2016-05-16 16:41:45 1326

原创 二分k-均值算法

前面介绍过k-means聚类算法,通过不断的更新簇质心直到收敛为止,但是这个收敛是局部收敛到了最小值,并没有考虑全局的最小值.那么一个聚类算法怎么才能称得上效果好呢?要想评价一个算法的好坏,首先需要有一个标准,这也是我们设计算法的时候要首先考虑的,我们设计算法的目的是什么,设计的算法要达到的什么效果,这样才能明确设计算法的目标.一种度量聚类算法效果的指标是SSE(Sum of Squard Erro

2015-11-11 18:54:02 5768 1

原创 回溯法解0/1背包问题

背包问题(Knap sack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价值,在限定的总重量内,我们如何选择,才能使得物品的总价值最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。0/1背包问题是背包问题的一个特例,在选择物品时只有两种选择,选或不选.解决0/1背包问题就是一个寻找最优解的过程,可以使用动态规划的方法解决.当然最简单

2015-11-11 18:53:10 1859

原创 k-means聚类算法

k-means聚类算法 优点: 容易实现 缺点: 可能收敛到局部最小值,在大规模数据集上收敛较慢 使用数据类型: 数值型护具k-均值是发现给定数据集的k个簇的算法.k有用户决定.每一个簇通过旗质心,即簇中所有点的中心描述. 工作流程: 首先随机确定k个初始点作为其质心.然后讲护具集中的每个点分配到一个簇中,也就是分配到距其最近的质心对应的簇.这一步完成时后,每个簇的质心更新为该簇

2015-11-07 23:22:56 1573

原创 归并排序和快速排序比较

1 . 归并排序和快速排序1.1 归并排序归并排序的思想就是讲数组分为两部分然后对两部分进行排序,然后讲排序后的两部分进行合并,主要的难度在于合并部分,合并的时候需要重新开一个临时数组保存合并的结果,然后再复制到原数组. 下面是归并排序的python实现# coding:utf-8__author__ = 'devin''''data: arraylow,high: index of arr

2015-10-25 09:46:35 3135

原创 分布式爬虫

RSpider一个基于scrapy-redis的分布式爬虫模板,在scrapy-redis自带的example的基础上进行修改,添加在实际爬取过程中大部分爬虫可能用到的功能,使的构建分布式爬虫更加的简单。 scrapy-redis: https://github.com/darkrho/scrapy-redis安装RedisWindowsRedis官网没有windows的安装程序,但是微软的MsO

2015-08-28 15:13:17 2622

原创 Ubuntu-14-04-安装PHP环境和反向代理

安装Apache$ sudo apt-get install apache2安装php$ sudo apt-get install php5 libapache2-mod-php5安装mysql$ sudo apt-get install mysql-server反向代理经过测试最小的配置。。。。启用apache的mod_proxy 模块$ sudo a2enmod mod_proxy修改配置

2015-08-28 15:11:51 711

原创 Ubuntu 14.04 安装图形监控工具Graphite

什么是graphite?先看看百度百科是怎么介绍 Graphite 是一个Python写的web应用,采用django框架,Graphite用来进行收集服务器所有的即时状态,用户请求信息,Memcached命中率,RabbitMQ消息服务器的状态,Unix操作系统的负载状态,Graphite服务器大约每分钟需要有4800次更新操作,Graphite采用简单的文本协议和绘图功能可以方便地使用在任何

2015-08-28 15:09:48 2401

原创 Ubuntu下Scrapy的安装

最近在学习爬虫,早就听说Python写爬虫极爽(貌似pythoner说python都爽,不过也确实,python的类库非常丰富,不用重复造轮子),还有一个强大的框架Scrapy,于是决定尝试一下。要想使用Scrapy第一件事,当然是安装Scrapy,尝试了Windows和Ubuntu的安装,本文先讲一下 Ubuntu的安装,比Windows的安装简单太多了。。。抽时间也会详细介绍一下怎么在Windo

2015-08-23 23:47:19 1268

原创 Ubuntu 14.04 下安装使用Python rq模块

rq 是Python的一个第三方模块,使用rq可以方便快速的实现Python的队列操作,实现多态电脑的分布式架构。其中 R是Redis的意思,Q是Queue的首字母,rq使用Redis和Queue实现分布式,分别实现了Master和Worker,通过Redis存储任务队列。Ubuntu14.04 安装rq假设已经安装了Python和pip,本文通过`pip来安装rq$sudo pip install

2015-08-23 23:44:02 1571

原创 PHP五种常用的设计模式——工厂模式

一直对设计模式有一种敬畏之心,每次想要看设计模式的时候就会想到Erich Gamma,Richard Helm , Ralph Johnson, John Vlissides的黑皮《设计模式》,基本都望而止步,要把那本书看完可不是一时半会的,而且在没有项目经验的情况下,个人感觉基本都是纸上谈兵。今天在IBM Developerworks上看到一篇文章将PHP中常用的五种设计模式,感觉还不错,而且只有

2015-08-08 19:12:30 2008

原创 为应用程序添加缓存

服务端添加缓存1. 背景由于项目进度赶得比较紧,而且第一次自己设计系统的架构,刚开始考虑的并不完全,主要想着先把系统的功能实现了再说。因此刚开始设计系统的时候并没有考虑缓存的问题,但是对已一个web系统,缓存不仅可以大大的减少数据库的压力,也可以很大程度的提高系统的响应时间。现在系统的功能完成的基本差不多了,因此现在需要为系统添加缓存,但是由于系统功能已经完成的差不多了,代码写的也很多了,所以现在添

2015-06-04 14:28:51 3535

原创 Apache 日志文件简述

apache日志分析1. 日志类型访问日志格式:119.79.247.29 - - [10/Jan/2015:09:40:12 +0800] "GET /api/service/friends/dynamic HTTP/1.1" 200 4952 "-" "-"错误日志格式:[Sun Jan 04 04:09:16 2015] [error] [client 112.124.127.64] PHP

2015-06-04 14:28:43 833

转载 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2015-06-04 14:23:04 476

原创 windows下使用redis

windows下使用rediswindows下使用redis安装redisredis官方网站redis.cnredis官方文档,包括redis的使用,管理等:http://www.redis.cn/documentation.htmlredis的windows版有MS Open维护,代码托管在GitHub上Redis-windows下载完成后在Bin目录下可以找到exe文件wind

2014-11-23 11:04:05 6802

转载 C语言数据类型32位和64位不同

C语言编程需要注意的64位和32机器的区别  2009-11-06 18:30:18|  分类:C语言编程 |举报|字号 订阅一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较:16位平台char         1个字节8位short        2个字节16位

2014-08-27 10:59:38 16353

原创 排序算法总结

最近突然想总结

2014-04-06 09:27:04 988

原创 穷屌丝的树莓派无显示屏安装,上网方法

本想好好玩玩树莓派,可是除了树莓派板卡各种配件竟然也是如此的昂贵,显示屏,摄像头,各种HDMI转换器。。。作为一个穷屌丝,没钱啊,但是又不想放弃,于是各种百度,谷歌,不断尝试,最终终于发现一种强大的树莓派入手方法,除了树莓派板子,成本可以说为零。具体方法见下:台笔记本(有无线网卡)准备材料(针对学生族):一根网线刷完系统的SD卡和可以使用的树莓派板子软件:vncview 32位:h

2014-02-12 23:52:01 19622 3

原创 树莓派-上手体验

早就听说树莓派,这几年比较火的一个开源硬件,早就想买一个玩玩,苦于手头没钱啊!趁这几天寒假,呆在学校做项目,完成任务之余,闲时实在忍不住,要牙花了232大洋在淘宝买了一个英版的。今天拿到手,怕不急待的打开摆弄起来。先来几张开盒图:200多就这么点东西,一个板子,三个淘宝卖家赠送的散热片。但是至少还需要有电源线,才能玩啊。不过没有这些东西总不能不玩吧,

2014-01-19 22:50:44 7165

原创 Apache vhost的配置

DocumentRoot "G:\PHP-PROJECT\php_workspace\1on1speak.com\1on1Speak"ServerName localhost# 你可以在这里添加其他指令DocumentRoot "G:\PHP-PROJECT\php_workspace\baidu"ServerName www.baiduDemo.com Optio

2014-01-17 15:37:24 7294

原创 上市之后Twitter的入职面试问题

1. 请你用五分钟的时间来表达一下自己所喜欢的人事物等——爱好、读过的一本书、一个项目、工作等皆可以。2. 谈谈一个营销做得好的品牌/事件以及做得差的品牌/事件。3. Twitter让你兴奋的地方是什么?4. 如果你的同事/队友/小伙伴反对你的意见或建议,你会怎么做?5. 你会做什么菜?6. 一辆校车能装下多少个高尔夫球?7. 我们为什么不应该聘用你?8. 你最

2013-11-20 18:02:56 1102

原创 编译器-语法分析(预测分析表法)

1.    总体设计思想整个词法分析器有一张预测分析表,一个先进后出的分析栈和一个总控程序组成。主控程序控制整个分析的过程,分析过程中从用户输入的程序源码中利用词法分析器从程序源码缓冲区中取出字符(满足语法规则的单词),然后根据分析栈中的内容,通过查找预测分析表,根据通过的返回结果执行不同的操作,出现错误则直接返回报错,否则知道将整个源码程序分析完为止。2.    详细算法设计(1).

2013-11-08 14:53:34 4297

原创 编译器-词法分析

1.    总体设计思想         首先将指定语言的所有出现的单词(可以是一类也可以是特定的)构造其正规式,然后根据正规式构造NFA,最后将NFA确定化为DFA,词DFA即为遇到此类单词时的状态转换图也就是程序的流程分支图,每一种单词的状态转换图又是整个词法分析程序的分支,组合到一块几可以画出整个分析程序的状态转换图。2.    详细算法设计下面给出关键单词的NFA:科学技术

2013-11-08 14:46:46 1576

原创 struts2配置

第一步:获取struts第二步:新建动态web项目第三步:导入必要包   如下:       第三步:配置web.xml  <web-app id= "WebApp_9" version ="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/200

2013-11-02 08:37:33 718

原创 struts2 action的动态应用(DMI)

action DMI动态应用创建action 类packagecom.demo.action;importcom.opensymphony.xwork2.ActionSupport;publicclass userAction extends ActionSupport { /** * */ private

2013-10-20 17:14:16 1358 1

原创 Qt绘 —— QPixmap 的使用

1.QPixmap 的使用     直接给个例子: QPixmap pix(16,16); //作为绘图设备 QPainter painter(&pix); //创建一直画笔 painter.fillRect(0,0,16,16.Qt::black);//在pix上绘制正方形     扩展:制作颜色选择框时可以利用上面绘制的正方形作为图标,效果如下

2013-09-21 23:45:03 17744 2

转载 java获取时间

有两种方法:方法一:用java.util.Date类来实现,并结合java.text.DateFormat类来实现时间的格式化,看下面代码:import java.util.*;import java.text.*;//以下默认时间日期显示方式都是汉语语言方式//一般语言就默认汉语就可以了,时间日期的格式默认为MEDIUM风格,比如:2008-6-16 20:54:53//

2013-09-21 23:43:03 771

原创 c++基础知识

一. 函数设计1. 函数名字:动宾结构2. 高内聚,低耦合,隐藏信息3. 函数内部不能存在神秘数字4. 尽量不用全局变量5. 函数功能最好单一6. if判断中最好将判断值放在变量前面2.程序的结构化设计  自顶向下,逐步细化,模块化设计,结构化编码  若没有正在做什么和应如何去做的清晰思路,无论选何种语言编程,都无济于事3. 程序设计的两分: 分析

2013-09-21 23:39:08 792

原创 《C++编程实战》学习笔记

1.const的常见用法    函数参数前加const,说明此参数的值不能在函数内部被改变;在函数后面加const说明此函数不能改变该对象的任何成员变量,也不能调用该对象的任何非常量方法,而且对于常量对象只能调用声明为const的方法。2.using namespace std如果没有声明此命名空间,使用cout,cin,endl时必须使用std::cout,std::ci

2013-09-21 23:34:35 975

原创 QT安装配置

学习任何语言,环境很重要,初学Qt,配置环境的小经验。

2013-08-30 23:22:00 1128

Go语言编程

作为可以与C、C++相媲美的Go语言,越来越多的程序员快开始去学习。文档为学习Go语言的经典编程资源,

2014-04-16

C语言游戏编程从入门到精通

专门介绍用C语言编写游戏,内容容易理解,适合初学者

2012-10-17

Java数据结构和算法(第二版)

自己收集的一本讲解java数据结构和算法,内容详细,涵盖各种经典算法,并且实例较多

2012-10-17

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除