- 博客(59)
- 资源 (18)
- 收藏
- 关注
原创 记笔记--hadoop的高可靠性
hadoop为什么具有高可靠性,靠的是下面的策略:冗余副本策略、机架感知策略、心跳机制、安全模式、校验和、回收站、元数据保护、快照机制等。
2018-03-13 10:18:54 2387
原创 处理数据报表某些天数据为0的情况的一种方案
数据报表会出现下面一种情况,sql跑出来的数据许多天没有数据,但是报表需要把没有数据填写为0日期新用户数2017-01-0142017-01-0362017-01-0662017-01-073一种方案可以在view端解决,显示的时候遍历日期,没有则加0,但是每一个view都做这种逻辑处理
2017-05-15 10:33:31 833
原创 c++简单问题告知之this指针
this指针对于c++初学者来说有时候总是绕不明白,在这里简单分析一下this指针的特点1. this指针是类内部使用的,this顾名思义就是这个的意思,指针就是地址,这个地址就是当前对象的地址,也就是说有了类的对象才有这个地址,才有这个指针,其实不用this的话,一般默认也是this指针,例如这个类class A{ public: void fun (
2014-01-30 14:16:45 1089
原创 消息处理引擎讲解
类图结构如上图,数据流程,外部数据流入消息处理管理对象,流入消息队列,分发器从消息队列中取数据,从处理器工厂中取处理器来处理数据,消息处理管理类提供注册处理器接口,具体代码实现见:http://download.csdn.net/detail/zhylei/6498645
2013-11-05 11:59:08 2418
转载 hypertable的application queue,非常好
/* -*- c++ -*- * Copyright (C) 2007-2013 Hypertable, Inc. * * This file is part of Hypertable. * * Hypertable is free software; you can redistribute it and/or * modify it under the terms of the
2013-10-24 12:09:06 813
原创 查看代码发现的问题
发现的问题以后的改进1. 代码注释量比较少新增加的代码坚持加注释,包括文件注释和函数注释2. C++的代码设计模式体现的比较少注意应用设计模式,增加代码的可维护性和扩展性3. 许多文件中的代码太多,有几千行,比较难维护以后避免大文件,想办法把大文件切分成小文件(根据函数和类的特点拆分)
2013-10-19 16:06:58 806
原创 glog编译过程--linux
https://code.google.com/p/google-glog/ 下载glogtar -zxvf glog-0.3.3.tar.gz进行解压./configuremakemake install编译完成
2013-10-19 15:33:54 5582
原创 log4cxx编译过程--linux
下载安装包http://logging.apache.org/log4cxx/index.html ,从这里下载,目前为0.10.0下载apr, http://apr.apache.org/download.cgi ,从这里下载apr,和apr-util,版本为apr-1.3.8.tar.gz 和apr-util-1.3.9.tar.gz编译安装apr第一步安装apr-1.3.8,
2013-10-19 15:31:06 2935
原创 mysql数据库解决数组不能进行位操作的问题
问题描述:想存个大数组,然后利用位操作进行计算,但是mysql不支持,所以采取了替代方案我需要355位,一共需要45个字节的位操作,mysql支持的位操作最多有64位,所以我选择bigint作为我的数据类型,但是位数不够,所以我选择用5个bigint字段来存储355位,但是5个字段太多了,所以我新开了一张表,专门来存储这5个大整数,然后两个表一关联,搞定了。
2013-10-19 14:38:59 1021
原创 log4cxx配置文件讲解,以及测试程序
先看完整配置文件log4cxx.propertieslog4j.additivity.gather = false log4j.rootLogger= debug, R, stdout//设置子loggerlog4j.logger.Lib_a =debug, ap1, stdoutlog4j.logger.Lib_b =debug, ap2, stdout#设置不继承父L
2013-10-15 18:18:26 4030 3
原创 最简洁的单链表逆序
node * reverse (node * head){node * walk = head;node * pre = NULL; while (walk != NULL){node * next = walk->next;walk->next = pre;pre = walk;walk = next ;}return pre;}
2013-09-12 07:27:30 761
转载 用一种算法来颠倒一个链接表的顺序
Node * reverse(Node * head) { if (head == NULL) return head; if (head->next == NULL) return head; Node * ph = reverse(head->next); head->next->next = head; head->next = NULL; return
2013-08-28 06:45:45 1428
转载 关于读锁和写锁最好的一篇文章
Implementing a Read/Write Mutexby Volker HilsheimerDeveloping threaded software is always a challenge. Breaking a complex application into separate units of execution without compromisin
2013-08-27 07:05:28 1971
转载 微软亚院之编程判断俩个链表是否相交
微软亚院之编程判断俩个链表是否相交给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。问题扩展:1.如果链表可能有环列?2.如果需要求出俩个链表相交的第一个节点列?ANSWER:struct Node { int data; int Node *next;};// if there is no c
2013-08-19 06:54:07 1202
转载 查找最小的k 个元素
查找最小的k 个元素题目:输入n 个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。ANSWER:This is a very traditional question...O(nlogn): cat I_FILE | sort -n | head -n KO(kn): do insertion so
2013-08-14 07:07:03 663
转载 .在二元树中找出和为某一值的所有路径
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22 和如下二元树10/ \5 12/ \4 7则打印出两条路径:10, 12 和10, 5, 7。二元树节点的数据结构定义为:struct BinaryTreeNode // a node in the bin
2013-08-13 06:41:17 640
转载 把二元查找树转变成排序的双向链表
1.把二元查找树转变成排序的双向链表题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。10/ \6 14/ \ / \4 8 12 16转换成双向链表4=6=8=10=12=14=16。首先我们定义的二元查找树节点的数据结构如下:struct BSTreeNode{int m_nVa
2013-08-12 06:53:07 690
原创 std::map中迭代器失效的问题
删除std::map m中的元素,如果用迭代器操作:std::map::iterator it = m.begin ();for ( ; it != m.end(); ++it){m.eraser (it);}这样做会出问题,因为被eraser后迭代器失效,再进行++就会down机如果这样std::map::iterator it = m.begin ();
2013-07-22 21:07:19 7383
原创 什么时候用线程池
有时候用线程池处理会比单线程处理速度快许多,但是有时候反而会比单线程还要慢,这主要是抢锁的原因个人总结:如果对数据的处理速度慢,但是数据的接收很快的时候可以用线程池,可以这样处理:把收到的数据放到队列里面,然后做一个数据处理的线程池,在线程池从队列取数据的时候要加锁,把数据取走以后就进入单线程里面,不涉及到锁的问题,这样线程池处理数据的速度要比单线程要快。
2013-06-30 21:13:01 1802
原创 多年来对聚合和组合的误区
以前一直以为组合就是用类的对象直接作为别的类的成员变量,聚合就是指针作为别的类的成员变量,但是当画出类图后生成类后发现,代码都是指针,后来才恍然大悟,原来是组合就是类管理别的类的对象,包括构造和析构,不管是直接的对象还是通过指针管理对象。聚合就是类只拥有别的类的指针,他只用这个指针,但是不管理那个对象。
2013-06-30 11:36:03 909
原创 公共模块尽量不要增加特例处理
公共模块是大家都要用到的模块,都是一些跟业务无关的,耦合性性较小功能性模块,因为大家都要用,如果你增加了特例处理,这样别人用的时候,虽然功能上没有什么区别,但是效率上会降低,更重要的是,设计上会出现一种啰嗦的感觉。如果真遇到这种事情可以再增加一个函数处理,专门用于处理这样特例的。最近遇到一个字符串转换的函数,但是程序中有一种字符串处理是用关于url处理,算是一种特例,所以我们处理的办法是增
2013-06-30 11:28:10 795
原创 增量开发
增量开发就是老的代码不要去动,直接增加新的编码,使老代码保持封闭,这样便于管理。最近遇到一个项目,是系统重构,重构老的存储部分时候,因为存储逻辑有些变化,本打算在老的存储代码上改,但是想想到时候如果代码再有变化,就会整的不伦不类的。最后想到了可以直接写新的,把老代码中有用的部分直接挪到新增加的部分,最后老代码真的没有用处了就去掉,这样可以保证新代码的逻辑清晰,又可以用老代码做参照,如果逻辑再有
2013-06-30 11:17:20 1156
原创 学会了处理项目中那些没有确定方案的东西(使用“策略模式”)
项目中遇到一个问题,有一个文件管理类,但是文件的目录不确定,而其他的文件相关的属性的确定了,如下所示:class FileMgr{public://获取可用目录std::string get_directory ();//其他属性.....}这个让我头疼的问题让我想到了“把容易变化的和不容易变化的分开处理”,我想到了把目录处理分出去,结构图如下因为文
2013-06-06 22:22:52 1113
原创 关于引用计数一点点归纳
大凡大一点的开源程序都会看到用引用计数的相关技术,粗略看一下有两种实现方式:1. 计数器在类的基类中,并提供增加和减少计数的函数,用模板来实现引用计数,看到大部分的常用指针都是使用的继承方式来实现,如下面的代码,这个模板类的T必须要实现ref()和dref(),而且必须包含计数器 (摘的webkit的),T的类比较复杂,没有粘贴过来2. 计数器在模板类中,每声明一个模板类会有一个计数器,有
2013-05-27 21:03:05 839
原创 小教官问题
int getFriend(int nCount, int * data_1){long n,a[50000],d[50000],use[50001],max=0;long i,hy1,hy2;memset(use, 0, sizeof(use));a[0]=1; use[a[0]]=1;for(i=1;i{hy1=data_1[ (a[i-1]-1) *
2013-04-15 22:43:59 4539
原创 写个快速排序的简单程序c++
快速排序,写了一个函数和测试程序#include int QSort (int * pList, int low, int high){int low_old = low;int high_old = high;while (low {int pivot_value = pList[low];while ( low = pivot_value){
2013-04-13 23:05:05 885
原创 单链表排序
在华为的oj上面看到一道题,单链表排序,一看比较简单就拿来做了,结果搞了半天还是没有调通,这类基础的问题还是挺费脑筋的,回家后又费了半天劲才搞定,题目要求是,一个单链表如果已经排好序或者排序出异常返回空,按输入标识确定排序规则,比如flag为0 为从小到大,flag为1为从大到小数据结构和函数原型如下:struct ListNode {int m_nKey;ListNode * m
2013-04-03 20:31:34 669
原创 hypertable的cellcache
hypertable的cellcache内存缓冲用一个分页的链表,并且在每个页内部还分配一个tinybuffer,做了一个微cache,整体的性能不知道怎么样,不过设计的挺巧妙。
2013-03-25 22:46:16 648
原创 分布式存储hypertable结构概述
master进程负责整体管理,ranggeserver为分布式节点,管理range,rangge包含accessgroup,accessgroup管理cs文件和cellcache,加入数据的时候先加到cache,维护线程将数据从cache存储到cs文件。
2013-03-17 13:23:05 627
原创 在家完成的一个小项目
自己在家做一个小项目,项目的功能为从www.cnbeta.com上面抓取新闻标题列表并存储到本地文件。更新时间为每小时一次,每天的新闻存为一个文件。源代码和可执行文件在 http://download.csdn.net/detail/zhylei/4892203 可以下载,流程图为
2012-12-13 22:34:18 596
原创 双线程锁,peterson锁,1981年就出来了
1. 谁都不让路,都在争锁2. 都在让路,都在让锁3. 较好的双线程锁,著名的Perterson algorithm 锁以上图片来自The.Art.of.Multiprocessor.Programming,一本不错的书
2012-12-06 22:53:55 1494 3
原创 std::stack<T>和std::queue<T>在执行频率比较高的程序中,效率太低
最近优化一个程序,是一个日志处理程序,优化前每秒钟18w/s,优化后29w/s,优化部分就是stack和queuestd::stack默认使用的容器是dequeue,这个容器里面有数组,节点的等等信息,在初始化还有push,pop的时候特别费时间,所以就自己写了一个简单的stack,能够支持功能就可以,结果速度提上去好多。
2012-11-20 22:45:46 4522
原创 缓冲区做key的hash_map
1. 寻找适合的哈希函数当从google搜索hash时,第一个就是wiki百科(英文的),当进入wiki百科后就在讲hash方法,它推荐了几种hash方法,其中有一种就是fnv,还给了链接地址,这个就是源码地址http://www.isthe.com/chongo/tech/comp/fnv/index.html#FNV-source看了以后才知道,原来支持缓冲区的hash2
2012-11-19 22:17:46 878
原创 c++程序大数据量处理性能优化
1. 现在处理的程序为每秒钟处理20w条数据,甚至更多,加快处理速度,总结了一些经验,记录下来程序的数据结构里面尽量避免string,map这样的数据结构,因为string虽然不用自己管理指针,但是在构造和析构的时候很费资源,还有在执行c_str()的时候要new出一块内存来,这样的频繁执行的程序块中,会非常费时间。map在插入的时候,因为要保持rbtree的平衡结构,要进行self_bala
2012-11-17 00:20:18 7667
”策略模式“在现实项目中的应用
2013-06-06
BTree、AVLTree、RBTree、BinarySearchTree和SPlayTree的C++源码实现
2013-05-11
新闻获取器
2012-12-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人