自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 11.14学习笔记

1.new和malloc的区别最大的区别:new在申请空间的时候会调用构造函数,malloc不会调用构造函数的作用:(1)给创建的对象建立一个标识符(标识符就是变量名);(2)为对象数据成员开辟内存空间;(3)完成对象数据成员的初始化。申请失败返回:new申请空间失败后返回的是错误码bad_alloc,malloc申请空间失败后会返回NULL。属性上:new/delete是C++关键字需要...

2019-11-14 21:52:34 183 1

原创 11.13学习笔记

1.判断二叉搜索树后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { vector<int> left...

2019-11-14 09:21:54 215

原创 11.12学习笔记

1.topK问题题目10亿int整型数,一台可用内存为1G的机器,时间复杂度要求O(n),统计只出现一次的数。分析首先分析需要多大的内存才能表示10亿的数,一个int型占4个字节,10亿就是40亿字节,约等于4GB。如果要完全读入内存的话明显内存不够用。一般思路有两种:位图法:用一个bit位来标识一个int型整数。分治法:分批处理这10亿数。1.1位图法int型整数是4个字节,即3...

2019-11-12 21:44:14 223

原创 11.11学习笔记

小知识点9.树的高度和深度深度从根开始,自上而下。**高度从叶子节点开始,自下而上。**从日常习惯来看,楼层的高度不也是从下往上数,深度从上往下数。10.堆排序时间复杂度堆排序(这里指最大堆,最小堆同理)就是每次取堆的根节点作为最大值,然后将最后一个节点作为根节点进行堆调整。即堆排序的时间等于建堆的时间和进行堆调整的时间。10.1 建堆建堆是一个自下而上的过程(bottom-up)...

2019-11-11 22:12:19 122

原创 11.10学习笔记

Leetcode1.前k个高频元素给定一个整数数组,返回出现频率前k高的元素。思路:先用map统计各个数字出现频率。然后利用优先队列构建小顶堆(前k大构建小顶堆,前k小构建大顶堆),最后把最终的小顶堆输出。class Solution {public: vector<int> topKFrequent(vector<int>& nums, int ...

2019-11-10 18:16:32 103

原创 11.8学习笔记

小知识点6.运算符重载7.友元友元函数不是类的成员,但是可以访问类的私有成员。除了友元函数还有友元类。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等需要的时间开销),但是它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。友元函数友元函数定义在类外,不属于任何类,但是需要在类的定义中声明,声明时只需要在友元的名称前加关键字friend。声明放在类的私有部...

2019-11-10 15:46:19 81

原创 11.6学习笔记

小知识点1.map和unordered_map的区别1.1 内部实现机理map:map内部实现了一个红黑树,该结构具有自动排序的功能,所以map内部是有序的。unordered_map:内部实现了一个哈希表,顾名思义也知道是无序的。1.2 优缺点以及适用场合map优点:(1)有序性。(2)红黑树结构。效率比较高,很多操作都可以在logn的时间复杂度下实现。缺点:空间占...

2019-11-08 10:45:05 141

原创 11.1学习笔记

6. HTTP状态码当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。HTTP状态码英文为HTTP Status Code。常见的HTTP状态码:200301-资源(网页等)被永久转移到其它URL404-请求的资源(网页等)不存在50...

2019-11-01 16:39:08 115

原创 10.31学习笔记

1 HTTP1.0与HTTP1.1的区别1.1 HTTP的历史在HTTP建立之初,是作为一个浏览器,为了将超文本标记语言(HTML)文档从Web服务器传送到客户端。对于前端来说,我们所写的HTML页面将要放在Web服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了Web2.0以来,我们的页面变得复杂,不仅仅是一些简单的文字和图片,同时我们的HTML页面有了CSS(一种为结构...

2019-10-31 17:27:22 139 1

原创 10.30 学习笔记

2.2四次挥手2.2.1四次挥手的详述假设客户端发起中断连接请求,也就是发送FIN报文。服务器端接收到到FIN报文,意味着客户端没有数据要发送了,但是如果服务器端还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据,服务器先发送ACK,意味着服务器端还有数据需要发送。这时候客户端进入FIN_WAIT状态,继续等待服务器端的FIN报文。当服务器端确定数据发送完成,则向客户端发送...

2019-10-30 09:53:30 325

原创 10.29学习笔记

面经总结1.计算机网络模型OSI由下到上:物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化。数据链路层:通过各种控制协议,把有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。网络层:通过路由选择算法为报文或分组通过通信子网选择最佳的路径。传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正...

2019-10-29 21:11:03 170

原创 10.28学习笔记

#Redis#内存管理的基石zmalloc.c源码

2019-10-29 15:51:23 215

原创 10.26 学习笔记

进程(process)和线程(thread)http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html进程就好比工厂的车间,它代表CPU能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。线程就好比车间里的工人,一个进程可以包括多个线程。车间里的空间是工人共享的,比如许多房间是每个工人都...

2019-10-26 10:31:04 132

原创 10.25学习笔记

Redis1.内存地址对齐内存地址对齐,是一种在计算机内存中排列数据、访问数据的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐。当今的计算机在计算机内存中读写数据时是按照字(word)大小块来进行操作的(在32位系统中, 数据总线宽度位32,每次读取4字节,地址总线宽度为32,因此最大的寻址空间为2的32次方=4GB,但是最低两位A[0],A[1]不用于寻址,A...

2019-10-25 08:21:11 194

原创 10.24学习笔记

剑指Offer二刷1.顺时针一圈圈的打印矩阵class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { int lenC = matrix[0].size(); int lenR = matrix.size(); ...

2019-10-24 19:07:53 114

原创 10.23学习笔记

剑指Offer以后全都用java实现了,其实c++和java的基本语法也没差多少。 1.输入二叉树A和B,判断B是否是A的子结构。(空树不为任何树子结构)。 public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root1 == null |...

2019-10-23 09:16:29 124

原创 10.22学习笔记

剑指Offer1.输出链表倒数第k个节点public class Solution { public ListNode FindKthToTail(ListNode head,int k) { ListNode p, q; p = q = head; int i = 0; for(;p != null; i++)...

2019-10-22 20:18:41 141

原创 10.21学习笔记

Redis插入节点/* Returns a random level for the new skiplist node we are going to create. * The return value of this function is between 1 and ZSKIPLIST_MAXLEVEL * (both inclusive), with a powerlaw-...

2019-10-21 15:28:56 137

原创 学习笔记10.18

剑指Offer1.用n个2*1小矩形无重叠覆盖一个2*n的大矩形,总共有多少种方法。如果第一次竖着摆放,总共f(n-1)种;如果第一个横着摆放,总共f(n-2)种。所以f(n)=f(n-1)+f(n-2),即斐波那契数列。2.输入一个整数,输出二进制表示中1的个数。用位运算,整数&1即二进制表示最低位,依次右移位运算。3.给定一个double类型的浮点数base和int类型...

2019-10-18 11:23:28 127

原创 学习笔记10.17

Redis重新理解一下rehash。dictht ht[2]:在字典dict的内部有两张哈希表,作用是一对滚动数组。rehash就是让哈希表的负载因子保持在一个合理的范围之内,避免哈希表保存的键值对数量太多或者太少。dt[0]是旧表,dt[1]是新表,当哈希表的大小需要动态改变的时候,旧表的元素就往新表中迁移,新表变成旧表,从而达到资源的复用和效率的提升。Rehash源码:in...

2019-10-17 11:23:24 111

原创 学习笔记10.16

剑指offer二刷1.二维数组的查找从上到下递增,从左到右递增,数组的每个L型序列都是个递增序列。思路(1):从左下角开始判断,如果大于目标,则在上方;小于目标,则在下方。思路(2):对每一个一维数组用二分查找。2.替换空格把给定字符串所有的空格换成%20。如果从前往后替换的话,每替换一次,后面所有的字符都要整体后移,复杂度非常高。应该从后往前替换,先找出空格数目cou...

2019-10-16 14:11:15 95

原创 学习笔记10.14

rehash算法rehash是为了让哈希表的负载因子维持在一个合理的范围之内,是在哈希表保存的键值对数量太多或者太少的时候,对哈希表的大小进行的扩展或者收缩操作。负载因子load_factor = ht[0].used/ht[0].size。Redis的字典有两个哈希表,ht[0]和ht[1]。一般情况下字典只使用ht[0]哈希表,ht[1]哈希表只会在对ht[0]哈希表进行rehash时...

2019-10-14 15:02:00 80

原创 10.12leetcode和Redis学习笔记

leetcode笔记237.删除链表中的节点、给定一个单向链表,只给定要删除的节点(必不为尾节点),怎么删除?把下一个节点的值覆盖要删除的节点然后跳过下一个节点就好了。104.二叉树的最大深度利用队列进行层次遍历,每次根据队列元素的长度遍历当前层,层数加一,同时把当前遍历元素的左右叶子加进队列,直到队列为空,结束。这里面最值得注意的是每层遍历时作为判断条件的队列元素长度应该...

2019-10-12 10:29:02 100

原创 10.11Redis学习笔记

Redis学习笔记二.简单动态字符串SDS(simple dynamic string) 在redis中,c字符串只会作为字符串字面量(string literal)用在一些无须对字符串值进行修改的地方。字面量就是具体的值。2.2相比较C字符串2.2.1常数复杂度获取字符串长度2.2.2杜绝缓冲区溢出 当SDSAPI需要对SDS进行修改时,API会先检查SDS的空间是...

2019-10-11 17:13:03 110

原创 10.10

1.纯虚函数如何定义,为什么对于存在虚函数的类中析构函数要定义成虚函数为了实现多态进行动态绑定,将派生类对象指针绑定到基类指针上,对象销毁时,如果析构函数没有定义为析构函数,则会调用基类的析构函数,显然只能销毁部分数据。如果要调用对象的析构函数,就需要将该对象的析构函数定义为虚函数,销毁时通过虚函数表找到对应的析构函数。2.析构函数不能抛出异常(1)如果析构函数抛出异常,则异常点之后的...

2019-10-11 16:38:28 61

原创 10.9

1.extern关键字作用extern置于变量或者函数之前,标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块寻找其定义。还可以用于链接指定。如:extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名是按照C的规则去翻译相应的函数名。2.static关键字作用在C中修饰局部变量:使得被修饰的变量成为静态变量...

2019-10-09 20:54:53 96

原创 9.26

1.把string类型换成char *类型string s;char *res = strdup(s.c_str());2.atoi()和stoi()相同点:①都是C++的字符处理函数,把数字字符串转换成int输出②头文件都是#include<cstring>不同点:①atoi()的参数是const char* ,因此对于一个字符串str我们必须调用c_...

2019-09-26 20:55:57 83

原创 9.25

1.连续子数组的最大和动态规划思路:对于第i项来说,要么选择第i项+之前的和,要么只选择第i项抛弃之前的和DP[i] = max(dp[i-1]+num[i] , num[i])2.list删除指定元素参考:https://blog.csdn.net/m33ak47/article/details/81173464list<int>::iterator it = ...

2019-09-25 23:03:44 111

原创 9.24

1.C++在类的成员函数面前加static标识符 成员函数属于类而非对象,该类的对象共同拥有这一个成员函数,而不是每个对象各自拥有一个成员函数。2.自定义sort排序函数返回类型必须为static bool,如果想升序,return a<b,降序则return a>b。3.long long int 64位4.计算逆序数对,归并排序,先分解,再合并,再归并排序的...

2019-09-24 12:20:19 134

原创 2019.9.22

1.NULL和nullptr的问题C++里NULL就是零,如果要用void func(char*); func(NULL)会调用func(int);nullptr的类型为nullptr_t,能够隐式的转换为任何指针,所以用空指针就尽可能的使用nullptr。2.中序遍历 void path(TreeNode* node, TreeNode* &pt) ...

2019-09-22 09:45:52 71

原创 9.21

1.广度遍历用队列实现 queue<TreeNode*> qu; qu.push(root); while(!qu.empty()) { res.push_back(qu.front()->val); if(qu.front()->left!=NULL) q...

2019-09-21 19:49:43 66

原创 2019.9.19

1.冒泡排序(1)第一次比较:比较第一个和第二个数,把小数放在前面,大数放在后面(2)比较第2和第3个数,小数放在前面,大数放在后面。(3)如此继续直到结束一轮比较,数组最后一个数一定是最大的数。(4)第二轮比较后数组倒数第二数字就是第二大的数,以此类推。2.c++for循环初始不能定义多个变量,只能定义一个3.ListNode*pT = pListHead, Lis...

2019-09-19 09:23:46 70

原创 2019.9.18

1.c++同名函数有三种关系:重载:相同作用域;函数名相同;参数列表不同;返回类型随意、覆盖:不同作用域下;函数名相同;参数列表相同;基类函数必须有virtual修饰;父类和子类的访问限定可以不同隐藏:不同作用域下;函数名相同;除过覆盖的同名函数都是隐藏关系2.&&逻辑与;&按位与...

2019-09-18 09:51:13 157

转载 c++ new的用法

有三种用法1.new operator最常使用的T *ptr = new T(),分配内存,调用构造函数class A{public: A(int i):a(i){}private: int a;};int main(){ A* example = new A(1);}new operator实际上执行了三个步骤: 1.调用oper...

2019-09-18 09:25:46 139

原创 c++ 为什么使用new

使用new创建对象是创建在堆中的,需要手动管理内存空间。不使用new创建对象时,对象的内存空间是在栈中的,作用范围只在函数内部,函数执行完成后就会调用析构函数,删除该对象。当我们希望自己控制什么时候释放对象就需要用到new了,new对变量内存的管理的更灵活。...

2019-09-18 09:00:28 2499

原创 C++ 结构体构造函数

结构体构造函数必须是与结构体名称相同的公共成员函数,并且没有返回类型。写法和类是类似的。struct node{ int label; node(int x):label(x){}}struct node{ int label; node(int x) { label = x; }}第一个对label的初始...

2019-09-17 16:01:21 10915

原创 C++ 类构造函数 初始化

class Line{ public: Line(double len);//构造函数声明 ~Line();//析构函数声明,析构函数不返回任何值,也不带参数,有助于在跳出程序前释放资源 private: double length;}Line::Line(double len): length(len){}//相当于...

2019-09-17 15:13:19 189

原创 c++ vector用法

申请二维数组:vector<vector<int> > array遍历有三种方法:vector<int> test1.通过数组下标遍历for(int i = 0; i < test.size(); i++) cout<<test[i]<<endl;2.通过迭代器遍历for(vector<int>:...

2019-09-17 13:35:25 105

原创 C++形参前加&表示引用

1.int a; int &ra = a;相当于变量有两个名字,ra = 1等价于a=1,并不占用存储单元,只是一个别名2.引用作为参数时void swap(int &p1, int &p2){int p; p = p1; p1 = p2; p2 = p;}swap(a,b)时会直接以变量a,b作为实参调用swap函数。引用的目的主要用于在函数参数传...

2019-09-16 15:50:44 2455 1

原创 栈和堆的区别

堆是由低地址向高地址扩展,栈是由高地址向低地址扩展。堆中内存需要手动申请和手动释放,栈中内存由OS自动申请,自动释放,存放着参数局部变量等内存。堆中频繁调动malloc和free,会产生内存碎片,降低程序效率。栈采用先进后出原则,不会产生内存碎片。堆的分配效率较低,栈的分配效率较高。栈的效率更高的原因:栈是操作系统提供的数据结构,计算机底层对栈提供了一系列支持:分配专门的寄存器...

2019-09-16 14:12:32 729

c语言实现汉密尔顿路

c语言实现汉密尔顿路。c语言实现汉密尔顿路。c语言实现汉密尔顿路。c语言实现汉密尔顿路。

2018-01-12

空空如也

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

TA关注的人

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