自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 原型模式

在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。原型模式的定义与特点原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式...

2019-07-08 17:04:00 133

转载 抽象工厂模式

前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。同种类称为同等级,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。本节要介绍的抽象工厂模式...

2019-07-08 17:03:00 146

转载 简单工厂模式

简单工厂模式概述:简单工厂模式属于创建型模式,创建型模式主要关注点是“怎样创建对象?”,它的主要特点是“将创建对象与使用分离”。这样可以降低系统的耦合度,使用者不需要关心对象创建的细节,对象的创建由相关的工厂去完成。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或者接口)的实例。该模式中包含了一下三个角色:工厂角...

2019-07-08 17:02:00 99

转载 工厂方法模式

模式的定义与特点工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。本节介绍的“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。工厂方法模式的主要优点有:用户只需要知道...

2019-07-08 17:02:00 132

转载 C++ new 和 delete

lnew操作符(new operator)string *ps = new string(“Memory Management”);这里的new是由语言内建的,我们成为new关键字。new操作符做了两件事情:1、在堆上分配足够的内存,用来放置某类型的对象;使用operatornew进行内存空间分配。2、调用constructor构造函数,为刚刚分配的内存空间设置初值。...

2019-07-07 16:51:00 168

转载 leveldb源码分析之内存池Arena

转自:http://luodw.cc/2015/10/15/leveldb-04/这篇博客主要讲解下leveldb内存池,内存池很多地方都有用到,像linux内核也有个内存池。内存池的存在主要就是减少malloc或者new调用的次数,较少内存分配所带来的系统开销。Arena类采用vector来存储每次分配内存的指针,每一次分配的内存,我们称为一个块block。block默认大小为...

2019-06-24 22:49:00 118

转载 linux中如何修改最大文件句柄数

1、使用ulimit -a可以查看,其中的open files后面的数就是最大文件句柄数2、临时方法:使用ulimit -n size修改最大文件句柄数(这种方法只针对当前进程有效)3、永久方法:修改linux系统参数。vi /etc/security/limits.conf*  soft  nofile  65536*  hard  nofile  65536...

2019-06-10 21:11:00 526

转载 leveldb源码分析之Slice

转自:http://luodw.cc/2015/10/15/leveldb-02/leveldb和redis这样的优秀开源框架都没有使用C++自带的字符串string,redis自己写了个sds,leveldb写了slice,本质上这三个实现原理都是一样的(当然sds是用C实现的),都有成员属性指向字符串的指针和这个字符串的长度。方法无非就是取字符串取字符串长度,字符串拼接等等。...

2019-05-30 23:22:00 138

转载 Linux环境下levelDB源码编译与安装

1、下载源码并编译git clone https://github.com/google/leveldb.gitcd leveldb//编译源码的时候需要安装cmake,并且版本需要大于3.9,我们选择下载安装包的方式安装//文件下载解压wget https://cmake.org/files/v3.12/cmake-3.12.2-Linux-x86_64.tar.gz//解压...

2019-05-22 09:42:00 1088

转载 线程实现的两种方式 —— 用户空间和内核中

在用户空间中实现线程特点: 整个线程包放入用户空间中,内核对线程包一无所知。从内核角度考虑,就是按正常的方式管理,即单线程进程 优点: 1、用户级线程包可以在不支持线程的操作系统上实现 2、线程切换比内核快更多 3、允许每个进程有自己定制的调度算法缺点: 线程发生I/O或页面故障引起的阻塞时,如果调用阻塞系统调用则内核由于不知道有多线程的存在,而会阻塞整个进程从而阻塞所有线程 一个单...

2019-05-10 10:27:00 124

转载 STL--hashtable

hashtable使用开链的方式,解决元素个数大于array容量的问题。当两个不同元素hash得到相同的hash值时,此时我们使用bucket list来链接连个元素。hashtable迭代器必须永远维系着与整个"bucket vector"的关系,并记录目前所指的节点。其前进操作是首先从从目前所指的节点出发,前进一个位置(节点),由于节点被安置于list内,所有利用节点的n...

2019-04-29 11:32:00 89

转载 STL--关系型容器

STL--关系型容器1.树的基本概念1.1二叉搜索树二叉搜索树:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。1.2平衡二叉搜索树平衡二叉搜索树:能够维持根节点的左右子树相对平衡。例如:AVL-tree...

2019-04-28 20:35:00 217

转载 STL--sort源码分析

SGI STL sort源码temlate <class RandowAccessIterator>inline void sort(RandowAccessIterator first, RandowAccessIterator last){  if(first ! = last){    _introsort_loop(first, last,...

2019-04-28 16:52:00 90

转载 进程和线程的区别

进程和线程的区别进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。一个程序至少一个进程,一个进程至少一个线程。为什么会有线程?  每个进程都有自己的地址空间,即进程空间,在网络或多用户换机下,一个服务器...

2019-04-21 21:25:00 116

转载 static 关键字 静态成员变量及静态成员函数

static类成员类成员类似于C语言的全局变量,但是与全局变量又有所不同,例如,全局变量是可以被任何的用户代码所修改,而且全局变量破坏了对象的封装性。使用类的 static 成员的优点使用 static 成员而不是全局对象有三个优点。1. static 成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突。2. 可以实施封装。static 成员可以是私有成...

2019-03-22 15:30:00 176

转载 二叉树遍历总结 先序、中序、后续、广度、深度

遍历的方式有两种,一种是递归遍历,另外一种是非递归遍历先序递归void PreOrder (BitTree T){  if(T != NULL){    cout<< T->val << " ";    PreOrder (T->left);    PreOrder (T->right);  }}先序非递归...

2019-03-11 11:02:00 104

转载 C++用new和不用new创建类对象区别

转自https://blog.csdn.net/yeahhook/article/details/6796242起初刚学C++时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题。当然这都是跟new的用法有关的。new创建类对象,使用完后需使用delete删除,跟申请内存类似。所以,ne...

2019-03-07 14:20:00 71

转载 传输层--TCP和UDP的区别

UDP(用户数据报协议):为调用它的应用程序提供了一种不可靠、无连接的服务。TCP(传输控制协议):为调用它的应用程序提供了一种可靠的、面向连接的服务。当设计一个网络应用程序时,该应用程序的开发人员必须指定使用这两种传输协议中的一种。开发人员在创建套接字时必须指定是选择UPD还是选择TCP。区别:1、套接字的区别UDP套接字是由一个包含目的IP地址和...

2019-03-02 16:07:00 276

转载 传输层的作用

传输层协议为运行在不同主机上的应用进程彼此之间提供逻辑通信的功能。网络层则提供了主机之间的逻辑通信。在发送方,运输层将接收到的来自发送放应用程序进程的报文转换成运输层分组(报文段)。传输层工作在端系统中,只负责接收网络层的数据,并分发到对应的应用程序,或者将应用程序的报文加上某些信息上呈给网络层。最基本的作用:多路复用和多路分解多路分解:将运输层报文段中的数据交...

2019-03-02 15:37:00 850

转载 微信商户/H5支付申请 被拒原因:网站存在不实内容或不安全信息

看到这张图片,申请H5支付的朋友估计是崩溃的,被拒的原因是网站存在不实内容或不安全信息。解决方法有两种:针对不安全内容,则是微信支付审核团队认为你的网站存在安全漏洞的,需要修复。针对不实内容,则是由于网站看起来不正规。如果有以上原因被拒的可以添加本人的微信进行咨询解决,很愿意帮助大家。附上一张我们每天提交审核通过的图片转载于:https://ww...

2019-02-27 11:05:00 939

转载 字符串

1.所占空间大小C/C++中每个字符串都以字符‘\0’作为结尾,这样可以方便找到字符串的尾部,同样也给每个字符串增加了一个额外字符的开销。char str[] = "1234567890"; //通过strlen(str),得到的结果是10,但是如果我们需要将这个字符串复制给另外一个字符串,则在分配内存的时候需要分配length+1的空间。char str2[10];s...

2019-02-25 20:44:00 95

转载 数组

1、内存中是连续存储的2、真是因为是连续存储的,所以可以根据下标定位对应的元素3、多维数组同样是连续存储的,可以根据下标的运算快速定位对应的元素转载于:https://www.cnblogs.com/zhousong918/p/10433037.html...

2019-02-25 20:07:00 70

转载 第一个只出现一次的字符

题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).思路标准的书本解法,先在hash表中统计各字母出现次数,第二次扫描直接访问hash表获得次数代码class Solution {public: int FirstNo...

2019-02-25 18:48:00 39

转载 DDoS的类型及原理

1、DDoS攻击:DDOS(Distributed Denial of Service),又称分布式拒绝服务攻击。骇客通过控制多个肉鸡或服务器组成的僵尸网络,对目标发送大量看似合法请求,从而占用大量网络资源,瘫痪网络,阻止用户对网络资源的正常访问。2、攻击类型及防御Smurf攻击攻击者向网关发送ICMP请求包,并将该ICMP请求报文的源地址伪造成受害主机IP地址,目的地...

2019-02-24 14:16:00 75

转载 引用变量&和指针*的区别

&在C/C++中做右值时,为取地址运算符,来指示变量的地址。C++给&符号赋予了另外一个含义,将其用来声明引用。引用变量的作用:1、别名int b = 0;int& a = b;2、用作函数参数和指针作为函数参数一样,可以提高函数的效率,函数参数在按值传递的情况下,会产生一个临时的副本。//引用:void func(i...

2019-02-23 20:44:00 215

转载 赋值运算符的重载

形式:Class_name & Class_name::operator=(const Class_name & other);//接受并返回一个指向类对象的引用。1、赋值运算符的功能以及何时使用它。将已有的对象赋给另一个对象时,将使用重载的赋值运算符:StringBad headline1("xxxxxxxx");.......StringBa...

2019-02-23 19:22:00 127

转载 拷贝构造函数的重载

形式:Class_name(const Class_name & other){};//他接受一个指向类对象的常量应用作为参数。 const关键字的作用是保护other对象中的内容不发生变化。1、何时调用拷贝构造函数:新建一个对象并将其初始化为同类现有对象时,拷贝构造函数都将被调用。StringBad ditto(motto);StringBad met...

2019-02-23 18:04:00 1246

转载 phpstudy 安装Apache SSL证书实现https连接

Windows phpstudy安装ssl证书教程。工具/原料phpstudy 集成环境申请的SSL证书方法/步骤首先申请免费的ssl证书,很多地方都可以申请。我是在腾讯云!如图下载证书备份好。以免丢失。解压下载的证书,里面有...

2019-02-22 20:44:00 193

转载 设计模式--单例设计模式

转自:https://blog.csdn.net/zh13544539220/article/details/48467095参考:https://www.cnblogs.com/gccbuaa/p/7268313.html单例模式是应用最多的一种设计模式,它要求每个类有且只能有一个实例对象,所以用C++设计一个单例模式的方法如下: 1 构造函数声明为私有...

2019-02-22 16:36:00 44

转载 友元函数和友元类

关键字 friend友元函数是一种特殊的函数,它需要在类体内进行说明,可以访问类的私有成员和保护成员,但又不是类的成员函数。其中,friend是说明友元函数的关键字,友元声明可以出现在类中的任何地方。通常,将友元声明成组地放在类定义的开始或结尾是个好主意。归纳起来,友元函数是一种能够访问类中私有成员的非类成员函数,友元函数在定义上和调用上与普通函数一样友元的作用在于提高程序的...

2019-02-22 14:36:00 411

转载 const关键字的作用

1、防止被修饰的成员的内容被改变。2、修饰类的成员函数时,表示其为一个常函数,意味着成员函数将不能修改类成员变量的值。3、在函数声明时修饰参数,表示在函数访问时参数(包括指针和实参)的值不会发生变化。4、对于指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,const int *b = &a;或者int* const b = &a...

2019-02-22 14:27:00 148

转载 C/C++ 内存对齐原则及作用

struct/class/union内存对齐原则有四个:1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括str...

2019-02-21 20:30:00 162

转载 C中的malloc/free与C++中的new/delete的用法与区别

1、先介绍malloc/free的用法:原型函数: void *malloc(long NumBytes);该函数分配了NumBytes个字节的内容,分配的空间是堆空间malloc()根据用户所需分配内存的大小n (bytes)在“堆链表”(见未使用过得堆内存)里搜索。直到搜索到一个大于等于n字节的堆内存块为止。如果此堆内存块的大小刚好为n,则直接将首地址返回给用户;如果此内...

2019-02-21 17:04:00 106

转载 二进制中1的个数

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路巧用 n&(n-1)class Solution {public: int NumberOf1(int n) { int count=0; while(n){ count++; ...

2019-01-16 14:14:00 67

转载 矩形覆盖

题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路同https://www.cnblogs.com/zhousong918/p/10272346.htmlclass Solution {public: int rectCover(int numbe...

2019-01-15 17:35:00 50

转载 变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路number = 1时,total_ways = 1; f(1) = 1number = 2时,total_ways = 2; f(2) = f(1) + 1number = 3时,total_ways = 4; f(3) = 1 ...

2019-01-15 16:37:00 79

转载 跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路使用斐波那契数列求解n=1时,跳法只有1种,f(1);n=2时,跳法有2种,f(2);从n>2开始,就可以将n分为两种情况:情况1,第一步跳1阶台阶,那么就剩n-1阶台阶,n-1阶台阶的台阶跳法为f(n-1);情...

2019-01-15 15:45:00 58

转载 斐波那契数列

题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39思路这个使用简单的for循环即可完成class Solution {public: int Fibonacci(int n) { if(n == 0) return 0; int pre_n...

2019-01-15 14:27:00 68

转载 旋转数组的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路1、最简单的思路就是遍历整个vector,找出最小的返回,但是这样的时间复杂度比...

2019-01-15 12:52:00 48

转载 反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。思路利用栈的先进后出的性质将链表反转,先将链表从头到尾压入栈中,然后再将栈中数据出栈,保存到新链表中/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next...

2019-01-14 15:00:00 47

空空如也

空空如也

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

TA关注的人

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