PYTHON专题-(8)我错了该怎么整?
什么是异常处理?
- 异常处理是一种机制,用于在程序执行期间发生错误或异常时,对发生的异常进行捕获、处理和恢复,以确保程序能够继续执行或正确地终止。
- 异常处理可以包括捕获异常、处理异常,以及执行相应的操作来处理异常,如输出错误信息、记录日志、回滚操作等。
- 通过异常处理,可以提高程序的健壮性和可靠性,防止程序因异常而崩溃或出现未预期的错误结果。
为什么会发生程序异常?
程序异常发生的原因可能有多种,包括但不限于以下几种情况:
- 代码错误:程序中的语法错误、逻辑错误或者算法错误可能导致异常。这些错误可能包括错误的变量类型、错误的运算、错误的循环或条件判断等。
- 系统资源不足:程序在运行过程中可能需要访问系统的资源,例如内存、磁盘空间、网络等。如果资源不足,程序可能会抛出异常。
- 外部输入错误:程序可能会接收来自外部的输入,例如用户输入、文件读取等。如果输入格式错误或者输入数据不符合预期,程序可能会出现异常。
- 并发问题:在多线程或者多进程的程序中,不正确的同步操作可能导致异常。例如,多个线程同时写入同一个变量可能导致数据竞争和异常。
- 异常情况处理不完善:程序可能没有正确处理特殊情况和异常情况,导致异常的发生。例如,程序没有处理文件不存在的情况,或者没有处理网络连接中断的情况。
这些只是一些常见的造成程序异常的原因,实际上还有很多其他的可能性。在开发和调试程序时,需要仔细分析异常的原因,并进行相应的修复和处理。
什么是Python的异常处理机制?
Python的异常处理机制是一种处理程序运行过程中出现错误的方式。当程序出现错误时,会抛出一个异常对象,而不是直接停止程序的执行。异常处理机制可以捕获并处理这些异常,以避免程序的崩溃或异常情况的发生。Python中的异常处理机制包括以下几个关键词和语法结构:
- try-except语句:用于捕获并处理异常。try块中的代码是需要被监视的代码块,当try块中的代码抛出异常时,程序会跳转到对应的except块来处理异常。
- except语句:用于定义异常处理的代码块。可以使用多个except语句来捕获不同类型的异常,也可以使用一个except语句来捕获多种类型的异常。
- else语句:可选的语句块,当try块中的代码没有抛出异常时,会执行else块中的代码。
- finally语句:可选的语句块,无论try块中的代码是否抛出异常,都会执行finally块中的代码。
异常处理机制还可以使用一些内置的异常类以及自定义的异常类来表示不同的错误类型。当程序抛出异常时,可以在except块中使用异常类来捕获特定的异常,并进行相应的处理。例如:
try:# 需要被监视的代码块# 抛出异常 except ExceptionType1:# 处理类型1的异常 except ExceptionType2:# 处理类型2的异常 else:# 当没有异常时执行的代码 finally:# 无论是否有异常都会执行的代码
最常见的异常类型有哪些?
常见的异常类型有:
- NullPointerException(空指针异常):当试图访问一个空对象的属性或调用空对象的方法时发生。
- IndexOutOfBoundsException(下标越界异常):当访问数组、列表或字符串等数据结构时,使用了超出有效范围的索引。
- ArrayIndexOutOfBoundsException(数组下标越界异常):当试图访问数组中不存在的元素时发生。
- ClassCastException(类转换异常):当试图将一个对象强制转换为不兼容的类时发生。
- IllegalArgumentException(非法参数异常):当向方法传递了一个不合法或不适当的参数时发生。
- ArithmeticException(算术异常):当在数学运算中发生错误,例如除以零时发生。
- IOException(输入输出异常):当在输入输出操作中发生错误时发生,例如文件不存在或无法读写文件。
- FileNotFoundException(文件未找到异常):当试图打开一个不存在的文件时发生。
- NoSuchElementException(元素不存在异常):当尝试从空集合或迭代器中访问不存在的元素时发生。
- RuntimeException(运行时异常):包括一系列非受检异常,例如数组相关异常、类型转换异常等。这些异常不需要显式地捕获或声明,可以选择性地处理。
当我不确定会发生异常的类型该怎么处理?
- 当你不确定会发生异常的类型时,可以使用更通用的异常类型来处理,例如捕获Exception异常。这样可以确保无论发生什么类型的异常,都能被捕获并进行相应的处理。例如:
try: # 可能会发生异常的代码 except Exception as e: # 处理异常的代码 print("发生异常:", e)- 另外,你也可以使用多个except块来处理不同类型的异常,然后在最后使用一个except块来处理未知类型的异常。例如:
try: # 可能会发生异常的代码 except ValueError: # 处理ValueError异常的代码 except TypeError: # 处理TypeError异常的代码 except Exception as e: # 处理其他类型的异常的代码 print("发生异常:", e)
什么是错误调用栈?
- 错误调用栈(Error call stack)是指在程序运行过程中发生错误时,记录错误发生位置和调用关系的数据结构。当程序出现错误时,错误调用栈会跟踪记录错误发生的位置,从错误发生的最内层函数开始,逐级记录调用的函数和位置,以便于在错误排查和调试过程中定位问题。
- 错误调用栈一般以栈的形式组织,每个栈帧代表一个函数调用,包含函数的返回地址、参数和局部变量等信息。当程序执行过程中发生错误,系统会将错误信息和当前的调用栈信息保存下来,以便后续分析和处理。
- 通过错误调用栈,开发人员可以追踪错误发生的路径,从而帮助定位错误的原因和位置。常见的错误调用栈信息包括函数名、文件名、行号等,利用这些信息可以快速定位到导致问题的代码,以便进行修复和优化。
- 错误调用栈在软件开发中是一种非常重要的调试工具,可以帮助开发人员快速定位和解决程序错误和异常。
python的错误调用栈是什么样的?
- Python的错误调用栈是一个记录代码执行过程中的函数调用情况的堆栈信息。当发生错误时,Python会将错误信息及调用栈打印出来,以便于开发人员定位错误的发生位置。
- 调用栈显示了函数调用的顺序,每一行显示了调用的函数名称和行号。最底部是错误的具体信息,最顶部是程序的入口点。例如:
Traceback (most recent call last):File "main.py", line 3, in <module>function1()File "main.py", line 7, in function1function2()File "main.py", line 11, in function2raise ValueError("Something went wrong") ValueError: Something went wrong- 在这个例子中,错误的具体信息是
ValueError: Something went wrong,错误发生在function2的第11行。function2被function1调用,而function1又被主程序调用。通过错误调用栈,可以逐级追溯函数调用过程,帮助开发人员找到错误发生的位置,并定位问题所在。
怎么主动抛出错误?
- 在Python中,可以使用
raise关键字来主动抛出错误。def divide_numbers(a, b):if b == 0:raise ValueError("除数不能为0")return a / btry:result = divide_numbers(10, 0) except ValueError as e:print("发生错误:", str(e))- 此代码中,定义了一个名为
divide_numbers的函数,用于执行两个数字的除法运算。如果除数为0,则使用raise关键字抛出一个ValueError类型的错误,并通过ValueError的构造函数传递错误消息。然后,使用try-except语句捕获并处理这个错误,将错误消息打印出来。当运行这段代码时,将输出以下结果:发生错误: 除数不能为0- 您可以根据具体的情况选择抛出不同类型的错误,例如
ValueError、TypeError等,或者您还可以自定义自己的错误类型。
怎么自定义错误类型?
- 要自定义错误类型,可以通过创建一个新的类来实现。例如:
class MyCustomError(Exception):def __init__(self, message):self.message = messagedef __str__(self):return self.message- 在这个示例中,创建了一个名为
MyCustomError的新类,它继承自Exception类。我们可以在__init__方法中定义自定义错误的初始化逻辑,并在__str__方法中定义错误的字符串表示形式。然后,可以使用raise语句来抛出自定义错误。示例如下:def divide_by_zero(number):if number == 0:raise MyCustomError("Cannot divide by zero")else:return 10 / numbertry:result = divide_by_zero(0) except MyCustomError as e:print(e)- 在上面的示例中定义了一个名为
divide_by_zero的函数,它尝试将一个数字除以零。如果数字为零,就抛出一个自定义错误,否则进行正常除法运算。在 try-except 块中,我们捕获了自定义错误,并打印错误消息。- 自定义错误类型可以让我们更好地组织和抛出自己定义的错误,以便在程序中更好地处理异常情况。
自定义的错误类型一般是继承哪个类?
- 一般情况下,自定义的错误类型会继承自内置的异常类Exception。
异常类Exception又是继承了哪个类?
- 异常类Exception继承自基类BaseException。
什么是调试代码?
- 调试代码是指在编程过程中检查和修复错误的过程。
- 调试代码的目的是找出导致程序运行不正确或崩溃的问题,并对代码进行修改以解决这些问题。
- 调试过程中常用的方法包括打印输出、断点调试、跟踪变量的值变化等。调试代码需要有耐心和细心,通过逐步调试排除错误,最终使程序达到预期的运行结果。
怎么调试python代码?
调试Python代码可以使用以下方法:
- 使用print语句:在代码的关键位置添加print语句输出变量的值,以便观察程序执行过程中变量的变化。
- 使用断点:在需要调试的代码行前添加断点(在大多数集成开发环境(IDE)中都可以通过点击行号实现),然后在程序运行时会暂停在该断点处,可以查看变量的值、单步执行代码等。
- 使用pdb模块:pdb是Python标准库中的一个调试器,可以通过在代码中插入pdb.set_trace()语句来进入调试模式,然后可以使用命令来控制程序的执行和查看变量的值。
- 使用IDE的调试工具:大多数IDE都提供了调试功能,可以设置断点、单步执行、查看变量值等功能,可以更方便地进行代码调试。
- 使用日志:在关键代码位置插入日志输出语句,将变量的值输出到日志文件中,然后通过查看日志文件来调试代码。
以上方法根据个人习惯和具体情况选择适合自己的调试方式。
什么是断言?
- 断言(Assertion)是编程中一种用于检查程序内部错误的方法。它会在程序执行过程中,对某个条件进行检测,如果该条件不符合预期,则会抛出异常或终止程序的执行。
- 断言通常用于检查程序的输入、输出,或者验证程序的逻辑是否正确。它可以帮助开发者在程序中发现潜在的问题,并在出现错误时提供有用的错误信息,以便更快地定位和修复问题。
- 断言通常包括一个条件表达式和一个可选的错误信息,当条件不满足时,断言会抛出一个异常或终止程序执行,并显示错误信息。在开发阶段,断言可以用来验证程序的正确性,而在发布版本中,断言通常会被禁用或移除,以提高程序的性能。
怎么使用断言?
- 在Python中,断言用于验证某个条件是否为真。如果条件为真,则程序继续执行;如果条件为假,则程序抛出 AssertionError 异常,并且执行被断言的语句。断言的语法格式为:
assert 条件, 错误信息- 其中,条件是需要验证的条件表达式,错误信息是可选的,用于在断言失败时显示错误消息。
def divide(a, b):assert b != 0, "除数不能为0"return a / bprint(divide(10, 2)) # 输出: 5.0 print(divide(10, 0)) # 触发断言异常,输出: AssertionError: 除数不能为0- 在上面的示例中,当调用 divide(10, 0) 时,由于除数为0,条件 b != 0 不满足,因此触发了断言异常,并且输出了错误信息 "除数不能为0"。
什么是单元测试?
- 单元测试是一种软件开发中的测试方法,用于测试软件的最小可测试单元,通常是一个函数、方法或类。单元测试可以确定软件的每个独立单元是否按照预期进行工作。它通常由开发人员编写并在软件开发过程中运行,以确保每个单元的功能和行为符合预期。
- 单元测试的目的是隔离和测试软件中的个别部分,以确保每个部分都可以独立地正常工作,而不会受到其他部分的影响。通过单元测试,开发人员可以快速发现和修复代码中的错误和缺陷,提高代码质量和可维护性。
- 单元测试通常使用自动化测试框架来编写和执行测试用例,并提供断言和验证方法来验证预期的输出和行为。它也可以模拟和替代外部依赖项,以便更好地控制测试环境和结果。
- 总之,单元测试是一种验证软件的最小可测试单元的功能和行为是否符合预期的测试方法。它是软件开发中的重要环节,可以提高代码质量、减少错误和缺陷,并增加软件的可靠性和可维护性。
怎么自动化测试框架来编写和执行测试用例?
编写和执行自动化测试用例的框架可以有多种方式,下面是一个常见的步骤:
选择一个适合你项目的自动化测试框架,例如Selenium、Appium、TestNG等。这些框架提供了丰富的功能和API来编写和执行测试用例。
安装和配置所选择的测试框架。通过使用构建工具(如Maven或Gradle)来管理依赖项,并确保框架的正确安装和设置。
创建一个测试项目。在项目中创建一个测试用例的目录结构,可以按功能或模块进行组织。在这些目录中,创建测试用例的类和方法。
编写测试用例。使用测试框架提供的API来编写测试用例。测试用例应该是独立和可重复的,每个测试用例应该测试特定的功能或场景。
运行测试用例。使用框架提供的运行器或插件来执行测试用例。可以通过命令行、集成开发环境(IDE)或连续集成工具(如Jenkins)来运行测试。
分析测试结果。框架通常会生成测试报告,用于显示测试用例的执行结果。可以查看测试报告来了解测试用例的通过情况和失败原因。
调试和修复失败的测试用例。如果测试用例失败,可以使用调试工具和日志来定位问题。修复问题后,重新运行测试用例。
定期执行测试用例。为了保持代码质量和功能稳定性,建议定期运行自动化测试。可以通过设置计划任务或使用持续集成工具来定期执行测试用例。
总而言之,编写和执行自动化测试用例的框架可以根据项目需求和技术栈的选择而有所不同。以上步骤提供了一个通用的指导来开始编写和执行测试用例。
什么是文档测试?
- 文档测试(Document testing)是一种软件测试方法,它以软件系统的相关文档(如需求文档、设计文档、用户手册等)为基础,通过对文档内容的验证和检查,来评估文档的准确性、完整性和一致性,以及文档与实际系统功能之间的匹配程度。
- 文档测试的目的是确认文档是否与实际系统相符,是否能够正确地引导开发人员、测试人员和用户进行软件开发、测试和使用。
怎么进行文档测试?
文档测试是一种评估软件文档质量和准确性的方法,以下是进行文档测试的步骤:
确定测试目标:明确需要测试的文档,例如需求规格说明书、设计文档、用户手册等。
设计测试用例:根据文档内容编写测试用例,用于检验文档中描述的功能是否正确、完整。
执行测试用例:根据设计的测试用例,按照文档中描述的步骤和预期结果进行测试。
记录测试结果:记录每个测试用例的执行结果,包括通过、失败或有问题等。
分析测试结果:对测试结果进行分析,查找文档中的错误或遗漏,并记录下来。
提出改进建议:根据测试结果,提出改进文档的建议,例如修正错误、添加更详细的说明等。
重复测试过程:根据改进建议进行文档修订后,重新执行测试用例,确认改进是否有效。
完成测试:当确认文档测试达到预期目标后,可认为文档测试完成。
注意事项:
- 在进行文档测试之前,确保文档已经完成且准备就绪。
- 在测试过程中,需要仔细阅读文档并理解其中的内容。
- 需要注意测试用例的覆盖范围和测试数据的准备。
- 测试结果需要准确记录,并及时反馈给相应的人员。
- 进行文档测试时,应该与其他形式的测试(例如单元测试、集成测试等)相结合,以获得更全面的测试覆盖。
相关文章:
PYTHON专题-(8)我错了该怎么整?
什么是异常处理? 异常处理是一种机制,用于在程序执行期间发生错误或异常时,对发生的异常进行捕获、处理和恢复,以确保程序能够继续执行或正确地终止。异常处理可以包括捕获异常、处理异常,以及执行相应的操作来处理异常…...
【自然资源】设施农业用地的学习梳理
【自然资源】设施农业用地的学习梳理 什么是设施农业用地? 2019年12月17日,自然资源部 、农业农村部印发的《关于设施农业用地管理有关问题的通知》规定:设施农业用地包括农业生产中直接用于作物种植和畜禽水产养殖的设施用地。其中&#x…...
【秋招笔试】24-07-27-OPPO-秋招笔试题(后端卷)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 💡 01.二进制反转游戏 问题描述 K小姐…...
JS 补充内容
一、dir 打印对象 二、获取 html 中的元素 常用的两种方式 其他获取元素的方法 三、 innerText 四、innerHTML 五、修改元素的值 六、鼠标放上去,显示图片的提示文字 img . title 七、获取 N ~ M 之间的随机整数 八、修改属性样式 1. style 2. className 将后面 …...
H5+JS 4096小游戏
主要实现 1.使用WASD或方向按钮控制游戏 2.最高值4096,玩到4096视为胜利 3.随机生成2、4、8方块 4.移动方块 5.合并方块 JS代码干了什么 初始化游戏界面:创建游戏板和控制按钮。 定义游戏相关变量:如棋盘大小、棋盘状态、得分等。 初始化棋…...
常见中间件漏洞(二、WebLogin合集)
目录 二、WebLogic Weblogic介绍 2.1 后台弱口令GetShell 漏洞描述 影响范围 环境搭建 漏洞复现 2.2 CVE-2017-3506 漏洞描述 影响版本 环境搭建 漏洞复现 2.3 CVE-2019-2725 漏洞描述 影响版本 环境搭建 漏洞复现 2.4 CVE-2018-2628 漏洞描述 漏洞影响 环…...
LeetCode LCR147.最小栈
LeetCode LCR147.最小栈 思路🤔: 建立两个栈,一个栈正常入栈出栈,一个栈只用于出入最小数,当push值小于minst栈顶才入栈,当pop值等于minst栈顶才出栈。 代码🔎: class MinStack { pu…...
目标检测的算法有哪些
目标检测是计算机视觉领域的一个重要任务,它涉及识别图像或视频中的对象,并确定它们的位置和类别。随着深度学习的发展,出现了许多高效且准确的目标检测算法。以下是一些主要的目标检测算法: 两阶段检测器(Region-bas…...
HDU多校-交通管控
Problem - 7498 (hdu.edu.cn) 直接dfs显然不行,达到了2^500,那么我们可以考虑枚举所有红绿灯的状态,总共有三种状态,k的范围小于等于10,因此所有状态数为3^10不会超,所以通过三进制状压dp即可完成…...
【C++】string类
🚀个人主页:奋斗的小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言💥1、标准库中的string类💥1.1string类的常用接口💥string类对象常见…...
Python中各类常用内置转换函数
Python中各类常用内置转换函数 函数功能说明int(x)将 x 转换为整数类型float(x)将 x 转换为浮点数类型str(x)将 x 转换为字符串repr(x)将 x 转换为表达式字符串eval(str)计算在字符串中的有效Python表达式,并返回一个对象list(s)将序列 s 转换为一个列表tuple(s)将…...
LangChain与JWT:构建安全认证的桥梁
LangChain与JWT:构建安全认证的桥梁 在现代Web应用和微服务架构中,安全认证是保护数据和资源访问的关键。JSON Web Tokens(JWT)作为一种广泛使用的开放标准,为安全传输提供了一种简洁而自包含的方式。LangChain&#…...
ai写作软件哪个好用?怎么帮自己找到好用的ai写作软件?
ai写作软件的出现是随着ai技术的迅猛发展下的产物,它主要应用于内容创作领域,可以是文章内容创作、视频内容创作、绘图创作等等,不同的ai写作软件可能应用的领域不同,但也有的ai写作软件应用的范围却是比较广。今天小编主要来跟大…...
关于gunicorn+flask+docker模型的高并发部署
这是一个结合了现代Web技术的高效部署方案,旨在提高Web应用的并发处理能力和可扩展性。以下是对该模型高并发部署的详细解析: 一、模型概述 GunicornFlaskDocker模型结合了Flask的轻量级和灵活性、Gunicorn的高并发处理能力以及Docker的容器化优势&…...
35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…...
ViT论文详解
文章目录 前言一、ViT理论二、模型结构三、实验结果总结 前言 ViT是谷歌团队在2021年3月发表的一篇论文,论文全称是《AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》一张图片分成16x16大小的区域:使用Transformer进行按比…...
常见中间件漏洞(三、Jboss合集)
目录 三、Jboss Jboss介绍 3.1 CVE-2015-7501 漏洞介绍 影响范围 环境搭建 漏洞复现 3.2 CVE-2017-7504 漏洞介绍 影响范围 环境搭建 漏洞复现 3.3 CVE-2017-12149 漏洞简述 漏洞范围 漏洞复现 3.4 Administration Console弱囗令 漏洞描述 影响版本 环境搭建…...
ios如何动态添加控件及动画
在ViewController中添加 // // ViewController.m // iosstudy2024 // // Created by figo on 2024/8/5. //#import "ViewController.h"interface ViewController () property (weak, nonatomic) IBOutlet UIButton *xigua; - (IBAction)xigua:(id)sender;endimpl…...
【数学建模】——【A题 信用风险识别问题】全面解析
目录 1.题目 2.解答分析 问题1:指标筛选 1.1 问题背景 1.2 数据预处理 1.3 特征选择方法 1.4 多重共线性检测 1.5 实现步骤 问题2:信用评分模型 2.1 问题背景 2.2 数据分割 2.3 处理不平衡数据 2.4 模型选择与理由 问题3:模型对…...
javascript:检测图片的宽高
1 方案描述 JavaScript提供了非常方便的FileReader和Image对象,可以帮助我们轻松实现这个功能。具体步骤如下: 获取文件输入框:首先,我们需要获取到用户选择的文件。读取文件内容:然后,通过FileReader对象…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
