构建现代应用:Java中的热门架构概览

文章目录

      • 1. 三层架构
      • 2. Spring框架
      • 3. 微服务架构
      • 4. Java EE(Enterprise Edition)
      • 5. 响应式架构
      • 6. 大数据架构
      • 7. 领域驱动设计(Domain-Driven Design,DDD)
      • 8. 安卓开发架构
      • 结论

在这里插入图片描述

🎉欢迎来到Java学习路线专栏~构建现代应用:Java中的热门架构概览


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:Java学习路线
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

Java作为一门广泛应用于企业级应用开发的编程语言,拥有众多成熟的架构和框架,用于构建各种规模的应用程序。本文将介绍Java中常用的架构,这些架构在不同场景下都有着卓越的表现,涵盖了传统的三层架构到现代微服务架构的演进。

1. 三层架构

三层架构是一种经典的应用程序架构,将应用程序分为三个主要部分:

  • 表现层(Presentation Layer): 表现层通常是用户与应用程序交互的界面,可以是Web界面、移动应用程序或桌面应用程序。在Java中,常见的表现层技术包括JavaServer Pages(JSP)、Servlets和现代的前端框架如React和Angular。

  • 业务逻辑层(Business Logic Layer): 业务逻辑层包含应用程序的核心功能和处理业务逻辑的代码。在Java中,通常使用Java类和EJB(Enterprise JavaBeans)来实现业务逻辑。

  • 数据访问层(Data Access Layer): 数据访问层负责与数据库或其他数据存储交互,执行数据的读取和写入操作。Java中,常见的数据访问技术包括Java Persistence API(JPA)和Hibernate。

在这里插入图片描述

核心概念: 三层架构将应用程序分为三个主要层次,包括表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data Access Layer)。这种架构有助于将应用程序的不同功能分离开来,使其更容易维护和扩展。

优点:

  • 清晰的分层结构。
  • 容易维护和扩展。
  • 可重用性高。

挑战:

  • 可能存在性能瓶颈。
  • 通信开销。

代码示例:

假设我们有一个简单的学生管理系统,我们可以使用三层架构来组织代码。以下是示例代码:

// Presentation Layer
public class StudentController {
    private StudentService studentService;

    public StudentController() {
        this.studentService = new StudentService();
    }

    public void addStudent(String name, int age) {
        studentService.addStudent(name, age);
    }
}

// Business Logic Layer
public class StudentService {
    private StudentRepository studentRepository;

    public StudentService() {
        this.studentRepository = new StudentRepository();
    }

    public void addStudent(String name, int age) {
        // 添加业务逻辑
        Student student = new Student(name, age);
        studentRepository.save(student);
    }
}

// Data Access Layer
public class StudentRepository {
    public void save(Student student) {
        // 数据库操作
    }
}

三层架构的优点在于它的清晰和可维护性。每个层次都有其明确定义的职责,这使得应用程序易于开发和维护。但在大型复杂的应用程序中,可能会出现层次间的紧耦合问题。

2. Spring框架

Spring框架是Java应用程序中广泛使用的轻量级开发框架。它提供了一种灵活的方式来构建企业级应用程序,其中包括以下关键功能:

  • 依赖注入(Dependency Injection): Spring框架通过依赖注入将组件之间的依赖关系从代码中分离出来。这种方式提高了代码的可测试性和可维护性。

  • 面向切面编程(Aspect-Oriented Programming,AOP): Spring支持AOP,允许开发者将横切关注点(如日志记录、事务管理)与应用程序的核心逻辑分离开来。

  • 集成不同技术栈: Spring可以集成多种不同的技术,包括数据库访问、消息传递、安全性、Web开发等。Spring Boot是Spring生态系统中的一部分,使得构建独立的、自包含的、生产级别的应用程序变得更加容易。

  • Spring Cloud: Spring Cloud提供了构建分布式系统的工具和模式,包括服务发现、负载均衡、断路器、分布式配置等。
    在这里插入图片描述
    在这里插入图片描述

Spring 核心概念: Spring框架是一个轻量级的、综合性的Java框架,用于构建企业级应用。它提供了依赖注入、面向切面编程、事务管理等功能,使开发更加简单和模块化。

优点:

  • 简化了Java开发。
  • 高度可测试性。
  • 大型社区和丰富的生态系统。

挑战:

  • 初始学习曲线可能较陡峭。

代码示例:

Spring框架提供了许多模块和组件,例如Spring Boot、Spring MVC和Spring Data。以下是一个使用Spring Boot构建的简单Web应用的示例:

@RestController
public class HelloWorldController {
    @RequestMapping("/")
    public String hello() {
        return "Hello, World!";
    }
}

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

Spring框架的优点在于其灵活性和可扩展性,它支持不同的架构和应用场景,适用于各种规模的应用。

Spring Boot核心概念: Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它简化了Spring应用程序的初始化和配置,使开发者能够更快地启动和运行应用程序。
在这里插入图片描述

优点:

  • 快速启动和运行。
  • 内嵌的Web服务器。
  • 自动化配置和约定优于配置。

挑战:

  • 可能会过度依赖自动化配置。

代码示例:

以下是一个使用Spring Boot构建的RESTful Web服务的示例:

@RestController
public class HelloWorldController {
    @RequestMapping("/")
    public String hello() {
        return "Hello, World!";
    }
}

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

3. 微服务架构

微服务架构是一种以服务为中心的架构风格,将应用程序拆分为小型服务,每个服务都有自己独立的业务逻辑和数据库。这些服务通过API进行通信,可以独立开发、部署和扩展。
在这里插入图片描述

在Java中,微服务架构通常使用Spring Boot和Spring Cloud构建。Spring Boot简化了微服务的创建和部署,而Spring Cloud提供了一组工具来解决微服务架构中的常见问题,如服务注册和发现、负载均衡、断路器模式等。

核心概念: 微服务架构是一种将应用程序拆分为小型、独立的服务的架构。每个微服务都运行在自己的进程中,可以使用不同的技术栈。微服务通过API或消息传递进行通信。

微服务架构的优点:

  • 灵活性: 每个微服务都可以独立开发、部署和扩展,这使得团队可以更快地交付功能。

  • 可伸缩性: 每个微服务都可以独立扩展,根据需求调整资源。

  • 容错性: 单个微服务的故障不会影响整个应用程序。

  • 技术多样性: 不同的微服务可以使用不同的技术栈,以满足不同的需求。

挑战:

  • 分布式系统的复杂性。
  • 服务间通信的管理。
  • 监控和故障排除的复杂性。

代码示例:

假设我们有一个电子商务应用程序,可以使用微服务架构来构建。以下是示例代码:

// 用户服务
@RestController
public class UserServiceController {
    @Autowired
    private UserService userService;

    @GetMapping("/users/{userId}")
    public User getUser(@PathVariable String userId) {
        return userService.getUser(userId);
    }
}

@Service
public class UserService {
    public User getUser(String userId) {
        // 从数据库或其他服务获取用户信息
    }
}

// 订单服务
@RestController
public class OrderServiceController {
    @Autowired
    private OrderService orderService;

    @PostMapping("/orders")
    public void createOrder(@RequestBody Order order) {
        orderService.createOrder(order);
    }
}

@Service
public class OrderService {
    public void createOrder(Order order) {
        // 处理订单创建逻辑
    }
}

但微服务架构也带来了挑战,如分布式系统的复杂性、服务间通信的开销和监控的复杂性。

4. Java EE(Enterprise Edition)

Java EE是Java平台的企业级版本,为构建大型、分布式和可扩展的应用程序提供了一套规范。Java EE包括各种技术,如Servlets、JSP、EJB、JMS(Java Message Service)、JPA和CDI(Contexts and Dependency Injection),用于开发企业级应用程序。
在这里插入图片描述

核心概念: Java EE是Java平台的企业级版本,用于构建大型、分布式和可扩展的应用程序。它包括多个规范,如Servlets、JSP、EJB、JMS、JPA和CDI,用于开发企业级应用。

优点:

  • 企业级特性,如事务管理和安全性。
  • 大型应用程序的可扩展性。
  • 丰富的库和框架支持。

挑战:

  • 配置和管理的复杂性。
  • 相对于轻量级框架来说更加复杂。

代码示例:

假设我们正在开发一个在线银行系统,可以使用Java EE来构建。以下是示例代码:

// Servlet
@WebServlet("/account")
public class AccountServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 处理账户信息
    }
}

// EJB
@Stateless
public class AccountService {
    @PersistenceContext
    private EntityManager entityManager;

    public void transferMoney(Account from, Account to, double amount) {
        // 执行转账逻辑
    }
}

Java EE的优点在于其稳定性和可扩展性,适用于构建大型企业级应用。但它通常需要更多的配置和管理,相对于轻量级框架来说更加复杂。

5. 响应式架构

响应式架构是一种以异步和事件驱动方式构建应用程序的架构风格,旨在实现高度的可伸缩性和性能。Java中的响应式编程通常使用ReactiveX库,如RxJava,以及Spring Reactor框架。
在这里插入图片描述

响应式架构的关键特点

  1. 弹性(Elasticity):响应式应用程序能够根据负载自动扩展或缩减。这意味着在高负载时可以分配更多资源,而在低负载时可以释放资源,以确保性能和效率。

  2. 消息驱动(Message-Driven):响应式应用程序通常使用消息传递机制进行通信,这有助于降低耦合度,并允许组件之间的松散集成。

  3. 弹性故障处理(Resilient Fault Tolerance):响应式系统能够处理故障,并以一种可恢复的方式继续工作。这通常涉及到容错机制、自动重试和故障隔离。

响应式架构案例

让我们考虑一个电子商务网站的情景。该网站需要在不同设备上提供一致的用户体验,包括桌面、平板电脑和手机。为了实现响应式架构,可以使用前端框架如React或Angular来构建用户界面。这些框架允许根据设备的屏幕大小和分辨率自动调整布局和内容。此外,后端可以采用微服务架构,以实现弹性和弹性故障处理。

// 示例:响应式前端组件
import React from 'react';

function ProductList(props) {
    return (
        <div className="product-list">
            {props.products.map(product => (
                <div key={product.id} className="product">
                    <img src={product.image} alt={product.name} />
                    <h3>{product.name}</h3>
                    <p>{product.description}</p>
                </div>
            ))}
        </div>
    );
}

export default ProductList;

响应式架构的优点在于它可以处理大量的并发请求,并实现低延迟的响应。它适用于构建需要高性能和实时性的应用程序,如在线游戏、金融交易系统和大规模数据处理。

6. 大数据架构

随着大数据技术的兴起,Java在大数据领域也发挥了重要作用。Hadoop和Spark是两个广泛使用的大数据处理框架,它们使用Java作为主要编程语言。
在这里插入图片描述
什么是大数据架构?

大数据架构是一种设计和管理大规模数据处理和存储的系统的方法。这种架构旨在处理来自各种来源的大量数据,包括结构化和非结构化数据。大数据架构的目标是实现高性能、高可用性和高可扩展性,以支持复杂的数据分析和挖掘任务。

大数据架构的关键特点

  1. 分布式存储(Distributed Storage):大数据系统通常使用分布式存储技术,如Hadoop HDFS或Amazon S3,以存储数据并提供冗余和容错性。

  2. 批处理和流处理(Batch and Stream Processing):大数据架构支持批处理和流处理,以处理静态和实时数据。Apache Spark和Apache Kafka等工具用于这些用途。

  3. 分布式计算(Distributed Computing):大数据系统利用多台计算机上的多个节点来并行处理数据。这可以显著提高计算性能。

大数据架构案例

考虑一个社交媒体平台,每天产生数十亿条用户发布的消息。为了分析用户行为和提供个性化内容,需要构建一个大数据架构。该架构使用Apache Kafka收集实时数据流,将数据存储在Hadoop HDFS上,并使用Apache Spark进行批处理和流处理。这使平台能够快速响应用户的互动,并为广告主提供定向广告。

// 示例:使用Apache Spark进行数据分析
val rawData = spark.read.textFile("hdfs://path/to/data")
val wordCounts = rawData
  .flatMap(line => line.split(" "))
  .groupBy("word")
  .count()
wordCounts.show()

Hadoop提供了分布式存储和批处理处理能力,适用于大规模数据的离线分析。而Spark则提供了高性能的内存计算能力,支持迭代式处理和实时数据流处理。

7. 领域驱动设计(Domain-Driven Design,DDD)

领域驱动设计是一种软件开发方法,强调将业务逻辑和数据模型直接映射到代码中。Java中有许多框架和工具,如Hibernate和Spring Data,用于支持领域驱动设计。
在这里插入图片描述
什么是领域驱动设计(DDD)?

领域驱动设计是一种软件设计方法,着重于深入理解和建模问题领域(通常是业务领域),并将这些模型映射到软件中。DDD的目标是创建具有高内聚性和低耦合度的领域模型,以便更好地满足业务需求。

领域驱动设计的关键概念

  1. 领域(Domain):领域是问题空间的一部分,包括业务规则、实体、值对象和聚合。在DDD中,领

域是核心。

  1. 实体(Entity):实体是具有唯一标识的领域对象,其状态和行为都是由标识定义的。

  2. 值对象(Value Object):值对象是没有唯一标识的领域对象,其相等性是根据属性而不是标识来定义的。

领域驱动设计案例

考虑一个电子商务平台。在这个平台上,商品是一个重要的领域。使用领域驱动设计,可以创建商品领域模型,其中包括实体(如产品)和值对象(如价格)。这有助于更好地管理库存、价格策略和订单。

// 示例:商品领域模型
public class Product {
    private Long id;
    private String name;
    private Price price;

    // 省略其他属性和方法
}

public class Price {
    private BigDecimal amount;
    private Currency currency;

    // 省略其他属性和方法
}

领域驱动设计的核心概念包括聚合、实体、值对象和领域服务,它们帮助开发者更好地理解和建模复杂的业务领域。

8. 安卓开发架构

对于移动应用程序开发,Java在安卓平台上是一种重要的编程语言。安卓开发通常使用MVC(Model-View-Controller)或MVVM(Model-View-ViewModel)等架构模式。
在这里插入图片描述
什么是安卓开发架构?

安卓开发架构是一种设计应用程序的方法,专门用于创建在Android操作系统上运行的移动应用程序。它强调了应用的可维护性、可测试性和可扩展性。Android开发采用了MVVM(Model-View-ViewModel)和MVP(Model-View-Presenter)等架构模式。

安卓开发架构的关键概念

  1. 模型(Model):模型表示应用程序的数据和业务逻辑。它独立于用户界面,并负责处理数据的获取和处理。

  2. 视图(View):视图是用户界面的表示。它负责显示数据,并与用户交互。在Android中,视图通常由XML布局文件定义。

  3. 视图模型(ViewModel):视图模型是连接模型和视图的中间层。它包含视图所需的数据,并处理用户界面逻辑。ViewModel通常与LiveData一起使用,以便在数据变化时通知视图。

安卓开发架构案例

考虑一个社交媒体应用程序。用户可以查看和发布帖子,以及与其他用户互动。为了实现这个应用程序,可以使用MVVM架构。模型负责管理用户数据和帖子,视图显示帖子列表和用户界面,而ViewModel协调数据的获取和显示。

// 示例:Android中的ViewModel
public class PostViewModel extends ViewModel {
    private LiveData<List<Post>> posts;

    public PostViewModel() {
        // 初始化数据获取逻辑
        posts = Repository.getPosts();
    }

    public LiveData<List<Post>> getPosts() {
        return posts;
    }
}

安卓开发涉及到用户界面设计、数据存储、网络通信等多个方面,Java提供了丰富的库和工具,使得安卓应用程序的开发变得更加高效。

结论

Java作为一门多用途的编程语言,拥有丰富的架构和框架,可以满足各种不同应用场景的需求。从传统的三层架构到现代的微服务架构、响应式架构和大数据架构,Java的生态系统不断演进,以适应不断变化的软件开发需求。

选择适合项目需求的架构和框架是开发成功的关键。不同的架构具有各自的优点和挑战,开发者需要根据项目的规模、性能需求和复杂性来做出明智的选择。无论选择哪种架构,Java都提供了丰富的工具和库,帮助开发者构建高质量的应用程序。


🧸结尾


❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

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

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

相关文章

SAP_ABAP_OLE_EXCEL批导案例

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型https://blog.csdn.net/java_zhong1990/article/details/132469977 一、OLE_EXCEL批导 1.1 下载按钮 1.2 选择EXCEL上传&#xff0c;解析EXCLE数据&#xff0c; Call屏幕。 1.3 实现效果 1.4…

[管理与领导-66]:IT基层管理者 - 辅助技能 - 4- 乌卡时代(VUCA )的团队管理思维方式的转变

目录 一、乌卡时代人与公司的关系的转变 二、乌卡时代管理方式的转变 三、乌卡时代的管理与传统时代的管理比较 四、乌卡时代管理者的挑战 五、乌卡时代如何做好管理 六、个人能力要求 一、乌卡时代人与公司的关系的转变 在乌卡时代&#xff08;指虚拟办公、远程工作等数…

有c语言的基础学习python【python基础详解】

文章将从C语言出发&#xff0c;深入介绍python的基础知识&#xff0c;也包括很多python的新增知识点详解。 目录 1.python的输入输出&#xff0c;重新认识 hello world 1.1 输出函数print的规则 1.2 输入函数input的规则 1.3 用print将数据写入文件 2.数据类型、基本操作…

C++的多重继承

派生类都只有一个基类,称为单继承(Single Inheritance)。除此之外,C++也支持多继承(Multiple Inheritance),即一个派生类可以有两个或多个基类。 多继承容易让代码逻辑复杂、思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java、C#、PHP 等干脆取消了多继承。 …

[SWPUCTF 2022]——Web方向 详细Writeup

SWPUCTF 2022 ez_ez_php 打开环境得到源码 <?php error_reporting(0); if (isset($_GET[file])) {if ( substr($_GET["file"], 0, 3) "php" ) {echo "Nice!!!";include($_GET["file"]);} else {echo "Hacker!!";} }e…

ESP32C3 LuatOS RC522①写入数据并读取M1卡

LuatOS RC522官方示例 官方示例没有针对具体开发板&#xff0c;现以ESP32C3开发板为例。 选用的RC522模块 ESP32C3-CORE开发板 注意ESP32C3的 SPI引脚位置&#xff0c;SPI的id2 示例代码 -- LuaTools需要PROJECT和VERSION这两个信息 PROJECT "helloworld" VERSIO…

leecode学习(1)

一、题目 给定一个数组nums和一个目标值target,请你再该数组中找出和为目标值的那两个数&#xff0c;并返回数组的下标&#xff0c;你可以假设输入只会对应一个答案&#xff0c;但是数组的同一个元素不能使用两次。 二、解题思路 目的就是要求出两数之和等于目标值嘛。 就是…

Stable DIffusion系统教程 | 局部重绘,增删修改的魔法棒

目录 1. 基本操作 1.1 步骤1 补充提示词 1.2 步骤2 绘制蒙版 1.3 步骤3 参数设置 2.局部重绘其他应用 2.1 手绘蒙版 2.2 删除某些东西 之前我们熟悉了AI绘画的各类模型&#xff0c;提示词写法&#xff0c;图像放大等技巧。但我们目前所有的操作都是针对整张图片的。 但…

海康机器人工业相机SDK MVS安装教程

文章目录 一. 海康机器人介绍二. 工业相机客户端安装教程 一. 海康机器人介绍 海康机器人是面向全球的机器视觉和移动机器人产品及解决方案提供商&#xff0c;业务聚焦于工业物联网、智慧物流和智能制造&#xff0c;构建开放合作生态&#xff0c;为工业和物流领域用户提供服务…

解决:在宝塔站点上添加域名(8080,888等端口)显示“端口范围不合法“

在宝塔上给站点添加域名访问时&#xff0c;有时候需要部署站点的端口为8080或者888端口。但是添加之后显示&#xff1a; 解决方法 点击宝塔上的文件 切换到根目录搜索 public.py 包含子目录 选择这个&#xff1a; 修改其中的checkport函数&#xff1a; 最后&#xff0c;重启面…

学生管理系统VueAjax版本

学生管理系统VueAjax版本 使用Vue和Ajax对原有学生管理系统进行优化 1.准备工作 创建AjaxResult类&#xff0c;对Ajax回传的信息封装在对象中 package com.grg.Result;/*** Author Grg* Date 2023/8/30 8:51* PackageName:com.grg.Result* ClassName: AjaxResult* Descript…

面试中的商业思维:如何展示你对业务的理解

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

水稻叶病害数据集(目标检测,yolo使用)

1.数据集文件夹 train文件夹&#xff08;44229张&#xff09;&#xff0c;test文件夹&#xff08;4741张&#xff09;&#xff0c;valid文件夹&#xff08;6000张&#xff09; 2.train文件夹展示 labels展示 标签txt展示 data.yaml文件展示 对数据集感兴趣的可以关注最后一行…

Leetcode1090. 受标签影响的最大值

思路&#xff1a;根据值从大到小排序&#xff0c;然后在加的时候判断是否达到标签上限即可&#xff0c;一开始想用字典做&#xff0c;但是题目说是集合却连续出现两个8&#xff0c;因此使用元组SortedList进行解决 class Solution:def largestValsFromLabels(self, values: li…

Hadoop 集群小文件归档 HAR、小文件优化 Uber 模式

文章目录 小文件归档 HAR小文件优化 Uber 模式 小文件归档 HAR 小文件归档是指将大量小文件合并成较大的文件&#xff0c;从而减少存储开销、元数据管理的开销以及处理时的任务调度开销。 这里我们通过 Hadoop Archive (HAR) 来进行实现&#xff0c;它是一种归档格式&#xf…

模拟电子技术基础学习笔记一 本征半导体

半导体器件是构成电子电路的基本元件&#xff0c;它们所用的材料是经过特殊加工且性能可控的半导体材料。 1.本征半导体 纯净的具有晶体结构的半导体称为本征半导体 2.共价键 两个或多个原子通过共用电子对而产生的一种化学键称为共价键&#xff08;covalent bond&#xff…

LeetCode刷题---Two Sum(一)

文章目录 &#x1f340;题目&#x1f340;解法一&#x1f340;解法二&#x1f340;哈希表 &#x1f340;题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每…

OpenCV(五):图像颜色空间转换

目录 1.图像颜色空间介绍 RGB 颜色空间 2.HSV 颜色空间 3.RGBA 颜色空间 2.图像数据类型间的互相转换convertTo() 3.不同颜色空间互相转换cvtColor() 4.Android JNI demo 1.图像颜色空间介绍 RGB 颜色空间 RGB 颜色空间是最常见的颜色表示方式之一&#xff0c;其中 R、…

第 3 章 栈和队列(单链队列)

1. 背景说明 队列(queue)是一种先进先出(first in first out,缩为 FIFO)的线性表。它只允许在表的一端进行插入&#xff0c;而在另一端删除元素。 2. 示例代码 1&#xff09;status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果…

Lua学习(一)

lua基础学习 LUA 语言1. 什么是lua&#xff1f;1.1 准备工作 2. 基本语法2.1 注释2.2 标识符2.3 关键字2.4 全局变量 3. 数据类型4. 变量4.1 赋值语句 5. 循环5.1 while循环5.2 for循环5.3泛型for循环5.4 repeat until 循环5.5 break 语句 6. 流程控制6.1 if语句6.2 if else 语…