C#探索之路基础篇(1):编程中面向过程、数据、对象的概念辨析

news2025/1/11 0:12:18

文章目录

      • C#探索之路基础篇(1):编程中面向过程、数据、对象的概念辨析
      • 1 面向过程编程
        • 1.1 概念
        • 1.2 示例代码:
        • 1.3 使用范围与时机:
        • 1.4 注意事项:
        • 1.5 通俗讲法
      • 2 面向对象编程
        • 2.1 概念
        • 2.2 示例代码
        • 2.3 使用范围
        • 2.4 注意事项
        • 2.5 通俗讲法
      • 3 面向数据编程
        • 3.1 概念
        • 3.2 示例代码
        • 3.3 适用范围
        • 3.4 注意事项
        • 3.5 通俗讲法

C#探索之路基础篇(1):编程中面向过程、数据、对象的概念辨析

1 面向过程编程

1.1 概念

面向过程编程(Procedural Programming)是一种编程范式,它将计算视为一系列的程序指令,这些指令按照顺序执行。在面向过程编程中,程序主要由一系列的函数或者过程组成,这些函数或者过程按照特定的顺序调用,以完成任务或者解决问题。

面向过程编程的主要特点包括:

  1. 顺序执行: 程序按照指定的顺序逐步执行,每一步都依赖于上一步的结果。

  2. 函数或过程: 程序主要由一系列的函数或者过程组成,每个函数或者过程负责完成特定的任务。

  3. 数据和算法分离: 在面向过程的编程中,通常会将数据和操作数据的算法分开,即将数据和对数据的处理操作分离开来,这有助于提高代码的可维护性和可重用性。

  4. 可读性较强: 面向过程的代码通常具有较好的可读性,因为它们按照顺序执行,易于理解。

  5. 适用范围: 面向过程编程通常适用于较小规模的程序和简单的问题,例如一些脚本程序或者小型工具等。

面向过程编程的代表性语言包括C语言和Pascal等。虽然面向过程编程具有一定的优点,但它也存在一些缺点,例如难以管理复杂的程序结构、难以扩展和维护等。因此,在处理大型、复杂的软件项目时,通常会选择其他更适合的编程范式,如面向对象编程或函数式编程。

1.2 示例代码:
using System;

class Program
{
    static void Main(string[] args)
    {
        // 从用户输入获取两个数
        Console.WriteLine("请输入第一个数:");
        int num1 = int.Parse(Console.ReadLine());

        Console.WriteLine("请输入第二个数:");
        int num2 = int.Parse(Console.ReadLine());

        // 调用函数计算两个数的和
        int sum = Add(num1, num2);

        // 显示计算结果
        Console.WriteLine("两个数的和为:" + sum);

        // 等待用户按任意键退出
        Console.ReadLine();
    }

    // 定义一个函数用于计算两个数的和
    static int Add(int a, int b)
    {
        return a + b;
    }
}

在这个示例中,程序按照顺序执行。首先,从用户输入获取两个数,然后调用 Add 函数计算它们的和,最后显示计算结果。整个程序是按照一系列顺序执行的,没有引入复杂的控制流程或数据结构。这就是典型的面向过程编程范式的特点。

1.3 使用范围与时机:

面向过程编程通常适合以下情况和使用范围:

  1. 小型项目或简单任务: 面向过程编程适用于小规模的项目或者解决简单任务的情况。如果你只需要完成一些简单的操作,例如对一些数据进行简单处理或者执行一些特定的任务,那么面向过程编程是一个合适的选择。

  2. 性能要求较高: 面向过程编程通常比其他编程范式更加高效,因为它直接操作数据,没有额外的抽象层。在一些对性能要求较高的场景下,例如嵌入式系统或者对计算速度要求较高的算法实现中,面向过程编程可能更适合。

  3. 简单的数据处理和转换: 如果你需要进行简单的数据处理、转换或者计算,而且这些任务可以直接用一系列的步骤来描述,那么面向过程编程可能是一个很好的选择。

  4. 学习编程的起点: 面向过程编程通常是编程学习的起点,因为它的概念相对简单,易于理解。如果你是初学者,那么从面向过程编程开始可以帮助你建立起对编程的基本理解和思维方式。

1.4 注意事项:
  1. 复杂项目和大型系统: 面向过程编程在处理复杂项目和大型系统时可能会导致代码结构混乱、难以维护和扩展的问题。因此,对于大规模的软件项目,可能更适合选择其他更具结构化的编程范式,如面向对象编程或者函数式编程。

  2. 可扩展性和可维护性要求较高: 如果你需要构建一个需要频繁扩展和维护的系统,那么面向过程编程可能不是最佳选择。因为它通常缺乏良好的组织结构和模块化设计,难以应对复杂系统的需求变化。

  3. 团队协作和代码复用: 面向过程编程通常缺乏代码复用的机制,难以实现高效的团队协作。如果你需要多人合作开发一个项目,或者希望能够在不同的项目中复用代码,那么面向对象编程可能更加适合,因为它提供了更好的封装和抽象机制。

总的来说,面向过程编程是一种简单直接的编程范式,适合解决小规模、简单任务或对性能要求较高的情况。但在处理复杂项目和大型系统时,可能需要考虑其他更具结构化和抽象的编程范式。

1.5 通俗讲法

面向过程主要用于针对局部功能的实现,它可以是一个简单的加减计算,它也可以是面向对象编程中的某一个功能的局部实现。

2 面向对象编程

2.1 概念

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将软件系统中的数据(对象)与操作数据的行为(方法或函数)组织为一个相互关联的整体。在面向对象编程中,软件系统被抽象为一组对象,这些对象通过消息传递来进行通信和交互。面向对象编程强调的是对象的概念和封装、继承、多态等特性。

面向对象编程的主要概念包括:

  1. 类与对象: 类是对象的模板或蓝图,它定义了对象的属性(成员变量)和行为(方法)。对象是类的实例,具有类定义的属性和行为。

  2. 封装(Encapsulation): 封装是将数据(属性)和操作数据的方法(行为)打包在一起的机制。通过封装,对象的内部实现细节被隐藏起来,只对外部提供有限的接口来访问和操作对象。这样可以提高代码的安全性、可维护性和可重用性。

  3. 继承(Inheritance): 继承是一种机制,允许一个类(子类)基于另一个类(父类)的定义来定义自己的属性和方法。子类继承了父类的属性和方法,并且可以在其基础上进行扩展或者修改。通过继承,可以实现代码的重用和扩展。

  4. 多态(Polymorphism): 多态是指同一个消息可以被不同的对象接收并产生不同的行为。在面向对象编程中,多态通过继承和方法重写来实现。多态性使得代码更加灵活和可扩展,能够处理不同类型的对象而不需要修改原有的代码。

面向对象编程的优点包括:

  • 模块化: 将程序分解为多个对象,每个对象负责特定的功能,使得程序结构更清晰,易于理解和维护。

  • 可重用性: 通过类和对象的封装和继承,可以实现代码的重用,减少代码的重复编写,提高开发效率。

  • 灵活性: 多态性和继承机制使得程序能够适应不同的需求和变化,使得代码更具有扩展性和适应性。

  • 可维护性: 封装机制使得对象的内部实现细节被隐藏起来,使得修改和维护代码更加方便和安全。

面向对象编程是目前软件开发中最为广泛应用的编程范式之一,许多流行的编程语言(如Java、C#、Python等)都支持面向对象编程。

2.2 示例代码
using System;

// 定义学生类
class Student
{
    // 属性
    public string Name { get; set; }
    public int Age { get; set; }
    public string Major { get; set; }

    // 构造函数
    public Student(string name, int age, string major)
    {
        Name = name;
        Age = age;
        Major = major;
    }

    // 方法
    public void DisplayInfo()
    {
        Console.WriteLine($"姓名:{Name},年龄:{Age},专业:{Major}");
    }
}

// 定义学生管理类
class StudentManager
{
    // 添加学生
    public void AddStudent(Student student)
    {
        // 在这里可以进行学生信息的存储、验证等操作
        Console.WriteLine("添加学生信息成功!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建一个学生对象
        Student student1 = new Student("张三", 20, "计算机科学");

        // 创建一个学生管理对象
        StudentManager manager = new StudentManager();

        // 添加学生到管理系统中
        manager.AddStudent(student1);

        // 显示学生信息
        student1.DisplayInfo();

        // 等待用户按任意键退出
        Console.ReadLine();
    }
}

在这个示例中,我们定义了一个 Student 类来表示学生对象,包括姓名、年龄和专业等属性,以及一个 DisplayInfo 方法用于显示学生信息。然后我们定义了一个 StudentManager 类来管理学生对象,包括添加学生等操作。最后,在主程序中创建了一个学生对象并添加到学生管理系统中,然后显示学生信息。

这个示例清晰地展示了面向对象编程的概念,通过定义类和对象来组织和管理代码,使得代码结构更加清晰、灵活和易于扩展。

2.3 使用范围

面向对象编程(OOP)适用于许多不同的使用范围和时机,但也有一些情况下它特别适合:

  1. 大型项目和复杂系统: 当你需要开发大型、复杂的软件系统时,面向对象编程能够提供一种组织代码的有效方式。通过将系统分解为多个对象,每个对象负责特定的功能或责任,可以使系统的设计和实现更加模块化和清晰,从而提高代码的可维护性和可扩展性。

  2. 团队协作: 面向对象编程提供了一种自然的结构,使得多人协作开发变得更加容易。通过定义清晰的类和对象,以及规范化的接口和继承关系,团队成员可以更容易地理解和扩展彼此的代码,提高开发效率和代码质量。

  3. 代码重用: 面向对象编程的封装和继承机制使得代码更易于重用。通过定义通用的基类或者抽象类,以及在子类中重写或者扩展父类的方法,可以实现代码的重用,减少重复编写代码的工作量。

  4. 模块化设计: 面向对象编程鼓励将系统分解为多个相互独立的模块,每个模块都包含一个或多个相关联的类。这种模块化的设计能够降低系统的复杂度,提高代码的可理解性和可维护性。

  5. 需求变更频繁: 面向对象编程使得代码更具有灵活性和适应性,能够更容易地应对需求变更。通过多态性和继承机制,可以实现对程序的修改和扩展而不影响原有的代码结构和功能。

总的来说,面向对象编程是一种通用的编程范式,适用于大多数软件开发场景。但也要注意,在一些小型、简单的项目中,可能面向对象编程会显得过于繁琐,不太适合。因此,需要根据具体的项目需求和情况来选择合适的编程范式。

2.4 注意事项

在编程的过程中,有一些注意事项可以帮助你编写出更高质量、更可维护的代码。以下是一些重要的注意事项:

  1. 理解需求: 在编码之前,确保充分理解需求和问题的本质。明确目标并且考虑到边界情况和可能的异常情况。

  2. 良好的命名和文档: 使用有意义的变量名、函数名和类名,以便于其他人阅读和理解你的代码。另外,编写清晰的注释和文档,解释代码的作用、参数含义以及返回值等信息。

  3. 模块化和可复用性: 将代码分解为小的、独立的模块,每个模块负责一个特定的功能或任务。这样做可以提高代码的可维护性和复用性,并且使得代码更易于测试和调试。

  4. 遵循编码规范和最佳实践: 遵循一致的编码规范和最佳实践有助于保持代码的统一性和可读性。例如,使用一致的缩进风格、命名约定和代码组织结构等。

  5. 异常处理: 考虑到可能发生的异常情况,并且适当地处理这些异常。使用 try-catch 块捕获异常,以保护程序免受错误的影响,并提供适当的错误处理机制。

  6. 测试和调试: 编写测试代码来验证你的程序的正确性和稳定性。进行充分的测试,并且在出现问题时使用调试工具来诊断和修复错误。

  7. 版本控制: 使用版本控制系统(如Git)来管理你的代码,确保每个版本都能够追踪和回滚。定期提交代码,并且在进行重大更改之前创建分支来保护主代码库。

  8. 持续学习和改进: 不断学习新的编程技术和工具,并且不断改进自己的编码技能。参与社区和开源项目,与其他开发者交流经验,从中学习并提高自己的水平。

通过遵循以上注意事项,你可以编写出更加清晰、健壮和可维护的代码,从而提高自己的编程效率和代码质量。

2.5 通俗讲法

面向对象编程旨在我们在实现一个模块、复杂功能的时候,对所要实现的功能进行抽象,抽象成某一个具体的类型,这么做的原因是为了后续更好的扩展。

①正如案例中的学生,当学生的信息属性变多的时候,不仅仅只是一个 名字(name)、年龄(Age)、专业(Major)的时候,我们也可以很好的进行扩展。

我们只需要在学生类中加入对应的属性。eg:如果我们想要加入成绩的属性,那我们只需要在Student类加入成绩(score)这个属性即可。

②当我们要面向不同的群体,我们想要学生有对应的类别,男学生、女学生时,我们可通过继承的方式来更加便利的去实现对应的功能。

3 面向数据编程

3.1 概念

面向数据编程(Data-Oriented Programming)是一种编程范式,它将数据视为程序设计的中心和核心,以数据的处理和转换为主要目标。与传统的面向对象编程强调对象和行为不同,面向数据编程更加关注数据的处理和操作。

面向数据编程的主要概念包括:

  1. 数据驱动: 面向数据编程将数据视为程序的驱动力,程序的设计和实现主要围绕着数据的处理展开。数据在程序中被视为一个独立的实体,程序的目标是对这些数据进行操作、转换和处理。

  2. 数据结构: 面向数据编程强调对数据的组织和管理。程序设计中的主要任务是设计合适的数据结构来存储和组织数据,以便于有效地访问和处理数据。

  3. 数据流: 面向数据编程强调数据的流动和变化。程序的执行过程可以看作是数据在不同处理阶段之间流动和转换的过程,而不是对象之间消息传递和方法调用的过程。

  4. 函数式编程思想: 在面向数据编程中,通常会使用函数式编程的思想来处理数据。函数式编程强调不可变性和纯函数,即函数的输出仅依赖于输入,不会对外部状态产生影响,这样可以更加简化数据处理过程并提高代码的可靠性和可维护性。

  5. 并行和并发处理: 面向数据编程通常更容易实现并行和并发处理,因为数据操作和转换可以相对独立地进行,不涉及共享状态和副作用的问题。

面向数据编程的主要目标是使得程序更加直观、简洁和高效,尤其适用于需要大量数据处理和计算的应用场景,如数据分析、科学计算、图形渲染等。面向数据编程通常与面向对象编程、函数式编程等其他编程范式相结合,以实现更加灵活和高效的程序设计。

3.2 示例代码
using System;

class TemperatureConverter
{
    // 将摄氏温度转换为华氏温度
    public static float CelsiusToFahrenheit(float celsius)
    {
        return celsius * 9 / 5 + 32;
    }

    // 将华氏温度转换为摄氏温度
    public static float FahrenheitToCelsius(float fahrenheit)
    {
        return (fahrenheit - 32) * 5 / 9;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 定义一个摄氏温度数组
        float[] celsiusTemperatures = { 0, 10, 20, 30, 40 };

        // 将摄氏温度转换为华氏温度并打印结果
        Console.WriteLine("摄氏温度转换为华氏温度:");
        foreach (float celsius in celsiusTemperatures)
        {
            float fahrenheit = TemperatureConverter.CelsiusToFahrenheit(celsius);
            Console.WriteLine($"{celsius}摄氏度 = {fahrenheit}华氏度");
        }

        // 定义一个华氏温度数组
        float[] fahrenheitTemperatures = { 32, 50, 68, 86, 104 };

        // 将华氏温度转换为摄氏温度并打印结果
        Console.WriteLine("\n华氏温度转换为摄氏温度:");
        foreach (float fahrenheit in fahrenheitTemperatures)
        {
            float celsius = TemperatureConverter.FahrenheitToCelsius(fahrenheit);
            Console.WriteLine($"{fahrenheit}华氏度 = {celsius}摄氏度");
        }

        // 等待用户按任意键退出
        Console.ReadLine();
    }
}

在这个示例中,我们首先定义了一个 TemperatureConverter 类,其中包含了两个静态方法用于进行温度转换。然后在 Main 方法中,我们定义了两个数组,分别存储了摄氏温度和华氏温度。通过调用 TemperatureConverter 类中的方法,将摄氏温度转换为华氏温度,或者将华氏温度转换为摄氏温度,并打印转换结果。

这个示例中,我们将数据(温度值)作为程序的核心,并围绕这些数据进行转换操作,体现了面向数据编程的概念。

3.3 适用范围
  1. 数据密集型应用程序: 面向数据编程适用于需要大量数据处理和转换的应用程序,如数据分析、科学计算、图形渲染等。在这些应用程序中,数据是程序的核心,程序的主要任务是对这些数据进行处理和操作。
  2. 并行和并发处理: 面向数据编程通常更容易实现并行和并发处理,因为数据操作和转换可以相对独立地进行,不涉及共享状态和副作用的问题。因此,面向数据编程适用于需要高效利用多核处理器和并行计算资源的应用程序。
  3. 数据流处理: 面向数据编程强调数据的流动和变化,程序的执行过程可以看作是数据在不同处理阶段之间流动和转换的过程。因此,面向数据编程适用于需要对数据进行流式处理和转换的应用程序,如实时数据处理、流式数据分析等。
  4. 大规模系统和复杂系统: 面向数据编程提供了一种组织代码的有效方式,使得程序的设计和实现更加模块化和清晰。因此,面向数据编程适用于需要开发大型、复杂的软件系统的情况,可以帮助降低系统的复杂度,提高代码的可维护性和可扩展性。
  5. 数据驱动的应用程序: 面向数据编程适用于以数据为核心的应用程序,如数据可视化、数据挖掘、机器学习等。在这些应用程序中,数据是驱动程序行为和决策的主要因素,因此面向数据编程能够更好地满足这些应用程序的需求。

总的来说,面向数据编程适用于需要大量数据处理和转换、需要并行和并发处理、需要流式处理和转换以及需要开发大型、复杂的系统的应用程序。通过将数据视为程序的核心,面向数据编程能够帮助提高程序的效率、可维护性和可扩展性。

3.4 注意事项
  1. 数据一致性: 确保数据的一致性是面向数据编程的关键。在对数据进行处理和转换的过程中,要确保数据的正确性和完整性,避免出现数据丢失、重复或者不一致的情况。
  2. 数据安全: 在处理敏感数据时,要注意数据的安全性。采取必要的安全措施来保护数据的机密性和完整性,如加密、访问控制等。
  3. 数据质量: 保证数据的质量是面向数据编程的重要任务之一。在对数据进行处理和转换之前,要进行数据质量分析和清洗,识别和处理数据中的错误、不一致性和异常值,以确保数据的准确性和可信度。
  4. 性能优化: 面向数据编程通常涉及大量数据的处理和转换,因此性能优化是必不可少的。要注意选择合适的数据结构和算法,优化数据访问和处理的性能,以提高程序的效率和响应速度。
  5. 并行和并发处理: 面向数据编程通常涉及并行和并发处理,要注意处理并发访问和竞争条件的问题。采取必要的同步和互斥机制,确保对共享数据的安全访问,避免数据的损坏和不一致性。
  6. 异常处理: 考虑到可能发生的异常情况,并且适当地处理这些异常。在对数据进行处理和转换的过程中,要检测和处理可能出现的错误,以保护程序免受错误的影响,并提供适当的错误处理机制。
  7. 可扩展性和灵活性: 考虑未来的需求变化和业务规模的增长,设计具有良好的可扩展性和灵活性的数据处理方案。避免硬编码特定的数据结构和处理逻辑,采取抽象和通用化的设计方法,以便于未来的扩展和变更。
  8. 测试和验证: 编写充分的测试代码来验证数据处理和转换的正确性和稳定性。进行单元测试、集成测试和端到端测试,确保程序在各种情况下都能够正确地处理数据。

通过注意以上事项,可以帮助保证面向数据编程的程序具有良好的性能、可靠性和可维护性,从而满足业务需求并提高工作效率。

3.5 通俗讲法

面向数据旨在处理数据,在这个过程中,我们又会用到面向过程的这么一种思维,而我们面向过程的目的旨在处理数据,我们最终的代码实现应该是服务于数据,而不是服务于过程。

这一点需要我们明确,面向数据编程旨在我们要关心,数据是否正确。

而面向过程,旨在我们为了得到正确的数据,去对一个单一的过程进行编写,使得我们能够拿到正确的数据。

而我们的数据同时也是为了服务于对象。

所以到这,我们也就明白了,其实在编程的过程中,这三种思维其实是共同作用的,而不是只是单一的使用。

即:

面向对象的过程中——需要面向数据的支撑

而面向数据的支撑——需要面向过程的处理

从而实现一些模块化、复杂性的系统的功能

在这里插入图片描述

公众号:平平无奇代码猴
也可以搜索:Jackiie_wang 公众号,欢迎大家关注!欢迎催更!留言!

作者:ProMer_Wang

链接:https://blog.csdn.net/qq_43801020/article/details/136925319

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

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

相关文章

将数据转换成xml格式的文档并下载

现在有一个实体类对象的集合&#xff0c;需要将它们转换为xml文档&#xff0c;xml文档就是标签集合的嵌套&#xff0c;例如一个学生类&#xff0c;有姓名、年龄等&#xff0c;需要转换成一下效果&#xff1a; <student><age>14</age><name>张三</na…

十、C#基数排序算法

简介 基数排序是一种非比较性排序算法&#xff0c;它通过将待排序的数据拆分成多个数字位进行排序。 实现原理 首先找出待排序数组中的最大值&#xff0c;并确定排序的位数。 从最低位&#xff08;个位&#xff09;开始&#xff0c;按照个位数的大小进行桶排序&#xff0c;将…

STL —— string(1)

目录 1. 模板 1.1 泛型编程 1.2 函数模板 1.2.1 函数模板概念 1.2.2 函数模板格式 1.2.3 函数模板的原理 1.2.4 显式实例化 1.2.5 模板参数的匹配原则 1.3 类模板 1.3.1 类模板定义格式 1.3.2 类模板的实例化 2. STL —— string类 2.1 STL 简介 2.2 标准库中的s…

地理信息数据处理-线面数据转化和数据合并(二)

需求 1.数据为LineString&#xff0c;需要转化为Polygon 2.数据为多个分散的线、面数据&#xff0c;需要转化为一条Multi类型数据 解决方案使用&#xff0c;arcgis转化工具。 需求1&#xff1a;线-面数据转化 1.在arcgis中选中对应图层&#xff0c; 然后在“数据管理工具-要…

pcl采样:随机采样

pcl 随机采样,实际上就是抽稀 头文件 代码 结果

阿里云2024最新优惠:WoSign SSL证书首购4折

阿里云SSL证书 2024 最新优惠来啦&#xff01;阿里云SSL证书新用户&#xff0c;wosign SSL证书低至4折&#xff0c;WoSign SSL提供全球信任RSA SSL证书和国密算法SM2 SSL证书&#xff01;阿里云官网官方优惠&#xff0c;需要开年采购SSL证书的用户抓紧申请这波优惠&#xff01;…

mybatis-flex入门体验(一)

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 趁着下午的空闲时间&#xff0c;研究了一下mybatis-flex&#xff0c;看着对我还…

【php基础】输出、变量、布尔类型、字符串

php基础补充 1. 输出2.和"的区别3.变量3.1变量的命名规则3.2 两个对象指向同一个值3.3 可变变量 4.变量的作用域5. 检测变量6. 布尔类型7.字符串定义与转义8.字符串常用函数9.常量 1. 输出 echo: 输出 print: 输出&#xff0c;输出成功返回1 print_r(): 输出数组 var_dum…

HarmonyOS入门学习

HarmonyOS入门学习 前言快速入门ArkTS组件基础组件Image组件Text组件TextInput 文本输入框Buttonslider 滑动组件 页面布局循环控制ForEach循环创建组件 List自定义组件创建自定义组件Builder 自定义函数 状态管理Prop和LinkProvide和ConsumeObjectLink和Observed ArkUI页面路由…

【网络安全】CobaltStrike 使用

本文章仅用于信息安全学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若读者因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与作者无关。 Cobalt Strike是一款渗透测试神器&#xff0c;Cobalt Strike已经不再使用MSF而是作为单独的平台使…

如何避免OKR成为形式主义,真正发挥其作用?

OKR&#xff08;Objectives and Key Results&#xff09;作为一种目标管理方法&#xff0c;旨在通过设定明确的目标和可衡量的关键成果&#xff0c;帮助企业实现高效、精准的管理。然而&#xff0c;在实际应用中&#xff0c;许多企业却陷入了形式主义的泥潭&#xff0c;使OKR失…

1.什么是exchange的自签名证书?安装exchange后,默认生成的证书介绍?如何查看exchange的证书情况?命令是?

目录 1.exchange的自签名证介绍 2.如何查看exchange的证书&#xff1f; 3.默认生成证书介绍 第一张&#xff1a;Microsoft Exchange 第二张&#xff1a;Microsoft Exchange Server Auth Certificate 第三张&#xff1a;WMSVC 总结&#xff1a; 1.exchange的自签名证介绍…

JAVA 获取系统当前时间、时间格式互相转化工具类,2024百度Java岗面试真题收录解析

DateTimeFormatter ftf DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”); LocalDateTime parse LocalDateTime.parse(strTime, ftf); return LocalDateTime.from(parse).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); } //通过LocalDateTime获取当…

CPP容器vector和list,priority_queue定义比较器

#include <iostream> #include <bits/stdc.h> using namespace std; struct VecCmp{bool operator()(int& a,int& b){return a>b;/*** 对于vector和list容器&#xff0c;这里写了&#xff1e;就是从大到小* 对于priority_queue容器&#xff0c;这里写…

YOLO改进模块出现的问题及改进方法

1.grid_sampler_2d_backward_cuda 在对YOLOv9进行改进的过程中&#xff0c;有的时候就会出现这种报错&#xff1a;RuntimeError: grid_sampler_2d_backward_cuda does not have a deterministic implementation&#xff0c;but you set torch.use_deterministic_algorithms(Tr…

【SpringSecurity】十七、OAuth2授权服务器 + 资源服务器Demo

文章目录 0、库表准备1、项目结构2、基于数据库的认证3、授权服务器配置4、授权服务器效果测试5、资源服务器配置6、其他授权模式测试6.1 密码模式6.2 简化模式6.3 客户端模式6.4 refresh_token模式 相关&#x1f4d5;&#xff1a;【Spring Security Oauth2 配置理论部分】 0、…

[C#]winformYOLO区域检测任意形状区域绘制射线算法实现

【简单介绍】 Winform OpenCVSharp YOLO区域检测与任意形状区域射线绘制算法实现 在现代安全监控系统中&#xff0c;区域检测是一项至关重要的功能。通过使用Winform结合OpenCVSharp库&#xff0c;并结合YOLO&#xff08;You Only Look Once&#xff09;算法&#xff0c;我们…

Docker之docker compose!!!!

一、概述 是 Docker 官方提供的一款开源工具&#xff0c;主要用于简化在单个主机上定义和运行多容器 Docker 应用的过程。它的核心作用是容器编排&#xff0c;使得开发者能够在一个统一的环境中以声明式的方式管理多容器应用的服务及其依赖关系。 也就是说Docker Compose是一个…

利用Jmeter工具对服务器,数据库进行性能监控,压测,导出性能测试报告

Jmeter是Apache基金会旗下的一款免费,开源,轻量级的性能测试工具,主要针对web应用程序客户端/服务器进行性能测试.它可以分别测试静态、动态资源(Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等),它可以通过线程组来模拟数个用户,在一段时间内同时登录服务器,数个用…

MySQL的基础操作与管理

一.MySQL数据库基本操作知识&#xff1a; 1.SQL语句&#xff1a; 关系型数据库&#xff0c;都是使用SQL语句来管理数据库中的数据。 SQL&#xff0c;即结构化查询语言(Structured Query Language) 。 SQL语句用于维护管理数据库&#xff0c;包括数据查询、数据更新、访问控…