
磁盘字节和比特的问题
1B = 8bit
序号只能是4的倍数。
- 物理块大小1KB,540MB,即540K个分区,计算 2^19 < 540K < 2^20,所以序号是20个bit,且20是4的倍数。每个序号需要20 / 8 = 2.5B的空间存储。
540MB需要540K * 2.5B = 1350KB即1.35M 。
- 1.2GB,即1200K个分区,2^20 < 1200K < 2^21,也就是需要21个bit才能存储,但是序号只能是4个倍数,所以需要24个bit,也就是3B的空间。
1.2GB需要1200K * 3B = 3600KB即3.6M
数据元素与数据项

现在我们有个场景,想快速找到上图链表中的 10 这个元素,只能从头开始遍历链表,直到找到我们需要找的元素。查找路径:1、3、4、5、7、8、9、10。这样的查找效率很低,平均时间复杂度很高O(n)。那有没有办法提高链表的查找速度呢?如下图所示,我们从链表中每两个元素抽出来,加一级索引,一级索引指向了原始链表,即:通过一级索引 7 的down指针可以找到原始链表的 7 。那现在怎么查找 10 这个元素呢?
先在索引找 1、4、7、9,遍历到一级索引的 9 时,发现 9 的后继节点是 13,比 10 大,于是不往后找了,而是通过 9 找到原始链表的 9,然后再往后遍历找到了我们要找的 10,遍历结束。有没有发现,加了一级索引后,查找路径:1、4、7、9、10,查找节点需要遍历的元素相对少了,我们不需要对 10 之前的所有数据都遍历,查找的效率提升了。
那如果加二级索引呢?如下图所示,查找路径:1、7、9、10。是不是找 10 的效率更高了?这就是跳表的思想,用“空间换时间”,通过给链表建立索引,提高了查找的效率。

以此类推,当有巨大数据量时,跳表的查找速度无疑不是一个巨大的提升
NumberList是一个顺序容器,以下代码执行后,NumberList里的元素依次为:
List<int> NumberList = new List<int>(){2,4,1,3,5};
for(int i = 0;i<NumberList.Count;++i)
{
int v = NumberList[i];
if(v%2 = = 0)
{
NumberList.Remove(v);//删除的是元素,而非下标
}
}
初始时为 {2,4,1,3,5} v=NumberList[0]=2; 2是偶数,删除2。 {4,1,3,5}
v=NumberList[1]=1 1为奇数,NumberList不变。
v=NumberList[2]=3 3为奇数,NumberList不变。
v=NumberList[3]=5 5为奇数,NumberList不变。
最后NumberList中的元素为{4,1,3,5}

关于栈的叙述中正确的是:
关于栈和堆的区别
关于堆内存和栈内存
堆和栈的区别主要有五大点:
1)申请方式不同:栈由系统自动分配,而堆是人为申请开辟的;
2)申请大小不同:栈获得的空间较小,而堆获得的空间较大;
3)申请效率的不同:栈由系统自动分配,速度较快,而堆一般速度比较慢;
4)存储内容的不同:栈在函数调用时,函数调用语句的下一条可执行语句的地址第一个进栈,然后函数各个参数进栈,其中静态变量是不进栈的,而堆中一般是在头部用一个字节存放堆的大小,堆中的具体内容是人为安排的;
5)底层不同,栈是连续的空间,而堆是不连续的空间。
栈自动堆人为,栈小堆大,栈快堆慢,栈连续而堆不连。
卡特兰数,计算按出栈的先后顺序组成不同的字符串,最多能有多少个
用俩个栈模拟实现一个队列,如果栈的容量分别是O和P(O>P),那么模拟实现的队列最大容量是多少?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XmM6Ghab-1670118894993)(牛客网强化训练.assets/5138660_1563951105758_F85D9B59D712E39D2A727F0F3373E16C.png)]
在Windows中,关于栈和堆
栈区(stack)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事。
区别:
管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生内存溢出。
空间大小:堆内存几乎是没有什么限制。栈一般都是有一定的空间大小。
碎片问题:对于堆来讲,频繁的new/delete会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题。
分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。
分配效率:栈的效率比较高。堆的效率比栈要低得多。
增长方向:堆的增长方向是从程序低地址到高地址向上增长,而栈的增长方向刚好相反(实际情况可能不是这样的,与CPU的体系结构有关)
注意:这里的堆和数据结构中的堆没啥关系。
中缀转后缀的技巧->A + (B + C) * D
同样适用于中缀转前缀
堆栈是一种LIFO的数据结构
HTTP常见状态码及其原因(引用博客链接用于学习使用,如有侵权联系删除)
200 success 请求成功
3xx 请求重定向
301 Moved Pemanently 永久跳转
302 Moved Temporarily 临时跳转
4xx 客户端请求发生错误
400 Bad Request 客户端请求错误
403 Forbidden 客户端操作权限不够或者服务端禁止该IP进行访问
404 Not Found 客户端页面路径错误,找不到该文件
5xx 服务端出现问题
500 Internet Server Error 服务端程序内部代码错误
502 Bad Gateway 服务端网关错误,请求发送到网关时服务器繁忙或者处于关闭状态
504 Gateway Timeout 服务端请求超时