【测试开发八股文】基本数据结构知识

数据结构知识(堆、栈、list、set、dict、hash、树、图、队列、链表)

一、堆和栈

堆(Heap)

  • 可以把堆理解为:队列优先,先进先出。
  • 只能在一端(称为栈顶(top))对数据项进行插入和删除。

栈(Stack)

  • 可以把栈理解为:后进先出、先进后出 的列表。
  • 如果说“堆栈”,指的也是“栈”
  • 只能在一端(称为栈顶(top))对数据项进行插入和删除。
  • 元素的添加从列表尾部加入,删除也是从列表尾部删除。对应python中是append()和pop()。

堆(Heap)栈(Stack),在不同场景下代表含义不同,通常有两层含义:

  • 程序内存布局场景下,堆与栈表示的是两种内存管理方式;
  • 数据结构场景下,堆与栈表示两种常用的数据结构。

堆与栈是操作系统对进程占用内存空间的两种管理方式,主要有以下几种区别:

(1)管理方式不同。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;

(2)空间大小不同。每个进程拥有的栈的大小要远远小于堆的大小。理论上,程序员可申请的堆大小为虚拟内存的大小,进程栈的大小 64bits 的 Windows 默认 1MB,64bits 的 Linux 默认 10MB;

(3)生长方向不同。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低。

(4)分配方式不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是由操作系统完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由操作系统进行释放,无需我们手工实现。

(5)分配效率不同。栈由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是由C/C++提供的库函数或运算符来完成申请与管理,实现机制较为复杂,频繁的内存申请容易产生内存碎片。显然,堆的效率比栈要低得多。

(6)存放内容不同。栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。当主函数调用另外一个函数的时候,要对当前函数执行断点进行保存,需要使用栈来实现,首先入栈的是主函数下一条语句的地址,即扩展指针寄存器的内容(EIP),然后是当前栈帧的底部地址,即扩展基址指针寄存器内容(EBP),再然后是被调函数的实参等,一般情况下是按照从右向左的顺序入栈,之后是被调函数的局部变量,注意静态变量是存放在数据段或者BSS段,是不入栈的。出栈的顺序正好相反,最终栈顶指向主函数下一条语句的地址,主程序又从该地址开始执行。堆,一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序员来填充的。

其他注意点:

  • 堆:容易造成大量内存碎片,可能引发用户态和核心态切换,效率较低。
  • 栈:最常见的是函数的调用过程由栈来实现,函数返回地址、EBP、实参和局部变量都采用栈的方式存放。虽然栈有众多的好处,但是由于和堆相比不是那么灵活,有时候分配大量的内存空间,主要还是用堆。
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及测试开发面试题时,以下是一些常见的八股文要点: 1. 软件测试基础知识:包括测试的定义、目的、原则和分类等。此外,了解软件开发生命周期和测试活动在其中的位置也是必要的。 2. 测试方法与技术:掌握不同的测试方法,如黑盒测试、白盒测试和灰盒测试,并能解释它们的原理和适用场景。同时,了解常见的测试技术,如边界值分析、等价类划分和决策表等。 3. 测试计划与策略:能够编写测试计划和制定测试策略。测试计划应包括测试目标、测试范围、测试资源和时间安排等。测试策略应包括测试方法、测试环境和测试数据等。 4. 编写测试用例:具备编写有效的测试用例的能力。测试用例应覆盖功能需求、非功能需求和边界条件等,并具备可重复性和可验证性。 5. 自动化测试:了解自动化测试的优势和适用场景,并熟悉至少一种自动化测试工具或框架。能够编写自动化测试脚本,并进行自动化测试执行和结果分析。 6. 缺陷管理与跟踪:了解缺陷管理的流程和工具。能够编写清晰、具体的缺陷报告,并跟踪缺陷的解决过程。 7. 性能测试与安全测试:了解性能测试和安全测试的基本概念和方法。能够设计和执行性能测试以及安全测试,并分析测试结果。 8. 团队合作与沟通能力:具备良好的团队合作和沟通能力,能够与开发人员、产品经理和其他相关人员有效协作,并及时沟通测试进展和风险。 以上是一些常见的测试开发面试八股文要点,希望对你有所帮助。请注意理解并适当展开回答,以突显你的专业知识和实际经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值