东莞 网站设计,不锈钢网架公司,外汇网站开发,基于php网站建设设计190. 栈和堆在内存管理上的区别 栈 1#xff09; 栈是由系统自动分配和回收的内存。 2#xff09;栈的存储地址是由高地址向低地址扩展的。 3#xff09;栈是一个先进后出的结构。 4#xff09;栈的空间大小是一个在编译时确定常数#xff0c;即栈的大小是有限制的#x…190. 栈和堆在内存管理上的区别 栈 1 栈是由系统自动分配和回收的内存。 2栈的存储地址是由高地址向低地址扩展的。 3栈是一个先进后出的结构。 4栈的空间大小是一个在编译时确定常数即栈的大小是有限制的当申请的空间大小超限时会提示overflow。 5 栈就是那些由编译器在需要的时候分配在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。 6 栈可以视为一个临时存储空间这种临时存放数据的特性使得它经常用来存储局部变量函数参数上下文环境等。 7栈的效率比较高计算机分配专门的寄存器存放栈的地址压栈出栈都有专门的指令执行这就决定了栈的效率比较高。 堆 1堆区是向上生长的用于分配程序员申请的空间。 2在操作系统中有记录空闲内存地址的链表也有可能是位图等其他方式当系统受到程序的申请时就会遍历该链表寻找第一个大于该申请空间堆假设是FIFS当然也有可能是其他的如段进程优先等然后将该节点从链表中删除并将该节点的空间分配给程序另外对于大多数系统会在这块内存空间中的首地址处记录本次分配的大小这样代码中的delete语句才能正确的释放本内存空间。若找到的堆节点的空间大小大于所申请的空间则系统会自动将多余的空间重新放入空闲链表中也就是说堆在进行空间分配后还要做一些后续工作就会引入效率问题。 3栈是系统自动申请和释放的而堆更加强调的是手动控制需要手动申请和释放空间。 4堆可分配的空间更大但是也有较大的开销。 5堆是在程序执行的过程中动态分配的它最大的特性就是动态性。堆就是那些由new分配的内存块他们的释放编译器不去管由我们的应用程序去控制一般一个new就要对应一个delete。如果程序员没有释放掉那么在程序结束后操作系统会自动回收。 其他存储区 1 静态存储区 静态变量和全局变量都存储于静态存储区。
2常量存储区 这是一块比较特殊的存储区他们里面存放的是常量不允许修改。 常量字符串都存放在静态存储区返回的是常量字符串的首地址。
堆和栈的比较 数据结构中的堆和栈 1栈 ① 栈是先进后出的数据结构 ② 是一种运算受限的线性表 ③ 只能够在栈顶进行插入和删除元素栈顶即高地址位置 2堆 ① 通常可以被看作一棵树的数组对象 ② 堆中某个结点的值总是不大于或不小于其父结点的值 ③ 堆总是一棵完全二叉树。
191. 完全二叉树和二叉树的区别 以及在使用上的优劣
参考完全二叉树和满二叉树
完全二叉树 1除了最后一层外每一层的节点都被填满。 2如果最后一层存在节点那么这些节点从左到右依次填充不留空缺。 3完全二叉树的高度通常较小具有良好的平衡性。 4完全二叉树在堆数据结构中广泛应用如二叉最小堆和二叉最大堆堆排序和优先级队列等。 满二叉树 1满二叉树是特殊的完全二叉树 2所有层的节点都被填满。 3满二叉树的高度是固定的由节点数量决定。 4满二叉树在一些特定的数据存储和检索算法中有用但相对较少见。 最优二叉树 1最优二叉树也叫哈夫曼树是指带权路径长度最小的二叉树。在哈夫曼树中带权路径长度等于树中所有叶子节点的权值乘以它们到根节点的路径长度之和。在构造哈夫曼树的过程中节点的权值越大它距离根节点就越近。 2完全二叉树的构造不需要根据节点权值来确定而是按照深度优先的原则一层一层从左到右地填充节点。最优二叉树的构造则是基于贪心算法按照节点权值从小到大的顺序来构造。 3完全二叉树中任何一个节点的左右子节点如果存在一定是连续的而最优二叉树中同一个节点的左右子节点可能会不连续。 4最优二叉树则更多地用于信息编码和压缩等领域比如哈夫曼编码。 完全二叉树在存储和定位节点上具有优势但在插入和删除节点时可能会增加复杂度。 ① 完全二叉树可以使用数组来表示不需要使用指针来表示节点之间的关系节省了存储空间 ② 使用数组的下标可以快速定位到某个节点 ③ 插入和删除节点时需要将其调整成完全二叉树调整的过程会增加操作的复杂度。 二叉树不适合存储规模太大的数据结构相对复杂且会出现不平衡现象使得插删查操作减慢另外二叉树的存储需要额外的指针来连接节点占用了额外的空间。
192. 哈希表的底层原理
参考哈希表机器底层原理
1哈希表Hash Table是一种常用的数据结构用于实现键值对映射关系。它支持在平均常数时间内进行插入、删除和查找操作 2哈希表的底层原理是将每个键key通过一个哈希函数Hash Function转换成一个索引index然后将该键值对存储在对应索引的位置上。当需要查找一个键值对时再通过哈希函数计算出该键对应的索引并在该索引位置上查找该键值对从而实现快速查找。即f表示哈希函数而将key作为其参数来计算f(key)索引位置将value存储到该位置上 3哈希函数通常是将键值映射到一段固定长度的数字串这个数字串可以看做是该键的指纹fingerprint可以用来唯一地标识该键。一个好的哈希函数应该能够尽量避免键的碰撞Collision即不同的键映射到同一个索引上的情况否则会影响哈希表的性能。 4为了解决碰撞问题哈希表通常采用开放地址法Open Addressing或链地址法Chaining等方法来解决。在开放地址法中当发生碰撞时会继续往下一个空闲位置插入直到找到一个空闲位置而在链地址法中每个索引位置上存储的是一个链表当发生碰撞时会将新的键值对添加到链表的末尾。
193. Linux的软连接和硬链接
参考Linux中的软连接和硬链接
在Linux的文件系统中保存在磁盘分区中的文件不管是什么类型都给它分配一个编号称为索引节点号inode 。 软连接 1软连接其实就类似于咱们的快捷方式 2每次软连接都是建立一个新的inode文件的内容是指向源文件的指针 3当源文件被删除软连接就会找不到该文件或目录 4软连接的建立 ln -s [filename] soft 5当源文件不存在时也是可以建立软连接的 硬链接 1硬链接必须源文件和inode存在并且时共享一个inode只是增加了连接数 2当删除源文件的时候只要硬链接的数量大于等于1就不会真正删除源文件 3硬链接不可以跨文件系统 4硬链接相当于是给文件创建了一个别名同一个inode说明是同一个文件 5硬链接的建立ln [filename] hard 194. 产品上线之后应该关注哪些问题
1上线前进行回归测试保证主流程的流通性 2上线后进行灰度测试使用少量的数据将所有的业务流程走完保证数据的正确性和流程的畅通完整性 3上线之后还要进行监控和故障排查确保系统的稳定性和可靠性 4还要收集用户的反馈可用于进行下一次的迭代
195. 刷卡、输密码、取款、余额查询以及取卡操作就功能、性能、安全性、易用性、弱网以及高并发设计测试用例