- 博客(52)
- 收藏
- 关注
原创 打破束缚你的那几个圈
语言圈何为语言圈?就是你对一种语言情有独钟,你会用它去搞定所有项目(至少你心里是这么想的),你是它的铁粉。当你刚开始接触编程的时候,你一定会接触到一种编程语言。这种编程语言给你的感觉就像初恋的感觉。它能做很多,你从未做过的事情,它有很多特性,让你欲罢不能,慢慢地你就会喜欢上它,同时慢慢地,你也开始排斥其他的语言,就像你爱上了初恋,眼里容不下其他女孩一样,只有你面前的这个女孩是全世界最好的。随着...
2018-10-05 10:59:57 404
原创 Centos 搭建DNS服务
背景 为了方便记忆,我们的线上服务器都按照一定规则定义了hostname,这样就不用记忆ip了,之前机器很少,直接在每台机器上配置了host(/etc/hosts)就行了,
2017-01-16 12:08:36 666
原创 scrapy实战二
背景 运营需求是需要爬取好大夫的数据,爬取路径如下: 第一级:抓取所有科室: 第二级:每个科室对应的好评科室 第三级:科室推荐专家第四级:推荐专家 第五级:专家信息 总结一下,就是最后要抓取的数据有: 科室 子科室 医院 科室介绍 专家 专家头像 职位 擅长 专家介绍 需求分析确定爬取路径: 1、首先抓取http://www.haodf.com/keshi
2016-01-15 12:11:16 1805 4
原创 scrapy实战一
scrapy是什么? “Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。”–官方说法。 个人理解:爬取网页数据,并将抓到的数据结构化,你只需关心你自己的爬取逻辑和页面数据的提取逻辑,其他的事情,框架都帮你做了。安装scrapyyum -y updateyum groupinstall -y developme
2016-01-15 12:04:51 2766
原创 给虚拟机磁盘扩容
背景我用的虚拟机是virtualbox,安装boot2docker时,给我分配的磁盘空间是20G,但是当我提交我的镜像时,却告诉没有空间了。 报错如下:FATA[0064] Failed to generate layer archive: mkdir /mnt/sda1/var/lib/docker/graph/_tmp/fdd05bbb8e84067bea595da8343e6143306c
2015-04-22 19:40:35 1238 2
原创 mac+virtualbox+centos7+docker搭建lnmp环境
1.安装virtualbox 下载地址 https://www.virtualbox.org/wiki/Downloads2.通过virtualbox安装centos7 下载地址 http://mirrors.aliyun.com/centos/7.1.1503/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso 选择你下载的centos的镜
2015-04-15 00:54:45 4431 2
原创 修改hostname
比如将我的主机名改成MAC sudo scutil –set HostName MAC[centos] cat /etc/hostname centos7.localdomain 点号前面的centos7就是我修改后的主机名,你可以修改/etc/hostname文件来自定义; 但是这个时候不会立马生效,需要重启服务器,想立马生效可以这样 sudo hostname centos7
2015-04-11 17:36:36 1110
转载 开源搜集
类别 名称 官网 备注 查询引擎 Phoenix http://phoenix.incubator.apache.org Salesforce公司出品,Apache HBase之上的一个SQL中间层,完全使用Java编写 查询引擎 Stinger http://hortonworks.com/labs/stinger/ http://tez.incubator.
2015-04-07 15:58:18 1092
原创 mac下端口转发
sudo vim /etc/pf.conf在rdr-anchor “com.apple/*”后面加上如下这一行rdr on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080意思是把发到80端口的数据转发到8080端口然后重新加载配置sudo pfctl -f /etc/pf.conf启动sudo pfctl
2015-02-15 20:00:15 4602
原创 枚举
public enum TestEnum { A, B, C, D; public static void main(String[] args) { //枚举类型转变成字符串 System.out.println(TestEnum.C.name()); //字符串变枚举 System.out.println(TestEn
2015-02-15 19:47:06 554
原创 让svn diff 的效果和vim diff效果一样
首先到你自己的home目录vim .subversion/config找到下面这一行 # diff-cmd = diff_program (diff, gdiff, etc.) 增加如下这一行,这个路径你可以自己安排,这个是我的路径 diff-cmd=/Users/bornli/diffwrap.shdiffwrap.sh文件的内容如下
2015-02-02 10:46:10 934
原创 velocity使用经验积累
html内容被转义场景hello world!其实想要的效果是helloworld解决方案#noescape()$!{msg}#end 这样就可以防止内容被转义
2015-01-09 15:19:49 869
原创 说服的艺术
在程序员的工作中经常会遇到的工作场景,就是与别人PK技术方案,往往双方都想说服对方,今天我想说说关于说服力的一些理解和心得。我平时很喜欢和别人PK方案,因为我觉得PK的结果一定是双赢的,何乐而不为呢?为什么说PK是双赢的?PK的结果无非只有如下几种:1、自己获胜--好处是肯定自己的方案,同时也帮助了别人2、对方获胜-- 好处和上面刚好相反3、双方都是部分说的有道理--双
2015-01-08 17:40:33 825
原创 PHP compiled with build ID=API20090626,TS
php -vPHP compiled with build ID=API20090626,TS
2014-07-31 17:10:24 2485
原创 程序后台执行总结
【场景】有时候我们需要执行临时的脚本,即脚本跑完就结束,但是脚本跑的时间比较久,并且可能因为其他的事情,需要离开终端去干其他的事情,如果离开终端,一般情况下,程序就会终止,如何离开终端,程序任然可以继续执行呢?这个时候可以使用如下一些工具。【screen】screen -m 脚本 //新建一个会话窗口,执行程序ctrl + ad
2014-02-07 15:29:16 692
原创 Block-levelDB源码解析
类介绍Block主要负责解析sstable文件中的block;数据成员介绍 30 const char* data_; //对应整个block块数据 31 size_t size_; //对应整个block的大小 32 uint32_t restart_offset_; // 相对于data_的,重
2014-01-06 06:55:23 1239
原创 linux下以16进制方式查看文件
最近有个需求是从MP3文件中提取cover,怎么提取,后续会专门写篇文章,所以需要研究MP3文件样本,这个时候得看MP3文件的数据格式,我知道UltraEdit是可以看的,可惜这个是要花钱买的,在网上找了几个序列号,也不好使。后来在网上查了下,用xxd在linux 下就可以看;xxd -g 1 -c 16 a.mp30000000: 49 44 33 04 00 00
2013-12-30 10:42:40 1722
原创 BlockBuilder-levelDB源码解析
对象介绍BlockBuilder主要负责构造sstable文件中的block;首先看下block的数据结构:
2013-12-29 17:48:21 1435
原创 log format-levelDB源码解析
基本概念:逻辑记录:用户输入的key value,进行包装后,可以形成一条记录,我们把它称为逻辑记录;物理记录:一条或多条物理记录组成一个逻辑记录。block:一条逻辑记录,包含了一个或多个block,kBlockSize = 32768;即每个block的大小为32K;当然一个block里面也可以有多个record;关系示意图:一个逻辑记录
2013-12-15 14:53:05 1270
原创 log::Reader-levelDB源码解析
要想理解reader,需要理解两个概念,即逻辑记录,物理记录,这个log format有讲【数据成员介绍】blocking_store_:read以block为单位去从磁盘取数据,取完数据就是存在blocking_store_里面,其实就是读取数据的buffer;buffer_:指向blocking_store_的slice对象,方便对blocking_store_的操作;
2013-12-15 14:52:08 1792
原创 log::Writer-levelDB源码解析
writer的工作就是将上层拼装好的数据,按照log format的格式,进行二次拼装,然后写进文件里面。【数据成员介绍】block_offset_:当前block的偏移位,通过它就能知道目前数据写到这一块的什么位置了;dest_:增加记录,就是将数据追加到dest_;type_crc_:因为每个record都会有一个header,而header里面就会有che
2013-12-15 14:50:57 1233
原创 memtable-levelDB源码解析
当写数据的时候,写完log,再写内存,内存指的就是这里的MemTable,整个MemTable是一个skip list结构;【数据成员介绍】arena_:一个管理内存的对象;comparator_:比较器;refs_:引用次数;table_:skip list表,数据就是存在这里面;【方法成员介绍】void MemTable::
2013-12-15 14:49:51 1348
原创 Fiddler抓包中显示服务器ip
Rules->Customize rules(或者直接ctrl+R) 这个时候会弹出一个文本,找到如下这个函数,对比如下函数和你搜到的函数,将你没有的行拷贝过去,保存即可。static function Main(){ var today: Date = new Date();FiddlerObject.StatusText = " Cu
2013-12-15 14:48:57 3061
原创 Skip List
什么是skip list?“Skip lists are a data structure that can be used in place ofbalanced trees. Skip lists use probabilistic balancing rather than strictlyenforced balancing and as a result the algori
2013-12-15 14:47:17 1110
原创 VersionEdit-levelDB源码解析
VersionEdit记录的是版本变化的增量。【数据成员介绍】compact_pointers_:这是一个vector,里面的每项是一个由level,internalkey组成的pair,也就是说里面记录的是,compact到哪一层的,哪个key了;comparator_:比较器的名称;deleted_files_:这是一个set,里面的每一项是一个由level,s
2013-12-15 14:44:53 1560
原创 Version-levelDB源码解析
【数据成员介绍】compaction_level_:下一个需要做compact的层级;compaction_score_:比分,如果比分小于1,就代表没有那么紧急去需要做compact;那么比分的规则是什么呢?void VersionSet::Finalize(Version* v) { int best_level = -1; doub
2013-12-15 14:44:05 1355
原创 VersionSet-levelDB源码解析
VersionSet的作用是记录各个版本,这些版本的组织形式是一个环形的双向链表。【数据成员介绍】compact_pointer_:记录每层下次做compact的开始的key;string型数组,index-->level, value-->internal key,current_:指向当前版本;dbname_:数据库的名称;descriptor_fi
2013-12-15 14:43:11 2329
原创 access
#include #include //R_OK 4 /* Test for read permission. *///W_OK 2 /* Test for write permission. *///X_OK 1 /* Test for execute permission. *///F_OK 0 /* Test for existence. */
2013-12-15 14:41:59 983
原创 win7 自动重启本地连接
将下面的代码放在一个bat文件里面netsh interface set interface name="本地连接 2" admin=DISABLEDnetsh interface set interface name="本地连接 2" admin=ENABLED //注意,”本地连接 2“是我的本地连接名,你可以根据需要改。然后win菜
2013-12-13 11:56:59 1036
原创 opendir 取目录下的子节点
#include #include #include using std::cout;using std::cin;using std::endl;using std::string;int main(){ const size_t buf_size = 1024; char dir
2013-12-13 11:56:00 692
原创 stat 获取文件对应的属性
#include #include int main() { using std::cout; using std::endl; struct stat sbuf; if (stat(__FILE__, &sbuf) == 0) { //__FILE__代表当前文件名 cout
2013-12-13 11:55:26 970
原创 varint-levelDB源码解析
【什么是变长整型?】大家知道,int整型一般是4个字节,那变长整型所需要的空间在1-5个字节之间,因为长度是不固定的,所以称之为变长整型。其特点就是只要数值小于2^21,那么就会节省空间。【编码原理】如图所示为300,编码后的字节图,只占了2个字节。这是怎么实现的呢?请看下面的详解:300的二进制编码为00000000 00000000 00000001 0
2013-12-13 11:54:38 1222
原创 Status-levelDB源码解析
//status封装了操作结果,当出错的时候,可以用来指明一个错误,还有对应的错误信息//多线程下const方法可以在非外部同步的情况下调用,但是非const方法,一定要在外部同步的情况下调用class Status { public: //构造函数,初始为NULL,即为OK状态 Status() : state_(NULL
2013-12-13 11:53:15 1107
原创 Slice-levelDB源码解析
//slice是level中很基础的一个类型,是对key , value的封装,里面的数据成员很简单,只有两个,一个是const char* data_,size_t size_,所以它其实是key或value的一个引用,非常节省内存,同时也提供了非常方便的操作接口。class Slice { public: //创建一个空的slice
2013-12-13 11:52:20 1147
原创 option-levelDB源码解析
//控制数据库的行为struct Options{ //比较器 //默认:lexicographic byte-wise ordering const Comparator* comparator; //如果为true,当数据库不存在时,就新建 //默认:false bool creat
2013-12-13 11:51:20 1292
原创 C++学习笔记
数组的元素个数在编译期就要决定,所以只能为宏定义,或const常量;数组初始化只能发生在定义的时候,以后不能初始化;也不能将一个数组赋值给另一个数组;struct关键字可以省略掉
2013-12-13 11:50:23 708
原创 友元类、友元函数
#include #include #include using namespace std;class A;class C{ public: int getA(A a);};class A{ public: int a
2013-12-13 11:49:26 790
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人