自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 哈希map

hash_map基于hash table(哈希表)。哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间。 其基本原理是:使用一个下标范围比较大的数组来存储元素。可以设计一个函数(哈希函数,也叫做散列函数),使得每个元素的关键字都与一个函数值(即数组下标,hash值)相对应,于是用这个数组单元来存储这个元素;也可以简单的理解为,按照关键字为每一个元素“分类”,然后将...

2018-08-15 15:01:27 799

原创 浅拷贝与深拷贝

浅拷贝就比如像引用类型,而深拷贝就比如值类型。 浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。举个例子,一个人一开始叫张三,后来改名叫李四了,可是还是同一个人,不管是张三缺胳膊少腿还是李四缺胳膊少腿,都是这个人倒霉。 深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。举个例子,一...

2018-08-09 11:53:46 173

转载 浅谈工厂模式

简单工厂模式解决的问题是如何去实例化一个合适的对象 简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程1)还没有工厂时代:假如还没有工业革命,如果一个客户要一款宝马车,一般的做法是客户去创建一款宝马车,然后拿来用。 2)简单工厂模式:后来出现工业革命。用户不用去创建宝马车。因为客户有一个工厂来帮他创建宝马.想要什么车,这个工厂就可以建。比如想要320i系列车。工厂就创建...

2018-07-30 15:08:13 163

原创 I/O复用select poll epoll

I/O复用使得程序能够监听多个文件描述符 应用场景:1、客户端要同时处理多个socket(非阻塞connet技术) 2、客户端程序要同时处理用户输入和网络连接(聊天室程序) 3、TCP服务器同时处理监听socket和连接socket 4、服务器要同时处理TCP请求和UDP 请求 ...

2018-07-30 09:22:50 148

原创 有关单链表的环的问题

求环的长度:在第一次相遇点后fast继续一次走两步,slow继续一次走一步,设置计数器,直到第二次相遇 求环的入口点:在相遇点后,slow从头开始,一次走一步,fast一次走一步,直到相遇,即为入口点bool isLoop(pNode pHead)//判断是否有环{ pNode fast = pHead; pNode slow = pHead; //如果...

2018-07-27 17:06:28 169

原创 熟悉GitHub命令

1、git init命令把这个目录变成Git可以管理的仓库2、把文件添加到仓库:git add 1.txt(没有消息就是添加成功) git commit - m “hello” 告诉Git,把文件提交到仓库,-m后面输入的是本次提交的说明,输入方便从历史记录找到改动的记录3、版本回退: git status 查看仓库当前的状态,看文件有没有被修改或者有没有被提交的修改 git...

2018-07-26 16:10:48 263

原创 connect,listen,accept函数

connect(int sockfd,struct sockaddr *addr,socklen_addr);当函数进行到connect的时候,就会发生三次握手,三次握手不是这个函数执行的,而是这个函数通知linux内核,内核进行三次握手,成功为0,失败为1listen(int sockfd,int backlog)listen函数不会阻塞,它主要做的事情为:将套接字和套接字对应...

2018-07-19 15:54:13 157

原创 深信服电话面

面试时间7.14 14分钟36秒 1.讲一下项目(linux文件传输)的系统调用 系统调用:操作系统提供给用户程序的一组“特殊”接口,用户程序通过这种特殊接口来获得操作系统内核获得的服务。 它相当于一个中间人,把用户进程的请求发送给内核,内核处理后将结果再返回给用户。 系统服务之所以需要通过系统调用来提供给用户空间的根本原因是为了对系统进行“保护”,因为我们知道Linux的运行空间分...

2018-07-14 11:34:41 2429

原创 单链表的头插与逆置

逆置的思路:节点数在2个或2个以下就没有必要逆置 p指向list->head->next,先把list->head置为空,此时头节点就变成了最后一个节点,把p赋给s,p往后挪,挪一步赋给s(循环p!=NULL的条件下),s每次头插,也就是每次的倒数第二个变成了第二个节点,指向了一开始头节点置为空的节点,就实现了逆置typedef int ElemType;typedef ...

2018-07-12 21:56:47 173

原创 斐波那契数列的实现

斐波那契数列:1 1 2 3 5 8 13………(n的值为n前两项相加的和) 实现:int fun(int n){ int a = 1, b = 1, c = 1; for (int i = 3; i <= n; ++i) { c = a + b; b = a;...

2018-07-11 09:39:55 148

原创 二分查找

二分查找 在一个长度为len数组arr[]中查找值为x的元素,所谓二分即为折半,先比较arr[mid] == x,如果等于,查找成功,如果arr[mid]int FindValue(const int *arr, const int len, const int x){ int pos = -1; if (arr == NULL || len < 1) ...

2018-07-09 21:37:02 146

原创 TIME_WAIT状态的小总结

TIME_WAIT状态存在的原因: 1、保证TCP连接可靠的终止 如果用于确认报文段6的报文段7丢失,那么服务器将重发结束报文段,因此客户端要停留在某个状态来处理重复收到的结束报文段,否则,客户端以复位报文段来回应服务器,服务器则将认为这是一个错误,因为它期望的是报文段7那样的报文段 2、保证让迟来的TCP报文段有足够的时间被识别并丢弃 (1)一个TCP端口不能被重复打开多...

2018-07-08 10:27:36 182

原创 浅谈多态

封装可以使代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码复用 而多态的目的是为了接口重用 多态“一个接口,多种方法”,在运行时期才决定调用的函数 C++支持两种多态性:编译时多态性,运行时多态性class Base{public: void foo() { printf("1\n"); } ...

2018-07-07 20:08:38 328

原创 剑指offer 替换空格

题五:替换空格 请实现一个函数,把字符串中的每个空格替换成“%20”.例如,输入“we are happy”,则输出“we %20are%20happy” 解题思路:(1)从头到尾遍历字符串,遇到空格就替换成“20%”,这样做把一个字符替换成3个字符,必须还得把空格后面的所有字符后移两个字节,否则就覆盖了,而且,从头到尾遍历,遇见第一个空格,后面的字符串要后移一次,遇见第二个空格,空...

2018-07-07 20:04:23 329

原创 浅谈单例模式

1、什么是单例模式? 一个类中只能有一个实例 2、单例模式的三个要点: (1)某个类只能有一个实例 (2)它必须向整个系统自行地提供这个实例 (3)它必须自行创建这个实例 怎样实现? (1)单例模式的类只提供私有的构造函数以禁止其他人创建实例 (2)该类提供了一个静态的公有函数用于创建或获取它本身的静态私有成员 3、单...

2018-07-05 19:54:27 118

原创 剑指offer 查找数组中重复的数

题3、找出数组中重复的数字,例如,输出长度为7的数组{2,3,1,0,2,5,3},找出数组中重复的数字 解题思路:法一:先给数组进行排序,从排序好的数组中找到重复的数字,时间复杂度O(nlogn) 法二 :利用哈希表,如果哈希表里面 没有此数字,就把他加入哈希表,如果有,就找到了,提高了时间效率,时间复杂度是O(n),但他是以一个...

2018-07-05 10:17:55 126

原创 剑指offer sizeof(空类)

题1、问:对一个没有任何成员变量和成员函的空类求sizeof,得到什么结果? 答:空类的实例中不包含任何信息,本来求sizeof应该是0,但是当我们声明该实例的时候,他必须在内存中占用一定的空间,否则无法使用该实例,在VS中,每个空类型的实例占用1字节的空间 如果该类中添加一个构造函数和析构函数,还是1,调用构造函数和析构函数只需要知道函数的地址即可,而...

2018-07-04 21:26:58 417

转载 c++四种类型转换的关键字

1、reinterpret_cast (expression)type-id 必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成原类型的指针,还可以得到原先的指针值)。static_cast和reinterpret_cast的区别主要在于多重继承 2、static_cast...

2018-07-04 20:36:34 253

原创 有关socket的小总结

socket:套接字,应用程序通过socket向网络发出请求或者应答请求。 数据链路层,网络层,传输层是在内核中实现的,因此操作系统实现一组系统调用,使得应用程序能够访问这些协议提供的服务 TCP:(数据可靠) UDP:(数据不可靠,实时视频传输) 用到udp的情况: 1,实时音视频是可以而且应该用 UDP 的,一方面因为它常常涉及到网络穿透,另外一方面它不需要重传。——我需要实时的...

2018-07-04 09:09:26 214

原创 STL(标准模板库)的小总结

STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adaptors)、算法(algorithms)、仿函数(functors)六个部分。 1、容器: (1)顺序容器 vector(向量容器) 1>默认没开辟空间,初始化效率太低(2倍增长的数组0->1 1->2 2-...

2018-06-07 11:46:40 719

原创 ptmalloc的小总结

关于ptmalloc的一些总结

2018-05-20 15:38:55 170

原创 引用和指针的区别

(1)引用相当于给一个变量起一个别名,它修饰的是变量,指针既可以修饰变量,也可以修饰函数。引用是直接访问变量,指针是间接访问变量。 (2)引用必须初始化,而指针可以为空(野指针),所以引用是更安全的指针。 (3)引用只能有一级引用,不能有多级引用,而指针可以有多级指针, 比如:int **p; (4)引用一旦指向一个变量的内存,在之后都不会再改变,不能再指向其他变量。 ...

2018-05-04 09:32:33 207

原创 内联函数

定义:内联函数是指用inline关键字修饰的函数。在类内定义的函数被默认成内联函数。内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。 内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。 1、内联函数和普通函数的区...

2018-04-03 11:10:45 242

原创 函数的返回值是怎样带出来的

函数的返回值怎么带出来?<= 4字节 通过寄存器带出来>4 <=8 字节 通过两个寄存器带出来>8 字节 通过产生临时量,此时返回值太大,寄存器已经没有足够的内存存放它 临时量是什么时候产生的?临时量是怎么找到的?怎么给临时量赋值的? 答:在函数调用之前;在调用函数之前,将临时量地址入栈,最后通过将被调用函数的返回值拷贝给临时量,将函数返回...

2018-04-03 10:52:40 1308

原创 函数调用堆栈的过程

例:#include<stdio.h>int sum(int a,int b){ int tmp = 0; tmp = a + b; return tmp;}int main(){ int x = 10; int y = 20; int ret = 0; ret = sum(x,y); printf("...

2018-04-03 10:21:03 275

转载 堆和栈的区别

堆和栈的区别: (1) 内存分配方面: 堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由os回收,注意它和数据结构中的堆是两码事,分配方式是类似链表。可能用到的关键字有:new,malloc,delete,free等 栈:由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 (2) 申请方式方面; 堆:需要程序猿自己申请,并指明大小。在c中ma...

2018-03-06 10:49:55 140

原创 关键字sizeof

关键字sizeof 其作用是取得一个对象(数据类型或数据对象)所占用内存的大小(一字节为单位)其中类型包括基本数据类型(不包括void)、用户自定义类型,(结构体、类)、函数类型。数据对象是指前面提到的类型的定义的普通变量和指针变量(包含void指针)。对象对sizeof()的处理都是在编译阶段处理的。Sizeof在计算变量大小时,括号可以省略,而在计算类型大小时,括号不可以省略。 Siz...

2018-03-06 10:44:17 294

原创 关键字static和关键字extern的区别

关键字static与关键字extern Static:修饰变量:将外部变量的作用域限制在本文本中,加上static声明,只能用于本文件的外部变量称为静态外部变量。修饰函数,使函数成为内部函数 用static声明一个变量的作用是:(1)对局部变量用static声明,他使变量由动态存储方式改变为静态存储方式,把他分配在静态存储区,该变量在整个程序执行期间不释放,其所分配的空间始终存在。 (2...

2018-03-06 10:40:06 1056

原创 函数形参与实参的一些总结

1.定义:在定义函数时函数后面括号中的变量名称为“形式参数” 在主调函数中调用一个函数时,函数名后面括号中的参数成 为“实际参数”。实参可以是常量、变量或表达式。 2.类型转化:实参与形参的类型应相同或兼容赋值;如果实参为int型而形 参为float型,则按不同类型的赋值规则进行转换。 eg:实参a为float型变量,值为3.5,而形参为int型,在传递时先将实数3.5

2017-11-29 19:49:44 1070

原创 extern关键字

extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 extern 有两个作用:1、extern’c’或‘c++’干预编译器,确定是按c规则编译还是c++编译的。 2、不与c一起连用修饰变量或函数时,如在头文件中,作用是声

2017-11-17 21:38:41 111

原创 变量的作用域,可见性与生存期

(1)可见性:针对编译过程,又称为“作用域”,它是“栈”这种存储方式的表现形式。不管是全局作用域还是局部作用域,从一个人对象的入栈到这个对象的出栈,是爱对象的整个作用域。 (2)生存期:针对执行过程。 全局变量: 在函数体外部定义的变量,可以被本文件所有的其他函数所访问。 作用域:所有文件,在一个cpp定义的全局变量在另一个cpp中使用,应该在使用它

2017-11-17 21:15:28 1771

原创 声明和定义的区别

一、声明:指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,或者函数等等,用于编译器识别变量名所引用的实体。 定义:是对声明的实现或者实例化 例:int a; //属于声明,并没有给a 定义它的值 int a=3; //声明变量a为int类型,并定义为3. 定义在前,声明在后。 二、声明与定义的区别: 定义:编译器创建一个对象,为这个对象分配一块内存并...

2017-11-17 20:44:40 3776

原创 goto,break,continue,return的一些总结

1.goto:指定跳转到标签,找到标签后,程序将处理从下行开始的命令          格式:goto   语句标号                    跳转到程序的标号处                    例:统计从键盘输入一行字符的个数                    #include                    int mai

2017-11-14 15:25:00 166

原创 编译、链接的小总结

编译过程主要经过预编译(Preprocessing)、编译(Compilation)、汇编(Assembly)三个过程,再加上链接(Linking)四个步骤,最后生成可执行文件。 一、预编译的过程主要处理:1)将所有的#define删除,并且展开所有的宏定 义; 2)处理所有的条件预编译指令,比如#if #ifdef #...

2017-10-22 22:32:38 199

空空如也

空空如也

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

TA关注的人

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