[PHP]关联和操作MySQL数据库然后将数据库部署到ECS
在Mac电脑上使用VS Code进行PHP开发并关联操作MySQL数据库,然后将数据库部署到ECS。
1.安装PHP和MySQL
确保你的Mac上已经安装了PHP和MySQL。你可以使用Homebrew来安装它们:
$ brew install php
$ brew install mysql
安装mysql完成后记住这一句:
MySQL is configured to only allow connections from localhost by defaultTo connect run:mysql -u root
使用以下命令查询安装情况:
$ php -v
$ mysql --version
启动MySQL服务:
$ brew services start mysql
重启MySQL服务:
$ brew services restart mysql
停止MySQL服务:
$ brew services stop mysql
2.创建MySQL用户、数据库和权限
登录到MySQL:
// 无密码直接用这一句登录
$ mysql -u root
// 也可以用这指令,输密码是直接回车跳过就是
$ mysql -u root -p
创建新数据库:
$ CREATE DATABASE mydatabase;
创建新用户并设置密码(替换myuser和mypassword为你自己的设置):
$ CREATE USER'myuser'@'localhost' IDENTIFIED BY'mypassword';
授权新用户访问数据库:
$ GRANT ALL PRIVILEGES ON mydatabase.*TO'myuser'@'localhost';
刷新权限:
$ FLUSH PRIVILEGES;
退出MySQL:
$ EXIT;
3.配置PHP连接MySQL
你需要在PHP代码中使用PDO或mysqli扩展来连接MySQL数据库。
确保你的MySQL服务正在运行,并且你已经创建了相应的用户、数据库和权限。
1).PDO
<?php
$host = '127.0.0.1';
$db = 'your_database';
$user = 'your_username';
$pass = 'your_password';
$charset = 'utf8mb4';$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,PDO::ATTR_EMULATE_PREPARES => false,
];try {$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>
2).mysqli扩展
<?php// 数据库连接配置
$host = 'localhost';
$dbname = 'mydatabase';
$username = 'myusername';
$password = 'mypassword';// 创建 mysqli 连接对象
$conn = new mysqli($host, $username, $password, $dbname);// 检查连接是否成功
if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);
}// 执行查询语句
$query = "SELECT * FROM users";
$result = $conn->query($query);// 处理结果集
if ($result->num_rows > 0) {while ($row = $result->fetch_assoc()) {echo $row['username'] . "<br>";}
} else {echo "没有结果";
}// 关闭数据库连接
$conn->close();?>
4.在VS Code中编写和运行PHP代码
Demo:https://github.com/Gamin-fzym/php_test_demo
注意:使用Launch Built-in web server配置运行时,需要将"localhost:0"改成其它端口,不然每次运行都会随机生成端口号,很不方便。
{"name": "Launch Built-in web server","type": "php","request": "launch","runtimeArgs": ["-dxdebug.mode=debug","-dxdebug.start_with_request=yes","-S","localhost:8080"],"program": "","cwd": "${workspaceRoot}","port": 9003,"serverReadyAction": {"pattern": "Development Server \\(http://localhost:([0-9]+)\\) started","uriFormat": "http://localhost:%s/index.html","action": "openExternally"}
}
index.html
城市信息表单
<!DOCTYPE html>
<html>
<head><title>城市信息表单</title>
</head>
<body><h1>城市信息表单</h1><form action="http://localhost:8080/city.php" method="post"><label for="cityName">城市名称:</label><input type="text" id="name" name="name" required><br><br><label for="cityCode">城市编码:</label><input type="text" id="code" name="code" required><br><br><label for="cityCode">增删改查:</label><input type="text" id="mark" name="mark" required><br><br><input type="submit" value="提交"></form><p id="jsonResponse"></p><script>document.querySelector('form').addEventListener('submit', function (event) {event.preventDefault();// 方式一:PHP 中使用这种方式获取 $name = $_POST['name'] ?? '';var form = event.target;var formData = new FormData(form);fetch(form.action, {method: 'POST',body: formData}).then(response => response.json()).then(data => {document.getElementById('jsonResponse').textContent = JSON.stringify(data);}).catch(error => console.error('请求接口失败', error));/*// 方式二:PHP中用这种方式获取 $data = json_decode(file_get_contents('php://input'), true); $name = $data['name'] ?? '';var form = event.target;var name = form.elements.name.value;var code = form.elements.code.value;var mark = form.elements.mark.value;var requestData = {name: name,code: code,mark: parseInt(mark) // mark 1:增 2:删 3:改 4:查};var xhr = new XMLHttpRequest();xhr.open('POST', form.action);xhr.setRequestHeader('Content-Type', 'application/json');// xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');xhr.onload = function () {if (xhr.status === 200) {var data = JSON.parse(xhr.responseText);document.getElementById('jsonResponse').textContent = JSON.stringify(data);} else {console.error('请求接口失败');}};xhr.send(JSON.stringify(requestData));*/});</script>
</body>
</html>
pdoConnect.php
PDO连接MySQL封装
<?php
$host = '127.0.0.1';
$port = 3306; // MySQL默认的是3306端口
$db = 'city_database';
$user = 'gamin';
$pass = '123456';
$charset = 'utf8mb4';$dsn = "mysql:host=$host;port=$port;dbname=$db;charset=$charset";
$options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,PDO::ATTR_EMULATE_PREPARES => false,
];// 连接数据库
try {$pdo = new PDO($dsn, $user, $pass, $options);createCitiesTable();
} catch (\PDOException $e) {throw new \PDOException($e->getMessage(), (int)$e->getCode());
}// 创建城市表
function createCitiesTable() {$tb_name = "cities";// 检查表是否已存在$isTableExists = checkTableExists($tb_name);if (!$isTableExists) { // 创建表$sql = "CREATE TABLE $tb_name (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,code INT NOT NULL)";global $pdo;$pdo->exec($sql);} else {}
}// 检查表是否存在
function checkTableExists($tableName) {global $pdo;$stmt = $pdo->query("SHOW TABLES LIKE '$tableName'");return $stmt->rowCount() > 0;
}?>
output.php
输出封装
<?phpclass ErrorCode {const FAILURE = -1;const SUCCESS = 0;const INVALID_INPUT = 100;const MISSING_PARAMETER = 101;const DATABASE_ERROR = 200;const FILE_NOT_FOUND = 201;const METHOD_NOT_ALLOW = 405;const INTERNAL_SERVER_ERROR = 500;const DATA_NOT_FOUND = 1000;public static function getErrorMessage($errorCode) {switch ($errorCode) {case self::FAILURE:return "Operation failed.";case self::SUCCESS:return "Operation succeeded.";case self::INVALID_INPUT:return "Invalid input provided.";case self::MISSING_PARAMETER:return "Required parameter is missing.";case self::DATABASE_ERROR:return "Database error occurred.";case self::FILE_NOT_FOUND:return "File not found.";case self::METHOD_NOT_ALLOW:return "Method not allowed."; case self::INTERNAL_SERVER_ERROR:return "Internal Server Error."; case self::DATA_NOT_FOUND:return "No matching data found."; default:return "Unknown error occurred.";}}
}function outputJSON(int $errorCode, $data = []) {// 构建要返回的数据$response = ['code' => $errorCode,'message' => ErrorCode::getErrorMessage($errorCode),'data' => $data];// 设置响应内容为 JSON 格式header('Content-Type: application/json');// 将数据转换为 JSON 字符串$json = json_encode($response);// 输出 JSON 字符串echo $json;
}?>
city.php
增加、删除、修改、查询城市
<?php
require "pdoConnect.php";
require "output.php";$tb_name = "cities";// 检查POST数据
if ($_SERVER['REQUEST_METHOD'] === 'POST') {/* 方式一: */// 获取数据并验证$name = $_POST['name'] ?? '';$code = $_POST['code'] ?? '';$mark = $_POST['mark'] ?? 0;/* 方式二:表单中Content-Type用'application/json'时,用这种方式获取传参 // 获取 JSON 数据并解析$data = json_decode(file_get_contents('php://input'), true);// 获取数据并验证$name = $data['name'] ?? '';$code = $data['code'] ?? '';$mark = $data['mark'] ?? 0;*/if (empty($name) || empty($code) || $mark == 0) {outputJSON(ErrorCode::MISSING_PARAMETER);return;}// mark 1:增 2:删 3:改 4:查if ($mark == 1) {// 插入数据$result = changeData("INSERT INTO $tb_name (name, code) VALUES (:name, :code)", ['name' => $name, 'code' => $code]);if ($result) {outputJSON(errorCode::SUCCESS);} else {outputJSON(errorCode::FAILURE);}} else if ($mark == 2) {// 删除数据$result = changeData("DELETE FROM $tb_name WHERE code = :code", ['code' => $code]);if ($result) {outputJSON(errorCode::SUCCESS);} else {outputJSON(errorCode::FAILURE);}} else if ($mark == 3) {// 更新数据$result = changeData("UPDATE $tb_name SET name = :name WHERE code = :code", ['name' => $name, 'code' => $code]);if ($result) {outputJSON(errorCode::SUCCESS);} else {outputJSON(errorCode::FAILURE);}} else if ($mark == 4) {// 查询数据$result = findData("SELECT * FROM $tb_name WHERE code = :code", ['code' => $code]);if ($result) {// 查询成功,至少有一条匹配的数据outputJSON(errorCode::SUCCESS,$result);} else {// 查询失败,没有匹配的数据outputJSON(ErrorCode::DATA_NOT_FOUND);}}}// 改变数据 插入|更新|删除
function changeData(string $sql, array $arr) {global $pdo;$stmt = $pdo->prepare($sql);$result = $stmt->execute($arr);return $result;
}// 查询数据
function findData(string $sql, array $arr) {global $pdo;$stmt = $pdo->prepare($sql);$stmt->execute($arr);$result = $stmt->fetch();return $result;
}?>
cityList.php
分页查询城市列表
<?php
require("pdoConnect.php");
require("output.php");// 检查POST数据
if ($_SERVER['REQUEST_METHOD'] === 'POST') { try {// 获取数据并验证$page = isset($_POST['page']) ? intval($_POST['page']) : 1; // 当前页码,默认为第一页$pageSize = isset($_POST['pageSize']) ? intval($_POST['pageSize']) : 10; // 每页数据条数,默认为 10// 对页码进行有效性检查$page = max(1, intval($page)); ;// 确保每页记录数为正整数$pageSize = max(1, intval($pageSize)); ;// 表名$tb_name = "cities";// 查询总记录数$countSql = "SELECT COUNT(*) AS total FROM $tb_name";$countStmt = $pdo->prepare($countSql);$countStmt->execute();$totalItems = $countStmt->fetchColumn();// 计算总页数$totalPages = ceil($totalItems / $pageSize);// 对页码进行有效性检查$page = min($page, $totalPages);// 计算偏移量$offset = ($page - 1) * $pageSize;// 查询当前页的数据$sql = "SELECT * FROM $tb_name LIMIT :offset, :pageSize";$stmt = $pdo->prepare($sql);$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);$stmt->bindValue(':pageSize', $pageSize, PDO::PARAM_INT);$stmt->execute();$pagedData = $stmt->fetchAll(PDO::FETCH_ASSOC);// 构建要返回的数据$response = ['page' => $page,'pageSize' => $pageSize,'totalPages' => $totalPages,'totalItems' => $totalItems,'data' => array_map(function ($item) {return $item;}, $pagedData)];outputJSON(ErrorCode::SUCCESS, $response);} catch (Exception $e) {// 发生错误时返回错误响应outputJSON(ErrorCode::INTERNAL_SERVER_ERROR);}
} else {// 非 POST 请求返回错误响应outputJSON(ErrorCode::METHOD_NOT_ALLOW);
}?>
5.测试本地开发环境
在本地开发环境中测试你的PHP脚本,确保它可以正确地与MySQL数据库进行交互。
6.将MySQL数据库部署到ECS
1).创建ECS实例
登录到阿里云管理控制台,创建一个ECS实例。
2).安装MySQL
通过SSH连接到你的ECS实例,使用相应的包管理器安装MySQL。
3).导出本地数据库
启动MySQL服务:
$ brew services start mysql
登录到MySQL:
$ mysql -u root -p
授予相应的权限:
$ GRANT PROCESS ON *.* TO 'gamin'@'localhost';
刷新权限:
$ FLUSH PRIVILEGES;
退出MySQL:
$ EXIT;导出数据库:
格式
mysqldump -u [username] -p [database_name] > [filename].sql
示例
mysqldump -u gamin -p city_database > /Users/gamin/Desktop/files/city.sql
4).导入数据库到线上MySQL
设置用户权限、创建数据库,并导入你的本地数据库数据到ECS上的MySQL实例。也可以直接选择数据库的“管理”,进入管理页直接导入。
导入报了一个错,这个错误是由于 MySQL 不识别 utf8mb4_0900_ai_ci这个字符集校对规则引起的。这通常是因为 MySQL 版本较旧,不支持该特定的字符集校对规则。
将 utf8mb4_0900_ai_ci替换为 MySQL 支持的字符集校对规则,例如 utf8mb4_general_ci或utf8mb4_unicode_ci。修改导入文件中的创建表语句,将字符集校对规则修改为合适的值。
导入成功
5).设置数据库访问权限为指定IP
7.部署PHP代码到ECS
1).配置Web服务器
在ECS上安装和配置Nginx或Apache作为Web服务器来处理PHP请求。
2).更新PHP代码中的数据库连接信息
使其指向ECS实例上的MySQL
<?php
$host = '121.43.232.240';
$port = 3306; // MySQL默认的是3306端口
$db = 'php_test_demo';
$user = 'php_test_demo';
$pass = 'iaTejKANGwWb6yLd';
$charset = 'utf8mb4';$dsn = "mysql:host=$host;port=$port;dbname=$db;charset=$charset";
$options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,PDO::ATTR_EMULATE_PREPARES => false,
];// 连接数据库
try {$pdo = new PDO($dsn, $user, $pass, $options);createCitiesTable();
} catch (\PDOException $e) {throw new \PDOException($e->getMessage(), (int)$e->getCode());
}// 创建城市表
function createCitiesTable() {$tb_name = "cities";// 检查表是否已存在$isTableExists = checkTableExists($tb_name);if (!$isTableExists) { // 创建表$sql = "CREATE TABLE $tb_name (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,code INT NOT NULL)";global $pdo;$pdo->exec($sql);} else {}
}// 检查表是否存在
function checkTableExists($tableName) {global $pdo;$stmt = $pdo->query("SHOW TABLES LIKE '$tableName'");return $stmt->rowCount() > 0;
}?>
3).将PHP代码部署到ECS
这里我就直接在宝塔中上传PHP文件了,当然直接传这样没版本管理不怎么科学。还可以使用FTP、SCP或者Git方式,传输文件。
4).去ECS的安全组放行3306端口
8.测试远程环境
为了便于测试,我将前面写的表单页面也部署到了站点上。
访问页面,经过测试,我们能正常查询到从本地导入到MySQL的数据,也能正常连接线上数据库执行其它操作。
https://www.lnktools.com/page/index.html
确保在部署到生产环境之前,你的应用已经通过了所有必要的安全和性能测试。此外,确保对敏感信息(如数据库凭据)进行加密,并在ECS实例上配置合适的安全措施。
相关文章:

[PHP]关联和操作MySQL数据库然后将数据库部署到ECS
在Mac电脑上使用VS Code进行PHP开发并关联操作MySQL数据库,然后将数据库部署到ECS。 1.安装PHP和MySQL 确保你的Mac上已经安装了PHP和MySQL。你可以使用Homebrew来安装它们: $ brew install php $ brew install mysql 安装mysql完成后记住这一句: …...

23.11.19日总结
经过昨天的中期答辩,其实可以看出来项目进度太慢了,现在是第十周,预计第十四周是终级答辩,在这段时间要把项目写完。 前端要加上一个未登录的拦截器,后端加上全局的异常处理。对于饿了么项目的商品建表,之前…...

系列一、JVM概述
一、概述 1.1、Java发展中的重大事件 1.2、虚拟机 vs Java虚拟机 1.2.1、虚拟机 1.2.2、Java虚拟机 1.2.3、Java虚拟机的作用 Java虚拟机是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令指令。每一条Java指令&#…...
milvus数据管理-压缩数据
Milvus 默认支持自动数据压缩。您可以 配置 Milvus 以启用或禁用 压缩 和自动压缩。 如果自动压缩被禁用,您仍然可以手动压缩数据。 1.手动压缩数据 压缩请求是异步处理的,因为它们通常需要花费很长时间。 from pymilvus import Collection collection…...

SpringBoot项目连接linux服务器数据库两种解决方法(linux直接开放端口访问本机通过SSH协议访问,以mysql为例)
最近找个springboot脚手架重新熟悉一下springboot相关框架的东西,结果发现好像项目还不能直接像数据库GUI工具一样填几个SSH参数就可以了,于是就给他再整一下看看如何解决 linux开放3306(可修改)端口直接访问 此方法较为方便&am…...

【Rust】快速教程——闭包与生命周期
前言 你怎么向天生的瞎子说清颜色?怎么用手势向天生的聋子描述声音? 鲜花就在眼前,雷鸣就在头顶,对他们来说却都毫无意义 眼睛看不到,鼻子可以嗅闻花香,耳朵听不见,手指可以触碰窗纸的震动。 犯…...

redis高级案列case
案列一 双写一致性 案例二 双锁策略 package com.redis.redis01.service;import com.redis.redis01.bean.RedisBs; import com.redis.redis01.mapper.RedisBsMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; imp…...
Vue3+Vite实现工程化,attribute属性渲染v-bind指令
想要渲染一个元素的attribute,应该使用v-bind指令 由于插值表达式不能直接放在标签的属性中,所有要渲染元素的属性就应该使用v-bindv-bind可以用于渲染任何元素的属性,语法为 v-bind:属性名数据名,可以简写为 :属性名数据名 <…...

下一代搜索引擎会什么?
现在是北京时间2023年11月18日。聊一聊搜索。 说到搜索,大家首先想到的肯定是谷歌,百度。我把这些定义成上一个时代的搜索引擎。ChatGPT已经火热了有一年的时间了,大家都认为Ai搜索是下一代的搜索。但是AI搜索,需要的是很大算力&a…...
WPF中如何在MVVM模式下关闭窗口
完全来源于十月的寒流,感谢大佬讲解 使用Behaviors <Window x:Class"Test_03.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:b"http://schemas.microsoft.com/xaml/behaviors"xmlns:x&quo…...

【数据结构&C++】二叉平衡搜索树-AVL树(25)
前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一.AVL树的概念二.AVL树节点的定义(代码…...
Python算法——树的最大深度和最小深度
Python中的树的最大深度和最小深度算法详解 树的最大深度和最小深度是树结构中的两个关键指标,它们分别表示树的从根节点到最深叶子节点的最大路径长度和最小路径长度。在本文中,我们将深入讨论如何计算树的最大深度和最小深度,并提供Python…...
46.全排列-py
46.全排列 class Solution(object):def permute(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""# 结果数组0ans[]nlen(nums)# 判断是否使用state_[False]*n# 临时状态数组dp_[]def dfs (index):# 终止条件if indexn:ans.appe…...

系列三、GC垃圾回收算法和垃圾收集器的关系?分别是什么请你谈谈
一、关系 GC算法(引用计数法、复制算法、标记清除算法、标记整理算法)是方法论,垃圾收集器是算法的落地实现。 二、4种主要垃圾收集器 4.1、串行垃圾收集器(Serial) 它为单线程环境设计,并且只使用一个线程…...

WPF中的虚拟化是什么
WPF(Windows Presentation Foundation)中的虚拟化是一种性能优化技术,它主要用于提高大量数据展示的效率。在WPF中,如果你有一个包含大量项的ItemsControl(例如ListBox、ListView或DataGrid等),…...

免费稳定几乎无门槛,我的ChartGPT助手免费分享给你
公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 概述 ChatGPT想必大家应该都不陌生了,大部分人或多或少都接触了,好多应该都是通过openAi的官方进行使用的,这个门槛对大部分人有点高,…...

奇瑞金融:汽车金融行业架构设计
拆借联合贷款abs...
milvus数据库分区管理
一、创建分区 在创建集合时,会默认创建分区_default。 自己手动创建如下: from pymilvus import Collection collection Collection("book") # Get an existing collection. collection.create_partition("novel")二、检测分…...

pytorch.nn.Conv1d详解
通读了从论文中找的代码,终于找到这个痛点了! 以下详解nn.Conv1d方法 1 参数说明 in_channels(int) – 输入信号的通道。 out_channels(int) – 卷积产生的通道。 kernel_size(int or tuple) - 卷积核的尺寸,经测试后卷积核的大小应为in_cha…...

大数据HCIE成神之路之数学(2)——线性代数
线性代数 1.1 线性代数内容介绍1.1.1 线性代数介绍1.1.2 代码实现介绍 1.2 线性代数实现1.2.1 reshape运算1.2.2 转置实现1.2.3 矩阵乘法实现1.2.4 矩阵对应运算1.2.5 逆矩阵实现1.2.6 特征值与特征向量1.2.7 求行列式1.2.8 奇异值分解实现1.2.9 线性方程组求解 1.1 线性代数内…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...