自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 博客旧址

发现自己原来的博客无论从分类还是从文章排版上都比较乱,自己又懒得去重新整理,于是,就重新申请了一个博客,以后的文章都会写在本博客中,会有选择性的把原来的博客内容迁移过来,希望以后能够写出更好的文章。博客原址

2016-09-05 23:46:09 633

原创 C++11之继承构造函数

问题场景类的继承中,如果子类想使用父类的构造函数,则需要在子类的构造函数中声明使用父类的构造函数,例子如下:struct A{ A(int i){}};struct B:A{ B(int i):A(i),d(i){} int d;};但是如果父类中含有多种版本的构造函数,那么子类的构造函数需要多种版本的实现,实现起来很不方便。如下例子:struct A{ A(int i)

2017-12-08 12:06:44 426

原创 程序员的自我修养--可执行文件的装载与进程

进程的虚拟地址空间C语言指针大小的位数与虚拟地址空间的地址位数相同,即32位平台下进程的虚拟地址空间为4G由于程序在运行是处于操作系统的监管下,进程的虚拟地址空间都在操作系统的掌握中,只能使用操作系统分配给进程的地址。如果访问未经允许的地址,将会强制结束进程。一般在linux上回出现Segmentation fault在32位平台中,整个4 GB被划分成两部分,其中操作系统本身用去了一部分:从

2017-11-08 22:02:37 407

转载 Skip List

Skip List 是什么我们常用数组和链表来组织数据,对于已排序的数据,数组的查询时间复杂度可以是Θ(lgn)Θ(lgn)(二分查找),插入和删除都是Θ(n)Θ(n)。链表提供了一种更加灵活的组织方式,插入和删除的时间复杂度是Θ(1)Θ(1),查询的时间复杂度是Θ(n)Θ(n)。平衡树是更好的方案,查询、插入、删除的时间复杂度都是Θ(lgn)Θ(lgn),但实现上比较复杂。Skip List作为性

2017-10-24 14:20:53 569

原创 使用libcurl异步发送http请求

在工作中需要完成一个工具,该工具主要的用途就是向指定的服务器和端口发送http请求,为了提高性能,采用多线程的方式进行,同时采用libcurl的异步形式。代码如下,在其中添加一些注释来记录写代码中遇到的问题。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <stdarg.h

2017-10-09 21:02:46 5083

原创 C++11之左值、纯右值和将亡值

在C++11中所有的值一定属于左值、纯右值和将亡值三种值之一,分别介绍一下这三种类型。左值与右值在C++中定义左值与右值的比较标准的方法是根据其可以取地址来判断。左值就是可以对变量进行取地址或者有名字的变量,按照C语言中的规定也就是说其在内存中是被分配了位置;而右值就是不可以取地址、没有名字的。比如 a = b + c;其中a就是左值、b+c就是右值。纯右值与将亡值纯右值就是C++98中的右值的概念

2017-09-03 12:33:10 3365

转载 C++重载、重写、重定义区别

重载(overload)概念:函数有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数之间,互相称之为重载函数。基本条件:函数名必须相同; 函数参数必须不相同,可以是参数类型或者参数个数不同; 函数返回值可以相同,也可以不相同;注意:只能通过不同的参数样式进行重载,例如:不同的参数类型,不同的参数个数,不同的参数顺序; 不能通过访问权限、返回类型、抛出的异常进行重载;重载的

2017-08-27 19:51:41 386

原创 C++11之初始化成员变量

C++98中的成员变量初始化在声明类的时候,对于静态类型并且是常量类型,同时是枚举或者是整型的变量可以使用=在声明时初始化。对于不符合上述要求的静态变量可以在类外使用=进行初始化对于非静态类型可以说个初始化列表进行初始化使用()对自定义类型进行初始化使用{}对元素集合统一初始化C++11中的成员变量初始化在C++11中可以使用=或者{}就地初始化,类似于Java语言。 代码示例stru

2017-08-27 17:53:08 10963

原创 C++11之POD类型

什么是POD类型POD的全称叫做Plain Old Data,简单讲就是一个类或者一个结构体通过二进制拷贝之后还能保持其不变,那么这个类型就是POD类型。什么类型属于POD类型当一个类型具有平凡的定义和标准布局这两种情况时,才可以说这种类型是POD类型。什么是平凡的定义的类型当一个类具有以下的几个定义时,才可以说是平凡的类:拥有平凡的默认构造函数和析构函数 这里的平凡的默认构造函数是指在不定义构

2017-08-27 14:47:42 647 3

原创 飞扬23期总结

做事态度很重要,做每一件事都要认真仔细,认真、认真、认真 在飞扬培训的过程中,发现好多人做每一件事都非常认真,比如:写报告、发邮件等工作中超出leader的预期 这是对工作帮助比较大的一个收获,

2017-08-26 20:04:45 500

转载 函数对象

函数对象(Function Object)又称函数对象类、仿函数、高阶函数等,函数对象实际上是指那些可以被传入其他函数或是从其他函数返回的函数(比如std::for_each函数的第3个参数就要求传入接受一个参数的函数或函数对象),是不是和函数指针的作用很相似,后面会介绍函数对象和函数指针的差别~ 感觉上面关于函数对象的定义还是好复杂呀,通俗的讲函数对象就是一个重载了operator()操作符的类

2017-07-24 17:06:04 706

原创 libprocess初探

libprocess介绍一直在学习mesos相关的底层实现,mesos底层依赖还是挺多的,mesos就是其中的一个,而且是很重要的一部分。libprocess是受Erlang的启发,基于actor模型进行开发的。libprocess的核心概念之一就是Process,Process就是一个单独的线程,可以通过发送和接受http请求或者响应来与本地或者远程的Process进行沟通。一个Process是一

2017-07-23 14:16:44 3129

原创 Valid Anagram

Given two strings s and t, write a function to determine if t is an anagram of s.For example, s = “anagram”, t = “nagaram”, return true. s = “rat”, t = “car”, return false.Note: You may assume the s

2017-07-18 22:52:00 319

原创 微服务中的服务发现

什么是服务发现在介绍服务发现之前,先来介绍一下什么是微服务,所谓的微服务其实就是将一套软件拆分为多个服务,每个服务专注于一个功能点,然后将业务流程拆分为几个不同的服务之间的组合,从而实现高内聚低耦合的效果。在微服务体系结构中,所谓的服务发现就是用户可以通过服务的名字,在注册中心找到可以提供正常服务的实例的网络地址(即ip地址和端口号)。这种根据服务名字发现服务的可用地址的机制就叫做服务发现。为什么需

2017-07-17 17:29:53 1546

原创 Contains Duplicate II

Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most k.思想

2017-07-16 14:56:30 317

原创 shell编写

#判断环境变量BLACK_LIST的字符串长度是否为0#设置shell变量BLACK_LIST的值为环境变量BLACK_LIST的值if [ -n "$BLACK_LIST" ]; then BLACK_LIST="--blacklist $BLACK_LIST"fi#判断环境变量PRODUCER_COUNT的字符串长度是否不为0#设置shell变量PRODUCER_COUNT的

2017-07-16 14:35:42 392

转载 STL中的swap函数

swap函数执行会调用容器内数据类型的,拷贝构造和赋值函数调用对自定义类型使用STL algorithm中的swap函数,会调用自定义的类型的拷贝构造函数一次,赋值函数两次;自定义类型中没有定义那么就会使用默认的拷贝构造函数和赋值函数。 如果是容器,那么会遍历容易进行赋值。swap函数可用于清空vector和string类型容器分配的内存空间对于vector, string, basic_strin

2017-07-15 15:39:21 4826

原创 gperftools使用

近期尝试使用gperftools对C++内存泄露进行排查,所以对gperftools进行了一些了解。gperftools是google用来进行程序性能优化的工具集合,主要包括tcmalloc和profiler两个库。其可以提供如下的功能:tcmalloc:与glibc中的malloc函数相比,tcmalloc的内存分配效率要远高于malloc,可以提高高并发的性能 ,降低系统的负载cpu pro

2017-07-15 13:27:24 2610

原创 多继承与虚继承

多继承一般情况下,派生类都只有一个基类,称为单继承。除此之外,C++也支持多继承,即一个派生类可以有两个或多个基类。多继承的定义多继承的语法如下,假设已经声明了了类A、类B和类C,那么可以这样来声明派生类D:class D: public A, private B, protected C{ //类D新增加的成员}多继承的构造函数多继承形式下的构造函数和单继承形式基本相同,只是要在派生类的

2017-06-02 21:47:58 776

原创 命名空间

命名空间的作用命名空间是为了防止名字冲突提供更加可控的机制。命名空间分割了全局命名空间,其中每一个命名空间是一个作用域。命名空间的定义命名空间由三部分组成,分别是namespace、空间名字和一系列由花括号括起来的声明和定义。只要能出现在全局作用域中的声明都能置于命名空间中,例如:类、变量(及其初始化操作)、函数(及其定义)、模板和其他命名空间等。命名空间的定义既可以定义在全局变量的作用域内,也可以

2017-05-27 17:46:14 1745 1

原创 C++中间结果溢出

在C++中有可能因为数据的值超出了数据类型所表示的范围而造成错误地结果,下面来详细分析一下。有如下代码:short int a = 234;short int b = 456;short int c = 6;cout << a * b / c;//结果为17784如果short int占用2字节,int占用4字节。虽然short int为16位整数,但是由于该指令系统是32位,放在在32位的寄

2017-05-22 22:09:54 1552

转载 map/unordered_map原理和使用整理

结论新版的hash_map都是unordered_map了,这里只说unordered_map和map.运行效率方面:unordered_map最高,而map效率较低但 提供了稳定效率和有序的序列。占用内存方面:map内存占用略低,unordered_map内存占用略高,而且是线性成比例的。需要无序容器,快速查找删除,不担心略高的内存时用unordered_map;有序容器稳定查找删除效率,内存很在

2017-04-07 16:16:17 2508

转载 Python 编码为什么那么蛋疼?

据说,每个做 Python 开发的都被字符编码的问题搞晕过,最常见的错误就是 UnicodeEncodeError、UnicodeDecodeError,你好像知道怎么解决,遗憾的是,错误又出现在其它地方,问题总是重蹈覆辙,str 到 unicode 之间的转换用 decode 还是 encode 方法还特不好记,老是混淆,问题究竟出在哪里?为了弄清楚这个问题,我决定从 python 字符串的构成以

2017-03-31 10:00:10 667

转载 linux中ldconfig的使用介绍

ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享。ldconfig的主要用途默认搜寻/lilb和/usr/lib,以及配置文件/etc/ld.so.conf内所列的目录下的库文件。搜索出可共享的动态链接库,库文件的格式为:lib***.so.**,进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache,该文件保存已排好序的

2017-03-30 20:33:49 374

转载 七种寻址方式

立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。立即数可以是8位、16位或32位,该数值紧跟在操作码之后。如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。例如:MOV AH, 80H   ADD AX, 1234H   MOV ECX, 123456HMOV B1, 12H   MOV W1, 3456H   ADD

2017-03-25 22:16:44 3510

转载 Python垃圾回收机制

Garbage collection(GC)现在的高级语言如java,c#等,都采用了垃圾收集机制,而不再是c,c++里用户自己管理维护内存的方式。自己管理内存极其自由,可以任意申请内存,但如同一把双刃剑,为大量内存泄露,悬空指针等bug埋下隐患。对于一个字符串、列表、类甚至数值都是对象,且定位简单易用的语言,自然不会让用户去处理如何分配回收内存的问题。python里也同java一样采用了垃圾收集机

2017-03-22 11:27:28 280

转载 引用计数与垃圾收集之比较

本质上来说,引用计数策略和垃圾收集策略都属于资源的自动化管理。所谓自动化管理,就是在逻辑层不知道资源在什么时候被释放掉,而依赖底层库来维持资源的生命期。而手工管理,则是可以准确的知道资源的生命期,在准确的位置回收它。在 C++ 中,体现在析构函数中写明 delete 用到的资源,并由编译器自动生成的代码析构基类和成员变量。所以,为 C++ 写一个垃圾收集器,并不和手工管理资源冲突。自动化管理几乎在所

2017-03-22 10:40:24 432

原创 Linux下区分物理CPU、逻辑CPU和CPU核数

概念物理CPU实际Server中插槽上的CPU个数物理cpu数量,可以数不重复的 physical id 有几个逻辑CPULinux用户对 /proc/cpuinfo 这个文件肯定不陌生. 它是用来存储cpu硬件信息的信息内容分别列出了processor 0 – n 的规格。这里需要注意,如果你认为n就是真实的cpu数的话, 就大错特错了。 一般情况,我们认为一颗cpu可以有多核,加上inte

2017-03-18 10:56:29 564

原创 Makefile讲解

最近接触到很多C++项目,其中很多项目中含有大量的Makefile文件,但是由于环境的不同Makefile也带来了很多问题,所以决定以ice中的多个Makefile文件为例进行了介绍,ice中的文件结构如下:.├── BuildInstructions.md├── BuildInstructionsAIX.md├── BuildInstructionsLinux.md├── BuildIns

2017-01-21 19:04:02 334

原创 中介者模式

意图用中介者对象封装一系列对象的交互,从而降低其他对象的耦合度,提高其他对象的复合性结构图使用场景一组对象相互之间有复杂的通信方式一个对象与其他的很多对象进行关联并且直接进行相互之间的通信一个行为的实现需要其它多个类型的多个对象共同完成,但有不愿生成过多的子类优点减少子类生成,控制集体化。将对象之间的控制都集中在中介者对象中,只需派生中介者类就可以改变通信方式将除了中介者对象之外的对象都

2017-01-08 13:35:11 686

原创 C++中两个类互相包含

今天突然想起一个C++的问题,如果一个类A包含类B的实例,而实例B也包含另一个类A,这种方式的代码应该怎么写,按照一般的开发者的想法的代码如下:文件A.h#include "B.h"#include <iostream>using namespace std;class A{public: int i; B b;}文件B.h#include "A.h"#include <i

2017-01-08 12:52:50 9041 1

原创 LD_LIBRARY_PATH的使用

最近在公司的服务器上编译c++代码,由于是B/S结构的程序,所以需要将程序移植到另一台机器上,但是,当把程序scp到另一台机器上时,不能运行程序,出现了类似下面的提示:error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

2016-12-31 23:18:30 1362

原创 智能指针

一直都知道智能指针是依靠引用计数的原理实现的,但是,自己一直都没有尝试自己实现一个简单的指针指针,最近尝试自己写了一个智能指针的类,进行了简单的测试,不知道会不会有bug,代码如下:SmartPointer.h#include <iostream>template <typename T>class SmartPointer{ public: //构造函数 SmartPoi

2016-12-26 08:33:07 375

原创 根据value值对map进行排序

今天在做笔试题的时候发现需要根据value值对map进行排序,通过查资料发现其基本思路是通过讲map中的键值对转化存储到vector中进行排序得到的。 代码如下:#include<iostream>#include<vector>#include<map>#include<string>#include<algorithm>using namespace std;int cmpValue(

2016-12-19 09:33:36 1162

原创 mesos中{}的巧妙使用

昨天在看mesos 0.10版本的代码时,看到如下的一段代码,对其中的一对{} 表示好奇。 { flags::Flags<logging::Flags, master::Flags> flags; flags.load(configuration.getMap()); master = new Master(_allocator, flags); }这段代码存在一个函数

2016-12-10 18:09:29 662

原创 Longest Palindromic Substring

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.Example:Input: "babad"Output: "bab"Note: "aba" is also a valid answer.Example:Input

2016-12-04 12:52:44 307

转载 do{...}while(0)在宏定义中的作用

如果你是一名C程序员,你肯定很熟悉宏,它们非常强大,如果正确使用可以让你的工作事半功倍。然而,如果你在定义宏时很随意没有认真检查,那么它们可能使你发狂,浪费N多时间。在很多的C程序中,你可能会看到许多看起来不是那么直接的较特殊的宏定义。下面就是一个例子:#define __set_task_state(tsk, state_value) \ do { (tsk)->state =

2016-11-27 15:30:41 453

转载 strcpy和memcpy的区别

strcpy和memcpy都是标准C库函数,它们有下面的特点:strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。 函数原型:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。 函数原型:void *me

2016-11-26 16:59:00 255

翻译 过载

产生背景为了应对峰值负荷以及一些想象不到的负载峰值,高优先级的面向用户的服务会置备在大型集群上。因此,大多数时间,资源没有得到充分的利用。过载会激发暂时没有使用的资源来最大限度的执行任务,比如背景分析,视频/图像处理,芯片仿真,以及其他低优先级的工作,当资源被征用,这些任务可以被随时撤销。尝试在可撤销的资源上启动 tasks/executors,当资源被节流或抢占,Mesos 可以随时撤销任务。工作

2016-11-09 11:45:04 506

原创 C++11之lambda函数

最近一直在看mesos的源代码,mesos中用到了很多C++11的新特性,lambda函数就是其中的一个。对于lambda函数简单的来说就是java中的匿名函数。语法定义[capture] (paramenters) mutable->return-type {statement}[capture] 捕捉列表:捕捉上下文中的变量供函数使用(paramenters) 参数列表:跟普通参数列表相同,

2016-11-07 21:14:41 662 1

空空如也

空空如也

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

TA关注的人

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