- 博客(721)
- 资源 (17)
- 收藏
- 关注
转载 GCC 提供的原子操作
GCC 提供的原子操作gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。其声明如下:type __sync_fetch_and_add (type *ptr, type value, ...)type __sync_fetch_and_sub (type *ptr, type value, ...)type __sync_fetch_and_...
2018-05-16 21:24:36
947
原创 打散函数的事项
打散函数的实现方法一:void RandomShuffle(std::vector<std::string>& vecs) { for (uint32_t i = 0; i < vecs.size(); ++i) { srand((unsigned)time(NULL)); const uint32_t slot = rand() % v...
2018-02-08 11:33:17
2646
转载 Linux 内存占用分析
这篇博客主要介绍 linux 环境下,查看内存占用的两种方式:使用 ps,top等命令;查看/proc/[pid]/下的文件。文章简要介绍了命令的使用方法与一些参数意义,同时对/proc/[pid]/下的文件内容进行了一些详细的介绍。文章内容来自google和自我总结,如有不当之处,欢迎批评指正。查看 linux 中内存占用的方法linux 下面查看内存有多种渠道,比如通过命令 ps ,top,f...
2018-02-08 11:10:46
14493
原创 vector中的resize与reserve
void reserve (size_type n);reserver函数用来给vector预分配存储区大小,即capacity的值 ,但是没有给这段内存进行初始化。reserve 的参数n是推荐预分配内存的大小,实际分配的可能等于或大于这个值,即n大于capacity的值,就会reallocate内存 capacity的值会大于或者等于n 。这样,当调用push_back函数使得size
2017-11-16 23:10:51
1061
原创 c++实现反射类
在很多程序设计中,经常会遇到这样的需求,即可以通过类的名字得到对应类型的对象,尤其是一种数据需要很多策略处理的时候。比如对于网页类型的识别,一篇网页可能是视频类型、新闻类型、图片类型、网站首页、百科等很多类型中的一种,网页类型对于搜索引擎来说是非常重要的,计算rank的时候网页类型往往是一个非常重要的因子。具体实现的时候,网页类型识别的策略可以封装在类中,这样一个策略就可以设计成一个类。但是后期随
2017-02-09 10:49:20
1167
转载 accept死循环
场景:一个多线程服务器,每个线程执行一个事件循环。在事件循环开始前,调用 socket/bind/listen 监听端口,然后将监听句柄(fd)添加到 epoll,然后开始事件循环,执行 epoll_wait。epoll_wait 返回有效事件时,对于监听事件,调用 accept 建立新连接,将该连接句柄添加到 epoll;对于普通连接,调用 read/write 进行网络 IO 及其他处理逻辑。
2016-11-28 17:08:05
1899
转载 ZooKeeper原理及使用
ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby。今天这篇文章分为三个部分来介绍ZooKeeper,第一部分介绍ZooKeeper的基本原理,第二部分介绍ZooKeeper提供的Client API的使用,第三部分介绍一些ZooKeeper典型的应用场景。
2016-03-31 15:30:38
870
翻译 google string_split
//string_split.cc// Copyright (c) 2010 The Chromium Authors. All rights reserved.// Use of this source code is governed by a BSD-style license that can be// found in the LICENSE file.#include "b
2015-11-18 19:55:04
1092
转载 mysql索引详解(转)
什么是索引索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快10
2015-08-30 11:10:48
999
转载 Linux查看CPU信息、机器型号等硬件信息
AC算法是Alfred V.Aho(《编译原理》(龙书)的作者),和Margaret J.Corasick于1974年提出(与KMP算法同年)的一个经典的多模式匹配算法,可以保证对于给定的长度为n的文本,和模式集合P{p1,p2,...pm},在O(n)时间复杂度内,找到文本中的所有目标模式,而与模式集合的规模m无关。正如KMP算法在单模式匹配方面的突出贡献一样,AC算法对于多模式匹配算法后续的发
2015-04-30 15:25:05
7333
转载 函数属性__attribute__((constructor))和__attribute__((destructor))
1)函数属性功能__attribute__ ((constructor))会使函数在main()函数之前被执行__attribute__ ((destructor))会使函数在main()退出后执行2)功能范围函数属性__attribute__((constructor))和__attribute__((destructor))在可执行文件或者库文件里都可以生效
2015-04-27 14:55:07
7221
1
转载 priority_queue 用法详解
priority_queue 调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实 现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue 用法相似的 priority_queue, 以加深对 priority_queue 的理解#include #include
2015-04-18 21:10:30
1356
原创 C++文件操作详解(ifstream、ofstream、fstream)
C++ 通过以下几个类支持文件的输入输出:ofstream: 写操作(输出)的文件类 (由ostream引申而来)ifstream: 读操作(输入)的文件类(由istream引申而来)fstream: 可同时读写操作的文件类 (由iostream引申而来) 打开文件(Open a file)对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就
2015-04-14 16:49:02
2035
转载 svn命令在linux下的使用
1、将文件checkout到本地目录svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain 简写:svn co2、往版本库中添加新的文件 svn add file 例如:svn add test.php(添加test.php) svn add
2015-03-31 18:29:35
731
原创 Observer观察者模式
Observer观察者模式作用:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己UML图:Subject类,可翻译为主题或抽象通知者,一般用一个抽象类或者一个借口实现。它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个借口,可以
2015-02-16 15:21:32
1036
转载 【Boost】Boost总结汇总
boost::noncopyable比较简单, 主要用于单例的情况.通常情况下, 要写一个单例类就要在类的声明把它们的构造函数, 赋值函数, 析构函数, 复制构造函数隐藏到private或者protected之中, 每个类都这么做麻烦.有noncopyable类, 只要让单例类直接继承noncopyable. class noncopyable的基本思想是把构造函数和析构函数设置p
2015-01-28 14:55:27
1564
转载 protobuf应用与原理详解
简介什么是 Google ProtocolBuffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:Google ProtocolBuffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Protocol Bu
2014-12-24 16:28:47
4638
原创 常用shell命令集合
1、进程查找ps -ef | grep proc_name | grep -v grepps -aux | grep proc_name | grep -v grep2、进程数目proc_num=`ps -aux | grep proc_name | grep -v grep`echo ${proc_num}3、if的使用#!/bin/ba
2014-11-03 21:13:15
2568
翻译 Google common.h
原文:https://code.google.com/p/protobuf/source/browse/trunk/src/google/protobuf/stubs/common.h?r=89
2014-10-29 14:52:32
2359
1
翻译 C++的JSON库及使用方法
#ifndef CPPTL_JSON_H_INCLUDED# define CPPTL_JSON_H_INCLUDED# include "forwards.h"# include # include # ifndef JSON_USE_CPPTL_SMALLMAP# include # else# include # endif# ifdef JSON_USE_CPP
2014-10-29 14:47:24
3044
翻译 google string_util.cc
// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.// Use of this source code is governed by a BSD-style license that can be// found in the LICENSE file.#include "base/string_uti
2014-10-20 11:15:34
2569
原创 python获取文件下所有文件
def getListFiles(path): assert os.path.isdir(path), '%s not exist.' % path ret = [] for root, dirs, files in os.walk(path): print '%s, %s, %s' % (root, dirs, files) fo
2014-07-17 00:20:20
978
原创 生产消费者模式
#!/usr/bin/env python# -*- coding: utf-8 -*-import threadingfrom time import ctimefrom random import randintfrom time import sleepfrom Queue import Queueclass CThread(threading.Thread):
2014-06-25 20:29:56
863
转载 [RabbitMQ+Python入门经典] 兔子和兔子窝
RabbitMQ作为一个工业级的消息队列服务器,在其客户端手册列表的Python段当中推荐了一篇blog,作为RabbitMQ+Python的入门手册再合适不过了。不过,正如其标题Rabbit and Warrens(兔子和养兔场)一样,这篇英文写的相当俏皮,以至于对于我等非英文读者来说不像一般的技术文档那么好懂,所以,翻译一下吧。翻译过了,希望其他人可以少用一些时间。翻译水平有限,不可能像原
2014-05-26 13:38:39
1351
转载 python 详解re模块
正则表达式的元字符有. ^ $ * ? { [ ] | ( ).表示任意字符[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系。^ 如果放在字符串的开头,则表示取非的意思。[^5]表示除了5之外的其他字符。而如果^不在字符串的开头,则表示它本身。具有重复功能的元字符:* 对于前一个字符重复0到无穷次对于前一个字符
2014-05-26 09:57:32
1127
转载 Python面向对象详解
引言提到面向对象,总是离不开几个重要的术语:多态(Polymorphism),继承(Inheritance)和封装(Encapsulation)。Python也是一种支持OOP的动态语言,本文将简单阐述Python对面向对象的支持。在讨论Python的OOP之前,先看几个OOP术语的定义:类:对具有相同数据和方法的一组对象的描述或定义。对象:对象是一个类的实例。
2014-05-21 10:26:59
1285
转载 malloc函数的一种简单的原理性实现
malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针malloc()工作机制 malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的
2013-10-13 18:35:24
1525
原创 查找数组中第二大或者第二小的数值
1、从一个给定的、无序的数组中,找出第二大的数值。#include int FindSecondBiggest(int *v, int len){ if (v == NULL || len < 2) { return 0xfffffff; } int i, max = v[0], second = v[1]; for (i = 2; i < len; ++ i) {
2013-10-08 09:33:07
4885
1
原创 二叉树的非递归遍历(递归和非递归)
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。一.前序遍历
2013-09-17 23:48:31
1582
原创 从行,列均为递增的二维数组中查找给定元素
如题:设计算法bool Find(int *maxtrix, const int rows, const int cols, const int key){ if (maxtrix == NULL || rows < 0 || cols < 0) { return false; } bool found = false; int row = 0, col = cols
2013-09-17 12:23:09
1276
原创 实现sqrt和pow函数
方法一、一个采用牛顿迭代法的函数double sqrt(double number) { if(number<=0)return 0; //设置初始值i,i值越接近sqrt(number),所需循环次数越少 double i = 1; //一个快速算法是:int exp;double i=ldexp(frexp(number,&exp),(
2013-09-16 23:47:00
3174
原创 堆与堆排序
堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下
2013-09-15 23:37:19
1271
转载 有道概率题:一个有趣的抛硬币问题
假设有一个硬币,抛出字(背面)和花(正面)的概率都是0.5,而且每次抛硬币与前次结果无关。现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止,问平均要抛多少次才能结束游戏?注意,一旦连续抛出两个“字”向上游戏就结束了,不用继续抛。上面这个题目我第一次见到是在pongba的TopLanguage的一次讨论上,提出问题的人为Shuo Chen,当时我给出了一个解法,自认为已经相当
2013-09-15 23:03:59
3441
转载 一个骰子,6面,1个面是 1, 2个面是2, 3个面是3,问平均掷多少次能使1、2、3都至少出现一次。
题目:一个骰子,6面,1个面是 1, 2个面是2, 3个面是3,问平均掷多少次能使1、2、3都至少出现一次。解法一:(没学过《组合数学》的请略过)设P(N=n)表示第n次(n>2)抛出后1,2,3都出现的概率,问题要求n的期望E(N=n).掷1的概率p=1/6,掷2的概率q=1/3,掷3的概率r=1/2.//程序实例#include using namespace
2013-09-15 22:02:43
5972
原创 数组前半部分和后半部分有序列的全排序
例如:已知数组a前半部分a[0,mid - 1],后半部分a[mid,num-1],现前半部分和后半部分均已排好序。要求:实现a数组的从小到大排序。空间复杂度为O(1).#include using namespace std;void PrintArry(int v[],int len){ for(int i = 0; i < len; i ++)
2013-09-13 15:55:33
2124
转载 从B 树、B+ 树、B* 树谈到R 树
#include void printHead(){ cout<<"+----------+"<<endl; }void printTail(){ cout<<"+----------+"<<endl; }void printFull(){ cout<<"|++++++++++|"<<endl;}void printEmpty(){ cout<<"|-----
2013-09-13 12:42:55
2907
原创 linux安装jdk
1、软件下载 下载地址:http://www.oracle.com/technetwork/java/javase/index.htmlJDK版本:jdk-6u31-linux-i586.bin2、卸载原有的JDK[root@localhost usr]# rpm -qa | grep jdkjava-1.6.0-openjdk-1.6.0.0-1.7.b09.e
2013-08-26 17:31:35
1146
原创 hadoop集群搭建
环境:操作系统Centos 5.5 64-bit三台节点,计划部署分配如下: ip 主机名 用途172.16.48.201 sg201 namenode 172.16.48.202 sg202 datanode172.16.48.203 sg203 datanod
2013-08-26 17:01:22
1136
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人