自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LevelDB源码分析之从Put说起

之前分享的文章leveldb实现原理分析详细描述了LevelDB的实现原理,本文从Put接口来看下leveldb数据写流程的源码实现。LevelDB的读写接口在类DB中定义(leveldb/db.h),接口声明如下:// Set the database entry for "key" to "value". Returns OK on success, // and a non-OK st...

2018-03-10 17:25:57 998

原创 vim中复制粘贴

在vim中要进行复制粘贴,需要使用yy和p指令,但是会发现当我们想讲从vim外面复制的内容粘贴进文本中时,光使用p达不到效果.原因是,在vim中维护者许多的clipboard,而不是只有一个.我们从vim外部(如浏览器)复制的文本所在的clipboard不是粘贴指令p所使用的那个.要查看vim中有多少个clipboard,以及每个clipboard中的内容,可以在vim中退出编辑模式,并输入指

2016-01-27 21:09:59 1884

原创 Leetcode: Decode ways

A message containing letters from A-Z is being encoded to numbers using the following mapping:'A' -> 1'B' -> 2...'Z' -> 26Given an encoded message containing digits, determine the total nu

2015-12-18 17:09:33 802

原创 leetcode: Remove Duplicate Letters

Given a string which contains only lowercase letters, remove duplicate letters so that every letter appear once and only once. You must make sure your result is the smallest in lexicographical order a

2015-12-17 13:38:48 1185 1

原创 Leetcode: Maximum Product of Word Lengths

Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower case le

2015-12-16 20:02:50 1522

转载 zookeeper原理

说明:本文为转载文章,用以学些收藏用,文章原始出处没找到,所以如果有侵犯您的权利,请告知。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应

2015-12-15 11:51:56 548

原创 C++对象池实现

在实际中,我们会遇到一个类最多只允许若干个对象同时存在的情形。如果这个类的对象会被频繁的创建,使用并销毁,那这时会对系统性能造成影响,而这时可以考虑使用对象池的方法来避免每次使用对象都需要从“构造->使用->销毁”这个流程,对象池中的每个对象都一次构造多次使用,而析构也只会在对象池析构是才会发生。    要实现对象池,那关键问题就在于如果在对象析构时不是真正的析构,而是重新回到对象池中。假如我

2015-12-10 11:58:59 1177

原创 visual studio开启多核编译方法

visual studio在编译时可以启动多核并行编译,以减少编译所需时间。话不多说,直接看步骤吧:1. Solution Explorer导航窗口右键需要并行编译的项目,进入属性页面2.“C/C++" -> ”General“ -> "Multi-processor Compilation" -> "Yes(/MP)"3. "C/C++" -> "Code Generatio

2015-12-09 19:52:40 25919 5

转载 vs2010设置堆栈大小

原文链接地址:http://www.cnblogs.com/xlw1219/archive/2013/03/15/2961352.html在解释原因前我们先看一下一个由C/C++编译的程序占用的内存分为几个部分:1、栈区(stack segment):由编译器自动分配释放,存放函数的参数的值,局部变量的值等。在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这

2015-12-09 19:48:17 2483

原创 ActiveMQ集群简介

1. 概念    有些环境具有高可用性、数据量巨大的特性,ActiveMQ可以通过组建集群来满足这些系统的需求,我们可以将这个理解为ActiveMQ集群。ActiveMQ集群是由多个相互连接通信的代理(broker)组成的,这些代理之间组成了一个代理网络。这些网络可以有多种拓扑结构,而每一种拓扑结构都有不同的用处,在后续的文章中我们会来了解这些,本文只介绍ActiveMQ中的网络连接器(net

2015-12-08 14:27:17 1140 1

原创 配置ActiveMQ的Transport Connectors

一、概念    从broker的角度来看,transport connector是用于接受和监听来自客户端的连接请求的一种机制。比如在”conf/activemq.xml“这个配置文件中可以找到:                            discoveryUri="multicast://default"/>

2015-12-07 16:31:35 8421

原创 python getattr获取对象属性

getattr是一个很强大的功能,它能够获取任何对象的任何属性,包括方法。这样一来我们就可以通过getattr来动态的决定使用对象的哪个属性,或者方法。甚至用它还可以获取只有在运行才知道的属性。如,>>> li = [1,2,3,4]>>> getattr(li, 'append')(5)>>> li[1, 2, 3, 4, 5]    以上通过getattr函数获取了lis

2015-11-30 16:04:59 1905

翻译 python函数装饰器(decorators)

原文出处:http://thecodeship.com/patterns/guide-to-python-function-decorators/  在本文中我们主要介绍什么是函数装饰器?如何使用它?1、关于函数我们需要知道这些    在正式进入装饰器之前,我们需要知道python中函数都可以干嘛。    可以将函数赋给变量:def greet(name): ret

2015-11-29 20:17:38 655

原创 python操作符重载

二元运算符特殊方法+__add__,__radd__-__sub__,__rsub__*__mul__,__rmul__/__div__,__rdiv__,__truediv__,__rtruediv__//__floordiv__,__rfloordiv__%__mod__,__rmod__

2015-11-29 19:11:42 1718

原创 python模块

本文主要介绍一些python module的一些有用的用法。1. 使用_X和__all__    在引用模块时,有两种方法,一种是"import ...",另外一种是"from ... import ...".在使用后者时,有时因为 引用的名称较多,我们会选择”from ... import *",即将模块中的所有变量、函数及类全部导入到当前模块中。这样有时会造成命名空间污染,为了减小因“

2015-11-29 15:50:12 522

原创 mysql支持的数据类型简介

每张数据表至少有一个数据列,每个数据列必须有一个数据类型。本文说一下mysql支持的数据类型。1. 整数(xxxINT)    整数包括正数和负数,但如果给INT数据列定义了UNSIGNED,则只包含正数。对于整数又包含如下几种类型:    TYNYINT、SMALLINT、MEDIUMINT、INT、BIGINT,它们分别为8、16、24、32、64位整数。另外mysql还有一个类型

2015-11-29 13:12:55 1634

原创 mysql数据表类型

创建mysal表时可以设置数据表的类型,这种做法在其他数据库中比较少见。mysql支持多种类型数据表,它们有各自的特点和属性,其中最重要的3种类型是:MyISAM, InnoDB, HEAP.如果在创建表时没有设置表类型,mysql会根据配置文件中的default-table-type选项来在MyISAM和InnoDB之间做出选择。    本文对mysql支持的数据表类型做个简单的介绍。1

2015-11-29 12:11:51 907

原创 利用putty在windows上通过脚本在远程Linux机器执行指令

一、前言    借用百度百科关于putty的描述:PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台,并打算移植至Mac OS X上。除了官方版本外,有许多第三方的团体或个人将PuTTY移植到其他平台上,像是以Symbian为基础的移动电话。PuTTY为一开放源代码软件,主要由Simo

2015-11-25 15:31:22 23425

原创 用boost::tokenizer分割字符串

说明:本文是boost::tokenizer类的整理,原文出处为boost的document,此处仅作学习笔记之用。1、boost::tokenizerboost::tokenizer提供了一种灵活、易用的方式来将一个字符串分解为一个字符串列表。这是个模板类,类的声明为:template < class TokenizerFunc = char_delimiters

2015-11-23 18:08:36 3078

原创 std::mem_fun vs std::mem_fn, std::bind1st/std::bind2nd vs std::bind

1.mem_fun vs mem_fn在C++ 11之前,当需要使用STL算法对容器中的对象一次调用成员函数时,我们需要使用到mem_fun或者mem_fun_ref,至于mem_fun和mem_fun_ref之间的选择根据容器中存储的对象是对象指针还是对象本身来选择,其中mem_fun针对对象本身,而mem_fun_ref则针对对象本身。例如,class T{pu

2015-11-23 15:26:02 2222

原创 c++ error 2064: term does not evaluate to a function taking 1 arguments解决方法

首先来看一个简单的示例:class T{public: T() = default; ~T() = default; int convertToInt(double x) { return ceil(x); } void doSomething() { vector vecD{ 2.5, 3.0

2015-11-23 12:45:57 10443

转载 jsoncpp使用方法

一、摘要    JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。本文并不详细介绍 JSON 本身的细节,旨在讨论如何使用 C++ 语言来处理 JSON。关于 JSON更具体的信息,可参见 JSON 官网:http://www.json

2015-11-23 09:35:39 765

原创 python模块导入过程

在python中,当我们需要在一个模块中引用另一个模块中的内容时,我们需要通过将需要引用的模块import当前模块中来。对于不熟悉python的人来说,他们可能会认为python中的import与C语言中的#include,或者是Java中的import是一样的。但其实它们之间是有区别的,在python中,import一个模块不仅仅是将另外一个文件中的文本插入到当前文件中。实际上,import是在

2015-11-23 08:54:12 2677

原创 python中的map、filter、reduce函数

python中有几个常用的函数工具,它们包括map、filter、reduce,本文主要讲解这3个函数的用法。1.map函数首先看一下map函数的帮助文档:>>> help(map)Help on class map in module builtins:class map(object) |  map(func, *iterables) --> map o

2015-11-23 08:53:24 745

原创 python参数传递那些事

一、前言在python中,函数参数的定义和传递有以下几种方式:语法意义def func(name)普通参数,可以根据位置匹配,也可以根据key来匹配def func(name=value)默认参数,当参数没有传递时,使用默认值def func(*iteratable)将所

2015-11-23 08:52:31 6315

原创 python使用pickle序列化对象至文件

pickle模块用于将内存中的python对象序列化成字节流,并可以写入任何类似文件对象中;它也可以根据序列化的字节流进行反序列化,将字节流还原为内存中的对象。pickle使用dump方法将内存对象序列化:import pickleli = list(range(1,3))dbfile = open('pickle_list', 'wb')    #必须以2进制打开文件,否

2015-11-23 08:51:51 3175 1

原创 python内置数据类型

python内置数据类型中Dictionary、List、Tuple这三种是非常常用的,本章对着三种内置数据类型进行简单介绍。1、Dictionary介绍1.1 定义dictionary对象Dictionary即字典,它定义了键值对的一一对应关系,实际上它是一个哈希表。如>>> d = {'server':'localhost','port':3306}>>> d{'por

2015-11-23 08:50:46 612

原创 pImp机制--隐藏实现减小头文件依赖

pImp是private implemention的缩写。在C++中,当需要引用其他头文件中定义的类、函数、变量时,需要在应用前将需要的头文件包含到当前的文件中。如,    //头文件"A.h" #pragma once class A { ... } //头文件"B.h" #pragma once #i

2015-11-19 10:08:34 1834

原创 RAII(Resource Acquisition Is Initialization资源获取即初始化 )思想

一、定义    RAII,Resouce Acquisition Is Initialization,翻译成中文的意思就是资源获取即初始化,RAII主要用于保证申请的资源得到正确的释放。最初由Bjarne Stroustrup提出,为了保证资源能够正确的得到释放,RAII原则是所有的资源都必须有管理对象,而资源的申请操作在管理对象的构造函数中进行,而资源的回收则在管理对象的析构函数中进行。

2015-11-17 15:49:14 2231

原创 不用任何操作符实现两个正整数相加

首先,既然不能够用操作符,那我们只能使用位操作来进行。对于位操作有&、|、^、>这5种操作。那问题是如何能够用这3种操作来实现两个数据的相加呢?在具体操作前,我们先来看看10进制数的相加过程,比如对于“283+969”这个加法操作,一般是从低位往高位进行操作,并且如果两个数字加起来超过10了,则需要进1。那么其实这个操作可以分为三步进行:1.不考虑进为,对每个对应位上的数据直接相加

2015-11-16 09:55:06 693

原创 明白volatile的意义

在C++编程中,很少会用到volatile变量,所以很多人并不清楚volatile变量的意义。其实volatile关键字是用于告诉编译器,它所声明的变量的内存位置是一块特殊内存,而非普通内存。而何为普通内存呢?让我们来看一下以下代码:int x = 10;int y = x;y = x;对于以上代码,其实第二次”y = x;”的调用是多余,编译器实际上很有可能会将这段代码进行优

2015-11-16 09:52:07 819

原创 在C++中使用openmp进行多线程编程

声明:本文是基于Joel Yliluoma写的Guid into OpenMP:Easy multithreading programming for C++而写的,基本是按照自己的理解,用自己语言组织的。其中大部分例子依然用原来文章的例子。前言多线程在实际的编程中的重要性不言而喻。对于C++而言,当我们需要使用多线程时,可以使用boost::thread库或者自从C++ 11开始

2015-11-13 15:53:40 37376 8

原创 遇见gtest--函数参数化测试

1、前言      有时为了完整的测试一个函数的正确性,我们需要测试给定各种不同输入的情况下,函数的输出是否正确。最直接的方法就是我们手动去给不同输入,然后测试输出是否正确。但是这种方式工作量大,并且都是重复性,无意义的操作。为此,gtest中提供了参数化的测试。2、参数化测试使用方法    要使用参数化测试,我们需要创建一个子类继承testing::TestWithParam

2015-11-12 09:30:58 5833

原创 vector、map还是unordered_map?

一、引言   当我们需要使用键值对的情况时,通常我们会使用map或者unordered_map。其中map底层是采用红黑树实现的,它的查询复杂度是O(lgn);unordered_map实际上是hash_map的实现,理论上它的查询复杂度是O(1)的。那么当我们需要使用键值对结构时,我们是否就一定需要使用它们,或者说它们就一定是最好的选择呢? 答案是否定的,实际上我们可以使

2015-11-11 15:13:34 5896 4

原创 boost::barrier同步原理

boost::barrier是多线程的同步点,构造函数会要求传递一个数字,表示需要同步多少个线程。只有指定个数的线程到达这个点之后,程序才会继续往下走,否则会阻塞。其实barrier的同步原理很简单。要明白它的同步原理,我们首先来看barrier的源码:class barrier { static inline unsigned int check_counter(unsign

2015-11-04 21:25:04 3605

原创 遇见gtest--事件

1、前言    在单元测试中,我们经常需要在某个测试套件、测试用例或者整个测试运行之前进行前置条件设置及检查,或者运行之后对运行结果进行校验等操作。在gtest中,称之为事件机制。gtest将事件按照作用的范围不同进行划分,从大到小总共分为3个层次:    1)整个测试层面,即在测试工程开始前和结束后进行;    2)测试套件层面,即在某个测试套件开始前和结束后进行;    3)测

2015-11-02 20:52:44 2700

原创 确保线程执行函数体正确使用引用传递

1、前言    在启动一个线程时,我们首先需要定义一个线程执行体,这个可执行体可以是函数、仿函数或者lambda表达式。并且它们可以拥有任意数量的参数。如,    auto thHandler = std::thread([](){cout     以上一行代码运行时,会启动一个新的线程,线程的执行体为一个lambda表达式,这个线程会在控制台中高输出“a new thread“。

2015-10-28 18:30:29 3437 2

原创 如何干掉那又丑又长的switch..case语句

1、前言    在实际的编程中,我们经常会使用到switch..case语句,这通常也是对一长串if..else if语句的优化。对于一些简单的情况(只每个case代码中代码长度不会很长,而且case分之并不多的情况),用switch..case语句即可,此时代码的可读性并不会很差,结构也算是清晰。但是一旦case分支数目众多,每个case语句块中代码长度也很长,这时对于维护这段代码的同学则是

2015-10-27 09:41:46 19246

原创 遇见gtest--断言

1、前言    作为一个成熟的单元测试框架,gtest自然拥有一些用于判断值是否与期望一致的断言。在gtest中,断言分为两大类:ASSERT_*和EXPECT_*。它们的区别在于,ASSERT_*类断言在失败时,会立即退出当前的测试用例(即其所在的函数,但不会结束整个测试);EXPECT_*类断言在失败时,会继续执行,不会退出当前测试用例。    在每一个大类中,有分为多个小类别,它们分

2015-10-22 09:53:21 6025

原创 遇见gtest -- HelloGtest

1、前言    对于一个成熟的系统,为了保证系统正确的运行,测试代码量与功能代码量应该是相当的。对于C++而言,目前已经有一些单元测试框架,如gtest。本文对gtest的使用做一个简单的介绍。2、第一个测试用例    作为使用gtest的第一个用例,我们用以下示例来示范gtest的使用方法:    #include "gtest/gtest.h" bool isEv

2015-10-21 09:40:08 885

模式识别与机器学习

机器学习与人工智能方向很经典的入门书籍,本书从最基本的开始,循序渐进的介绍了模式识别和机器学习的基础知识和一些经典算法

2011-12-11

计算理论导引

计算理论的经典教材,里面详细介绍了图灵机的基本概念,以及有关算法复杂度的概念

2011-12-11

opencv参考书

本书详细介绍了opencv在计算机视觉中的应用

2011-12-11

新编c语言大全(适合初学者)

一本c语言教程,适合初学者。如果你想学习c语言,这是一本不错的电子书,希望能给您带来帮助

2011-03-12

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

TA关注的人

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