后端开发
qican_7
这个作者很懒,什么都没留下…
展开
-
随机数
C++ rand 与 srand 的用法计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。)我们知道 rand() 函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一...原创 2019-10-21 12:02:35 · 642 阅读 · 0 评论 -
优先队列
目录一、相关定义二、priority_queue3、结构体声明方式:4. 简单例子5. 当元素为指针时的使用参考优先队列采用堆的结构进行存储,默认是大顶堆。一、相关定义优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给...原创 2019-10-15 16:52:20 · 231 阅读 · 0 评论 -
缓存算法(页面置换算法)-FIFO、LFU、LRU
1. FIFO -- 先进先出如果一个数据最先进入缓存中,则应该最早淘汰掉。也就是说,当缓存满的时候,应当把最先进入缓存的数据给淘汰掉。实现:利用一个双向链表保存数据,当来了新的数据之后便添加到链表末尾,如果Cache存满数据,则把链表头部数据删除,然后把新的数据添加到链表末尾。在访问数据的时候,如果在Cache中存在该数据的话,则返回对应的value值;否则返回-1。如果想提高访问效...原创 2019-10-13 11:11:34 · 287 阅读 · 0 评论 -
多用组合,少用继承
组合更加灵活,有时候子类只需要父类的一部分功能,如果用继承的话,可能会复写很多的方法,也可能会继承到很多并不需要的属性或者行为方法。组合的优点:把需要的东西组合在一个类中,这个类并不需要继承任何父类,也可以提供想要的行为方法。另一方面,继承的子类,实际上需要在编译器确定下来,这满足不了需要在运行内才能确定对象的情况。参考:[1]http://www.360doc.com/cont...原创 2019-09-21 11:24:29 · 149 阅读 · 0 评论 -
内存管理之伙伴算法
算法作用 它要解决的问题是频繁地请求和释放不同大小的一组连续页框,必然导致在已分配页框的块内分散了许多小块的空闲页面,由此带来的问题是,即使有足够的空闲页框可以满足请求,但要分配一个大块的连续页框可能无法满足请求。 伙伴算法(Buddy system)把所有的空闲页框分为11个块链表,每块链表中分布包含特定的连续页框地址空间,比如第0个块链表包含大小为2^0个连续的页框,第...原创 2019-09-16 19:29:52 · 829 阅读 · 0 评论 -
STL内存分配
C/C++中内存分配与STL中的空间配置C语言中的内存分配C语言中主要有三个函数进行内存分配,分别是malloc,realloc,calloc,释放内存的函数是free,头文件是<cstdlib>1.malloc函数原型:void *malloc(unsigned int num_bytes);。分配的是以字节计算的结果,返回的指针类型是void*。注意:不会进...原创 2019-09-16 19:25:51 · 134 阅读 · 0 评论 -
PV操作
三态模型进程通常分为就绪、运行和阻塞三种工作状态。三种状态在某些条件下可以转换,具体转换关系如下:进程三个状态之间的转换是通过PV操作和信号量来控制的,其中信号量起到了很重要的作用。信号量信号量是最早出现的用来解决进程同步与互斥问题的机制。信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程,信号量的值表示相应资源的使用情况。信号...原创 2019-09-16 16:30:05 · 16392 阅读 · 3 评论 -
进程间通信
IPC的方式通常有:管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket。一. 无名管道特点1)半双工(数据只能在一个方向上流动),具有固定的读端和写端。2)它只能用于具有亲缘关系的进程间的通信(也是父子进程或者兄弟进程之间)3)它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write函数。但是它不是普通的函数,并不属于其他任何文件系统...原创 2019-09-16 16:08:54 · 107 阅读 · 0 评论 -
线程同步机制
线程同步的四种机制临界区 互斥量 事件 信号量主要区别在于:适用范围:临界区在用户模式下,不会发生用户态到内核态的切换,只能用于同进程内线程间同步。其他会导致用户态到内核态的切换,利用内核对象实现,可用于不同进程间的线程同步。性能:临界区性能较好,一般只需要数个CPU周期。其他机制性能相对较差,一般需要数十个CPU周期;临界区不支持等待时间,为了获得临界资源,需要不断轮询(死循...原创 2019-09-16 14:47:12 · 243 阅读 · 0 评论 -
线程和协程的区别
协程属于线程,即一个线程下面可以开辟多个协程。协程是用户态的轻量级线程。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。当多个协程切换时,由于其同属于一个线程,所以可以看作是同步执行的,不存在同时共享资源的情况,可以不加锁的访问全局变量,切换上下文非常快。极高的执行效率:因为子程序切换不是线程切换,而...原创 2019-09-16 13:02:50 · 227 阅读 · 0 评论 -
C++中private、protected、public区别
第一: private,public,protected的访问范围:private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问注:友元函数包括两种:设为友元的全局函数,...原创 2019-09-21 14:34:39 · 184 阅读 · 0 评论 -
函数重载、重写和覆盖
函数重载:同一个类中的同名函数,参数的类型或个数不同(返回值不同不算)函数重写(覆盖):子类继承父类,重写父类的函数,即多态,通过虚函数实现。函数重定义(隐藏):子类中与父类函数同名,不要求函数返回值和函数参数类型相同。参考:[1]https://www.cnblogs.com/qbin/p/10829005.html...原创 2019-09-21 20:39:40 · 235 阅读 · 0 评论 -
类模板
类模板就是为类声明一种模板,使得类中的某些数据成员,或某些成员函数的参数,又或者是某些成员函数的返回值可以取任意的数据类型,包括基本数据类型和自定义数据类型。类模板的声明形式如下:template <模板参数表> 类声明 我们看到,在类的声明之前要加上一个模板参数表,模板参数表里的类型名用来说明成员数据和成员函数的类型,等会可以看下...原创 2019-09-21 21:00:17 · 173 阅读 · 0 评论 -
抽象类和纯虚函数
抽象类的定义就是,含有纯虚函数的类。纯虚函数跟一般的虚函数有很大不同。我们下面来了解下纯虚函数。一.纯虚函数 即使有的虚函数在基类中不需要做任何工作,我们也要写出一个空的函数体,这时这个函数体没有什么意义,重要的是此虚函数的原型声明。C++为我们提供了纯虚函数,让我们在这种情况下不用写函数实现,只给出函数原型作为整个类族的统一接口就可以了,函数的实现可以在派生类中给出。...原创 2019-09-21 21:43:40 · 1795 阅读 · 0 评论 -
友元函数
友元是一种破坏类的封装性获取类的隐藏数据的方式。 如果有以下程序: class A { public: int Getx() { return x; } private: int x; }; cl...原创 2019-09-21 21:47:47 · 312 阅读 · 0 评论 -
UML
我们在进行软件开发的时候,如果只靠脑子想,只有一个看不见的软件规划、软件架构,可能写程序时会影响你的思路的清晰,或者中间间断了以后会忘记当初的规划而要重新回忆或重新规划。如果我们可以把程序设计用图形表达出来,就会让我们的思路很清晰,也很容易进行合理的优化,我们和其他的软件开发人员或者用户就能够进行更好的沟通。面向对象设计图应运而生,它能清楚的描述以下几个问题: 1...原创 2019-09-21 21:55:27 · 158 阅读 · 0 评论 -
vector 降序(默认升序)
struct greater{ template <typename T> bool operator() (const T &a, const T &b) {return a > b;}};sort(str_vec.begin(), str_vec.end(), greater()); //使用示例参考:[1]ht...原创 2019-09-22 21:10:48 · 4482 阅读 · 0 评论 -
C++ String 实现
String {public: String(const char* str); String(const String& str); String& operator=(const String& str); ~String();private: char* m_data;};String::String(const char* str) { i...原创 2019-09-22 21:25:21 · 125 阅读 · 0 评论 -
strcopy 实现
strcopy(char* dest, const char* source){ if (dest == NULL || source == NULL) { return NULL; } char* ret = dest; while((*dest++ = *source++) != '\0'); return ret;}参考:...原创 2019-09-22 21:52:33 · 940 阅读 · 0 评论 -
C++中的类型转换
目录1. 隐式转换2. 显示转换3. static_cast(静态转换)4. dynamic_cast(动态转换)5. const_cast6. reinterpret_cast1. 隐式转换1)提升精度,宽化转换:(如char到int,int到long long,int到float,float到double,int到double等)构成隐式转换,编译器允许直...原创 2019-09-26 18:07:41 · 480 阅读 · 0 评论 -
fork()、vfork()、clone()的区别
因为生活的复杂,这是一个并行的世界,在同一时刻,会发生很多奇妙的事情,北方下雪,南方下雨,这里在吃饭,那边在睡觉,有人在学习,有人在运动,所以这时一个多彩多姿的世界,每天都发生着很多事情,所以要想很好的表现这个世界,协调完成一件事儿,就得用到多进程或者多线程。所以进程是程序猿一定会接触到的一个东西,他能使我们的程序效率提高,高效的完成多任务,并行执行。下面主要看看产生进程或线程的三个函数。...原创 2019-09-15 20:24:51 · 241 阅读 · 0 评论 -
MD5详解
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。1、MD5算法简介MD5在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。MD5将任意长度的“字节串”变换成一个128...原创 2019-09-12 14:50:49 · 7551 阅读 · 0 评论 -
加密算法及MD5详解
加密算法和协议对称加密简介:加密和解密使用同一个密钥常见的算法:- DES:Data Encryption Standard;- 3DES:Triple DES;- AES:Advanced Encryption Standard; (128bits, 192bits, 256bits, 384bits)- Blowfish- Twofish- IDEA- ...原创 2019-09-12 14:47:06 · 528 阅读 · 0 评论 -
C++中map的使用
目录1. 简单的map2. hash_map、unorder_map3. (通过key找value)和(通过value找key)1. 简单的maphttps://www.cnblogs.com/omelet/p/6617362.htmlhttps://blog.csdn.net/wangjingqi930330/article/details/81938998 ...原创 2019-08-03 15:49:00 · 1071 阅读 · 0 评论 -
数据库并发控制-锁和MVCC
1. 事务的并发数据库中事务的串行执行容易形成性能瓶颈,而并发则可以解决一定的性能问题,但是它会带来一些诡异的错误。引入了并发事务后,如果不对事务的执行进行控制就会出现各种各样的问题,你可能没有享受到并发带来的性能提升就已经被各种奇怪的问题折磨的欲仙欲死了。现有的三种并发控制机制分别为:悲观并发控制、乐观并发控制和多版本并发控制(MVCC)。2. 悲观并发控制让事务在同一时间对...原创 2019-07-11 20:26:20 · 304 阅读 · 0 评论 -
文件的读写
目录1. 打开文件2. 从文件中读数据3. 以字符串string的方式逐行读写文件4. 逐个字符读入(忽略空格与回车)5. 逐个字符读入(包括空格与回车)6.缓存和同步(Buffers and Synchronization)7. 参考这里主要讨论fstream的内容#include <fstream>ofstream //...原创 2019-07-11 16:21:17 · 706 阅读 · 0 评论 -
正则表达式
目录1. 正则表达式的语法2. 正则表达式的三个常用函数或功能1). regex_match(全文匹配)2). regex_search (搜索)3). regex_replace(替换)3. python中的正则使用4. linux下正则的使用5. 帮助网站6. 参考1. 正则表达式的语法参考:https://www.runoob.com/reg...原创 2019-07-10 20:28:47 · 2050 阅读 · 0 评论 -
自旋锁
目录1. 自旋锁概述2. 自旋锁的优点3. 自旋锁的缺点4. 自旋锁的使用场景5. 自旋锁的改进1. 自旋锁概述防止多处理器并发(保护共享资源)而引入的一种锁机制。自旋锁类比于互斥锁,解决对某种资源的互斥作用,在任何情况,锁的拥有者只能有一个。不同点,两者的调用机制不同,对于互斥锁,如果资源已经被占用,后来的资源申请者只能进入睡眠状态,由用户态进入内核态,当资源被...原创 2019-06-29 17:51:26 · 365 阅读 · 0 评论 -
2019网易笔试(4-7题)
目录4. 买房5.香槟塔6.社团主席选举7.橡皮泥斑马4. 买房在一条街上有n幢房子,标号从1到n,两个在标号上相差为1的房子视为相邻,这些房子中有k幢房子已有住户。现你准备搬入这条街,你能搬入一幢房子的条件是这幢房子没有人住在里面,与此同时由于你非常热爱与邻居进行交流,故而你需要你所入住的房子两边上都有住户。现要你求最小的可能符合要求的房子数,以及最大的...原创 2019-06-27 17:30:35 · 1853 阅读 · 0 评论 -
2019网易笔试(1-3题)
目录1. 代价2. 访友3.翻转翻转1. 代价你有3个需要完成的任务,完成这3个任务是需要付出代价的。首先,你可以不花任何代价的完成一个任务;然后,在完成了第i个任务之后,你可以花费|Ai- Aj|的代价完成第j个任务。|x|代表x的绝对值。计算出完成所有任务的最小代价。输入描述:一行3个整数A1,A2,A3,每个数字之间用一个空格分隔。所有数字都是整...原创 2019-06-27 17:21:19 · 1507 阅读 · 0 评论 -
大数之四则运算
目录1. 大数之四则运算总结1.1 加法1.2 减法1.3 乘法1.4 除法2. 加法3. 减法4. 乘法5. 除法6. 参考文献1. 大数之四则运算总结1.1 加法从后往前算(即由低位向高位运算),计算的结果依次添加到结果中去,最后将结果字符串反转。1.2 减法原理同加法,将进位改为借位1.3 乘法第一个数据的第i位与第二个数据...原创 2019-06-25 21:14:36 · 1062 阅读 · 0 评论 -
git pull --rebase的理解
在使用git的过程中经常需要使用到git pull命令,在更新远端代码的同时如果与本地代码产生冲突了,那么冲突的文件中就出现了需要手动合并的部分,而git pull --rebase不同的地方则是当有这些冲突存在时,git帮我们自动创建了一个新的分支,并且git告诉你接下来你要在这个新的分支上处理这个冲突,此时执行git status命令后可以看到首要的提示是这样的:rebase ...原创 2019-08-08 14:44:09 · 23441 阅读 · 0 评论 -
const 关键字
目录知识点const作用1. 基本注意事项2. const出现的位置引用中出现const常引用和非常引用的转换(const T &和 T &是不同类型)指针中出现const函数中出现const函数后出现const3. const的合理使用4. this指针的作用知识点const常量只是一个编译期间的常量。 const全局变量存储...原创 2019-08-06 10:58:28 · 1017 阅读 · 0 评论 -
静态变量和静态方法
1. 静态变量和静态方法的作用或优点作用解决数据共享的问题,类内静态变量和方法属于类而不属于某个对象,在类外初始化,且必须在使用前初始化,编译时分配内存,且只初始化一次,内存只分配一次,类的所有对象共用 静态方法可以限制作用域,防止同名冲突。全局变量作用域整个程序,而静态全局变量和方法只作用当前源程序。 具有记忆功能,能够记住上一次被修改的值。(属于类所有,下次调用对象时,使用的是上次...原创 2019-08-06 16:05:06 · 768 阅读 · 0 评论 -
微服务
一、微服务介绍1.什么是微服务在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务",微,狭义来讲就是体积小、著名的"2 pizza 团队"很好的诠释了这一解释(2 pizza 团队最早是亚马逊 CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来 只需要2个披萨就够了 )。 而所谓服务,一定...原创 2019-09-10 15:36:33 · 2277 阅读 · 0 评论 -
幂等性
什么是幂等性HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。Methods can also have the property of “idempotence” in that (aside from error or expiration issue...原创 2019-09-10 11:35:40 · 84 阅读 · 0 评论 -
回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。其实回调就是一种利用函数指针进行函数调用的过程.为什么要用回调呢?比如我要写一个子模块给你用,来接收远程socket发来的命令...原创 2019-09-09 17:55:50 · 9824 阅读 · 1 评论 -
虚析构函数
C++中的虚析构函数到底什么时候有用的,什么作用呢。一.虚析构函数的作用总的来说虚析构函数是为了避免内存泄露,而且是当子类中会有指针成员变量时才会使用得到的。也就说虚析构函数使得在删除指向子类对象的基类指针时可以调用子类的析构函数达到释放子类中堆内存的目的,而防止内存泄露的.我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来...原创 2019-09-07 18:13:59 · 429 阅读 · 0 评论 -
虚函数:多态的实现原理
一.序言C++ 中的虚函数的作用主要是实现了多态的机制。关于多态,说白了就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数(当然引用也可以达到该目的,引用也是指针的另一种变种)。这种技 术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚 函数技术,要么是试图做到在编译时决议...原创 2019-09-07 18:09:54 · 5367 阅读 · 0 评论 -
C++接口定义及实现举例
一、接口的定义 有时候,我们得提供一些接口给别人使用。接口的作用,就是提供一个与其他系统交互的方法。其他系统无需了解你内部细节,并且也无法了解内部细节,只能通过你提供给外部的接口来与你进行通信。根据c++的特点,我们可以采用纯虚函数的方式来实现。这样做的好处是能够实现封装和多态。现举一实例,供大家参考。(不想做过多说明,大家一看就应该能够明白)Class IPerson{p...原创 2019-09-03 17:14:54 · 492 阅读 · 0 评论