3 f905699146

尚未进行身份认证

暂无相关简介

等级
TA的排名 14w+

OpenTsdb驱动简单实现

时序时空数据库TSDB简介和使用方案可以看文档 [tsdb文档](https://www.docs4dev.com/docs/zh/opentsdb/2.3/reference) TSDB对外只提供restful api,而且TSDB作为时序数据库,在后台的微服务的使用大部分场景只做查询,数据的写入交由其他的数据采集服务负责。我们之前有个使用场景是通过canal去监听mysql binlog...

2019-07-19 16:08:43

gRPC使用

首先安装protobuf和grpcgo get -u github.com/grpc/grpc-gogo get -u github.com/golang/protobuf/protogo-get -u github.com/golang/protobuf/protoc-gen-go //--go-out工具首先定义hello.protosyntax="proto3";option...

2018-09-20 14:18:02

operator new和placement new的区别

new 关键字 (1)调用operator new分配足够的空间,并调用相关对象的构造函数 (2)不可以被重载operator new (1)只分配所要求的空间,不调用相关对象的构造函数。当无法满足所要求分配的空间时,则 ->如果有new_handler,则调用new_handler,否则 ->如果没要求不抛出异常(以nothrow参数表达...

2018-09-12 16:26:06

#pragma once和#ifndef的区别

1)#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况2)#pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。...

2018-09-12 14:21:16

const 和 static的区别

static的作用:对变量:1.局部变量:在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。1)内存中的位置:静态存储区2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。注:当static用来修饰局部变量的时...

2018-09-12 13:34:54

内存读数据和磁盘读数据的区别

https://blog.csdn.net/zhanghongzheng3213/article/details/54141202/ 当程序要读取的数据时传入内存地址(行地址+列地址),如果数据不在主存中时,会触发一个缺页异常,此时系统会向磁盘发出读盘信号,通过柱面号,磁头号,扇区号定位磁盘位置,找到数据的起始位置并向后连续读取一页或几页载入内存中。于存储介质的特性,磁盘本身存取就比主存慢很...

2018-09-12 13:13:16

tcp端口扫描方式

其实指TCP的连接方式 一般有三种: 1.通过connect 客户端通过connect发起连接后,如果服务器处于监听状态就可以发起连接成功,否则说明端口是关闭的。优点是比较简单可靠,缺点是如果连接不成功会频繁的发包,扫描时间比较长 2.通过SYN扫描 向目标端口发送SYN数据帧,如果又收到SYN+ACK说明开放,如果收到RST说明关闭,在IP层实现。 3.通过FIN扫描 四次挥手的过...

2018-09-11 14:40:57

c++类型别名

1、类型别名定义 类型别名(type alias)是一个名字,它是某种类型的同义词。使用类型别名有很多好处,它让复杂的类型名字变得简单明了、易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的。有两种方法可用于定义类型别名。 (1)传统的方法是使用关键字typedef:typedef double wages; //wages是double的同义词 typedef wages

2017-09-23 15:30:39

c++11实现的线程池

前言C++11之前我们使用线程需要系统提供API、posix线程库或者使用boost提供的线程库,C++11后就加入了跨平台的线程类std::thread,线程同步相关类std::mutex、std::lock_guard、std::condition_variable、std::atomic以及异步操作相关类std::async、std::future、std::promise等等,这使得我们编写

2017-09-15 19:12:19

mmap和shmget的区别

二者本质上是类似的,mmap可以看到文件的实体,而 shmget 对应的文件在交换分区上的 shm 文件系统内,无法直接 cat 查看 安全性:mmap 方式对应的真实文件,如果用户有权限即可查看,甚至删除                  shmget 方式其实也一样,好了一层皮罢了(ipcrm -m …) 一致性:mmap 方式下各进程映射文件的相同部分可以共享内存

2017-09-04 22:21:33

abort,exit,return 的区别

exit(): 在调用时,会做大部分清理工作,但是决不会销毁局部对象,因为没有stack unwinding。 会进行的清理工作包括:销毁所有static和global对象,清空所有缓冲区,关闭所有I/O通道。终止前会调用经由atexit()登录的函数,atexit如果抛出异常,则调用terminate()。 abort(): 调用时,不进行任何清理工作。直接终止程序。 retrun:

2017-09-01 10:30:21

setjmp 和 longjmp 函数使用详解

非局部跳转语句—setjmp和longjmp函数。非局部指的是,这不是由普通C语言goto,语句在一个函数内实施的跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一个函数中。#include <setjmp.h>int setjmp(jmp_buf env);返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值的longjmp中的val值void longjmp(jmp

2017-08-25 23:23:25

c++多重继承的bug

一个例子:#include <iostream>using namespace std;class Base1{public: virtual void foo1() {};};class Base2{public: virtual void foo2() {};};class MI : public Base1, public Base2{public: vir

2017-08-23 15:38:23

拷贝构造函数的陷阱

拷贝构造函数大家都比较熟悉,通俗讲就是传入一个对象,拷贝一份副本。#include<iostream>using namespace std;class CExample {public: int a,b,c; char *str;public: //构造函数 CExample(int tb) { a = tb; b =

2017-08-23 13:52:37

在 C++ 中子类继承和调用父类的构造函数方法

1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。 2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。 3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。 4. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构

2017-08-23 12:47:40

第一个libevent程序

#include<sys/signal.h>#include<event.h>void signal_cb(int fd,short event,void* argc){ struct event_base* base= argc; struct timeval delay={2,0}; printf("caught an interrupt signal\n");

2017-08-17 13:05:03

缺页中断

缺页中断   在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。每当所要访问的页面不在内存时,会产生一次缺页中断,此时操作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存。   缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤:   1. 保护CPU现场   2. 分析中断原因   3. 转入缺页中断处理程序进行处理

2017-08-15 13:31:37

计算机是怎么做乘法运算的

通过加减法和移位来实现的;把除法转成乘法,乘法转成加法,减法也转成加法。模拟CPU运算乘法的步骤: 假设计算3*3 原码是0011 * 0011(以4位存贮单元,因为是原码,最高位不代表符号位) CPU中的乘法器过程如下: 3个寄存器分别存放乘数0011 被乘数 0011 一个部分积初始值为0 1、首先判断乘数寄存器(目前为0011)的最低位为1。如果为1则将部分积的值通过加法器加上

2017-08-14 23:27:30

c++并发指南-细说unique_lock

c++11有两种基本的锁类型,一种是lock_guard,一种是unique_lock,lock_guard使用十分简单,但是没有提供给程序足够的灵活度,所以c++11标准添加了Mutex RAII机制的另一个类unique_lock,使用也与lock_guard相似,但提供了更好的上锁,解锁的控制。 unique_lock对象以独占所有权的方式管理mutex对象的上锁和解锁操作。其他unique

2017-07-02 22:48:48

stl容器中移出元素的正确做法

我们知道在移出元素时,指向当前的迭代器会失效,如果要移出多个元素时,可以使用这种方法。我们看下面这段代码:typedef std::map<std::string,float> StringFloatMap;StringFloatMap coll;StringFloatMap::iterator pos;for(pos=coll.begin();pos!=coll.end();++pos){

2017-06-30 20:30:37

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!