当前位置: 首页 > news >正文

【JAVA】Java项目实战—Java EE项目:企业资源规划(ERP)系统

在企业管理中,企业资源规划(ERP)系统是不可或缺的工具。它能够帮助企业高效管理各种资源,包括人力资源、财务资源和库存等。Java作为一种成熟的编程语言,因其跨平台特性、强大的生态系统以及良好的社区支持,成为开发ERP系统的热门选择。

在本项目中,实现一个简单的ERP系统,涵盖员工管理、财务管理和库存管理等功能。通过这一项目,每个人将深入理解Java EE的核心概念,并掌握如何在实际应用中运用这些知识。

Java EE概述

Java EE(Java Platform, Enterprise Edition)是Java的一个重要分支,专为企业级应用开发设计。Java EE提供了一系列的API和运行环境,帮助开发者构建大规模的分布式应用程序。其核心组件包括:

  • Servlet:用于处理HTTP请求和响应。

  • JSP(JavaServer Pages):用于动态生成HTML页面。

  • EJB(Enterprise JavaBeans):用于构建分布式、事务性和可扩展的企业级应用。

  • JPA(Java Persistence API):用于对象关系映射(ORM),简化数据库操作。

  • Web Services:用于构建基于SOAP或REST的服务。

项目结构

在本项目中,使用Maven作为构建工具,项目结构如下:

erp-system/
│
├── pom.xml
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── erp/
│   │   │           ├── controller/
│   │   │           ├── model/
│   │   │           ├── service/
│   │   │           └── repository/
│   │   └── resources/
│   │       └── application.properties
│   └── test/
│       └── java/
│           └── com/
│               └── erp/
└── webapp/├── index.jsp└── WEB-INF/└── web.xml

1. 理论知识:Java EE的基础

1.1 Servlet

Servlet是Java EE的核心组件之一,主要用于处理HTTP请求。它是一个Java类,能够接收请求并生成响应。

示例代码:

package com.erp.controller;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/hello")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");response.getWriter().println("<h1>Hello, ERP System!</h1>");}
}

解释:

  • @WebServlet("/hello"):定义Servlet的URL映射,当访问/hello时,该Servlet会被调用。

  • doGet方法:处理GET请求,设置响应类型为HTML,并输出一条简单的欢迎信息。

1.2 JSP

JSP(JavaServer Pages)用于创建动态网页。它允许在HTML中嵌入Java代码。

示例代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>ERP System</title>
</head>
<body>
<h1>Welcome to the ERP System</h1>
<p>Current Date: <%= new java.util.Date() %></p>
</body>
</html>

解释:

  • <%= new java.util.Date() %>:JSP标签,输出当前日期。

2. 实现员工管理功能

员工管理是ERP系统的重要组成部分,下面我们将实现一个简单的员工管理模块。

2.1 数据模型

首先,我们需要定义员工的模型类。

示例代码:

package com.erp.model;public class Employee {private int id;private String name;private String position;public Employee(int id, String name, String position) {this.id = id;this.name = name;this.position = position;}// Getters and Setterspublic int getId() { return id; }public void setId(int id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public String getPosition() { return position; }public void setPosition(String position) { this.position = position; }
}

解释:

  • Employee类包含员工的基本信息:ID、姓名和职位。

2.2 仓库层

接下来,我们实现员工的仓库层,用于数据的存储和检索。

示例代码:

package com.erp.repository;import com.erp.model.Employee;
import java.util.ArrayList;
import java.util.List;public class EmployeeRepository {private List<Employee> employees = new ArrayList<>();public void addEmployee(Employee employee) {employees.add(employee);}public List<Employee> getAllEmployees() {return employees;}
}

解释:

  • EmployeeRepository类维护一个员工列表,并提供添加和获取员工的方法。

2.3 服务层

服务层负责业务逻辑的处理。

示例代码:

package com.erp.service;import com.erp.model.Employee;
import com.erp.repository.EmployeeRepository;import java.util.List;public class EmployeeService {private EmployeeRepository repository = new EmployeeRepository();public void addEmployee(Employee employee) {repository.addEmployee(employee);}public List<Employee> getAllEmployees() {return repository.getAllEmployees();}
}

解释:

  • EmployeeService类调用EmployeeRepository来管理员工数据。

2.4 控制层

最后,我们实现控制层,处理用户请求。

示例代码:

package com.erp.controller;import com.erp.model.Employee;
import com.erp.service.EmployeeService;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;@WebServlet("/employees")
public class EmployeeController extends HttpServlet {private EmployeeService employeeService = new EmployeeService();@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {List<Employee> employees = employeeService.getAllEmployees();request.setAttribute("employees", employees);request.getRequestDispatcher("/employeeList.jsp").forward(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");String position = request.getParameter("position");Employee employee = new Employee(1, name, position); // ID可以用数据库生成employeeService.addEmployee(employee);response.sendRedirect("employees");}
}

解释:

  • doGet方法:获取所有员工并转发到employeeList.jsp页面。

  • doPost方法:处理添加员工的请求。

2.5 JSP页面

创建一个JSP页面以显示员工列表。

示例代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Employee List</title>
</head>
<body>
<h1>Employee List</h1>
<form action="employees" method="post">Name: <input type="text" name="name" required>Position: <input type="text" name="position" required><input type="submit" value="Add Employee">
</form>
<table border="1"><tr><th>ID</th><th>Name</th><th>Position</th></tr><%List<Employee> employees = (List<Employee>) request.getAttribute("employees");for (Employee employee : employees) {%><tr><td><%= employee.getId() %></td><td><%= employee.getName() %></td><td><%= employee.getPosition() %></td></tr><%}%>
</table>
</body>
</html>

解释:

  • 表单用于添加新员工,表格显示所有员工信息。

3. 财务管理功能

财务管理是ERP系统的另一个重要模块。我们将实现简单的财务记录功能。

3.1 数据模型

定义财务记录的模型类。

示例代码:

package com.erp.model;public class FinanceRecord {private int id;private String description;private double amount;public FinanceRecord(int id, String description, double amount) {this.id = id;this.description = description;this.amount = amount;}// Getters and Setterspublic int getId() { return id; }public void setId(int id) { this.id = id; }public String getDescription() { return description; }public void setDescription(String description) { this.description = description; }public double getAmount() { return amount; }public void setAmount(double amount) { this.amount = amount; }
}

解释:

  • FinanceRecord类包含财务记录的基本信息:ID、描述和金额。

3.2 仓库层

实现财务记录的仓库层。

示例代码:

package com.erp.repository;import com.erp.model.FinanceRecord;
import java.util.ArrayList;
import java.util.List;public class FinanceRepository {private List<FinanceRecord> records = new ArrayList<>();public void addRecord(FinanceRecord record) {records.add(record);}public List<FinanceRecord> getAllRecords() {return records;}
}

解释:

  • FinanceRepository类维护一个财务记录列表,并提供添加和获取记录的方法。

3.3 服务层

服务层负责财务记录的业务逻辑处理。

示例代码:

package com.erp.service;import com.erp.model.FinanceRecord;
import com.erp.repository.FinanceRepository;import java.util.List;public class FinanceService {private FinanceRepository repository = new FinanceRepository();public void addRecord(FinanceRecord record) {repository.addRecord(record);}public List<FinanceRecord> getAllRecords() {return repository.getAllRecords();}
}

解释:

  • FinanceService类调用FinanceRepository来管理财务记录数据。

3.4 控制层

控制层处理财务记录的请求。

示例代码:

package com.erp.controller;import com.erp.model.FinanceRecord;
import com.erp.service.FinanceService;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;@WebServlet("/finance")
public class FinanceController extends HttpServlet {private FinanceService financeService = new FinanceService();@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {List<FinanceRecord> records = financeService.getAllRecords();request.setAttribute("records", records);request.getRequestDispatcher("/financeList.jsp").forward(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String description = request.getParameter("description");double amount = Double.parseDouble(request.getParameter("amount"));FinanceRecord record = new FinanceRecord(1, description, amount); // ID可以用数据库生成financeService.addRecord(record);response.sendRedirect("finance");}
}

解释:

  • doGet方法:获取所有财务记录并转发到financeList.jsp页面。

  • doPost方法:处理添加财务记录的请求。

3.5 JSP页面

创建一个JSP页面以显示财务记录列表。

示例代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Finance Records</title>
</head>
<body>
<h1>Finance Records</h1>
<form action="finance" method="post">Description: <input type="text" name="description" required>Amount: <input type="number" step="0.01" name="amount" required><input type="submit" value="Add Record">
</form>
<table border="1"><tr><th>ID</th><th>Description</th><th>Amount</th></tr><%List<FinanceRecord> records = (List<FinanceRecord>) request.getAttribute("records");for (FinanceRecord record : records) {%><tr><td><%= record.getId() %></td><td><%= record.getDescription() %></td><td><%= record.getAmount() %></td></tr><%}%>
</table>
</body>
</html>

解释:

  • 表单用于添加新财务记录,表格显示所有财务记录信息。

4. 库存管理功能

库存管理是ERP系统的另一个重要模块。我们将实现简单的库存记录功能。

4.1 数据模型

定义库存记录的模型类。

示例代码:

package com.erp.model;public class InventoryItem {private int id;private String name;private int quantity;public InventoryItem(int id, String name, int quantity) {this.id = id;this.name = name;this.quantity = quantity;}// Getters and Setterspublic int getId() { return id; }public void setId(int id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public int getQuantity() { return quantity; }public void setQuantity(int quantity) { this.quantity = quantity; }
}

解释:

  • InventoryItem类包含库存项目的基本信息:ID、名称和数量。

4.2 仓库层

实现库存记录的仓库层。

示例代码:

package com.erp.repository;import com.erp.model.InventoryItem;
import java.util.ArrayList;
import java.util.List;public class InventoryRepository {private List<InventoryItem> items = new ArrayList<>();public void addItem(InventoryItem item) {items.add(item);}public List<InventoryItem> getAllItems() {return items;}
}

解释:

  • InventoryRepository类维护一个库存项目列表,并提供添加和获取项目的方法。

4.3 服务层

服务层负责库存记录的业务逻辑处理。

示例代码:

package com.erp.service;import com.erp.model.InventoryItem;
import com.erp.repository.InventoryRepository;import java.util.List;public class InventoryService {private InventoryRepository repository = new InventoryRepository();public void addItem(InventoryItem item) {repository.addItem(item);}public List<InventoryItem> getAllItems() {return repository.getAllItems();}
}

解释:

  • InventoryService类调用InventoryRepository来管理库存项目数据。

4.4 控制层

控制层处理库存记录的请求。

示例代码:

package com.erp.controller;import com.erp.model.InventoryItem;
import com.erp.service.InventoryService;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;@WebServlet("/inventory")
public class InventoryController extends HttpServlet {private InventoryService inventoryService = new InventoryService();@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {List<InventoryItem> items = inventoryService.getAllItems();request.setAttribute("items", items);request.getRequestDispatcher("/inventoryList.jsp").forward(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");int quantity = Integer.parseInt(request.getParameter("quantity"));InventoryItem item = new InventoryItem(1, name, quantity); // ID可以用数据库生成inventoryService.addItem(item);response.sendRedirect("inventory");}
}

解释:

  • doGet方法:获取所有库存项目并转发到inventoryList.jsp页面。

  • doPost方法:处理添加库存项目的请求。

4.5 JSP页面

创建一个JSP页面以显示库存项目列表。

示例代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Inventory Items</title>
</head>
<body>
<h1>Inventory Items</h1>
<form action="inventory" method="post">Name: <input type="text" name="name" required>Quantity: <input type="number" name="quantity" required><input type="submit" value="Add Item">
</form>
<table border="1"><tr><th>ID</th><th>Name</th><th>Quantity</th></tr><%List<InventoryItem> items = (List<InventoryItem>) request.getAttribute("items");for (InventoryItem item : items) {%><tr><td><%= item.getId() %></td><td><%= item.getName() %></td><td><%= item.getQuantity() %></td></tr><%}%>
</table>
</body>
</html>

解释:

  • 表单用于添加新库存项目,表格显示所有库存项目的信息。

总结

通过本项目,我们实现了一个简单的ERP系统,涵盖了员工管理、财务管理和库存管理等功能。在这个过程中,我们深入了解了Java EE的核心组件,包括Servlet、JSP、服务层和仓库层的设计模式。这些知识不仅适用于ERP系统的开发,也可以推广到其他企业级应用的开发中。

后续工作

  • 持久化存储:使用JPA将数据持久化到数据库中。

  • 用户认证与授权:实现用户登录和权限管理功能。

  • 前端框架:使用现代前端框架(如React或Vue.js)增强用户体验。

  • RESTful API:构建RESTful API,以便与前端或移动应用进行交互。

希望本项目能够为读者提供一个清晰的Java EE开发实践的示例,激励更多的开发者深入学习和应用Java EE技术。

相关文章:

【JAVA】Java项目实战—Java EE项目:企业资源规划(ERP)系统

在企业管理中&#xff0c;企业资源规划&#xff08;ERP&#xff09;系统是不可或缺的工具。它能够帮助企业高效管理各种资源&#xff0c;包括人力资源、财务资源和库存等。Java作为一种成熟的编程语言&#xff0c;因其跨平台特性、强大的生态系统以及良好的社区支持&#xff0c…...

springboot配置过滤器解决html资源路径和接口路径冲突问题

比如&#xff1a; html文件使用 / 接口路径使用 /api 首先配置文件里肯定配置范围最大的根路径 server:port: 80servlet:context-path: / 过滤器代码 Slf4j public class RequestSeparationFilter implements Filter {Overridepublic void init(FilterConfig filterConfi…...

在IDE中使用Git

我们在开发的时候肯定是经常使用IDE进行开发的&#xff0c;所以在IDE中使用Git也是非常常用的&#xff0c;接下来以IDEA为例&#xff0c;其他的VS code &#xff0c;Pycharm等IDE都是一样的。 在IDEA中配置Git 1.打开IDEA 2.点击setting 3.直接搜索git 如果已经安装了会自…...

【AIGC进阶-ChatGPT提示词副业解析】反向心理学在沟通中的运用:激将法的艺术

引言 在日常沟通和管理中&#xff0c;直接的表达方式并不总能达到预期效果。反向心理学&#xff0c;特别是其中的激将法&#xff0c;作为一种独特的沟通技巧&#xff0c;往往能在看似消极的表达中激发出积极的反应。本文将深入探讨反向心理学中激将法的运用技巧、实施策略及其…...

JeecgBoot passwordChange 任意用户密码重置漏洞复现

0x01 产品简介 Jeecg Boot是一个企业级低代码开发平台,基于前后端分离的架构,融合了SpringBoot、SpringCloud、Ant Design、Vue、Mybatis-plus、Shiro、JWT等多种主流技术,旨在帮助企业快速构建各种应用系统,提高开发效率,降低开发成本。采用最新主流的前后分离框架,使得…...

【智体OS】官方上新发布智体机器人:使用rtrobot智体应用远程控制平衡车机器人

【智体OS】官方上新发布智体机器人&#xff1a;使用rtrobot智体应用远程控制平衡车机器人 dtns.network是一款主要由JavaScript编写的智体世界引擎&#xff08;内嵌了three.js编辑器的定制版-支持以第一视角浏览3D场馆&#xff09;&#xff0c;可以在浏览器和node.js、deno、e…...

Blazor(.razor)+VUE+elementUI适合一起用吗

在实际项目中&#xff0c;将 Blazor&#xff08;.razor&#xff09; 与 Vue.js 和 ElementUI 一起使用是可以实现的&#xff0c;但是否适合取决于你的项目需求、开发团队的技术栈和具体场景。以下是对这种组合的详细分析&#xff1a; 一、适合一起使用的场景 1.1 逐步引入 Bla…...

SpringBoot左脚进门之Maven管理家

一、概念 Maven 是一个项目管理和整合工具。通过对 目录结构和构建生命周期 的标准化&#xff0c; 使开发团队用极少的时间就能够自动完成工程的基础构建配置。 Maven 简化了工程的构建过程&#xff0c;并对其标准化&#xff0c;提高了重用性。 Maven 本地仓库 (Local Reposi…...

188-下翻便携式6U CPCI工控机箱

一、板卡概述 下翻式CPCI便携工控机,系统采用6u cpci背板结构,1个系统槽,7个扩展槽, 满足对携带的需求,可装标准6U8槽CPCI主板,8个扩展槽, 满足客户对空间扩展的需求.可宽温服务的工作产品,15高亮度液晶显示屏,超薄88键笔记本键盘,触摸式鼠标,加固型机箱结构,使它能够适应各种复…...

Ubuntu 挂载目录

1. 临时挂载&#xff08;重启后失效&#xff09; 创建挂载点&#xff1a; $ sudo mkdir -p /work临时挂载磁盘到 work 目录&#xff1a; $ sudo mount /dev/nvme0n1p1 /work验证挂载是否成功&#xff1a; $ df -h /work此方法挂载在系统重启后会失效&#xff0c;需手动重新挂载…...

基于IEEE 802.1Qci的时间敏感网络(TSN)主干架构安全分析及异常检测系统设计

中文标题&#xff1a;基于IEEE 802.1Qci的时间敏感网络&#xff08;TSN&#xff09;主干架构安全分析及异常检测系统设计 英文标题&#xff1a;Security Analysis of the TSN Backbone Architecture and Anomaly Detection System Design Based on IEEE 802.1Qci 作者信息&…...

2024年食堂采购系统源码技术趋势:如何开发智能的供应链管理APP

本篇文章&#xff0c;小编将与大家一同探讨2024年食堂采购系统的技术趋势&#xff0c;并提供开发更智能的供应链管理APP的策略。 一、2024年食堂采购系统的技术趋势 1.人工智能与机器学习的深度应用 在2024年&#xff0c;AI和机器学习在食堂采购系统中的应用将更加普遍。这些…...

zotero安装教程(包括茉莉花插件)

zotero安装教程&#xff08;包括茉莉花插件&#xff09; zotero下载(windows)1-安装 Zotero2-安装 Zotero Connector3-安装浏览器插件--jasminum茉莉花功能&#xff1a;插件下载地址&#xff1a;[https://github.com/search?qjasminum&typerepositories](https://github.c…...

webpack4 - 配置文件分离(详细教程)

webpack根据开发和生成环境一般可以将配置文件拆分&#xff0c;拆分dev和prod两种环境 |- package.json|- /build|- webpack.base.js|- webpack.dev.js|- webpack.prod.js在scripts里修改相应的命令 "dev": "webpack-dev-server --config build/webpack.dev.j…...

MongoDB 分片

MongoDB 分片 MongoDB 分片是一种数据库架构&#xff0c;用于将大量数据分布存储在多个服务器上。这种设计允许数据库扩展&#xff0c;以处理大量数据和高吞吐量操作。分片通过将数据集分割成小块&#xff0c;称为分片&#xff0c;并将这些分片分布到多个服务器上来工作。每个…...

PHP加载MySQL扩展

PHP本身不具备操作MySQL数据库的能力&#xff0c;需要借助PHP操作MySQL的扩展来实现 1、PHP加载MySQL扩展&#xff1a;php.ini文件中 2、PHP中所有的扩展都在ext文件中&#xff0c;需要指定扩展所在路径&#xff1a;extension_dir 3、php.ini 已经被apache加载&#xff0c;所以…...

期末复习-计算机网络篇SCAU

第一章&#xff1a;概述 1.计算机网络的特点&#xff0c;互联网发展的三个阶段 特点&#xff1a;连通性、资源共享 三个阶段&#xff1a; 1969-1990&#xff1a;从单个网络ARPANET向互联网发展 1985-1993&#xff1a;建成了三级结构的互联网 1993-现在&#xff1a;全球范…...

使用LLM进行股价预测(附代码)

使用LLM进行股价预测(附代码) 注意 代码是完整的&#xff0c;但是需要 https://github.com/wxy2ab/akinterpreter 才能完整运行 利用 Python 和 AkShare 进行股票数据分析与预测&#xff1a;以中远海控为例 在本文中&#xff0c;我们将使用 Python 的 akshare 库获取中远海…...

分支限界笔记

文章目录 概要整体架构流程基本概念分支限界法的定义核心思想 简单问题介绍问题&#xff1a;简单背包问题思考&#xff1a;暴力解法聪明的解法&#xff1a;分支限界法直观理解分支限界法的步骤0-1背包问题问题描述问题建模问题分析1. 定义问题的解空间&#xff0c;确定易于搜索…...

PHP Cookie

Cookie 是什么&#xff1f; cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时&#xff0c;这台计算机将会发送 cookie。通过 PHP&#xff0c;您能够创建并取回 cookie 的值。 如何创建 Cookie&#xff1f; setcoo…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...