深入理解Gradle构建系统的工作原理

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁
🦄 博客首页——猫头虎的博客🎐
🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

在这里插入图片描述

文章目录

  • 深入理解Gradle构建系统的工作原理
  • 摘要
  • 一、引言
  • 二、Gradle简介
      • 特点和用途
      • 构建脚本的基本结构
    • 小结
  • 三、构建过程
      • 1. 项目初始化和配置
      • 2. 任务的执行顺序
      • 3. 依赖关系管理
      • 4. 增量构建能力
    • 小结
  • 四、Gradle的核心概念
      • 1. 任务(Task)
      • 2. 项目(Project)
      • 3. 插件(Plugin)
      • 4. 扩展(Extension)
    • 小结
  • 五、自定义构建逻辑
      • 1. 自定义Gradle任务
      • 2. 创建自定义插件
      • 3. 应用和配置自定义元素
    • 小结
  • 六、最佳实践和调优
      • 1. 使用最新版本的Gradle
      • 2. 避免不必要的依赖
      • 3. 使用增量构建
      • 4. 并行构建
      • 5. 使用本地依赖缓存
      • 6. 避免多层级的子项目结构
      • 7. 常用任务优化
      • 8. 使用Gradle Daemon
      • 9. 监控构建性能
      • 10. 定期清理无用依赖和缓存
    • 小结
  • 七、案例分析:使用Gradle构建Java Web项目
      • 项目结构
      • Gradle构建脚本
      • 构建项目
      • 运行项目
      • 小结
  • 八、总结
    • 参考资料:
    • 参考文献:
  • 原创声明

在这里插入图片描述

深入理解Gradle构建系统的工作原理

摘要

本博客深入探讨了《深入理解Gradle构建系统的工作原理》这一主题。Gradle是一个面向多项目的自动化构建工具,在软件开发中具有重要的地位。了解其工作原理对于开发人员来说是非常有益的。

在博客中,我首先介绍了Gradle的基本概念和用途。然后深入探讨了Gradle构建过程中的各个步骤,包括项目的初始化和配置、任务的执行顺序以及依赖关系管理。接着,我详细介绍了Gradle的核心概念,包括任务、项目、插件和扩展,并解释了它们在构建过程中的作用。

随后,我讨论了如何在Gradle中实现自定义构建逻辑,包括编写自定义任务、创建自定义插件和扩展,并如何应用和配置这些自定义元素。然后提供了一些关于使用Gradle的最佳实践和调优建议,以优化构建过程,提高开发效率。

最后,我通过一个简单的Java Web项目构建案例,展示了Gradle在实际项目中的应用和优势。本博客旨在帮助读者全面了解Gradle构建系统,并鼓励进一步学习和探索Gradle的更多特性。掌握Gradle的工作原理和技巧,将有助于开发人员更好地应用Gradle,提高构建效率,从而在软件开发中取得更优秀的成果。

一、引言

Gradle是一种现代化的构建系统,广泛用于Java、Android、Kotlin等项目的构建和管理。它采用了基于Groovy和Kotlin的DSL(领域特定语言),使得构建脚本更加简洁、灵活。了解Gradle的工作原理对于开发人员来说是至关重要的,因为它不仅仅是一个构建工具,还可以帮助您管理依赖关系、运行测试、执行任务等。在本博客中,我将深入探讨Gradle构建系统的工作原理和相关概念。

二、Gradle简介

Gradle是一个面向多项目的自动化构建工具。它是一款强大而灵活的构建系统,广泛应用于Java、Android、Kotlin等项目的构建和管理。作为一种基于Groovy和Kotlin的DSL(领域特定语言),Gradle使得构建脚本编写更加简洁、易读,并且具有高度可维护性。它的设计理念旨在提供一种优雅的构建方式,让开发者能够更专注于项目的业务逻辑而不是繁琐的构建配置。

特点和用途

Gradle的特点和用途使其成为开发人员和团队首选的构建工具之一:

  1. 灵活性:Gradle的灵活性是其最大的优势之一。它允许开发者根据项目的需求和特性进行高度定制。通过插件系统和自定义任务,您可以轻松地适应不同项目类型和技术栈的构建需求。

  2. 多项目支持:Gradle是面向多项目构建的,这意味着它能够轻松处理由多个子项目组成的复杂项目结构。这种能力使得构建大型项目变得更加容易管理。

  3. 依赖管理:Gradle提供了强大的依赖管理功能,能够管理项目所需的第三方库和模块依赖。它支持从各种来源获取依赖,包括Maven中央仓库、本地JAR文件和远程仓库。

  4. 增量构建:Gradle具备优秀的增量构建能力,它只重新构建发生更改的部分,从而显著减少构建时间,特别是在大型项目中,这将极大地提高开发效率。

  5. 可扩展性:通过编写自定义插件和任务,您可以将Gradle扩展到满足特定项目的需求。并且,有丰富的第三方插件库可供选择,以满足各种构建和部署需求。

构建脚本的基本结构

Gradle构建脚本通常采用Groovy或Kotlin语言编写,它的基本结构包括以下几个重要部分:

  1. 项目声明:通常以plugins块开始,声明了所需的Gradle插件,比如java插件用于Java项目、android插件用于Android项目等。

  2. 仓库声明:使用repositories块声明项目依赖的仓库,比如从Maven中央仓库、JCenter等获取依赖。

  3. 依赖声明:使用dependencies块声明项目的第三方依赖,指定所需的库和版本号。

  4. 任务定义:通过task关键字定义自定义任务,以实现项目构建中的特定功能。

  5. 构建配置:在这一部分,您可以配置和定制Gradle插件和任务的行为,例如编译选项、打包方式等。

  6. 任务执行顺序:您可以定义任务之间的依赖关系,以确保它们按正确的顺序执行。

  7. 其他配置:根据项目的需求,您可以添加其他自定义配置,以满足特定的构建需求。

小结

Gradle是一款功能强大、灵活易用的构建工具,它在众多项目中得到广泛应用。通过深入理解其特点和用途,以及掌握构建脚本的基本结构,您将能够更加高效地管理和构建您的项目。在接下来的博客内容中,我将进一步探讨Gradle构建系统的工作原理,帮助您更好地利用Gradle来优化项目的构建过程。敬请期待!

三、构建过程

在本节中,我将深入探讨Gradle构建系统的工作原理,了解其构建过程中涉及的各个步骤。Gradle的构建过程是一个复杂的流程,它涉及项目的初始化和配置、任务的执行顺序以及依赖关系的管理。了解这些步骤将帮助您更好地理解Gradle的工作原理,并能够优化构建过程,提高开发效率。

1. 项目初始化和配置

在构建过程开始之前,Gradle会首先初始化项目。这包括读取项目的构建脚本(如build.gradle文件)以及相关配置文件,构建项目的对象模型(Project Object Model,POM)。项目的POM包含了项目的所有配置信息,包括依赖关系、任务和插件等。

在项目初始化阶段,Gradle还会解析项目的依赖关系,并根据依赖关系构建一个依赖图。依赖图是一个表示项目中各个模块之间依赖关系的数据结构,它指导了后续任务的执行顺序。

2. 任务的执行顺序

在Gradle中,构建过程是通过执行一系列任务来实现的。任务是构建过程的最小单元,它代表着构建过程中的一个操作。Gradle会根据任务之间的依赖关系来确定它们的执行顺序。

当您执行一个Gradle任务时,Gradle会检查该任务所依赖的其他任务,并确保这些依赖任务在该任务执行之前完成。这样可以确保任务按照正确的顺序执行,以满足构建过程中的依赖关系。

3. 依赖关系管理

在构建过程中,项目的依赖关系起着关键作用。Gradle通过依赖管理来管理项目所需的第三方库和模块依赖。您可以在构建脚本中声明项目的依赖,Gradle会根据这些依赖信息自动下载和配置所需的库和模块。

Gradle支持多种依赖管理方式,包括从Maven中央仓库、本地JAR文件和远程仓库获取依赖。您还可以通过配置依赖解析策略来控制依赖的冲突解决方式,以确保项目的稳定性和一致性。

4. 增量构建能力

Gradle具备优秀的增量构建能力,这是其在大型项目中表现优秀的关键之一。增量构建意味着Gradle只重新构建发生更改的部分,而跳过未发生更改的部分。这样可以极大地减少构建时间,特别是在项目规模较大时,能够显著提高开发效率。

Gradle通过对项目资源和任务输出的增量检测,确定哪些部分需要重新构建。这种智能的构建策略使得Gradle在处理大型项目时非常高效。

小结

通过深入了解Gradle构建过程中的各个步骤,包括项目初始化和配置、任务的执行顺序以及依赖关系管理,您将能够更好地应用Gradle构建系统,并且能够根据项目需求优化构建过程,提高开发效率。下一节中,我将继续介绍Gradle的核心概念,以更全面地理解Gradle的工作原理。敬请期待!

四、Gradle的核心概念

在本节中,我将详细介绍Gradle构建系统的核心概念,这些概念包括任务(Task)、项目(Project)、插件(Plugin)和扩展(Extension)。这些概念是Gradle构建过程的基础,理解它们将帮助您更好地掌握Gradle的强大功能,并在构建过程中灵活应用它们。

1. 任务(Task)

任务是Gradle构建过程的最小单元,它代表着构建过程中的一个操作。在Gradle中,您可以执行各种各样的任务,如编译代码、运行测试、打包应用等。每个任务都有一个唯一的名称,通过任务名称可以在命令行中或构建脚本中执行任务。

Gradle任务是可配置的,您可以根据项目的需求,对任务进行不同的配置,包括输入参数、输出结果、执行动作等。任务的执行顺序由依赖关系决定,当一个任务被执行时,Gradle会检查该任务所依赖的其他任务,并确保这些依赖任务在该任务执行之前完成。

2. 项目(Project)

在Gradle中,项目是指构建过程中的一个独立单元,它可以代表一个Java项目、Android项目或任何其他类型的项目。一个Gradle项目通常由多个任务组成,这些任务定义了项目构建过程中的各种操作。

项目是Gradle构建过程的管理单元,每个项目都有一个相关联的构建脚本(通常是build.gradle文件)。构建脚本包含了项目的所有配置信息,包括依赖关系、任务的定义和插件的配置等。

3. 插件(Plugin)

插件是Gradle构建过程的功能扩展单元,它允许您为项目添加额外的功能和特性。Gradle本身只包含一些基本的构建功能,但通过应用插件,您可以为项目添加更多高级功能。

Gradle提供了许多内置的插件,用于支持各种类型的项目,比如Java项目、Android项目、Kotlin项目等。除了内置插件,您还可以编写自己的自定义插件,以满足特定项目的需求。

4. 扩展(Extension)

扩展是Gradle构建过程中配置的一种方式,它允许您向项目中添加自定义配置项。通过扩展,您可以在构建脚本中定义一些自定义属性,这些属性可以在整个项目中使用。

Gradle内置了一些通用的扩展,比如ext,它允许您在构建脚本中定义全局的属性。此外,您还可以定义自己的扩展,将一组属性打包成一个对象,以便在构建过程中更加结构化地管理配置。

小结

掌握Gradle的核心概念,包括任务、项目、插件和扩展,是使用Gradle构建系统的关键。通过对这些概念的理解,您可以更好地配置和管理项目的构建过程,并能够充分发挥Gradle的强大功能。在下一节中,我将介绍如何在Gradle中实现自定义构建逻辑,让您的项目更加灵活和高效。敬请期待!

五、自定义构建逻辑

Gradle的灵活性使得您可以根据项目的特定需求轻松自定义构建逻辑,使构建过程更加灵活和高效。在本节中,我将深入了解如何编写自定义的Gradle任务、创建自定义插件和扩展,以及如何应用和配置这些自定义元素。

1. 自定义Gradle任务

Gradle任务是构建过程的最小单元,而编写自定义任务是自定义构建逻辑的一种重要方式。您可以通过编写自定义任务来执行项目中特定的操作,或者实现一些非标准的构建需求。

编写自定义任务通常涉及以下几个步骤:

  • 创建一个继承自DefaultTask的自定义任务类。
  • 在任务类中定义任务的输入参数和输出结果。
  • 实现任务的执行逻辑,即doLast闭包中的代码,指定任务需要执行的操作。

通过编写自定义任务,您可以根据项目的特性和需求,灵活地配置构建过程。

2. 创建自定义插件

除了编写自定义任务,您还可以创建自定义插件来扩展Gradle的功能。自定义插件允许您将一组任务、配置和扩展打包为一个单独的模块,以便在多个项目中重用。

创建自定义插件通常包括以下步骤:

  • 创建一个继承自Plugin的自定义插件类。
  • 在插件类中实现apply方法,在该方法中定义插件的功能和任务。
  • 将自定义插件的逻辑打包为一个独立的Jar文件,并在项目中应用该插件。

通过自定义插件,您可以将常用的构建逻辑封装为一个可复用的组件,使构建脚本更具可读性和可维护性。

3. 应用和配置自定义元素

在编写自定义任务和插件后,您需要在项目中应用和配置它们,以实现自定义构建逻辑。在项目的构建脚本中,您可以使用apply函数来应用自定义插件,例如:

plugins {
    id 'com.example.myplugin' version '1.0'
}

然后,您可以根据需要对自定义任务和插件进行配置。例如,给任务指定输入参数、设置任务的执行顺序、配置插件的属性等。

task myCustomTask(type: com.example.MyCustomTask) {
    inputParameter = "value"
}

myCustomPlugin {
    property = "value"
}

通过这种方式,您可以在构建脚本中轻松应用和配置自定义任务和插件,使其与项目的其他部分协同工作。

小结

通过编写自定义任务、创建自定义插件和扩展,并在构建脚本中应用和配置这些自定义元素,您可以灵活地满足项目的特定需求,使构建过程更加高效和简化。掌握这些自定义构建逻辑的技巧将帮助您更好地使用Gradle,并根据项目的要求定制化构建流程。在下一节中,我将提供一些关于使用Gradle的最佳实践和调优建议,以帮助您进一步优化构建过程。敬请期待!

六、最佳实践和调优

在使用Gradle构建系统时,遵循最佳实践和调优策略可以提高开发效率并确保构建过程的稳定性。在本节中,我将提供一些关于使用Gradle的最佳实践和调优建议,帮助您优化构建过程,使您的开发流程更加高效和顺畅。

1. 使用最新版本的Gradle

始终确保您使用最新版本的Gradle。每个Gradle版本都会带来新的功能、改进和性能优化。通过升级到最新版本,您可以获得更好的构建体验和更快的构建速度。

2. 避免不必要的依赖

在构建脚本中,只声明项目所需的真正依赖。避免不必要的依赖会减少构建时间并提高构建的稳定性。

3. 使用增量构建

利用Gradle的增量构建能力,只构建发生更改的部分,从而减少整体构建时间。这对于大型项目特别有用,可以显著提高开发效率。

4. 并行构建

通过配置Gradle并行构建选项,您可以同时构建多个项目或任务,从而加快整体构建速度。但要注意,并行构建可能导致资源竞争和内存占用较高,因此在选择并行度时需要根据项目的实际情况进行调整。

5. 使用本地依赖缓存

使用本地依赖缓存可以避免重复下载依赖,加快构建速度。您可以设置Gradle使用本地的Maven仓库或Gradle缓存目录来管理依赖缓存。

6. 避免多层级的子项目结构

在使用Gradle的多项目构建时,避免过多的子项目层级。深层次的子项目结构会增加构建的复杂性和构建时间。

7. 常用任务优化

对于常用的构建任务,您可以针对性地优化它们,比如配置增量编译、并行执行、优化编译选项等,以提高任务执行速度。

8. 使用Gradle Daemon

Gradle Daemon是一个长期运行的后台进程,可以加速构建过程。启用Gradle Daemon可以避免每次构建都重新启动Gradle,从而节省构建时间。

9. 监控构建性能

通过监控构建性能,您可以了解构建过程中哪些任务占用了大量时间,从而有针对性地优化它们,提高构建效率。

10. 定期清理无用依赖和缓存

定期清理无用的依赖和Gradle缓存可以释放磁盘空间并确保构建的稳定性。Gradle提供了一些任务和选项来帮助您进行清理操作。

小结

遵循这些最佳实践和调优建议,您可以优化Gradle构建过程,提高开发效率,并使构建过程更加高效和可靠。通过合理配置Gradle构建选项和优化构建脚本,您可以充分发挥Gradle的强大功能,让您的开发流程更加顺畅和愉快。在下一节中,我将探讨一个可选的主题,即在实际项目中对Gradle的应用和案例分析。敬请期待!

七、案例分析:使用Gradle构建Java Web项目

在本案例中,我将展示如何使用Gradle构建一个简单的Java Web项目,以展示Gradle在实际项目中的应用和好处。这个示例项目是一个简单的Web应用程序,使用Java Servlet和JSP技术,构建一个简单的留言板功能。

项目结构

假设我的Java Web项目的目录结构如下:

my-webapp/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           ├── Message.java
│   │   │           └── MessageServlet.java
│   │   └── webapp/
│   │       ├── WEB-INF/
│   │       │   └── web.xml
│   │       └── index.jsp
│   └── test/
│       ├── java/
│       └── resources/
└── build.gradle

Gradle构建脚本

下面是项目的Gradle构建脚本示例(build.gradle):

plugins {
    id 'java'
    id 'war'
}

repositories {
    jcenter()
}

dependencies {
    implementation 'javax.servlet:javax.servlet-api:4.0.1'
    testImplementation 'junit:junit:4.13.2'
}

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
        resources {
            srcDir 'src/main/resources'
        }
        output.classesDir = file('build/classes/main')
    }
    test {
        java {
            srcDir 'src/test/java'
        }
        resources {
            srcDir 'src/test/resources'
        }
        output.classesDir = file('build/classes/test')
    }
}

war {
    archiveName 'my-webapp.war'
    destinationDir file('build')
}

构建项目

在项目目录下运行以下命令构建项目:

gradle build

Gradle会根据构建脚本中的配置,编译Java代码并生成WAR文件。构建完成后,您可以在build目录下找到生成的WAR文件。

运行项目

将生成的WAR文件部署到Tomcat或其他Java Web服务器中,并启动服务器。然后访问http://localhost:8080/my-webapp/即可在浏览器中查看留言板应用。

小结

这个简单的案例分析展示了如何使用Gradle构建一个Java Web项目。通过Gradle的灵活配置和插件支持,我可以轻松地管理项目的依赖、编译Java代码、打包WAR文件,并且构建过程更加高效和简化。这只是Gradle在实际项目中应用的一个简单示例,Gradle在更复杂的项目中也能发挥出其强大的功能和优势。希望这个案例分析能帮助您更好地理解Gradle的应用和好处。

八、总结

本博客深入探讨了Gradle构建系统的工作原理和应用,希望为您提供了全面而深入的了解。在这篇博客中,我按照以下结构介绍了Gradle的重要内容:

  1. 摘要:简要介绍了Gradle构建系统的工作原理,强调了了解Gradle对于开发人员的益处。

  2. GRADLE简介:详细介绍了Gradle构建系统的特点和用途,以及其构建脚本的基本结构。

  3. 构建过程:深入探讨了Gradle构建系统的工作原理,包括项目的初始化和配置、任务的执行顺序以及依赖关系的管理。

  4. GRADLE的核心概念:介绍了Gradle构建系统的核心概念,如任务、项目、插件和扩展,以及它们在构建过程中的作用。

  5. 自定义构建逻辑:讲解了如何在Gradle中自定义构建逻辑,包括编写自定义任务、创建自定义插件和扩展,并如何应用和配置它们。

  6. 最佳实践和调优:提供了关于使用Gradle的最佳实践和调优建议,以优化构建过程,提高开发效率。

  7. 案例分析:展示了一个简单的Java Web项目构建案例,演示了Gradle在实际项目中的应用和优势。

在总结中,我再次强调了解Gradle构建系统的重要性,并鼓励您继续学习和探索Gradle的更多特性。Gradle作为一个强大而灵活的构建工具,在现代软件开发中扮演着重要的角色。希望本博客能为您提供有价值的信息,并在您的开发工作中带来帮助。祝您在使用Gradle时取得愉快的构建体验和卓越的项目成果!如果您有任何问题或需要进一步的帮助,请随时向我咨询。谢谢!

参考资料:

  1. Gradle官方文档 - Gradle官方用户指南,提供详细的Gradle使用说明和文档。
  2. Gradle DSL参考 - Gradle的DSL(Domain Specific Language)参考文档,详细解释了Gradle构建脚本中的各种配置选项和属性。
  3. Gradle用户指南中文版 - Gradle用户指南的中文翻译版本,提供了对Gradle的全面介绍。
  4. Java Servlet官方文档 - Java Servlet官方规范文档,包含了Java Servlet技术的详细说明和API文档。

参考文献:

  1. Muschko, Benjamin. “Gradle in Action.” Manning Publications, 2014. - 本书深入介绍了Gradle的基本概念和高级特性,并提供了丰富的示例和实践经验。
  2. O’Reilly, Tim. “Building and Testing with Gradle.” O’Reilly Media, 2021. - 这本书讲解了如何使用Gradle构建和测试软件项目,并探讨了Gradle在持续集成和持续交付中的应用。
  3. Berglund, O. “Gradle for Android.” Packt Publishing, 2015. - 本书专注于使用Gradle构建Android应用,详细介绍了在Android开发中使用Gradle的方法和技巧。

希望本博客能够帮助您深入理解Gradle构建系统的工作原理,并使您在项目开发中能够更加得心应手!感谢您的阅读!

原创声明

======= ·

  • 原创作者: 猫头虎

作者wx: [ libin9iOak ]

学习复习

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用贝叶斯滤波器通过运动模型和嘈杂的墙壁传感器定位机器人研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【C++】多态的实现及其底层原理

个人主页:🍝在肯德基吃麻辣烫 我的gitee:gitee仓库 分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处。 文章目录 前言一、什么是多态?二、多态的构成条件2.1什么是虚函数?2.2虚函数的重写2…

ICASSP 2023 | Cough Detection Using Millimeter-Wave FMCW Radar

原文链接:https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486540&idx1&sn6ebd9f58e9f08a369904f9c48e12d136&chksmcf51beb5f82637a3c65cf6fa53e8aa136021e35f63a58fdd7154fc486a285ecde8b8521fa499#rd ICASSP 2023 | Cough Detection Usi…

Qt中postevent造成内存泄漏问题的通用解决方案

在Qt中由QCoreApplication统一管理Qt事件的收发和销毁,其中sendEvent为阻塞式发送,用于单线程的事件发送;postevent为非阻塞式发送,构造事件的线程和接受事件的线程可以为两个线程。 最近在做一个个人项目ShaderLab 需要绘制OpenGL实时渲染的图像,由于OpenGL渲染基本都放…

论文笔记——Influence Maximization in Undirected Networks

Influence Maximization in Undirected Networks ContributionMotivationPreliminariesNotations Main resultsReduction to Balanced Optimal InstancesProving Theorem 3.1 for Balanced Optimal Instances Contribution 好久没发paper笔记了,这篇比较偏理论&…

python+django+mysql项目实践一(环境准备)

python项目实践 环境说明: Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 创建Pycharm项目 安装Django 在pycharm文件—设置进行安装 新建Django项目 注意项目创建目录 项目默认目录文件说明: __init__.py asgi.py 【异步接受网络…

深度学习实践——模型推理优化练习

系列实验 深度学习实践——卷积神经网络实践:裂缝识别 深度学习实践——循环神经网络实践 深度学习实践——模型部署优化实践 深度学习实践——模型推理优化练习 深度学习实践——模型推理优化练习 模型推理优化练习架构设计练习知识蒸馏练习模型剪枝练习参数量化练…

如何高效实现文件传输:小文件采用零拷贝、大文件采用异步io+直接io

一般会如何实现文件传输? 服务器提供文件传输功能,需要将磁盘上的文件读取出来,通过网络协议发送到客户端。如果需要你自己编码实现这个文件传输功能,你会怎么实现呢? 通常,你会选择最直接的方法&#xf…

QT基于TCP协议实现数据传输以及波形绘制——安卓APP及Windows程序双版本

文章代码有非常非常之详细的解析!!!诸位可放心食用 这个玩意我做了两个,一个是安卓app,一个是Windows程序。代码并非全部都是由我从无到有实现,只是实现了我想要的功能。多亏了巨人的肩膀,开源…

小研究 - 一种复杂微服务系统异常行为分析与定位算法(一)

针对极端学生化偏差(Extreme Studentized &#…

Java中的生产者/消费者模型

一、什么是生产者/消费者模型 生产者-消费者模型(Producer-Consumer problem)是一个非常经典的多线程并发协作的模型。 比如某个模块负责生产数据,而另一个模块负责处理数据。产生数据的模块就形象地被称为生产者;而处理数据的模…

后端一次返回大量数据,前端做分页处理

问题描述&#xff1a;后端接口返回大量数据&#xff0c;没有做分页处理&#xff0c;不支持传参pageNum&#xff0c;pageSize 本文为转载文章&#xff0c;原文章&#xff1a;后端一次返回大量数据&#xff0c;前端做分页处理 1.template中 分页 <el-paginationsize-chang…

39.手机导航

手机导航 html部分 <div class"phone"><div class"content"><img class"active" src"./static/20180529205331_yhGyf.jpeg" alt"" srcset""><img src"./static/20190214214253_hsjqw…

DHCP部署与安全详解

文章目录 一、DHCP是什么&#xff1f;二、DHCP相关概念三、DHCP优点四、DHCP原理1. 客户机发送DHCP Discovery广播包&#xff08;发现谁是DHCP服务器&#xff09;2. 服务器响应DHCP Offer广播包3. 客户机发送DHCP Request广播包4. 服务器发送DHCP ACK广播包 五、DHCP续约六、部…

ElasticSearch基本使用--ElasticSearch文章一

文章目录 官网学习必要性elasticsearch/kibana安装版本数据结构说明7.x版本说明ElasticSearch kibana工具测试后续我们会一起分析 官网 https://www.elastic.co/cn/ 学习必要性 1、在当前软件行业中&#xff0c;搜索是一个软件系统或平台的基本功能&#xff0c; 学习Elastic…

使用 OpenCV 进行图像模糊度检测(拉普拉斯方差方法)

写在前面 工作中遇到&#xff0c;简单整理人脸识别中&#xff0c;对于模糊程度较高的图像数据&#xff0c;识别率低&#xff0c;错误率高。虽然使用 AdaFace 模型&#xff0c;对低质量人脸表现尤为突出。但是还是需要对 模糊程度高的图像进行丢弃处理当前通过阈值分类&#xff…

Java开发中的分层开发和整洁架构

分层开发(横向拆分) 分层开发的概念: maven多模块开发项目管理.可以利用这种管理功能,实现一个项目的多层次模块开发–分层开发. 比如,当前项目HelloController依赖HelloService 这样做目的: 复杂开发过程.解耦(不调整依赖关系,无法解耦).分层开发(横向拆分)和纵向拆分的区别…

c# 此程序集中已使用了资源标识符

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS1508 此程序集中已使用了资源标识符“BMap.NET.WindowsForm.BMapControl.resources” BMap.NET.WindowsForm D:\MySource\Decompile\BMap.NET.WindowsForm\CSC 1 活动 运行程序时&a…

【机器学习】Feature Engineering and Polynomial Regression

Feature Engineering and Polynomial Regression 1. 多项式特征2. 选择特征3. 缩放特征4. 复杂函数附录 首先&#xff0c;导入所需的库&#xff1a; import numpy as np import matplotlib.pyplot as plt from lab_utils_multi import zscore_normalize_features, run_gradien…

session反序列化+SoapClientSSRF+CRLF

文章目录 session反序列化SoapClientSSRFCRLF前言bestphps revengecall_user_func()方法的特性SSRFCRLF组合拳session反序列化 解题步骤总结 session反序列化SoapClientSSRFCRLF 前言 从一道题分析通过session反序列化出发SoapClientSSRF利用CRLF解题 bestphp’s revenge 首…