摘要:从网卡如何接收数据说起 CPU 如何知道接受了数据? 进程阻塞为什么不占用 CPU 资源? 工作队列 等待队列 唤醒进程 内核接收网络数据全过程 同时监视多个 socket 的方法 select 的监听流程 select 的唤醒流程 select 的缺点 epoll 的设计思路 epoll 的原理和
阅读全文
摘要:摘要 在学习 Redis 的过程中,发现 Redis 底层是复用了现成的 I/O多路复用模型(evport, epoll, kqueue, select),本篇博客就总结一下 Linux 内核中提供的三种模型。 select fd_set select()函数主要是建立在fd_set类型的基础上的。
阅读全文
摘要:摘要:偶尔看到面试题会问到 malloc 的底层原理,今天就来记录一下,毕竟学习要“知其所以然”,这样才会胸有成竹。 注:下面分析均是基于 linux 环境下的 malloc 实现。步骤是:先总结结论,再逐步展开 结论 1)当开辟的空间小于 128K 时,调用 brk()函数,malloc 的底层实
阅读全文
摘要:摘要:最近看了一道面试题问:C++ 中拷贝赋值函数的形参能否进行值传递?我知道一般来说,拷贝构造函数的形参必须是自身类型的引用(《面向对象程序设计--C++语言描述(第二版)》这本书中有叙述),但是拷贝赋值函数的形参通常也是自身类型的引用,那么我们到底能不能将它们的形参改为值传递呢? 1,拷贝构造函
阅读全文
摘要:摘要:类成员变量是可以定义为引用类型的,但是我们需要注意一下用法 note1:在类中定义引用变量, 必须要在初始化列表中初始化该成员变量(const 类型数据成员也必须在初始化列表中进行初始化) note2:初始化后的引用变量所占用的内存空间和普通变量相同
阅读全文
摘要:摘要:我们知道 C++ 的全局对象的构造函数会在 main 函数之前先运行,其实在 c 语言里面很早就有啦,在 gcc 中可以使用 __attribute__ 关键字指定如下(在编译器编译的时候就绝决定了) 在 C 语言中 用 __attribute__ 关键字 在 C++ 中用全局对象构造函数
阅读全文
摘要:++i 和 i++ ++i 和 i++ 的区别 1)i++ 返回的是 i 的值,++i 返回的是 i+1 的值 2)i++ 不能用作左值,++i 可以用作左值 左值和右值的区别是什么? 根本区别是:能否允许用取地址符号 & 来获取相应的内存地址 ++i 和 i++ 的实现
阅读全文
摘要:摘要:C++11 中新增加了智能指针来预防内存泄漏的问题,在 share_ptr 中主要是通过“引用计数机制”来实现的。我们今天也来自己实现一个简单的智能指针: 1 // smartPointer.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5
阅读全文
摘要:理由:一直忘记数字型的字符串和数字之间的转换,这次总结一下,以便后面再次用到。 其实 C++ 已经给我们写好了相应的函数,直接拿来用即可 QA1:如何把一个数字转换为一个数字字符串?(这个不是很常用) 函数:to_string(C++11) 函数原型:string to_string(int val
阅读全文
摘要:理由:由于 C++ 标准库里面没有字符分割函数 split ,这可太不方便了,我们利用 STL 来实现自己的 split 函数: 原型:vector<string> split(const string& s, const string& seperator);
阅读全文
摘要:1,一个类模板至少具有一个类参数,类参数是个符号以表示将要被某个确定数据类型代替的类型。 1 #include<iostream> 2 #include<string> 3 4 using namespace std; 5 6 template <class T> 7 class Array { 8
阅读全文
摘要:1,多态是一种运行期绑定机制,通过这种机制,实现将函数名绑定到函数具体实现代码的目的。一个函数的名称与其入口地址是紧密相连的,入口地址是该函数在内存中的起始地址。如果对一个函数的绑定发生在运行时刻而非编译时刻,我们就称该函数是多态的。 2,C++多态的三个前提条件:(a)必须存在一个继承体系结构;(
阅读全文
摘要:1,派生类继承了基类的所有成员函数和数据成员(构造函数、析构函数和操作符重载函数外)。 2,当不指明继承方式时,默认为私有继承。 3,基类的私有成员仅在基类中可见,在派生类中是不可见的。基类的私有成员可以由派生类继承,但在派生类中不可见。尽管在派生类中不能直接访问基类的私有成员,但可以通过间接的方式
阅读全文
摘要:1,strtod: 函数原型: 1 #include <cstdlib> 2 double strtod(const char *nptr, char **endptr); 名称含义: strtod(将字符串转换成浮点数) 相关函数: strtof(float),strtol(long int),s
阅读全文
摘要:1, class 和 struct 都可以定义一个类,区别是两者在所支持的 默认信息隐藏方式不同:c++ 中默认为 private 类型,而 struct 中默认为 public 类型。 2,类的私有成员具有 类范围 性质,仅能由类的成员函数访问。 3,类成员函数的定义有两种方式:(a)在类声明的时
阅读全文
摘要:1, isalnum(): check whether c is either a decimal digit or an uppercase or lowercase letter. 2, isalpha 3, isblank(c++11) 4, iscntrl : check whether c
阅读全文
摘要:Iterators begin: end: rbegin: rend: cbegin: cend: crbegin: crend: Capacity size: length: max_size: resize: capacity: 返回实际分配的存储空间的大小,一般大于等于 size 。这样能优化
阅读全文
摘要:bitset: A bitset stores bits。大小通过参数传递,在编译时确定。可变的可参考 vector<bool>。 constructor default: integer value: 传入 unsigned long long val。 string: C_string: 1 /
阅读全文
摘要:unordered_map: 和 unorder_set 相似,该容器内部同样根据 hash value 把键值对存放到相应的 bucket(slot)中,根据单个 key 来访问 value 的速度很快。 unordered_multimap: 操作和 unorder_map 相同,不同点是 ke
阅读全文
摘要:map: 默认根据 key 排序(从小到大),能够通过 backet operator(operator [ ]) 来获取元素,内部由二叉搜索树来实现(binary search trees)。 multimap: 操作和 map 相同,不同点只是 key 可以相同。 Iterators begin
阅读全文