青少年编程与数学 02-020 C#程序设计基础 15课题、异常处理

news2025/6/7 14:37:05

青少年编程与数学 02-020 C#程序设计基础 15课题、异常处理

  • 一、异常
    • 1. 异常的分类
    • 2. 异常的作用
    • 小结
  • 二、异常处理
    • 1. 异常处理的定义
    • 2. 异常处理的主要组成部分
    • 3. 异常处理的作用
    • 小结
  • 三、C#异常处理
    • 1. 异常的基本概念
    • 2. 异常处理的关键字
    • 3. 异常处理的流程
    • 4. 自定义异常
    • 5. 异常处理的最佳实践
    • 6. 使用`using`语句
    • 7. 异常的传播
    • 小结
  • 四、C#异常处理中的嵌套
    • 1. 嵌套的`try-catch`结构
        • 基本形式
        • 处理逻辑
    • 2. 嵌套的`try-catch-finally`结构
        • 基本形式
        • 处理逻辑
    • 3. 异常的传播与嵌套处理
        • 异常的传播
        • 嵌套处理的场景
    • 4. 嵌套异常处理的最佳实践
        • 捕获具体的异常
        • 资源清理
        • 避免过度嵌套
    • 5. 示例:嵌套异常处理
    • 小结
  • 五、异常处理和程序调试
    • 1. 异常处理
        • 主要功能:
    • 2. 程序调试
        • 主要功能:
    • 3. 异常处理与程序调试的关系
        • 异常处理是调试的一部分
        • 调试工具支持异常处理
        • 异常处理有助于提高调试效率
    • 4. 调试有助于优化异常处理
    • 5. 最佳实践
    • 小结
  • 总结

摘要:本文详细介绍了C#程序设计中的异常处理机制。首先解释了异常的定义、分类及与错误的区别,然后阐述了异常处理的定义、组成部分及作用。重点探讨了C#中异常处理的具体实现,包括异常的基本概念、关键字、处理流程、自定义异常、最佳实践以及using语句的使用。此外,还讨论了异常处理的嵌套机制及其应用,并提出了最佳实践。最后,分析了异常处理与程序调试的关系,强调了异常处理在调试中的重要性及调试工具的支持,提出了相关最佳实践。通过合理使用异常处理机制,可以显著提高程序的健壮性和可靠性。

关键词:C#;异常处理;运行时异常;检查型异常;关键字;嵌套机制;程序调试

AI助手:Kimi


一、异常

在程序设计中,异常(Exception) 是指程序运行过程中出现的不正常或意外的情况,这些情况通常会打断程序的正常执行流程。异常是程序运行时出现的错误或意外事件的表示,它提供了一种机制,使得程序可以在运行时检测并响应这些意外情况。

1. 异常的分类

异常通常可以分为以下几类:

运行时异常(Runtime Exception):

  • 这些异常通常是由程序运行时的错误引起的,例如空指针异常(NullPointerException)、数组越界异常(ArrayIndexOutOfBoundsException)、算术异常(ArithmeticException)等。
  • 这些异常通常是程序逻辑错误的体现,应该在开发过程中尽量避免。

检查型异常(Checked Exception):

  • 这些异常是可以在编译时被检查的,通常是由外部环境或资源引起的,例如文件未找到异常(FileNotFoundException)、输入输出异常(IOException)、SQL异常(SQLException)等。
  • 检查型异常需要在代码中显式处理,要么通过try-catch块捕获,要么通过throws声明抛出。

2. 异常的作用

  • 错误处理:异常机制允许程序在运行时检测到错误或意外情况,并采取适当的措施来处理这些错误,而不是直接导致程序崩溃。
  • 资源管理:通过异常处理,可以确保在发生错误时,已分配的资源(如文件流、数据库连接等)能够被正确释放,避免资源泄漏。
  • 程序控制流:异常可以作为一种控制流机制,用于处理程序中的错误情况,使得程序可以优雅地处理异常情况,而不是直接终止。

小结

在程序设计中,异常是运行时出现的不正常或意外情况的表示,它提供了一种机制,使得程序可以在运行时检测并响应这些意外情况。异常分为运行时异常和检查型异常,前者通常是程序逻辑错误的体现,后者通常是由外部环境或资源引起的。异常的作用在于错误处理、资源管理和程序控制流的优化。

二、异常处理

1. 异常处理的定义

异常处理(Exception Handling) 是指在程序设计中,通过特定的机制来检测、响应和处理运行时出现的异常情况,从而确保程序在遇到错误或意外时能够稳定运行,而不是直接崩溃或终止。异常处理的核心在于提供一种优雅的方式来处理程序运行时的错误和意外情况,提高程序的健壮性和可靠性。

2. 异常处理的主要组成部分

异常处理通常包括以下几个关键部分:

抛出异常(Throw):

  • 当程序运行时检测到一个错误或异常情况时,会创建一个异常对象并将其抛出。这个异常对象包含了关于错误的详细信息,如错误类型、错误消息和堆栈跟踪等。
  • 例如,在Java中,可以通过throw关键字手动抛出一个异常:
    if (x < 0) {
        throw new IllegalArgumentException("x 不能为负数");
    }
    

捕获异常(Catch):

  • 捕获异常是指在代码中定义一个或多个catch块,用于捕获并处理特定类型的异常。当异常被抛出时,程序会查找匹配的catch块来处理该异常。
  • 例如,在Java中,可以通过try-catch块来捕获异常:
    try {
        int result = 10 / 0; // 可能抛出ArithmeticException
    } catch (ArithmeticException e) {
        System.out.println("发生算术异常: " + e.getMessage());
    }
    

声明异常(Throws):

  • 在某些编程语言中,方法可以声明可能抛出的异常类型。调用该方法的代码需要处理这些异常,要么通过try-catch块捕获,要么通过throws声明继续向上抛出。
  • 例如,在Java中,可以通过throws关键字声明方法可能抛出的异常:
    public void readFile() throws FileNotFoundException {
        FileInputStream fis = new FileInputStream("file.txt");
    }
    

资源清理(Finally):

  • 在异常处理中,finally块用于确保某些代码无论是否发生异常都会被执行。这通常用于资源清理,如关闭文件流、释放数据库连接等。
  • 例如:
    try {
        FileInputStream fis = new FileInputStream("file.txt");
        // 使用文件流
    } catch (FileNotFoundException e) {
        System.out.println("文件未找到: " + e.getMessage());
    } finally {
        fis.close(); // 确保文件流被关闭
    }
    

3. 异常处理的作用

  • 错误处理:异常处理机制允许程序在运行时检测到错误或意外情况,并采取适当的措施来处理这些错误,而不是直接导致程序崩溃。
  • 资源管理:通过异常处理,可以确保在发生错误时,已分配的资源(如文件流、数据库连接等)能够被正确释放,避免资源泄漏。
  • 程序控制流:异常可以作为一种控制流机制,用于处理程序中的错误情况,使得程序可以优雅地处理异常情况,而不是直接终止。

小结

异常处理是程序设计中一种重要的机制,用于检测、响应和处理运行时出现的异常情况。它通过throwcatchthrowsfinally等关键字和语句,提供了一种优雅的方式来处理程序运行时的错误和意外情况,确保程序的稳定运行,提高程序的健壮性和可靠性。

三、C#异常处理

在C#中,异常处理是一种强大的机制,用于处理程序运行时出现的错误和意外情况。通过异常处理,程序可以在遇到错误时优雅地处理这些情况,而不是直接崩溃。C#的异常处理机制主要通过trycatchfinallythrow关键字来实现。

1. 异常的基本概念

在C#中,异常是通过Exception类及其子类来表示的。Exception类是所有异常的基类,它包含了一些基本的属性和方法,如Message(错误信息)、StackTrace(堆栈跟踪)等。常见的异常类型包括:

  • NullReferenceException:尝试访问空对象的成员时抛出。
  • ArgumentException:传递了无效的参数时抛出。
  • IOException:在进行输入输出操作时发生错误时抛出。
  • SqlException:在执行数据库操作时发生错误时抛出。

2. 异常处理的关键字

C#的异常处理主要通过以下关键字来实现:

try:

  • try块用于包裹可能抛出异常的代码。如果try块中的代码抛出了异常,程序会跳转到相应的catch块进行处理。
  • 示例:
    try
    {
        int result = 10 / 0; // 可能抛出DivideByZeroException
    }
    

catch:

  • catch块用于捕获并处理异常。可以捕获特定类型的异常,也可以捕获所有类型的异常。
  • 示例:
    try
    {
        int result = 10 / 0; // 可能抛出DivideByZeroException
    }
    catch (DivideByZeroException e)
    {
        Console.WriteLine("发生除零异常: " + e.Message);
    }
    

finally:

  • finally块用于执行清理操作,无论是否发生异常,finally块中的代码都会被执行。通常用于释放资源,如关闭文件流、数据库连接等。
  • 示例:
    try
    {
        FileStream fs = new FileStream("file.txt", FileMode.Open);
        // 使用文件流
    }
    catch (FileNotFoundException e)
    {
        Console.WriteLine("文件未找到: " + e.Message);
    }
    finally
    {
        fs.Close(); // 确保文件流被关闭
    }
    

throw:

  • throw关键字用于抛出一个异常对象。可以抛出内置的异常类型,也可以抛出自定义的异常类型。
  • 示例:
    if (x < 0)
    {
        throw new ArgumentException("x 不能为负数");
    }
    

3. 异常处理的流程

异常处理的流程如下:

  1. 将可能抛出异常的代码放在try块中。
  2. 使用一个或多个catch块捕获并处理特定类型的异常。
  3. 使用finally块执行清理操作,无论是否发生异常,finally块中的代码都会被执行。
  4. 如果需要,可以在catch块中使用throw关键字重新抛出捕获的异常,或者在其他地方使用throw关键字抛出自定义异常。

4. 自定义异常

C#允许开发者定义自己的异常类型,通过继承Exception类或其子类来实现。自定义异常可以包含额外的信息和方法,用于更精确地描述错误情况。

示例:

public class MyCustomException : Exception
{
    public MyCustomException(string message) : base(message)
    {
    }
}

public void MyMethod(int x)
{
    if (x < 0)
    {
        throw new MyCustomException("x 不能为负数");
    }
}

5. 异常处理的最佳实践

  • 捕获具体的异常:尽量捕获具体的异常类型,而不是捕获通用的Exception类。这样可以更精确地处理不同类型的异常。
  • 记录异常信息:在捕获异常时,记录异常信息(如堆栈跟踪)可以帮助后续的调试和问题排查。
  • 资源清理:确保在异常处理中释放已分配的资源,如文件流、数据库连接等。可以使用finally块或using语句来实现。
  • 避免过度捕获异常:不要在不必要的地方捕获异常,这可能会掩盖潜在的错误,使得问题难以发现和调试。
  • 避免忽略异常:捕获异常后,不要忽略异常,至少应该记录异常信息。

6. 使用using语句

在C#中,using语句提供了一种更简洁的方式来管理资源,确保资源在使用后被正确释放。using语句会自动调用资源的Dispose方法。

示例:

using (FileStream fs = new FileStream("file.txt", FileMode.Open))
{
    // 使用文件流
} // 文件流在离开using块时自动关闭

7. 异常的传播

如果一个方法抛出了异常,而该方法没有捕获处理这个异常,异常会被传播(向上抛)到调用它的方法。如果调用链上的方法都没有捕获处理这个异常,最终程序会终止并打印异常堆栈信息。

小结

C#的异常处理机制通过trycatchfinallythrow关键字来实现,允许程序在运行时检测并响应异常情况。通过合理使用异常处理机制,可以提高程序的健壮性和可靠性,确保程序在遇到错误时能够优雅地处理这些情况,而不是直接崩溃。

四、C#异常处理中的嵌套

在C#中,异常处理机制可以进行嵌套,即在一个try块中可以包含另一个try块,或者在一个catch块中可以包含另一个try-catch结构。这种嵌套机制允许更细致地处理复杂的错误情况,尤其是在处理多层调用或多个资源时。下面将详细解析异常处理机制的嵌套。

1. 嵌套的try-catch结构

基本形式

嵌套的try-catch结构允许在try块或catch块中再包含一个完整的try-catch结构。这种结构可以用于处理不同层次的错误,或者在处理一个错误时可能引发另一个错误的情况。

try
{
    try
    {
        // 内层 try 块中的代码
        int result = 10 / 0; // 可能抛出 DivideByZeroException
    }
    catch (DivideByZeroException e)
    {
        Console.WriteLine("内层 catch 捕获到除零异常: " + e.Message);
        // 在内层 catch 块中处理异常
    }
}
catch (Exception e)
{
    Console.WriteLine("外层 catch 捕获到异常: " + e.Message);
    // 在外层 catch 块中处理异常
}
处理逻辑
  • 内层try-catch:首先尝试执行内层try块中的代码。如果内层try块中的代码抛出异常,内层的catch块会尝试捕获并处理该异常。
  • 外层try-catch:如果内层的catch块无法处理异常,或者在内层catch块中又抛出了新的异常,外层的try-catch结构会尝试捕获并处理这些异常。

2. 嵌套的try-catch-finally结构

基本形式

嵌套的try-catch-finally结构允许在try块、catch块或finally块中再包含一个完整的try-catch-finally结构。这种结构可以用于确保资源的正确释放,即使在处理异常时也可能需要进行资源清理。

try
{
    try
    {
        // 内层 try 块中的代码
        FileStream fs = new FileStream("file.txt", FileMode.Open);
        // 使用文件流
    }
    catch (FileNotFoundException e)
    {
        Console.WriteLine("内层 catch 捕获到文件未找到异常: " + e.Message);
        // 在内层 catch 块中处理异常
    }
    finally
    {
        // 内层 finally 块中的代码
        fs.Close(); // 确保文件流被关闭
    }
}
catch (Exception e)
{
    Console.WriteLine("外层 catch 捕获到异常: " + e.Message);
    // 在外层 catch 块中处理异常
}
finally
{
    // 外层 finally 块中的代码
    Console.WriteLine("外层 finally 块执行");
}
处理逻辑
  • 内层try-catch-finally:首先尝试执行内层try块中的代码。如果内层try块中的代码抛出异常,内层的catch块会尝试捕获并处理该异常。无论是否发生异常,内层的finally块都会执行,用于资源清理。
  • 外层try-catch-finally:如果内层的catch块无法处理异常,或者在内层catch块中又抛出了新的异常,外层的try-catch结构会尝试捕获并处理这些异常。无论是否发生异常,外层的finally块都会执行,用于资源清理。

3. 异常的传播与嵌套处理

异常的传播

如果内层的try-catch结构无法处理某个异常,异常会被传播到外层的try-catch结构。如果外层的try-catch结构也无法处理该异常,异常会继续向上传播,直到被某个catch块捕获,或者最终导致程序终止。

嵌套处理的场景

嵌套的异常处理机制在以下场景中特别有用:

  • 多层调用:在多层方法调用中,内层方法可能抛出异常,而外层方法需要处理这些异常。
  • 资源管理:在处理多个资源时,可能需要在不同层次上进行资源清理。
  • 复杂的错误处理逻辑:在处理一个错误时可能引发另一个错误,需要在不同层次上进行处理。

4. 嵌套异常处理的最佳实践

捕获具体的异常

尽量捕获具体的异常类型,而不是捕获通用的Exception类。这样可以更精确地处理不同类型的异常。

try
{
    try
    {
        int result = 10 / 0; // 可能抛出 DivideByZeroException
    }
    catch (DivideByZeroException e)
    {
        Console.WriteLine("内层 catch 捕获到除零异常: " + e.Message);
    }
}
catch (Exception e)
{
    Console.WriteLine("外层 catch 捕获到异常: " + e.Message);
}
资源清理

确保在异常处理中释放已分配的资源,如文件流、数据库连接等。可以使用finally块或using语句来实现。

try
{
    using (FileStream fs = new FileStream("file.txt", FileMode.Open))
    {
        // 使用文件流
    }
}
catch (FileNotFoundException e)
{
    Console.WriteLine("文件未找到: " + e.Message);
}
避免过度嵌套

虽然嵌套的异常处理机制非常强大,但过度嵌套会使代码变得复杂和难以维护。尽量通过合理的异常处理逻辑来减少嵌套的深度。

5. 示例:嵌套异常处理

下面是一个完整的示例,展示了嵌套异常处理的使用场景:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        try
        {
            try
            {
                FileStream fs = new FileStream("file.txt", FileMode.Open);
                try
                {
                    int result = 10 / 0; // 可能抛出 DivideByZeroException
                }
                catch (DivideByZeroException e)
                {
                    Console.WriteLine("内层 catch 捕获到除零异常: " + e.Message);
                }
                finally
                {
                    fs.Close(); // 确保文件流被关闭
                }
            }
            catch (FileNotFoundException e)
            {
                Console.WriteLine("内层 catch 捕获到文件未找到异常: " + e.Message);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("外层 catch 捕获到异常: " + e.Message);
        }
        finally
        {
            Console.WriteLine("外层 finally 块执行");
        }
    }
}

小结

C#中的异常处理机制支持嵌套,允许在try块、catch块或finally块中再包含一个完整的try-catchtry-catch-finally结构。这种嵌套机制可以用于处理多层调用、资源管理和复杂的错误处理逻辑。通过合理使用嵌套异常处理机制,可以提高程序的健壮性和可靠性,确保在遇到错误时能够优雅地处理这些情况,而不是直接崩溃。

五、异常处理和程序调试

异常处理和程序调试是软件开发过程中两个密切相关但又有所不同的概念。它们在确保程序的正确性和稳定性方面都起着至关重要的作用。下面将详细解析它们之间的关系:

1. 异常处理

异常处理 是程序设计中的一种机制,用于在运行时检测和响应异常情况。它通过特定的语法(如trycatchfinallythrow)来捕获、处理和抛出异常,从而确保程序在遇到错误时能够稳定运行,而不是直接崩溃。

主要功能:
  • 捕获异常:通过try-catch块捕获运行时发生的异常。
  • 处理异常:在catch块中处理捕获的异常,避免程序崩溃。
  • 资源清理:通过finally块确保资源(如文件流、数据库连接等)被正确释放。
  • 抛出异常:通过throw关键字手动抛出异常,用于表示程序运行时的错误或意外情况。

2. 程序调试

程序调试 是软件开发过程中用于发现、定位和修复程序中的错误(通常称为“Bug”)的过程。调试通过使用调试工具(如断点、变量监视、调用堆栈等)来逐步跟踪程序的执行过程,帮助开发者理解程序的行为,找出问题的根源并加以修复。

主要功能:
  • 发现错误:通过运行程序并观察其行为,发现潜在的错误。
  • 定位错误:使用调试工具逐步跟踪程序的执行过程,确定错误发生的具体位置。
  • 修复错误:找到错误的原因并进行修复,确保程序按预期运行。
  • 验证功能:验证程序是否实现了预期的功能,确保每个功能模块都符合需求规格说明书的要求。

3. 异常处理与程序调试的关系

异常处理是调试的一部分

异常处理机制可以帮助开发者在调试过程中更容易地发现和定位错误。通过捕获异常并记录异常信息(如堆栈跟踪),开发者可以快速了解错误发生的具体位置和原因。这使得调试过程更加高效,减少了手动排查错误的时间。

调试工具支持异常处理

调试工具(如Visual Studio、Eclipse等)提供了强大的功能来支持异常处理。例如:

  • 异常断点:调试工具可以设置异常断点,当程序抛出特定类型的异常时自动暂停,方便开发者检查程序状态。
  • 异常信息查看:调试工具可以显示异常的详细信息,包括异常类型、错误消息和堆栈跟踪,帮助开发者快速定位问题。
  • 异常处理代码调试:调试工具可以进入catch块和finally块,帮助开发者验证异常处理逻辑的正确性。
异常处理有助于提高调试效率

通过合理使用异常处理机制,可以减少程序在运行时的崩溃次数,使得调试过程更加平稳。例如:

  • 捕获和处理常见异常:通过捕获和处理常见的运行时异常(如空指针异常、数组越界异常等),可以避免程序频繁崩溃,减少调试中断的次数。
  • 记录异常信息:通过记录异常信息(如日志),可以在调试过程中快速回顾和分析错误,提高调试效率。

4. 调试有助于优化异常处理

调试过程中,开发者可以验证异常处理逻辑的正确性和有效性。例如:

  • 验证异常处理代码:通过逐步调试catch块和finally块,确保异常处理逻辑能够正确执行,资源能够被正确释放。
  • 优化异常处理策略:通过调试,开发者可以发现异常处理逻辑中的潜在问题,如不必要的异常捕获、异常处理代码的冗余等,从而优化异常处理策略。

5. 最佳实践

  • 合理使用异常处理:不要过度依赖异常处理来控制程序的正常流程。异常处理应该用于处理真正的错误和意外情况。
  • 记录异常信息:在捕获异常时,记录详细的异常信息(如堆栈跟踪),以便后续的调试和问题排查。
  • 使用调试工具:充分利用调试工具提供的功能,如异常断点、异常信息查看等,提高调试效率。
  • 验证异常处理逻辑:通过调试验证异常处理逻辑的正确性,确保在异常发生时程序能够稳定运行并正确处理资源。

小结

异常处理和程序调试是软件开发过程中两个密切相关的重要环节。异常处理机制通过捕获和处理运行时的错误,帮助程序在遇到错误时能够稳定运行,而不是直接崩溃。调试工具则通过提供强大的功能,帮助开发者发现、定位和修复程序中的错误。通过合理使用异常处理机制和调试工具,可以显著提高程序的健壮性和开发效率,确保软件的高质量和可靠性。

总结

本文主要介绍了C#程序设计中的异常处理机制及其重要性。首先阐述了异常的定义、分类(运行时异常和检查型异常)以及异常与错误的区别。接着详细讲解了异常处理的定义、组成部分(抛出异常、捕获异常、声明异常和资源清理)以及其作用。然后深入探讨了C#中异常处理的具体实现,包括异常的基本概念、关键字(trycatchfinallythrow)、异常处理流程、自定义异常、最佳实践以及using语句的使用。此外,还讨论了异常处理的嵌套机制及其在多层调用和资源管理中的应用,并提出了嵌套异常处理的最佳实践。最后,分析了异常处理与程序调试的关系,强调了异常处理在调试中的作用以及调试工具对异常处理的支持,提出了相关最佳实践。通过合理使用异常处理机制,可以显著提高程序的健壮性和可靠性,确保软件的高质量和稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2401178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ToolsSet之:XML工具

ToolsSet是微软商店中的一款包含数十种实用工具数百种细分功能的工具集合应用&#xff0c;应用基本功能介绍可以查看以下文章&#xff1a; Windows应用ToolsSet介绍https://blog.csdn.net/BinField/article/details/145898264 ToolsSet中Text菜单下的XML Tool工具是一个Xml工…

keepalived定制日志bug

keepalived定制日志bug 源码安装apt安装endl 源码安装 在/etc/rsyslog.d/目录下创建 keepalived的日志配置文件keepalived.conf [rootubuntu24-13:~]# vim /etc/rsyslog.d/keepalived.conf [rootubuntu24-13:~]# cat /etc/rsyslog.d/keepalived.conf local6.* /var/log/keepa…

数据库系统概论(十三)详细讲解SQL中数据更新(插入,修改与更新)

数据库系统概论&#xff08;十三&#xff09;详细讲解SQL中数据更新 前言一、数据插入1. 插入数据是什么&#xff1f;2.插入单条数据&#xff08;插入元组&#xff09;场景 1&#xff1a;指定部分列插入场景 2&#xff1a;不指定列名&#xff08;插入所有列&#xff09;场景 3&…

极客时间-《搞定音频技术》-学习笔记

极客时间-《搞定音频技术》-学习笔记 语音基础知识 https://www.zhangzhenhu.com/audio/feature.html 序章-0 作者说这个语音技术啊&#xff0c;未来肯定前景大好啊&#xff0c;大家都来学习&#xff0c;然后给出了课程的脑图 音频基础 什么是声音 声音的三要素是指响度、…

网络攻防技术十三:网络防火墙

文章目录 一、网络防火墙概述1、网络型防火墙&#xff08;网络防火墙&#xff09;2、Web应用防火墙3、数据库防火墙4、主机防火墙&#xff08;个人防火墙&#xff09;5、网络防火墙的功能 二、防火墙工作原理1、无状态包过滤防火墙2、有状态包过滤防火墙&#xff08;状态检测/动…

Express 集成Sequelize+Sqlite3 默认开启WAL 进程间通信 Conf 打包成可执行 exe 文件

代码&#xff1a;express-exe: 将Express开发的js打包成exe服务丢给客户端使用 实现目标 Express 集成 Sequelize 操作 Sqlite3 数据库&#xff1b; 启动 Sqlite3 时默认开启 WAL 模式&#xff0c;避免读写互锁&#xff0c;支持并发读&#xff1b; 利用 Conf 实现主进程与 Ex…

2024年认证杯SPSSPRO杯数学建模D题(第二阶段)AI绘画带来的挑战解题全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 D题 AI绘画带来的挑战 原题再现&#xff1a; 2023 年开年&#xff0c;ChatGPT 作为一款聊天型AI工具&#xff0c;成为了超越疫情的热门词条&#xff1b;而在AI的另一个分支——绘图领域&#xff0c;一款名为Midjourney&#xff08;MJ&#xff…

DOCKER使用记录

1、拉取镜像 直接使用docker pull <image>&#xff0c;大概率会出现下面的报错信息&#xff1a; (base) jetsonyahboom:~$ docker pull ubuntu:18.04 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while …

【深度学习相关安装及配环境】Anaconda搭建虚拟环境并安装CUDA、cuDVV和对应版本的Pytorch,并在jupyter notebook上部署

目录 1. 查看自己电脑的cuda版本2.安装cuda关于环境变量的配置测试一下&#xff0c;安装完成 3.安装cuDVV环境变量的配置测试一下&#xff0c;安装完成 4.创建虚拟环境先安装镜像源下载3.11版本py 5.在虚拟环境下&#xff0c;下载pytorch6.验证是否安装成功7.在jupyter noteboo…

web3-区块链基础:从区块添加机制到哈希加密与默克尔树结构

区块链基础&#xff1a;从区块添加机制到哈希加密与默克尔树结构 什么是区块链 抽象的回答: 区块链提供了一种让多个参与方在没有一个唯一可信方的情况下达成合作 若有可信第三方 > 不需要区块链 [金融系统中常常没有可信的参与方] 像股票市场&#xff0c;或者一个国家的…

TCP小结

1. 核心特性 面向连接&#xff1a;通过三次握手建立连接&#xff0c;四次挥手终止连接&#xff0c;确保通信双方状态同步。 TCP连接建立的3次握手 抓包&#xff1a; client发出连接请求&#xff1b; server回应client请求&#xff0c;并且同步发送syn连接&#xff1b; clien…

Python 打包指南:setup.py 与 pyproject.toml 的全面对比与实战

在 Python 开发中&#xff0c;创建可安装的包是分享代码的重要方式。本文将深入解析两种主流打包方法——setup.py 和 pyproject.toml&#xff0c;并通过一个实际项目示例&#xff0c;展示如何使用现代的 pyproject.toml 方法构建、测试和发布 Python 包。 一、setup.py 与 pyp…

性能优化 - 案例篇:缓存_Guava#LoadingCache设计

文章目录 Pre引言1. 缓存基本概念2. Guava 的 LoadingCache2.1 引入依赖与初始化2.2 手动 put 与自动加载&#xff08;CacheLoader&#xff09;2.2.1 示例代码 2.3 缓存移除与监听&#xff08;invalidate removalListener&#xff09; 3. 缓存回收策略3.1 基于容量的回收&…

python入门(1)

第一章 第一个python程序 1.1 print函数 print方法的作用 : 把想要输出的内容打印在屏幕上 print("Hello World") 1.2 输出中文 在Python 2.x版本中&#xff0c;默认的编码方式是ASCII编码方式&#xff0c;如果程序中用到了中文&#xff0c;直接输出结果很可能会…

【PDF提取表格】如何提取发票内容文字并导出到Excel表格,并将发票用发票号改名,基于pdf电子发票的应用实现

应用场景 该应用主要用于企业财务部门或个人处理大量电子发票&#xff0c;实现以下功能&#xff1a; 自动从 PDF 电子发票中提取关键信息&#xff08;如发票号码、日期、金额、销售方等&#xff09;将提取的信息整理并导出到 Excel 表格&#xff0c;方便进行财务统计和报销使…

Hugging Face 最新开源 SmolVLA 小模型入门教程(一)

系列文章目录 目录 系列文章目录 前言 一、引言 二、认识 SmolVLA&#xff01; 三、如何使用SmolVLA&#xff1f; 3.1 安装 3.2 微调预训练模型 3.3 从头开始训练 四、方法 五、主要架构 5.1 视觉语言模型&#xff08;VLM&#xff09; 5.2 动作专家&#xff1a;流匹…

封闭内网安装配置VSCode Anconda3 并配置 PyQt5开发

封闭内网安装配置VSCode Anconda3 并配置 PyQt5开发 零一 vscode1.1 下载 vscode1.2 下载插件1.3 安装 二 anaconda 32.1 下载2.2 新建虚拟环境1 新建快捷方式,启动base2 新建虚拟环境 3 配置Qt designer3.1 designer.exe和uic.exe3.2 设置插件,3.4 ui文件转为py文件 4使用4.1 …

大话软工笔记—组合要素2之逻辑

1. 逻辑的概念 逻辑&#xff0c;指的是思维的规律和规则&#xff0c;是对思维过程的抽象。 结合逻辑的一般定义以及信息系统的设计方法&#xff0c;对逻辑的概念进行抽提、定义为三个核心内涵&#xff0c;即&#xff1a;规律、顺序、规则。 &#xff08;1&#xff09;规律&a…

7.Demo Js执行同步任务,微任务,宏任务的顺序(3)

一个包含 同步任务、微任务&#xff08;Promise&#xff09;、宏任务&#xff08;setTimeout&#xff09; 的例子&#xff0c;JS 是怎么调度这些任务的。 &#x1f3af; 例子代码&#xff08;建议复制到浏览器控制台运行&#xff09; console.log(‘同步任务 1’); setTimeo…

边缘计算网关赋能沸石转轮运行故障智能诊断的配置实例

一、项目背景 在环保行业&#xff0c;随着国家对大气污染治理要求的不断提高&#xff0c;VOCs废气处理成为了众多企业的重要任务。沸石转轮作为一种高效的VOCs治理设备&#xff0c;被广泛应用于石油化工、汽车制造、印刷包装等主流行业。这些行业生产规模大、废气排放量多&…