自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小麒麟的成长之路

专注后端服务器开发,记录工作、学习中遇到的问题的解决方法以及个人心得

  • 博客(100)
  • 资源 (1)
  • 收藏
  • 关注

原创 RabbitMQ C 客户端收发数据实例解析

rabbitmq-c客户端,github地址:https://github.com/alanxz/rabbitmq-crabbitmq-c是一个C语言操作的AMQP客户端库,用来与RabbitMQ broker进行交互Building and installing:需要:CMake2.6或以上版本1、下载安装包后解压,进入主目录,2、mkdir build && cd build ...

2018-03-02 18:42:48 17660 11

翻译 RabbitMQ图解

RabbitMQ是一个消息队列软件,称为消息代理或队列管理器。简单地说, 这是一个可以定义队列的软件,应用程序可以连接到队列并将消息传输到队列中。消息可以包括任何类型的信息。 例如,它可以具有从另一个应用程序(可能在另一个服务器上)开始的进程/任务的信息,或者它可以只是一个简单的文本消息。队列管理器软件存储消息,直到接收应用程序连接并从队列中取出消息。然后接收应用程序以适当的方式处理消息。Rabb...

2018-02-23 19:43:58 4189 1

原创 C++11智能指针(六):unique_ptr介绍与例子

本节介绍下c++11提供的智能指针实现: std::unique_ptr<>什么是std::unique_ptrunique_ptr <>是c ++ 11提供的智能指针实现之一,用于防止内存泄漏。unique_ptr对象包含一个原始指针,并负责其生命周期。当这个对象被销毁的时候,它的析构函数会删除关联的原始指针。unique_ptr有重载的- >和*运算符,所以它可以...

2018-02-12 10:31:10 11317 1

原创 C++11智能指针(五):shared_ptr的循环引用的问题及weak_ptr

shared_ptr的主要优点是当不再使用时会自动释放相关的内存。但是如果我们不仔细使用shared_ptr,那么这个优势就会变成一个劣势。 我们来看看:假设我设计一个二叉树,并在其中包含一个指向左右子节点的指针。#include <iostream>#include <memory>class Node { int value; public: std::...

2018-02-12 10:30:27 8849 4

原创 C++11智能指针(四):创建shared_ptr对象

1、尽量不要使用相同的原始指针来创建多个shared_ptr对象,因为在这种情况下,不同的shared_ptr对象不会知道它们与其他shared_ptr对象共享指针。这样会造成什么样的问题?设想两个shared指针由相同的原始指针创建:int *rawPtr = new int();std::shared_ptr<int> ptr_1(rawPtr);std::shared_ptr...

2018-02-11 16:49:52 7397

原创 c++11智能指针(三):shared_ptr和指针

本节对比一下C++11智能指针的实现shared_ptr和普通的指针从以下几个方面比较:++,--和[]操作符相比于原始指针,shared_ptr只提供这些运算符:1) ->, *2) 比较运算符但是,shared_ptr不提供1) 指针运算比如+,-,++,--2) Operator []例子:#include <iostream>#include <memory&gt...

2018-02-09 11:53:27 1542

原创 c++11智能指针(二):shared_ptr和自定义的Deleter

本节讨论怎样使用 std::shared_ptr自定义Deleter.当一个shared_ptr对象超出作用域时,其析构函数被调用,在析构函数中,将其引用计数减1,如果引用计数的值变为0,则删除关联的原始指针。要删除析构函数中的内部原始指针,默认情况下,shared_ptr调用delete()函数,即delete Pointer;但是,我们在析构函数中并不总是要使用delete函数,还可能有其他的...

2018-02-06 17:48:30 16446 2

原创 C++11智能指针(一):shared_ptr介绍与实例

什么是std::shared_ptr<>?std::shared_ptr<>是c++11中引入的一种智能指针,它足够聪明,如果指针不在任何地方使用,就会自动删除指针。这可以帮助我们彻底消除内存泄露和悬挂指针的问题。shared_ptr和共享所有权它遵循共享所有权的概念,即不同的shared_ptr对象可以与相同的指针相关联,并且在内部使用引用计数机制来实现。每个shared...

2018-02-05 15:16:55 7075

原创 zookeeper C API 完整运行实例

介绍下每个组件代码流摘要Master:1、获取leadership前2、尝试创建主znode3、如果通过,则获取leadership4、连接丢失后,需要检查znode是否存在以及谁拥有它5、一旦确定他人拥有它,Watch主znode6、获取leadership后7、Get workers8、在worker list上设置一个watcher9、检查

2018-01-24 14:54:38 3451

原创 linux下使用zookeeper C API开发zookeeper应用的方法介绍

1、配置开发环境构建ZooKeeper本地库的最简单的方式是使用ant构建工具。在你解压缩的ZooKeeper发行包的目录中,有一个名为build.xml的文件,该文件包含了ant构建所需的构建步骤。你还需要用到automake、autoconf和cppunit这些工具,如果你使用Linux操作系统,需要确保这些工具在你的主机中可用。一旦安装了所有必需的工具,你可以采用以下方式构建ZooKeepe

2018-01-18 10:30:27 4196

原创 c++11多线程编程(十):packaged_task<>介绍与实例

本节讨论c++11中std::packaged_task的特性与使用方法std::packaged_taskstd::packaged_task是一个类模板,代表一个异步任务。封装了1、可调用实体,即函数,lambda函数或函数对象2、一个共享状态,通过关联的回调来存储返回的值或抛出的异常。假设我们有一个现有的函数从数据库中提取数据并返回,//从DB获取数据std

2017-12-27 10:36:35 3544

原创 c++11多线程编程(九):std::async介绍与实例

本节讨论下在C++11中怎样使用std::async来执行异步task。C++11中引入了std::async什么是std::asyncstd::async()是一个接受回调(函数或函数对象)作为参数的函数模板,并有可能异步执行它们.templatefuture::type> async(launch policy, Fn&& fn, Args&&...args);std

2017-12-27 10:33:37 34259 2

原创 C++Primer第五版中的c++11特性归纳(六)

五十一、通过定义类为final来阻止继承有时我们会定义这样一种类,我们不希望其他类继承它,或者不想考虑它是否适合作为一个基类。为了实现这一目的,C++11新标准提供了一种防止继承的方法,即在类名后面跟一个关键字final:class NoDerived final {/**/}; //NoDerived不能作为基类五十二、虚函数的override和final指示符在c++1

2017-12-21 15:19:18 695 1

原创 C++Primer第五版中的c++11特性归纳(五)

四十一、auto不能用于分配数组虽然我们用空括号对数组中的元素进行值初始化,但不能在括号中给出初始化器,这意味着不能用auto分配数组。四十二、动态分配数组的列表初始化在新标准中,我们可以提供一个元素初始化器的花括号列表://10个int分别用列表中对应的初始化器初始化int *pia = new int[10]{0,1,2,3,4,5,6,7,8,9};//10个string,前4个用给定的...

2017-12-21 15:17:50 554

原创 C++Primer第五版中的c++11特性归纳(四)

三十一、容器的非成员函数swap在新标准库中,容器既提供成员函数版本的swap,也提供非成员版本的swap。而早期标准库版本只提供成员函数版本的swap。非成员版本的swap在泛形编程中是非常重要的。统一使用非成员版本的swap是一个好习惯。三十二、容器insert成员的返回类型在新标准下,接受元素个数或范围的insert版本返回指向第一个新加入元素的迭代器。(在旧版本中,这些

2017-12-14 15:36:53 558

原创 C++Primer第五版中的c++11特性归纳(三)

二十一、使用decltype简化返回类型定义如果我们知道函数返回的指针指向哪个数组,就可以使用decltype关键字声明返回类型。例如,下面的函数返回一个指针,该指针根据参数i的不同指向两个已知数组中的某一个int odd[] = {1,3,5,7,9};int even[] = {0,2,4,6,8};//返回一个指针,该指针指向含有5个整数的数组decltype(odd) *ar

2017-12-14 15:36:23 522

原创 C++Primer第五版中的c++11特性归纳(二)

十一、vector对象的列表初始化c++11新标准提供了另外一种为vector对象的元素赋初值的方法,即列表初始化。此时,用花括号括起来的0个或多个元素值被赋给vector对象:vector v1 = {"a", "an", "the"}; //列表初始化vector v2 = ("a", "an", "the"); //错误 十二、容器的cbegin和cend函数begin和e

2017-12-10 14:52:19 769

原创 C++Primer第五版中的c++11特性归纳(一)

C++Primer第五版对C++11的特性做了详细的介绍,现在对其做一个大致的归纳一、long long类型在C++11中,标准要求long long整型可以在不同平台上有不同的长度,但至少有64位。我们在写常数字面量时,可以使用LL后缀(或是ll)标识一个long long类型的字面量,而ULL(或ull、Ull、uLL)表示一个unsigned long long类型的字面

2017-12-10 14:45:18 1522

原创 c++11多线程编程(八):std::future , std::promise和线程的返回值

std::future对象可以和asych,std::packaged_task,std::promise一起使用。这篇文章集中讨论std::future和std::promise。我们经常会遇到需要得到线程返回结果的情况,现在的问题是我们如何实现。举个例子:假设在程序中,我们创建了一个压缩给定文件夹的线程,并且我们希望该线程能够返回新的zip文件的名称和大小。有两种实现方式:

2017-11-30 15:07:08 17151 9

原创 c++11多线程编程(七):条件变量说明

条件变量条件变量是一种用于在2个线程之间进行信令的事件,一个线程可以等待它得到信号,其他的线程可以给它发信号。在c++11中,条件变量需要头文件:#include 同时,条件变量还需要一个mutex锁条件变量实际上是如何运作的·线程1调用等待条件变量,内部获取mutex互斥锁并检查是否满足条件;·如果没有,则释放锁,并等待条件变量得到发出的信号(线程被阻塞),条

2017-11-23 10:41:38 3581

原创 c++11多线程编程(六):事件处理

本节讨论在多线程环境下的事件处理有时,线程需要等待某事件发生,比如一个条件变为true,或者某任务被另一个线程完成例如,我们创建一个基于网络的应用程序,处理如下的任务:1、与处理器进行一些握手操作;2、从xml文件load数据;3、处理从xml文件load的数据.可以发现,任务1不依赖其他的任务,而任务3则依赖于任务2,这意味着任务1和任务2可以由不同的线程并行运行,以提升

2017-11-23 10:24:00 5405 2

原创 c++11多线程编程(五):使用mutex修复竞争

c++11多线程编程(五):使用mutex修复竞争这节我们讨论怎样使用mutex锁保护多线程环境中的共享数据来避免竞争条件为了修复多线程环境中的竞争条件,我们需要mutex互斥锁,在修改或读取共享数据前,需要对数据加锁,修改完成后,对数据进行解锁。在c++11的线程库中,mutexes在头文件中,表示互斥体的类是std::mutexmutex有两个重要的方法:1.) l

2017-11-17 14:45:42 2200 4

原创 c++11多线程编程(四):数据共享和竞争条件

在多线程环境中,线程间的数据共享很简单,但是在程序中这种简单的数据共享可能会引起问题,其中一种便是竞争条件什么是竞争条件?竞赛条件是发生在多线程应用程序中的一种bug当两个或多个线程并行执行一组操作,访问相同的内存位置,此时,它们中的一个或多个线程会修改内存位置中的数据,这可能会导致一些意外的结果,这就是竞争条件竞争条件通常较难发现并重现,因为它们并不总是出现,只有当两个或多个

2017-11-17 14:36:41 4312 3

原创 c++11多线程编程(三):仔细地将参数传递给线程

要将参数传递给线程的可关联对象或函数,只需将参数传递给std::thread构造函数默认情况下,所有的参数都将复制到新线程的内部存储中看一个例子:给线程传递单个参数#include #include #include void threadCallback(int x, std::string str){    std::cout<<"Passed Number = "<

2017-11-11 15:31:30 8010 2

原创 c++11多线程编程(二):joining和detaching 线程

Joining线程线程一旦启动,另一个线程可以通过调用std::thread对象上调用join()函数等待这个线程执行完毕std::thread th(funcPtr); th.join();看一个例子:主线程启动10个工作线程,启动完毕后,main函数等待他们执行完毕,joining完所有线程后,main函数继续执行#include #include #inc

2017-11-03 14:46:00 3921 1

原创 c++11多线程编程(一):创建线程的三种方法

c++11线程库原始的c++标准仅支持单线程编程,新的c++标准(c++11或c++0x)于2011年发布,引入了新的线程库。编译器要求:Linux: gcc 4.8.1 (完全并发支持)Windows: Visual Studio 2012 and MingW在linux下的编译方法:g++ -std=c++11 sample.cpp -lpthread

2017-11-03 14:45:08 43170 7

原创 cmake学习笔记

一、cmake常用变量和常用环境变量1、cmake变量引用形式:cmake使用${}进行变量的引用,在if语句中直接使用变量名而不需要通过${}取值。2、cmake自定义变量的方式:分为显式定义和隐式定义,例如PROJECT指令,会隐式定义_BINARY_DIR和_SOURCE_DIR两个变量显式定义使用SET指令,例如: SET(HELLO_SRC main.c),则

2017-09-15 18:14:56 897 1

原创 c++通过Thrift向flume发送数据

在flume源码包apache-flume-1.7.0-src\flume-ng-sdk\src\main\thrift\flume.thrift 目录下,有Flume的Thrift接口定义(IDL)语言,通过该Thrift可以生成客户端模块基础代码,此处我们生成相应的c++代码:thrift -r --gen cpp flume.thrift编译过程中可能会报 "libthrift-0.9.

2017-09-15 17:22:43 820

原创 thrift网络通讯架构解析与实例验证

Thrift实现了C/S模式,通过代码生成工具将接口定义文件生成服务器端和客户端代码(可以为不同语言),从而实现服务端和客户端跨语言的支持。用户在Thirft描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务(客户端调用服务,服务器端提服务)便可以了。一、Thrift Rpc整体架构Thrift的协议栈如图:在Client和Server的最顶层都是用户自定义的处...

2017-09-08 16:22:04 1389

原创 python通过thrift实现向flume发送数据

Apahce Thrift是FaceBook实现的一种高效的、支持多种语言的远程服务调用的框架。Source是负责接收数据到Flume Agent的组件,可以从其他系统中接收数据。Flume有Java Thrift RPC客户端,是FLume SDK的一部分,Thrift Source是多线程,高性能的Thrift服务器,Flume的Thrift接口定义(IDL)语言如下:namespac

2017-09-08 11:12:46 2538

原创 生产环境中的flume海量数据传输性能优化

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统, 优化方法 java环境 channel类型 sink类型与个数 是否压缩 source已经接收到的事件总数量 写入速度 成功写入channel且提交的事件总数量 sink成功读取的channel事件的总数量 sink成功写出到存储的事件总数量 ch

2017-09-01 19:28:02 4779 5

原创 《程序员修炼之道-从小工到专家》读书笔记

序注重实效的程序员有哪些特征·早起的改造者/快速的改编者·好奇·批判的思考者·有现实感·多才多艺 提示1:Care About Your Craft关心你的技艺 提示2:Think!About Your Work思考!你的工作 第一章、注重实效的哲学1、我的源码让猫给吃了注重实效的程序员对他或她自己的职业生涯负责,并且不害怕承认无知和

2017-09-01 19:26:21 1485

原创 thrift文件详解

本文介绍如何在一个.thrift文件中使用thrift. 首先要注意的是, .thrift文件支持标准shell注释,这使得thrift文件可执行,并可以在顶部行include thrift,可以在任意位置进行注释。test.thrift:/** * 首先是数据类型,thrift支持的数据类型为: * * bool Boolean, one byte *

2017-09-01 19:25:42 3026

原创 记flume部署过程中遇到的问题以及解决方法(持续更新)

项目需求是将线上服务器生成的日志信息实时导入kafka,采用agent和collector分层传输,app的数据通过thrift传给agent,agent通过avro sink将数据发给collector,collector将数据汇集后,发送给kafka,拓扑结构如下:现将调试过程中遇到的问题以及解决方法记录如下:1、 [ERROR - org.apache.thrift.server.Abstr...

2017-08-21 16:52:00 46348 13

原创 c++(11)使用librdkafka库实现kafka的消费实例

关于librdkafka库的介绍,可以参考kafka的c/c++高性能客户端librdkafka简介,本文使用librdkafka库来进行kafka的简单的消费librdkafka在c语言的基础上封装了一层c++的API,可以实现kafka的消费操作,基本操作步骤如下1、创建kafka 配置RdKafka::Conf *conf = nullptr;conf = RdKafk

2017-08-04 18:47:52 21992 2

原创 c语言使用librdkafka库实现kafka的生产和消费实例

关于librdkafka库的介绍,可以参考kafka的c/c++高性能客户端librdkafka简介,本文使用librdkafka库来进行kafka的简单的生产、消费一、producerlibrdkafka进行kafka生产操作的大致步骤如下:1、创建kafka配置rd_kafka_conf_t *rd_kafka_conf_new (void)2、配置kafk

2017-08-02 17:24:03 35442 19

翻译 kafka的c/c++高性能客户端librdkafka简介

Librdkafka是c语言实现的apachekafka的高性能客户端,为生产和使用kafka提供高效可靠的客户端,并且提供了c++接口 性能:Librdkafka 是一款专为现代硬件使用而设计的高性能库,它尝试将内存复制保持在最小,可以让用户决定是需要高吞吐量还是低延迟的服务,性能调优的两个最重要的配置是:*batch.num.messages:在发送消息之前累积在本地队列中等待

2017-08-02 10:35:07 24831

原创 libevent实现的一个简单的服务器和客户端程序

关于libevent的大致介绍,可以参考博文 libevent学习笔记此处使用上述方法实现一个简单的服务器与客户端程序:server.cpp:#include #include #include #include #include #include #include #include #include #include #include

2017-07-19 18:26:56 2316 1

原创 epoll实现的多人聊天室程序

关于epoll的介绍此处不赘述,可以参考这篇博文 linux epoll详解及使用方法概述这里给出一个epoll实现的聊天室程序,实现群聊功能,分为server端和client端代码:server.cpp://server.cpp#include #include #include #include #include #include #include #include

2017-07-14 19:21:54 1888

原创 kafka0.8.2集群的环境搭建并实现基本的生产消费

Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark等都支持与Kafka集成。 此处采用kafka_2.10-0.8.2.2版本进行安装部署,机器环境为ubuntu14041、下载kafka安装包并解

2017-07-14 17:29:30 3414

protobuf-syntax-highlighting.sublime-package

sublime text 3下的protobuf 语法高亮插件

2017-03-22

空空如也

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

TA关注的人

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