自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

海姐软件测试的博客

13年软件测试技术工作经历,大厂测试工程师兼测试主管。分享面试经验、测试学习路线、职场感悟、认知思考、个人成长等。

  • 博客(326)
  • 收藏
  • 关注

原创 如何理解压力、负载、性能测试?

摘要: 性能测试、负载测试和压力测试是递进的系统性能评估方法。性能测试测量正常工况下的效率(如响应时间),负载测试验证预期最大压力下的表现(如并发用户数),而压力测试则探索系统崩溃临界点(如最大并发量)。JMeter工具可实现这三类测试,如单接口性能测试、逐步加压模拟负载及异常注入模拟极端情况。常见误区包括混淆压力与负载测试,以及过度依赖复杂工具。实际项目中,需根据需求阶段选择测试类型,并组合使用以全面评估系统性能。

2025-06-11 16:40:38 280

原创 使用Jmeter做功能测试有哪些优点?

JMeter作为开源工具在功能测试中具有6大优势:1)免费开源,降低测试成本;2)跨平台支持Windows/Linux/macOS;3)多协议覆盖HTTP、数据库、API等场景;4)灵活测试逻辑与丰富断言机制;5)支持数据驱动测试;6)提供详细结果分析报告。特别适合协议级验证和数据驱动测试,但需注意其不执行JavaScript的特性。建议搭配Selenium进行UI测试,是替代商业工具的高性价比选择。

2025-06-11 16:36:29 433

原创 如何判断一个bug,是前端还是后端的?

**摘要:**作为测试工程师,精准判断Bug归属(前端/后端)的核心方法包括:1)通过抓包工具分析接口请求/响应数据,请求异常属前端,响应错误属后端;2)验证数据库与日志,数据未更新可能为后端问题;3)DOM操作验证UI层问题。典型前端Bug包括布局错乱、事件失效等,后端Bug多表现为5xx错误或逻辑缺陷。建议结合Mock测试、日志追踪和团队协作模板(如Jira+Swagger),基于数据证据而非主观猜测定位问题。掌握这套方法可高效解决90%的Bug归属问题。

2025-06-10 16:54:36 882

原创 对手机淘宝的购物车,你能想到哪些测试点?

淘宝购物车测试要点总结 淘宝购物车测试需从多维度展开:功能方面要验证商品管理(增删改查)、价格计算(优惠叠加、运费)和结算流程;UI测试需关注界面一致性、交互手势和异常提示;性能方面重点检测加载速度和多设备兼容性;安全测试包含数据加密和边界情况处理。专项测试需覆盖大促活动、国际化和无障碍场景。建议使用自动化工具覆盖核心流程,特别要注意跨端数据同步、复杂优惠叠加等易遗漏点。测试中应结合电商特性,利用抓包工具模拟异常场景,确保购物车在各种情况下的稳定性和准确性。

2025-06-10 16:50:22 341

原创 怎么测试朋友圈的点赞功能?

摘要:朋友圈点赞功能测试方案需多维度验证。功能测试包括正常点赞/取消、数据同步、权限控制等;性能测试关注高并发响应和数据量压力;兼容性覆盖不同设备和微信版本;用户体验测试交互设计和弱网场景;安全测试防止越权和注入攻击。建议结合UI/接口自动化测试,并附常见Bug示例和工具截图,便于读者理解完整测试流程。该方案适用于博客分享,重点在于功能覆盖、数据一致性及性能优化。

2025-06-03 17:20:53 734

原创 Jmeter参数化有哪几种方式?

摘要:JMeter参数化技术主要包括:1)CSV数据文件参数化(适合批量测试数据);2)用户自定义变量(用于全局静态变量);3)用户参数(按线程分配变量);4)随机变量(生成随机数据);5)函数助手(提供时间戳等动态函数);6)数据库参数化(从数据库获取数据);7)前置处理器(通过脚本生成数据);8)正则表达式提取器(从响应中提取数据)。选择方案需根据数据量、动态性、来源等因素决定,如批量数据用CSV,唯一值用随机函数,响应关联用正则提取等。

2025-06-03 17:18:43 600

原创 Bug只出现一次就消失?别慌!资深测试教你如何“破案”

面试官问无法稳定复现的Bug如何处理?这考察问题定位能力。建议采用"3步破案法": 1️⃣还原现场:记录环境快照(日志/数据库状态)、操作回放、数据溯源; 2️⃣主动诱捕:通过压力测试、混沌工程、A/B环境对比制造触发条件; 3️⃣建立防御:记录"幽灵Bug"知识库,增加监控埋点,完善容错设计。 终极方案是开启Debug日志长期监控,做到"一次偶现,终身监控"。

2025-06-01 20:32:34 312

原创 你觉得测试和开发需要怎么结合才能使软件的质量得到更好的保障?

那一刻才明白,。

2025-06-01 20:29:55 449

原创 软件测试的潜力与挑战:从“质量守门员”到“工程效能催化剂”的进化

软件测试行业正迎来爆发式增长,受DevOps、云原生和AI等技术驱动,测试自动化成为核心需求。行业呈现多元发展路径,从功能测试延伸至混沌工程、安全测试等细分领域。但测试团队仍面临技术难题(如自动化维护成本高)和认知偏见。破局关键在于技术升级(掌握自动化+混沌工程)和思维转型(从缺陷检测转向质量预防)。未来三年,元宇宙测试、区块链合约测试及LLM辅助测试将成为新机遇,质量效能工程师角色将日益重要。测试人员需把握技术融合趋势,实现从执行者到质量赋能者的跨越。

2025-05-28 18:12:12 620

原创 自动化测试的真正意义:不是“取代手工”,而是让测试更像“工程师”

自动化测试正成为行业必然趋势,其核心价值在于提升测试效率(如金融项目测试时长从3天缩短至20分钟)、确保可靠性并沉淀测试资产。优先自动化高重复性任务(登录/支付等核心链路)和数据驱动测试,但需慎用于一次性测试需求。落地自动化测试需关注技术选型(如Selenium/Playwright)、用例设计原则(稳定性>覆盖率)、持续集成整合及脚本维护策略。高级应用包括智能断言、流量回放等。关注回复“自动化书单”获取20本测试开发必读书籍。

2025-05-28 18:10:29 429

原创 做好测试用例设计工作的关键是什么?

测试用例设计是软件测试的核心环节,关键在于6点:1.深入理解需求,确保无偏差;2.灵活运用等价类、边界值等科学方法;3.保证需求、代码和场景的全面覆盖;4.注重模块化、可维护性设计;5.通过评审和复盘持续优化;6.平衡效率与质量,分层测试并优先自动化。核心思维是以需求为源头,科学设计方法为工具,持续优化维护为保障,通过团队协作实现精准测试。

2025-05-27 18:01:27 470

原创 测试报告里都包含哪些内容?

测试报告是软件测试工作的重要交付物,通常包含以下核心内容:1)基本信息(项目名称、版本号、测试周期等);2)测试概述(目标、范围及类型);3)测试环境配置;4)执行情况(用例统计、缺陷分布);5)结果分析(关键问题与结论);6)后续建议。报告应简洁客观,突出质量评估和改进建议,为项目决策提供依据。不同项目可适当调整内容,但需确保关键质量信息清晰呈现。

2025-05-27 17:59:49 511

原创 如何提高用例的覆盖率,减少漏测

本文系统讲解了提升软件测试用例覆盖率的方法。首先明确覆盖率指标(需求/代码/功能/兼容性),然后提出6大核心方法:1)基于需求分析确保无遗漏;2)采用等价类划分等科学设计方法;3)补充异常场景;4)利用代码覆盖率工具;5)历史Bug反推用例;6)自动化测试扩大覆盖。同时强调团队协作(用例评审、Checklist、缺陷预防)和工具优化的重要性。最终目标是实现新功能需求覆盖率≥95%,核心功能代码覆盖率≥80%,通过持续监控优化降低漏测率。

2025-05-25 12:56:04 864

原创 如何确定是不是一个bug?

在软件测试过程中,我们经常会遇到一些异常现象,但并非所有异常都是Bug。通常指软件的实际行为与预期行为不一致,导致功能、性能或用户体验出现问题。(如API返回错误数据)→ 可能是第三方问题,不算本系统Bug。(如有报错,附上Console日志或服务器日志):软件未按照需求规格说明(PRD/SRS)运行。如果PRD未明确说明,需与产品经理确认,可能是。:简明扼要(如:“购物车结算时价格计算错误”)如果软件行为与PRD(产品需求文档)不一致,:界面显示异常、交互不符合用户习惯。(需求文档、行业标准、用户常识)

2025-05-25 12:54:00 839

原创 如何全面测试一个页面?| 测试工程师的完整方法论

本文系统总结了Web和App测试的完整方案,涵盖功能测试(正向/逆向流程、表单验证、交互测试)、UI兼容性测试(响应式布局、多浏览器适配)、性能测试(加载速度、接口响应)、安全测试(XSS/CSRF防护、权限控制)以及用户体验测试(视觉一致性、无障碍访问)。同时强调通过自动化测试(UI/API)和持续集成提升效率,指出测试工程师的核心价值在于"预防Bug",需在需求、开发、测试全流程介入,运用专业工具(如JMeter、Selenium等)进行多维度验证,从而降低线上事故风险。

2025-05-24 23:44:02 911

原创 朋友圈点赞功能测试方案 | 从功能到安全的全面覆盖

测试工程师分享社交平台点赞功能的多维度测试框架,覆盖功能、兼容性、安全、性能等6大领域。包含核心场景测试(正常/取消点赞、多端同步)、边界值检查(计数显示/溢出)、兼容性验证(不同设备/网络)、安全防护(防刷赞/越权)、高并发压力测试,以及用户体验细节(视觉反馈/通知逻辑)。特别指出曾发现时间戳溢出漏洞,强调要用正交分析法全面覆盖各种测试场景组合,确保点赞功能在用户可见和不可见的层面都稳定可靠。

2025-05-24 23:41:41 567

原创 在项目中如何保证软件质量?

文章摘要:本文介绍了系统性保障软件质量的七大核心策略。首先,全流程质量管控强调从需求阶段开始参与评审,确保需求可测试性,并在设计阶段识别高风险模块。其次,分层测试体系包括单元测试、接口测试、UI测试和E2E测试,确保各层级质量。自动化测试赋能通过金字塔模型和持续集成流水线提升效率。质量门禁机制设定硬性指标和发布卡点,确保发布质量。生产环境质量监控通过线上巡检、日志分析和A/B测试保障系统稳定性。团队质量文化强调测试左移、质量右移和缺陷预防。最后,数据驱动改进通过质量看板和PDCA循环持续优化。这些策略共同作

2025-05-23 17:44:17 873

原创 功能测试用例一般包含哪些内容?

功能测试用例是确保软件需求正确实现的关键文档,其核心要素包括基础信息(用例编号、测试模块、用例标题)、测试输入与执行(前置条件、测试步骤、预期结果)、优先级与类型、实际结果与状态,以及扩展内容(依赖数据、关联需求、自动化标记)。这些要素的标准化和完整性有助于提升团队协作效率、确保测试的可追溯性,并减少功能遗漏。撰写时应注重清晰性、原子性和覆盖度,建议使用用例管理工具如TestLink或Jira来优化测试流程和缺陷管理。

2025-05-23 17:42:26 512

原创 面试官问我“在需求文档不明确的情况下,你该如何开展测试”怎么答?

"在需求不明确的情况下,我会采取四步策略:首先主动沟通,组织需求澄清会议并记录所有待确认项;最后建立完善的文档和反馈机制,确保所有测试活动和发现的问题都能追溯。在这个过程中,我会特别注意区分需求缺失和实现缺陷,帮助团队逐步完善需求规格。:组织产品、开发和测试三方会议,记录所有疑问点和待确认项。:将大功能拆解为可测试的小模块,优先测试明确的部分。:将缺陷分为"需求缺失"和"实现错误"两类分别跟踪。:绘制功能覆盖矩阵,标识测试覆盖度和风险区域。:定期向团队通报测试进展和发现的需求问题。

2025-05-22 11:24:19 349

原创 元组、列表、字典的区别(Python数据结构对比)

元组、列表和字典是Python中常用的数据结构,各自具有不同的特性和应用场景。元组(Tuple)是不可变的,使用圆括号定义,适用于存储不应被修改的数据,如测试配置参数。列表(List)是可变的,使用方括号定义,支持丰富的操作方法,适合存储动态数据,如测试用例集合。字典(Dict)是键值对结构,使用花括号定义,键必须是不可变类型,值可以是任意类型,适合存储需要快速查找的键值映射,如测试数据驱动。在测试框架开发中,合理选择数据结构能显著提升代码效率和可维护性。

2025-05-22 11:22:22 345

原创 数据库索引是什么,什么时候不适合使用?

数据库索引是一种优化查询性能的数据结构,类似于书籍的目录,能够快速定位表中的特定数据,避免全表扫描。常见的索引类型包括B树索引、哈希索引、全文索引、位图索引和复合索引。然而,索引并非在所有情况下都适用。例如,数据量小的表、频繁更新的表、低选择性的列、不用于查询条件的列、大文本或二进制字段、频繁批量导入数据的场景以及内存受限的环境可能不适合使用索引。最佳实践建议优先为选择性高的列和常用查询条件列创建索引,注意复合索引的列顺序,并定期监控和优化索引,以平衡读写性能和维护成本。合理使用索引是数据库性能优化的关键,

2025-05-20 15:26:18 639

原创 如果用户点击微博的关注图标,但是app上面没有反应,应该怎么排查这个问题?

当微博关注图标点击无反应时,软件测试工程师应遵循系统化排查流程。首先,进行基础检查,包括网络连接、APP版本、设备重启和账号状态。接着,进行功能测试,确认问题是否局限于特定功能或用户。客户端排查涉及日志检查、JavaScript错误、点击事件和UI元素状态。服务端验证则通过抓包工具分析请求和API响应。特定场景测试包括不同设备、分辨率和负载下的表现。数据与权限检查关注本地存储、APP权限和缓存数据。提交Bug报告时,需提供复现步骤、环境信息、日志、抓包数据和截图。高级排查可能涉及埋点数据、A/B测试配置和服

2025-05-20 15:23:50 309

原创 说一下响应状态码有哪些?

HTTP响应状态码根据RFC7231标准分为五类:1xx(信息类)表示请求已被接收,需要继续处理,如100 Continue和101 Switching Protocols;2xx(成功类)表示请求已被成功处理,如200 OK和201 Created;3xx(重定向类)需要客户端进一步操作,如301 Moved Permanently和304 Not Modified;4xx(客户端错误类)表示请求有误,如400 Bad Request和404 Not Found;5xx(服务端错误类)表示服务器处理请求时

2025-05-19 17:25:55 980

原创 自动化测试的框架有哪些?原理是什么?

自动化测试框架主要分为单元测试、UI自动化、接口测试、BDD和性能测试等类别,每类都有其代表工具和核心原理。单元测试框架如JUnit、PyTest和NUnit,通过断言验证代码功能;UI自动化框架如Selenium和Appium,支持Web和移动端的元素操作;接口测试框架如RestAssured和Requests,用于模拟和验证HTTP请求;BDD框架如Cucumber,将自然语言转换为可执行代码;性能测试框架如JMeter和Locust,用于模拟并发和收集性能数据。现代框架趋势包括AI增强、低代码平台和云

2025-05-19 17:22:21 832

原创 Java的线程通信机制是怎样的呢?

线程通信的核心在于状态同步与数据传递的协同控制,类似于测试团队中的协作。基础通信机制包括共享内存和wait()/notify(),其中共享内存虽然常用但存在风险,需通过volatile或synchronized保证内存可见性,而wait()/notify()则用于经典IPC场景,通过线程WAITING状态验证其有效性。高级通信方案如BlockingQueue和CountDownLatch,前者适用于测试日志处理系统,后者用于性能测试场景中的线程同步。测试工程师需掌握线程转储分析、JConsole监控和JMe

2025-05-17 18:49:23 760

原创 单进程高CPU低内存问题深度剖析——性能测试工程师的排查指南

在处理CPU密集型任务时,常见的问题是CPU与内存使用模式的不平衡,类似于医院急诊室中医生(CPU)满负荷工作而床位(内存)大量空置的情况。首要排查方向包括线程堆栈分析和GC日志验证,使用如top、jstack和jstat等命令来识别问题,如死循环、锁竞争或算法缺陷。常见原因包括计算密集型任务、死循环、锁竞争、频繁IO等待、JNI调用和配置错误。测试工程师应遵循黄金排查流程,使用工具如Arthas进行实时诊断,并通过压力测试对比验证。在测试和生产环境中,需注意不同的干扰项和红线,如避免直接使用jmap-du

2025-05-17 18:46:40 974

原创 HTTP与TCP的关系是什么?HTTP的端口有什么意义?

本文从测试工程师的视角,深入解析了HTTP与TCP协议的关系及其在网络分层模型中的交互。文章通过测试案例设计思维,将HTTP与TCP的关系类比为功能测试与单元测试的依赖关系,强调TCP作为传输层提供的基础支撑,而HTTP作为应用层则关注接口功能和性能。文章还探讨了HTTP端口的深层意义,包括默认端口的作用、测试中端口的关键作用以及安全测试场景中的应用。此外,文章提供了测试工程师必备的验证方法,如Wireshark抓包分析、Postman端口覆盖测试和Docker多端口隔离测试。最后,文章总结理解HTTP/T

2025-05-17 18:44:12 471

原创 Web服务器怎么压测?可用什么软件?

Web服务器压力测试是评估系统在高并发场景下性能表现的关键步骤。测试核心指标包括并发能力、响应效率、稳定性和资源消耗。主流压测工具包括开源的JMeter、Locust、k6、wrk,以及商业/云服务工具如LoadRunner、Gatling和阿里云PTS。压测实战步骤涉及环境准备、测试计划设计、关键配置和分布式压测。高级策略包括流量模型设计、监控联动和瓶颈分析。注意事项包括安全边界、数据真实性和结果解读。工具推荐组合根据测试需求选择,如快速验证、全链路压测或云原生场景。压测的终极目标是发现性能瓶颈并优化系统

2025-05-16 13:53:19 700

原创 用例设计:滴滴打车从轿车到完成支付如何测?

滴滴打车全流程测试用例设计从业务场景覆盖、功能逻辑分解、异常流验证三个维度展开,系统化地构建了测试方案。首先,业务流主干场景被分解为叫车、行程中、支付结算三个阶段,每个阶段都设计了核心测试用例,包括正向和异常用例,如定位准确性、车型选择逻辑、路径偏移监控、费用实时计算、多支付方式兼容等。专项测试补充了状态机验证、资损防控测试和性能测试,确保系统在不同情况下的稳定性和安全性。测试数据策略采用等价类划分设计,实战技巧包括流量回放技术、混沌工程注入和计费沙盒验证,以提高测试的覆盖率和准确性。最终输出交付物包括流程

2025-05-16 13:50:22 786

原创 TCP为什么必须三次握手?深入解析可靠传输的基石

TCP三次握手是建立网络连接的关键过程,确保通信双方能够可靠地交换数据。第一次握手,客户端发送SYN信号和序列号;第二次握手,服务器回应SYN和ACK信号,并确认客户端的序列号;第三次握手,客户端发送ACK信号,确认服务器的序列号。这一过程解决了历史连接问题、双向通信确认和序列号同步问题,防止了资源浪费和网络延迟带来的连接失效。三次握手在保证连接可靠性的同时,优化了性能,是工程实践中的最优选择。

2025-05-15 12:04:41 1065

原创 详解哈希碰撞解决方案与C++实现HashMap(附完整代码)

哈希碰撞是指不同键通过哈希函数计算得到相同索引的情况,常见解决方法包括链地址法和开放定址法。链地址法通过在每个桶中维护链表来处理碰撞,时间复杂度在最优情况下为O(1),最差情况下为O(n)。开放定址法则通过探测序列寻找下一个可用槽位,常见探测方法有线性探测、二次探测和双重哈希。C++实现链地址法HashMap时,需注意哈希函数优化、动态扩容机制和红黑树优化等关键策略。不同场景下,内存充足且查询频繁时推荐使用链地址法加红黑树优化,内存受限时则选择开放定址法。常见面试问题包括选择31作为乘数的原因、HashMa

2025-05-15 12:02:37 1029

原创 线程池的锁与信号量,为什么信号量可以实现同步,还要互斥锁?

在并发编程中,互斥锁(Mutex)和信号量(Semaphore)是两种关键的同步原语,它们的设计目的和应用场景有所不同。互斥锁主要用于保证同一时间只有一个线程访问共享资源,适用于保护临界区,如修改共享变量或操作文件。信号量则用于控制同一时间访问共享资源的最大线程数,适用于资源池管理或多线程协作,如数据库连接池或生产者-消费者模型。虽然信号量可以通过初始值设为1模拟互斥锁的功能,但互斥锁在语义上更明确,使用更安全。因此,在需要明确互斥语义的场景中,直接使用互斥锁更为合适。

2025-05-14 10:27:03 495

原创 RabbitMQ是什么?应用场景有哪些?

RabbitMQ是一款基于AMQP协议的开源消息代理中间件,广泛应用于分布式系统中的异步通信和消息传递。其核心特点包括多协议支持、高可用性、灵活路由、扩展性和可视化管理。RabbitMQ通过解耦消息的发送者和接收者,提升了系统的可扩展性、可靠性和灵活性。典型应用场景包括异步任务处理、流量削峰填谷、系统解耦与微服务通信、日志收集与数据同步以及广播消息。RabbitMQ适合对可靠性要求高、需要灵活路由和多语言支持的场景,尤其在企业级应用、微服务通信和异步任务处理中广泛应用。选择时需根据业务场景权衡吞吐量、延迟、

2025-05-14 10:22:39 1115

原创 你对压测以及后端服务架构的理解是什么?线上的部署方式是什么?

压测是通过模拟高并发、大数据量等极端负载条件,评估系统性能、稳定性和可靠性的测试方法,旨在发现并解决性能瓶颈、资源瓶颈等问题,确保系统稳定高效运行。后端服务架构定义了系统中各组件的职责、关系和通信方式,常见模式包括单体架构、微服务架构和分布式架构,各有其适用场景和优缺点。线上部署方式包括物理服务器、虚拟机、容器和云部署,选择时需综合考虑业务需求、系统规模、性能要求和成本预算,可能采用混合架构。

2025-05-13 10:04:49 754

原创 测试用例设计:腾讯应用宝的下载功能怎么测试?

测试腾讯应用宝的下载功能,需从基本功能、异常情况、性能、安全和兼容性五个方面设计测试用例。基本功能测试包括下载不同类型和大小的应用,检查下载、安装和启动是否正常,以及多任务下载、暂停恢复、网络切换和重复下载的情况。异常情况测试涉及网络不稳定、应用关闭或手机重启、存储空间不足及下载过程中收到通知等场景。性能测试关注不同网络环境下的下载速度和长时间下载的稳定性。安全测试确保下载的应用经过安全检测,防止恶意软件和用户信息泄露。兼容性测试则覆盖不同型号、操作系统版本的安卓设备,确保下载功能的广泛适用性。通过这些测试

2025-05-13 10:03:04 421

原创 用postman的时候如何区分服务器还是自己的问题?

复制下载开始测试 → 请求失败├─ 检查Postman控制台 → 显示网络错误 → 本地问题├─ 其他工具测试 → 同样失败 → 服务器问题├─ 其他环境测试 → 其他环境正常 → 特定环境配置问题└─ 同事验证 → 同事成功 → 本地环境问题掌握这些方法,你可以快速定位问题根源,提高测试效率。对于不确定的问题,建议先排除所有本地可能性再向开发团队报告服务器问题。

2025-05-12 10:03:36 1204

原创 Golang空接口的用途详解

空接口interface{}是Go语言中一个特殊且强大的工具,它不包含任何方法声明,因此所有类型都实现了空接口。其主要用途包括实现泛型编程(在Go 1.18引入泛型前)、处理未知类型的数据(如JSON解析和数据库操作)、作为容器类型存储任意类型元素以及在测试框架中灵活应用(如断言和比较)。使用空接口时,常配合类型断言或类型判断来获取具体类型。虽然空接口提供了极大的灵活性,但其性能略低于具体类型,因此在性能敏感的场景中需谨慎使用。随着Go泛型的引入,部分场景可用泛型替代,但空接口在处理多类型数据和构建通用函数

2025-05-12 10:00:33 475

原创 内存泄露,如何判断是资源泄露还是堆栈泄露?

文章摘要:软件测试工程师在定位和解决内存泄露问题时,需区分资源泄露和堆栈泄露。资源泄露涉及非内存资源未释放,如文件句柄、数据库连接等,可通过监控非堆指标和使用工具如lsof、jstack检测。堆栈泄露则指对象无法被GC回收,表现为堆内存持续增长,可通过jmap、MAT等工具分析。测试流程包括复现问题、使用监控工具、时间分析和压力测试。文章还提供了典型案例和实用检查清单,帮助测试人员有效判断内存问题类型,指导开发人员精准定位问题根源。

2025-05-11 20:24:23 1066

原创 JVM内存结构有哪些?HashMap和HashTable的区别?

JVM内存结构主要包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和运行时常量池。程序计数器是线程私有的,记录当前线程执行的字节码行号,是唯一不会出现OOM的区域。Java虚拟机栈和本地方法栈也是线程私有的,存储栈帧和本地方法,可能出现StackOverflowError和OutOfMemoryError。Java堆是线程共享的,存放对象实例,是GC主要管理区域,可能出现OutOfMemoryError。方法区存储类信息、常量、静态变量等,JDK8后由元空间实现,可能出现OutOfMemor

2025-05-11 20:21:44 384

原创 什么是线程和应用?线程和进程区别是什么?

本文详细介绍了进程和线程的核心概念、关键区别及其在现代开发中的应用。进程是操作系统分配资源的基本单位,具有独立的内存空间和较高的容错性,如Android中每个APP默认运行在独立进程。线程是进程内的执行单元,共享进程资源,通信成本低但容错性较弱,如Android主线程ANR可能导致整个进程退出。文章通过代码示例和现实场景对比了进程和线程的资源占用、创建/销毁成本、通信方式和典型应用。此外,还探讨了线程的隐藏风险(如竞态条件和死锁)及其解决方案,以及现代演进中的协程和进程池/线程池的应用场景。最后,文章提出了

2025-05-10 17:00:11 619

空空如也

空空如也

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

TA关注的人

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