11.14学习笔记 1.new和malloc的区别最大的区别:new在申请空间的时候会调用构造函数,malloc不会调用构造函数的作用:(1)给创建的对象建立一个标识符(标识符就是变量名);(2)为对象数据成员开辟内存空间;(3)完成对象数据成员的初始化。申请失败返回:new申请空间失败后返回的是错误码bad_alloc,malloc申请空间失败后会返回NULL。属性上:new/delete是C++关键字需要...
11.13学习笔记 1.判断二叉搜索树后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { vector<int> left...
11.12学习笔记 1.topK问题题目10亿int整型数,一台可用内存为1G的机器,时间复杂度要求O(n),统计只出现一次的数。分析首先分析需要多大的内存才能表示10亿的数,一个int型占4个字节,10亿就是40亿字节,约等于4GB。如果要完全读入内存的话明显内存不够用。一般思路有两种:位图法:用一个bit位来标识一个int型整数。分治法:分批处理这10亿数。1.1位图法int型整数是4个字节,即3...
11.11学习笔记 小知识点9.树的高度和深度深度从根开始,自上而下。**高度从叶子节点开始,自下而上。**从日常习惯来看,楼层的高度不也是从下往上数,深度从上往下数。10.堆排序时间复杂度堆排序(这里指最大堆,最小堆同理)就是每次取堆的根节点作为最大值,然后将最后一个节点作为根节点进行堆调整。即堆排序的时间等于建堆的时间和进行堆调整的时间。10.1 建堆建堆是一个自下而上的过程(bottom-up)...
11.10学习笔记 Leetcode1.前k个高频元素给定一个整数数组,返回出现频率前k高的元素。思路:先用map统计各个数字出现频率。然后利用优先队列构建小顶堆(前k大构建小顶堆,前k小构建大顶堆),最后把最终的小顶堆输出。class Solution {public: vector<int> topKFrequent(vector<int>& nums, int ...
11.8学习笔记 小知识点6.运算符重载7.友元友元函数不是类的成员,但是可以访问类的私有成员。除了友元函数还有友元类。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等需要的时间开销),但是它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。友元函数友元函数定义在类外,不属于任何类,但是需要在类的定义中声明,声明时只需要在友元的名称前加关键字friend。声明放在类的私有部...
11.6学习笔记 小知识点1.map和unordered_map的区别1.1 内部实现机理map:map内部实现了一个红黑树,该结构具有自动排序的功能,所以map内部是有序的。unordered_map:内部实现了一个哈希表,顾名思义也知道是无序的。1.2 优缺点以及适用场合map优点:(1)有序性。(2)红黑树结构。效率比较高,很多操作都可以在logn的时间复杂度下实现。缺点:空间占...
11.1学习笔记 6. HTTP状态码当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。HTTP状态码英文为HTTP Status Code。常见的HTTP状态码:200301-资源(网页等)被永久转移到其它URL404-请求的资源(网页等)不存在50...
10.31学习笔记 1 HTTP1.0与HTTP1.1的区别1.1 HTTP的历史在HTTP建立之初,是作为一个浏览器,为了将超文本标记语言(HTML)文档从Web服务器传送到客户端。对于前端来说,我们所写的HTML页面将要放在Web服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了Web2.0以来,我们的页面变得复杂,不仅仅是一些简单的文字和图片,同时我们的HTML页面有了CSS(一种为结构...
10.30 学习笔记 2.2四次挥手2.2.1四次挥手的详述假设客户端发起中断连接请求,也就是发送FIN报文。服务器端接收到到FIN报文,意味着客户端没有数据要发送了,但是如果服务器端还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据,服务器先发送ACK,意味着服务器端还有数据需要发送。这时候客户端进入FIN_WAIT状态,继续等待服务器端的FIN报文。当服务器端确定数据发送完成,则向客户端发送...
10.29学习笔记 面经总结1.计算机网络模型OSI由下到上:物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化。数据链路层:通过各种控制协议,把有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。网络层:通过路由选择算法为报文或分组通过通信子网选择最佳的路径。传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正...
10.26 学习笔记 进程(process)和线程(thread)http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html进程就好比工厂的车间,它代表CPU能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。线程就好比车间里的工人,一个进程可以包括多个线程。车间里的空间是工人共享的,比如许多房间是每个工人都...
10.25学习笔记 Redis1.内存地址对齐内存地址对齐,是一种在计算机内存中排列数据、访问数据的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐。当今的计算机在计算机内存中读写数据时是按照字(word)大小块来进行操作的(在32位系统中, 数据总线宽度位32,每次读取4字节,地址总线宽度为32,因此最大的寻址空间为2的32次方=4GB,但是最低两位A[0],A[1]不用于寻址,A...
10.24学习笔记 剑指Offer二刷1.顺时针一圈圈的打印矩阵class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { int lenC = matrix[0].size(); int lenR = matrix.size(); ...
10.23学习笔记 剑指Offer以后全都用java实现了,其实c++和java的基本语法也没差多少。 1.输入二叉树A和B,判断B是否是A的子结构。(空树不为任何树子结构)。 public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root1 == null |...
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++)...
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-...
学习笔记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类型...
学习笔记10.17 Redis重新理解一下rehash。dictht ht[2]:在字典dict的内部有两张哈希表,作用是一对滚动数组。rehash就是让哈希表的负载因子保持在一个合理的范围之内,避免哈希表保存的键值对数量太多或者太少。dt[0]是旧表,dt[1]是新表,当哈希表的大小需要动态改变的时候,旧表的元素就往新表中迁移,新表变成旧表,从而达到资源的复用和效率的提升。Rehash源码:in...