08 2019 档案

摘要:Linux进程间的通讯 Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限 阅读全文
posted @ 2019-08-31 23:48 WindSun 阅读(2280) 评论(1) 推荐(1)
摘要:经典的约瑟夫斯 问题描述: 有n个人围成一圈,从1开始顺序排号。从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号? 数组循环模拟法 数学推理法 无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高,当n,m非常大 阅读全文
posted @ 2019-08-31 23:01 WindSun 阅读(2663) 评论(0) 推荐(0)
摘要:前言 几种进程间的通信方式:管道,FIFO,消息队列,他们的共同特点就是通过内核来进行通信(假设POSIX消息队列也是在内核中实现的,因为POSIX标准并没有限定它的实现方式)。向管道,FIFO,消息队列写入数据需要把数据从进程复制到内核,从这些IPC读取数据的时候又需要把数据从内核复制到进程。所以 阅读全文
posted @ 2019-08-31 14:53 WindSun 阅读(617) 评论(0) 推荐(0)
摘要:POSIX消息队列概述 消息队列是Linux IPC中很常用的一种通信方式,它通常用来在不同进程间发送特定格式的消息数据。 消息队列和管道和FIFO有很大的区别,主要有以下两点: 一个进程向消息队列写入消息之前,并不需要某个进程在该队列上等待该消息的到达,而管道和FIFO是相反的,进程向其中写消息时 阅读全文
posted @ 2019-08-31 11:57 WindSun 阅读(1159) 评论(0) 推荐(0)
摘要:基本理解 extern放在变量或者函数之前,表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 extern有两个作用 1.当它与"C"一起连用时,如: extern "C" void fun(int a, int b);告诉编译器在编译fun这个函数名时按着C 阅读全文
posted @ 2019-08-30 12:58 WindSun 阅读(22026) 评论(0) 推荐(4)
摘要:全局静态变量 全局变量前加上关键字static,全局变量就定义成一个全局静态变量.,全局静态变量存储在静态存储区,在整个程序运行期间一直存在。全局静态变量在程序运行之前就存在。 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化)。 作用域:全局静态变量在声 阅读全文
posted @ 2019-08-30 12:57 WindSun 阅读(1868) 评论(0) 推荐(0)
摘要:const关键字 被const修饰的变量是不能改变的 const修饰变量时,必须在声明变量的同时给出初始化(类中的const成员变量不一样) 顶层const与底层const 顶层const 定义为变量本身是一个常量,因此对一切的内置类型常量而言,所有的const都是顶层const 对指针来说,常量指 阅读全文
posted @ 2019-08-30 12:57 WindSun 阅读(779) 评论(0) 推荐(0)
摘要:static\_cast 相当于C语言中的强制转换:(类型)表达式或类型(表达式),用于各种隐式转换 非const转const、void\ 转指针、int和char相互转换 用于基类和子类之间的 指针和引用 转换,非指针直接报错 向上转化是安全的,如果向下转能(指针或引用)成功但是不安全,结果未知; 阅读全文
posted @ 2019-08-30 12:55 WindSun 阅读(1448) 评论(0) 推荐(0)
摘要:const与 define的区别 编译器处理方式不同 define宏是在预处理阶段展开。 补充:预处理器根据以 开头的命令,修改原始的程序。比如我们常见的 include 命令告诉处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中。咱们的 define也是,仅仅是单纯的文本替换。 c 阅读全文
posted @ 2019-08-30 12:55 WindSun 阅读(1315) 评论(1) 推荐(0)
摘要:1.变量 首先最重要的,variable的定义,当你申明一个变量的时候,计算机会将指定的一块内存空间和变量名进行绑定;这个定义很简单,但其实很抽象,例如:int x = 5; 这是一句最简单的变量赋值语句了, 将5赋值于名字叫做x的内存空间,其本质是将值5赋值到一块内存空间,而这个内存空间名叫做x。 阅读全文
posted @ 2019-08-30 12:54 WindSun 阅读(9822) 评论(0) 推荐(4)
摘要:为什么析构函数要声明成virtual呢? 因为,如果delete一个基类的指针时, 如果它指向的是一个子类的对象,那么析构函数不为虚就会导致无法调用子类析构函数,从而导致资源泄露。 如果一个类要被使用成 多态 的,那么这个 virtual是必须 的。比如: delete pa 实际上相当于: 释放p 阅读全文
posted @ 2019-08-30 12:51 WindSun 阅读(1328) 评论(0) 推荐(0)
摘要:以String类为例实现其成员函数 阅读全文
posted @ 2019-08-30 12:41 WindSun 阅读(354) 评论(0) 推荐(0)
摘要:代码中的family_##who表示以family_为前缀,将who为后缀与前缀连接,合成一个名字 参数前面的#使用来取参数的实值,ADD(1,200)运行结果为201 阅读全文
posted @ 2019-08-24 16:38 WindSun 阅读(2011) 评论(0) 推荐(0)
摘要:TCP的状态转换图 手写的状态转换图 一、服务端状态变迁:​ 服务端创建套接字之后调用listen函数将套接字有一个未连接的主动套接字转换为被动套接字,指示内核应接受指向该套接字的连接请求,套接字状态由CLOSE转换为LISTEN,等待客户端连接。所以服务端是被动接收连接的,服务端会先收到SYN,收 阅读全文
posted @ 2019-08-24 15:26 WindSun 阅读(1175) 评论(0) 推荐(0)
摘要:【原文:https://cloud.tencent.com/developer/article/1155143】 AVL树简介 AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Bi 阅读全文
posted @ 2019-08-19 21:00 WindSun 阅读(7832) 评论(0) 推荐(3)
摘要:算法总结 详细十大排序算法:https://www.cnblogs.com/WindSun/category/1375215.html 图片名词解释: n: 数据规模 k: “桶”的个数 In-place: 占用常数内存,不占用额外内存 Out-place: 占用额外内存 算法的分类 比较和非比较的 阅读全文
posted @ 2019-08-15 22:57 WindSun 阅读(810) 评论(1) 推荐(0)
摘要:前言 桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后依次把各个桶中的记录列出来记得到有序序列。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分 阅读全文
posted @ 2019-08-15 22:43 WindSun 阅读(3360) 评论(0) 推荐(0)
摘要:基本思想 计数排序是一种线性排序算法,它利用了一个数组,因为数组下标的增长是线性的,所以它就把自己的元素转换成新开辟数组的下标。可是下标都是非负数啊?数组当中的值有正有负啊。做一个简单的转化就行了:找到数组中最小元素,用元素值减去,这样一来,所有元素对应的下标就求出来了。(实际上感觉像是个映射函数? 阅读全文
posted @ 2019-08-15 22:31 WindSun 阅读(574) 评论(0) 推荐(0)
摘要:基本思想 基数排序是借助“分配”和“收集”两种操作对单逻辑关键字进行排序的一种内部排序方法。 数组下标从0-9,每个数组元素是一个链表 比如对一些三位数以内的树排序,先将个位的数值插入对应的下标的链表中,然后再放回原数组,放回的顺序和插入的顺序一致,将链表清空,再将十位的数字插入对应的下标的链表中, 阅读全文
posted @ 2019-08-15 22:15 WindSun 阅读(766) 评论(0) 推荐(0)
摘要:基本思路 归并排序的基本思想是:首先将a[0..n-1]看成是n个长度为1的有序表,将相邻的k(k≥2)个有序子表成对归并,得到n/k个长度为k的有序子表;然后再将这些有序子表继续归并,得到n/k2个长度为k2的有序子表,如此反复进行下去,最后得到一个长度为n的有序表。 若k=2,即归并在相邻的两个 阅读全文
posted @ 2019-08-15 22:00 WindSun 阅读(704) 评论(0) 推荐(0)
摘要:基本思路 先默认未排序区首个元素为最小,然后从后面的元素中挑出最小的元素,与这个元素交换,直至循环完成。 算法代码 算法分析 从i个记录中挑选最小记录需要比较i-1次。 第i(i=0~n-2)趟从n-i记录中挑选最小记录需要比较n-i-1。 对 n 个记录进行简单选择排序,所需进行的关键字的比较次数 阅读全文
posted @ 2019-08-15 21:39 WindSun 阅读(313) 评论(0) 推荐(0)
摘要:基本思想 每趟使表的第1个元素放入适当位置(归位),并且左边的元素小于这个元素,右面的元素大于这个元素,将表一分为二,对子表按递归方式继续这种划分,直至划分的子表长为0或1(递归出口)。 快速排序递归树 算法代码 算法分析 最好情况: 此时时间复杂度为O(nlog2n),空间复杂度为O(log2n) 阅读全文
posted @ 2019-08-15 21:32 WindSun 阅读(314) 评论(0) 推荐(0)
摘要:基本思路 希尔排序也是一种插入排序,又称缩小增量排序,在效率上教其他插入排序有较大的改进。 ① d=n/2 ②将排序序列分为d个组,在各组内进行直接插入排序 ③递减d=d/2,重复② ,直到d=1 算法最后一趟对所有数据进行了直接插入排序,所以结果一定是正确的。 它的基本思想是:先将整个待排记录序列 阅读全文
posted @ 2019-08-15 21:20 WindSun 阅读(742) 评论(0) 推荐(0)
摘要:直接插入排序 基本思路 一趟直接插入排序:在有序区中插入R[i]的过程。 算法代码 算法分析 折半插入排序 基本思路 直接插入排序,当有序区元素太多时,在有序区中寻找插入位置可能比较的次数太多,采用折半插入法,即折半查找到要插入的位置,加快了查找效率,但是要移动的元素仍然和直接插入排序的相同,仅仅提 阅读全文
posted @ 2019-08-15 20:58 WindSun 阅读(278) 评论(0) 推荐(0)
摘要:【原文: https://www.cnblogs.com/fortunely/p/10254161.html】 1.基本概念 堆,分为大顶堆(大堆)和小顶堆(小堆),是顺序存储的完全二叉树,并且满足以下特性之一: (1) 任意非终端结点关键字不小于左右子结点(大堆) ki >= k2i+1并且ki> 阅读全文
posted @ 2019-08-14 23:46 WindSun 阅读(372) 评论(0) 推荐(0)
摘要:简介 Tinyhttp是一个轻量型Http Server,使用C语言开发,全部代码只500多行,还包括一个简单Client。 Tinyhttp程序的逻辑为:一个无线循环,一个请求,创建一个线程,之后线程函数处理每个请求,然后解析HTTP请求,做一些判断,之后判断文件是否可执行,不可执行,打开文件,输 阅读全文
posted @ 2019-08-13 00:45 WindSun 阅读(1241) 评论(0) 推荐(0)
摘要:在Linux下编译C++11 #include int main() { auto a=10; cout(); vector iv; auto ite = iv.begin(); auto p = new foo() // 对自定义类型进行类型推导 auto不光有以上的应用,它在模板中也是大显身手,比如下例这个加工产品的例子中,如果不使用auto就必须声明Product这一模... 阅读全文
posted @ 2019-08-11 20:46 WindSun 阅读(779) 评论(0) 推荐(0)
摘要:继承 继承的一般形式 子类继承父类,是全盘继承,将父类所有的东西都继承给子类,除了父类的生死,就是父类的构造和析构是不能继承的。 继承的访问权限从两方面看: 1.对象:对象只能直接访问类中公有方法和成员。 2.继承的子类 私有继承就终止了父类再往下继承的能力 c++默认继承为私有继承 像以下程序 class D :public B1 ,public B2,public B3 公有继承B1,B2... 阅读全文
posted @ 2019-08-11 17:52 WindSun 阅读(1770) 评论(0) 推荐(0)
摘要:前言 如果向要在一个文件中使用另一个文件中的变量,不能在头文件中定义全局变量,因为被多个文件包含后会导致编译出错,并且静态的static变量,只能在本文件内使用,这时候就可以使用extern关键字。 extern 关键字: 首先还是先看一下 extern 关键字的作用:extern关键字可以置于变量 阅读全文
posted @ 2019-08-11 10:43 WindSun 阅读(2240) 评论(0) 推荐(0)
摘要:前言 说到服务器,一定会想到apache的httpd和Nginx Apache的发展时期很长,而且是毫无争议的世界第一大服务器。它有着很多优点:稳定、开源、跨平台等等。它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。所以它被设计为一个重量级的。它不支持高并发的服务器。在Apache上运行 阅读全文
posted @ 2019-08-09 23:55 WindSun 阅读(240) 评论(0) 推荐(0)
摘要:内存模型图 32位CPU可寻址4G线性空间,每个进程都有各自独立的4G逻辑地址,其中0~3G是用户态空间,3~4G是内核空间,不同进程相同的逻辑地址会映射到不同的物理地址中。其逻辑地址其划分如下: 各个段说明如下: 3G用户空间和1G内核空间 静态区域: text segment(代码段):包括只读 阅读全文
posted @ 2019-08-09 17:58 WindSun 阅读(6722) 评论(0) 推荐(2)
摘要:解决办法:项目名称-右键属性-C/C++ - 预处理器 -预处理器定义 - 右侧下拉框中选择“编辑”- 在第一个编辑框中添加_CRT_SECURE_NO_WARNINGS 阅读全文
posted @ 2019-08-09 14:55 WindSun 阅读(1816) 评论(0) 推荐(0)
摘要:更换之前确保自己安装wget yum list wget若没有安装: yum -y install wget 首先备份原版/etc/yum.repos.d/CentOS-Base.repo cd /etc/yum.repos.d sudo mv CentOS-Base.repo CentOS-Base.repo.bak 下载阿里的yum源配置文件,放入/etc/yum.repos.d/CentO... 阅读全文
posted @ 2019-08-09 10:58 WindSun 阅读(15678) 评论(2) 推荐(3)
摘要:类的基本成员函数 一个类包含:构造、析构、拷贝构造、赋值构造、常对象取地址、普通对象取地址基本函数 类中的const方法与普通方法 void fun() const和void fun()是可以共存的 如果不加const 加了const 1.因为函数后加了const就封锁了*this 为常量,就不能通 阅读全文
posted @ 2019-08-08 23:14 WindSun 阅读(750) 评论(0) 推荐(0)
摘要:1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。 例如,调... 阅读全文
posted @ 2019-08-08 19:06 WindSun 阅读(11401) 评论(0) 推荐(2)
摘要:&& 和 || 和 !属于逻辑运算符号 & 和 | 和 ^ 属于位操作符 一、&&和&的区别 1.1 相同点: &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。 1.2不同点 阅读全文
posted @ 2019-08-08 16:23 WindSun 阅读(4133) 评论(1) 推荐(1)
摘要:今天遇到一个问题 题目描述: 实现函数 unsigned int ipanel_parse_ip_addr(const char*ip) 功能:解析IPv4地址 测试用例: unsigned int ip addr=ipanel_parse_ip_addr("192.168.10.1"); printf("%x\n",ip_addr); 要求输出:c0a80a01不允许使用字符串相关库函数 请在程... 阅读全文
posted @ 2019-08-08 10:36 WindSun 阅读(631) 评论(0) 推荐(0)
摘要:1、定义 C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为: int main (int argc,char *argv[]){…} int main (... 阅读全文
posted @ 2019-08-03 00:38 WindSun 阅读(17774) 评论(0) 推荐(1)
摘要:TinyXML介绍 最近做一个负载均衡的小项目,需要解析xml配置文件,用到了TinyXML,感觉使用起来很容易,给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完成。 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历... 阅读全文
posted @ 2019-08-02 22:24 WindSun 阅读(9677) 评论(0) 推荐(1)
摘要:概述 Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库。linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib。 静态函数库: 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进可... 阅读全文
posted @ 2019-08-02 12:38 WindSun 阅读(4561) 评论(0) 推荐(0)
摘要:堆和栈的区别: 栈的特征 执行的速度相对较快; 空间较小; 生存期由系统决定; 作用域较小; 有名空间,可以通过变量名或者数据名访问; 堆的特征 执行的速度相对较慢; 空间较大; 生存期由“自己”决定,malloc申请,free释放; 作用域很大(整个程序都可以访问); 无名空间,只能通过指针使用; C语言空间的申请 malloc 功能: 分配 size 字节的未初始化内存。若分配成功,则返回指向... 阅读全文
posted @ 2019-08-02 01:19 WindSun 阅读(463) 评论(0) 推荐(0)
摘要:柔性数组的概念 柔性数组(flexible array member)也叫伸缩性数组成员,这种结构产生与对动态结构体的去求。在日常编程中,有时需要在结构体中存放一个长度是动态的字符串(也可能是其他数据类型),一般的做法,实在结构体中定义一个指针成员,这个指针成员指向该字符串所在的动态内存空间。 在通 阅读全文
posted @ 2019-08-01 23:44 WindSun 阅读(6614) 评论(0) 推荐(4)
摘要:大小端的由来 当数据类型为int,在32bit的系统中,它需要占用4个字节(32bit),这个时候就会产生这4个字节在寄存器中的存放顺序的问题。比如int x = 0x12345678。具体的该怎么存放呢?这个时候就需要理解计算机的大小端的原理了。 图解大小端 大小端主要看低地址存放的是高字节还是低字节 低地址中存储的是高字节位,为大端模式 低地址中存放的是低字节位,为小端模式 大小端存储说明 ... 阅读全文
posted @ 2019-08-01 17:32 WindSun 阅读(1391) 评论(0) 推荐(0)
摘要:位域的概念 1个字节包含8位,有些变量保存的数据不需要占用这么长的空间(比如bool类型,只有两个状态true和false, 1位就可以搞定,剩下的7位就浪费了),这就催生了“位域”结构,位域将1个字节划分成不同的区域,每个区域都有个位域名,程序员可以代码通过位域名访问其中的数据。 位域的声明 位域 阅读全文
posted @ 2019-08-01 17:10 WindSun 阅读(1382) 评论(0) 推荐(0)
摘要:字节对齐原因: 1)平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常2)硬件原因:经过内存对齐之后,CPU的内存访问速度大大提升,帮助cpu寻址。 【注意】(对齐位数跟处理器位数和编译器都有关)VS, VC等编译器默认是#pragma pack(8),所以测试我们的规则会正常;注意gcc默认是#pragma p... 阅读全文
posted @ 2019-08-01 16:28 WindSun 阅读(2642) 评论(0) 推荐(0)
摘要:指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。所有指针在32位上都是4个字节,在64位系统是8个字节。 为什么要用指针 1)指针的使用 阅读全文
posted @ 2019-08-01 00:54 WindSun 阅读(310) 评论(0) 推荐(0)

博客已停更,文章已转移,点击访问