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

WEB前端08-综合案例(动态表格)

使用 HTML、CSS 和 JavaScript 创建动态表格

在本教程中,我们将创建一个动态表格,允许用户添加行、选择项目,并执行批量操作,如全选或删除选中的行。我们将通过 HTML、CSS 和 JavaScript 来实现这一功能。让我们逐步了解每个部分是如何协同工作的。

image-20240720185405657

HTML 结构

我们的 HTML 文档设置了页面的基本结构:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>动态表格</title><style>/* CSS 样式在这里 */</style>
</head>
<body><div class="container"><!-- 输入字段和添加按钮 --><div class="div_1"><input type="text" name="id" id="id" placeholder="请输入编号"><input type="text" name="name" id="name" placeholder="请输入用户名"><input type="text" name="sex" id="sex" placeholder="请输入性别"><input type="button" value="添加" id="bn_add"></div><!-- 表格显示学生信息 --><div class="div_2"><table><caption>学生信息表</caption><!-- 表头 --><tr onmouseover="doOver(this);" onmouseout="doOut(this);"><th><input type="checkbox" id="doChoose"></th><th>编号</th><th>姓名</th><th>性别</th><th>操作</th></tr><!-- 示例数据行 --><tr onmouseover="doOver(this);" onmouseout="doOut(this);"><td><input type="checkbox" name="user"></td><td>1</td><td>张三</td><td></td><td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td></tr></table></div><!-- 操作按钮 --><div class="div_3"><input type="button" value="全选" id="chooseAll"><input type="button" value="全不选" id="chooseNull"><input type="button" value="反选" id="chooseFan"><input type="button" value="删除" id="deleteTable"></div></div><script>/* JavaScript 函数在这里 */</script>
</body>
</html>

HTML 元素说明

  1. 容器 Div:
    • .container 类将所有元素包裹在一起,为其添加了内边距和阴影效果,使页面看起来更像卡片。
  2. 输入字段和按钮:
    • .div_1 类包含 ID、姓名和性别的输入字段以及一个添加新行的按钮。
  3. 表格:
    • 表格显示学生信息,包含选择框、编号、姓名、性别和操作列。每一行都有一个删除选项。
  4. 操作按钮:
    • .div_3 类包含全选、全不选、反选和删除选中行的按钮。

CSS 样式

CSS 用于美化表格和输入字段。以下是 CSS 的简要说明:

body {font-family: Arial, sans-serif; /* 设置全局字体 */background-color: #f2f2f2; /* 设置背景颜色 */color: #333; /* 设置文本颜色 */margin: 0; /* 去除默认外边距 */padding: 20px; /* 设置页面内边距 */
}.container {width: 80%; /* 设置容器宽度 */margin: auto; /* 居中容器 */background: #fff; /* 背景颜色为白色 */padding: 20px; /* 添加内边距 */box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* 添加阴影效果 */
}.div_1 {text-align: center; /* 居中对齐内容 */margin-bottom: 20px; /* 添加下边距 */
}.div_1 input[type="text"] {padding: 10px; /* 添加内边距 */margin-right: 10px; /* 添加右边距 */border: 1px solid #ccc; /* 设置边框 */border-radius: 5px; /* 设置圆角边框 */
}.div_1 input[type="button"] {padding: 10px 20px; /* 添加内边距 */background-color: #007BFF; /* 背景颜色 */color: white; /* 文本颜色 */border: none; /* 去除边框 */border-radius: 5px; /* 设置圆角边框 */cursor: pointer; /* 设置鼠标样式 */
}.div_1 input[type="button"]:hover {background-color: #0056b3; /* 悬停时背景颜色变化 */
}table {width: 100%; /* 设置表格宽度 */border-collapse: collapse; /* 合并边框 */margin-bottom: 20px; /* 添加下边距 */
}table,
td,
th {border: 1px solid #ddd; /* 设置边框 */
}th,
td {padding: 12px; /* 添加内边距 */text-align: center; /* 居中对齐文本 */
}th {background-color: #007BFF; /* 表头背景颜色 */color: white; /* 表头文本颜色 */
}caption {font-size: 1.5em; /* 设置标题字体大小 */margin: 10px; /* 添加边距 */color: #007BFF; /* 设置标题颜色 */
}.div_3 {text-align: center; /* 居中对齐内容 */font-family: Arial, sans-serif; /* 设置字体 */color: #333; /* 设置文本颜色 */
}.div_3 input[type="button"] {padding: 10px 20px; /* 添加内边距 */margin: 5px; /* 添加边距 */background-color: #28a745; /* 背景颜色 */color: white; /* 文本颜色 */border: none; /* 去除边框 */border-radius: 5px; /* 设置圆角边框 */cursor: pointer; /* 设置鼠标样式 */
}.div_3 input[type="button"]:hover {background-color: #218838; /* 悬停时背景颜色变化 */
}tr:hover {background-color: #f1f1f1; /* 行悬停时背景颜色变化 */
}a {color: #007BFF; /* 链接颜色 */text-decoration: none; /* 去除下划线 */
}a:hover {text-decoration: underline; /* 悬停时添加下划线 */
}

关键 CSS 特性

  1. 容器样式:
    • .container 类将内容居中,并添加了内边距和阴影效果,使页面更具吸引力。
  2. 按钮样式:
    • 按钮具有内边距、背景色和悬停效果,提高了可用性。
  3. 表格样式:
    • 表格有清晰的边框、内边距,并且行在悬停时有背景色变化效果,提升了用户体验。
  4. 链接样式:
    • 链接样式与整体主题一致,并在悬停时显示下划线。

JavaScript 功能

JavaScript 代码处理表格的动态功能:

// 获取添加按钮元素
let add = document.getElementById("bn_add");// 点击添加按钮时触发的事件处理函数
add.onclick = function () {// 获取输入字段的值let id_text = document.getElementById("id").value;let name_text = document.getElementById("name").value;let sex_text = document.getElementById("sex").value;// 获取表格元素let table = document.getElementsByTagName("table")[0];// 插入新行let newRow = table.insertRow();newRow.innerHTML ="<td><input type='checkbox' name='user'></td>" +"<td>" + id_text + "</td>" +"<td>" + name_text + "</td>" +"<td>" + sex_text + "</td>" +"<td><a href='javascript:void(0);' οnclick='delTr(this);'>删除</a></td>";// 添加鼠标悬停效果newRow.onmouseover = function () {doOver(newRow);};newRow.onmouseout = function () {doOut(newRow);};
}// 主选择框的点击事件处理函数
document.getElementById("doChoose").onclick = function () {let userArray = document.getElementsByName("user");for (let index = 0; index < userArray.length; index++) {userArray[index].checked = this.checked; // 根据主选择框的状态设置复选框的状态}
};// 删除指定行的函数
function delTr(obj) {let table = obj.parentNode.parentNode.parentNode; // 获取表格let tr = obj.parentNode.parentNode; // 获取当前行table.removeChild(tr); // 删除当前行
}// 全选操作
document.getElementById("chooseAll").onclick = function () {let userArray = document.getElementsByName("user");for (let index = 0; index < userArray.length; index++) {userArray[index].checked = true; // 全部勾选}
}// 全不选操作
document.getElementById("chooseNull").onclick = function () {let userArray = document.getElementsByName("user");for (let index = 0; index < userArray.length; index++) {userArray[index].checked = false; // 全部取消勾选}
}// 反选操作
document.getElementById("chooseFan").onclick = function () {let userArray = document.getElementsByName("user");for (let index = 0; index < userArray.length; index++) {userArray[index].checked = !userArray[index].checked; // 反转每个复选框的状态}
}// 删除选中行操作
document.getElementById("deleteTable").onclick = function () {let userArray = document.getElementsByName("user");for (let index = userArray.length - 1; index >= 0; index--) {if (userArray[index].checked) {delTr(userArray[index]); // 删除选中的行}}
}// 行悬停效果函数
function doOver(row) {row.style.backgroundColor = "pink"; // 悬停时背景色变为粉色
}// 行悬停离开效果函数
function doOut(row) {row.style.backgroundColor = "white"; // 离开时背景色恢复为白色
}

JavaScript 功能说明

  1. 添加行:

    • add.onclick 处理输入字段的值,并在表格中添加新行,同时设置了悬停效果。
    在插入行时使用let newRow = table.insertRow();可以有效的插入表格,使得表格为一体
    或者使用childNode等属性插入
    直接table.innerHTML += 表格代码不会将其拼接为一个整体表格。调整了使用 innerHTML 方法添加新行的方式,确保将新行正确插入表格中,而不是简单地将其附加到表格的 innerHTML。
    
  2. 全选/全不选操作:

    • doChoose 处理全选和全不选操作,根据主选择框的状态更新复选框。
  3. 删除操作:

    • delTr 函数通过获取父元素删除特定行。
  4. 批量操作按钮:

    • chooseAllchooseNullchooseFan 分别实现全选、全不选和反选复选框。
    //批量删除
    document.getElementById("deleteTable").onclick = function () {let userArray = document.getElementsByName("user");for (let index = userArray.length - 1; index >= 0; index--) {if (userArray[index].checked) {delTr(userArray[index]); // 删除选中的行}}
    }
    如果我们正序删除时,userArray.length会不断变化这样会使我们每次只能删除一般,这时我们可以采取倒序删除的方法,原理如下:倒着删除不会出现上述错误的原因是,当你从后往前删除时,每次删除一行后,不会影响到尚未遍历到的元素索引。具体来说:当你正向删除时,如果删除的是索引较小的元素,后面的元素会向前移动一个位置,导致索引发生变化,从而跳过某些元素。
    倒着删除时,每次删除操作都影响已经遍历过的元素,不会影响到尚未遍历到的元素的索引,因此不会跳过任何元素。
    让我们详细看一下这两种删除方式的工作原理。正向删除
    假设你有一个数组 userArray,其长度为 5,其中元素分别为 A, B, C, D, E,并且你需要删除 BD。初始状态:[A, B, C, D, E]
    第一次删除 B 后:[A, C, D, E]
    CD 分别移动到原来 BC 的位置。
    第二次遍历到原来的索引 3 位置:E,跳过了 D。
    倒着删除
    初始状态:[A, B, C, D, E]
    第一次删除 D 后:[A, B, C, E]
    E 移动到原来 D 的位置。
    第二次删除 B 后:[A, C, E]
    此时,CE 的位置没有影响。
    从后往前删除时,每次删除操作都不会影响到未遍历到的元素的索引,因此不会出现跳过的问题。
    
  5. 行悬停效果:

    • doOverdoOut 函数在行悬停时更改背景颜色,提高用户体验。

image-20240720185454032

完整源码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>动态表格</title><style>body {font-family: Arial, sans-serif;background-color: #f2f2f2;color: #333;margin: 0;padding: 20px;}.container {width: 80%;margin: auto;background: #fff;padding: 20px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);}.div_1 {text-align: center;margin-bottom: 20px;}.div_1 input[type="text"] {padding: 10px;margin-right: 10px;border: 1px solid #ccc;border-radius: 5px;}.div_1 input[type="button"] {padding: 10px 20px;background-color: #007BFF;color: white;border: none;border-radius: 5px;cursor: pointer;}.div_1 input[type="button"]:hover {background-color: #0056b3;}table {width: 100%;border-collapse: collapse;margin-bottom: 20px;}table,td,th {border: 1px solid #ddd;}th,td {padding: 12px;text-align: center;}th {background-color: #007BFF;color: white;}caption {font-size: 1.5em;margin: 10px;color: #007BFF;}.div_3 {text-align: center;font-family: Arial, sans-serif;color: #333;}.div_3 input[type="button"] {padding: 10px 20px;margin: 5px;background-color: #28a745;color: white;border: none;border-radius: 5px;cursor: pointer;}.div_3 input[type="button"]:hover {background-color: #218838;}tr:hover {background-color: #f1f1f1;}a {color: #007BFF;text-decoration: none;}a:hover {text-decoration: underline;}</style>
</head><body><div class="container"><div class="div_1"><input type="text" name="id" id="id" placeholder="请输入编号"><input type="text" name="name" id="name" placeholder="请输入用户名"><input type="text" name="sex" id="sex" placeholder="请输入性别"><input type="button" value="添加" id="bn_add"></div><div class="div_2"><table><caption>学生信息表</caption><tr onmouseover="doOver(this);" onmouseout="doOut(this);"><th><input type="checkbox" id="doChoose"></th><th>编号</th><th>姓名</th><th>性别</th><th>操作</th></tr><tr onmouseover="doOver(this);" onmouseout="doOut(this);"><td><input type="checkbox" name="user"></td><td>1</td><td>张三</td><td></td><td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td></tr></table></div><div class="div_3"><input type="button" value="全选" id="chooseAll"><input type="button" value="全不选" id="chooseNull"><input type="button" value="反选" id="chooseFan"><input type="button" value="删除" id="deleteTable"></div></div><script>let add = document.getElementById("bn_add");add.onclick = function () {let id_text = document.getElementById("id").value;let name_text = document.getElementById("name").value;let sex_text = document.getElementById("sex").value;let table = document.getElementsByTagName("table")[0];let newRow = table.insertRow();newRow.innerHTML ="<td><input type='checkbox' name='user'></td>" +"<td>" + id_text + "</td>" +"<td>" + name_text + "</td>" +"<td>" + sex_text + "</td>" +"<td><a href='javascript:void(0);' οnclick='delTr(this);'>删除</a></td>";newRow.onmouseover = function () {doOver(newRow);};newRow.onmouseout = function () {doOut(newRow);};}document.getElementById("doChoose").onclick = function () {let userArray = document.getElementsByName("user");for (let index = 0; index < userArray.length; index++) {userArray[index].checked = this.checked;}};function delTr(obj) {let table = obj.parentNode.parentNode.parentNode;let tr = obj.parentNode.parentNode;table.removeChild(tr);}document.getElementById("chooseAll").onclick = function () {let userArray = document.getElementsByName("user");for (let index = 0; index < userArray.length; index++) {userArray[index].checked = true;}}document.getElementById("chooseNull").onclick = function () {let userArray = document.getElementsByName("user");for (let index = 0; index < userArray.length; index++) {userArray[index].checked = false;}}document.getElementById("chooseFan").onclick = function () {let userArray = document.getElementsByName("user");for (let index = 0; index < userArray.length; index++) {userArray[index].checked = !userArray[index].checked;}}document.getElementById("deleteTable").onclick = function () {let userArray = document.getElementsByName("user");for (let index = userArray.length - 1; index >= 0; index--) {if (userArray[index].checked) {delTr(userArray[index]);}}}//悬停在每一行上面变化颜色function doOver(row) {row.style.backgroundColor = "pink";}function doOut(row) {row.style.backgroundColor = "white";}</script>
</body></html>

相关文章:

WEB前端08-综合案例(动态表格)

使用 HTML、CSS 和 JavaScript 创建动态表格 在本教程中&#xff0c;我们将创建一个动态表格&#xff0c;允许用户添加行、选择项目&#xff0c;并执行批量操作&#xff0c;如全选或删除选中的行。我们将通过 HTML、CSS 和 JavaScript 来实现这一功能。让我们逐步了解每个部分…...

【面试题】Redo log和Undo log

Redo log 介绍Redo log之前我们需要了解一下&#xff0c;mysql数据操作的流程&#xff1a; 上述就是数据操作的流程图&#xff0c;可以发现sql语句并不是直接操作的磁盘而是通过操作内存&#xff0c;然后进行内存到磁盘的一个同步。这里我们必须要了解一些区域&#xff1a; 缓…...

开发实战经验分享:互联网医院系统源码与在线问诊APP搭建

作为一名软件开发者&#xff0c;笔者有幸参与了多个互联网医院系统的开发项目&#xff0c;并在此过程中积累了丰富的实战经验。本文将结合我的开发经验&#xff0c;分享互联网医院系统源码的设计与在线问诊APP的搭建过程。 一、需求分析 在开发任何系统之前&#xff0c;首先要…...

springboot系列教程(十六):配置Actuator组件,实现系统监控

一、Actuator简介 1、监控组件作用 在生产环境中&#xff0c;需要实时或定期监控服务的可用性。Spring Boot的actuator&#xff08;健康监控&#xff09;功能提供了很多监控所需的接口&#xff0c;可以对应用系统进行配置查看、相关功能统计等。 2、监控分类 Actuator 提供…...

单臂路由组网实验,单臂路由的定义、适用情况、作用

一、定义 单臂路由是指通过在路由器的一个接口上配置许多子接口,从而实现原来相互隔离的不同VLAN之间的互通。 子接口:把路由器上的实际的物理接口划分为多个逻辑上的接口,这些被划分的逻辑接口就是子接口。 二、适用情况 用在没有三层交换机,却要实现不同VLAN之间的互…...

【数据结构初阶】顺序表三道经典算法题(详解+图例)

Hello&#xff01;很高兴又见到你了~~~ 看看今天要学点什么来充实大脑吧—— 目录 1、移除元素 【思路图解】 【总结】 2、删除有序数组中的重复项 【思路图解】 【总结】 3、合并两个有序数组 【思路图解】 【总结】 至此结束&#xff0c;Show Time&#xff01; 1、…...

SpringBoot接入JPA连接数据库H2或MySQL例子

一&#xff0c;JPA相关的常用注解和对象 Entity&#xff0c;用于实体类声明语句之前&#xff0c;‌指出该Java类为实体类&#xff0c;‌将映射到指定的数据库表&#xff1b;Table&#xff0c;当实体类与其映射的数据库表名不同名时需要使用。‌该标注与Entity标注并列使用&…...

持续集成05--Gogs的安装与使用

前言 在持续集成/持续部署&#xff08;CI/CD&#xff09;的旅程中&#xff0c;版本控制系统是不可或缺的一环。当我们在使用jenkins&#xff0c;想要达到测试脚本有更新&#xff0c;就让项目自动去进行构建&#xff0c;或者当开发脚本有更新&#xff0c;也可以自动去构建的效果…...

C++--fill

把[first,last)之间的元素填充为val。 template<class ForwardIterator, class Type> void fill( ForwardIterator first, //起始迭代器 ForwardIterator last, //结束迭代器 const Type& val //设置的值 );源码剖析 template<class ForwardIterator, c…...

Java:对比一个对象更新前后具体被修改了哪些值

Java&#xff1a;对比一个对象更新前后具体被修改了哪些值 Zyyyyu 的个人博客 遇到一个需求就是要记录每行数据被修改更新后&#xff0c;要记录下当前值和修改前的值 那有人就会说写个if去判断值是否被修改了&#xff0c;然后记录下来不就行了&#xff0c;这是一个思路&#x…...

GO——GMP 好文整理

GMP相关好文推荐&#xff1a; Golang 调度器设计思想、GMP 协程调度模型详解 Golang的协程调度器原理及GMP设计思想 Golang调度器GMP原理与调度全分析...

园区AR导航系统构建详解:从三维地图构建到AR融合导航的实现

随着现代园区规模的不断扩大与功能的日益复杂&#xff0c;传统的二维地图导航已难以满足访客高效、精准定位的需求。园区内部错综复杂的布局、频繁变更的商户位置常常让访客感到迷茫&#xff0c;造成寻路上的时间浪费。园区AR导航系统以创新的技术手段&#xff0c;破解了私域地…...

接口测试总结(非标准)

为什么要做接口测试&#xff1f; 答&#xff1a;接口测试是为了检测系统组件间接口的正确性和稳定性&#xff0c;以及检查数据的交换、传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。接口测试可以帮助我们发现系统中的潜在问题&#xff0c;确保系统的稳定性…...

在Ubuntu 18.04上安装和使用Composer的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 Composer 是一个流行的 PHP 依赖管理工具&#xff0c;主要用于简化项目依赖项的安装和更新。它会检查特定项目依赖的其他软件包&a…...

ssm 学习 ---(spring)

一、spring框架 1、基本框架 2、Beanfactory快速入门 配置清单&#xff1a;xml文件 (1) 导入jar包或者maven坐标 (2) 定义UserService接口以及UserService实现类 (3) 创建bean.xml配置文件&#xff0c;将UserService信息配置到该xml文件中; (4)编写测试代码&#xff0c;创…...

Jupyter Notebook安装及基本使用

Jupyter Notebook安装及基本使用 目录 Jupyter Notebook安装及基本使用方式一&#xff1a;Anaconda直接安装方式二&#xff1a;pip命令安装Jupyter使用虚拟环境 方式一&#xff1a;Anaconda直接安装 安装Anaconda 下载地址&#xff0c;输入邮箱&#xff0c;Windows下载 开始安…...

Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署

目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作&#xff0c;本次操作需要java8的版本&#xff0c;将之前安装的java17卸…...

Synchronized升级到重量级锁会发生什么?

我们从网上看到很多&#xff0c;升级到重量锁的时候不会降级&#xff0c;再来线程都是重量级锁 今天我们来实验一把真的是这样的吗 1.首选导入Java对象内存布局的工具库&#xff1a; <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-…...

【Webpack】HMR 热更新

HMR全称Hot Module Replacement&#xff0c;可以理解为模块热替换&#xff0c;指在应用程序运行过程中&#xff0c;替换、添加、删除模块&#xff0c;而无需重新刷新整个应用。 不使用热更新&#xff0c;我们在应用运行过程中修改了某个模块&#xff0c;通过自动刷新会导致整个…...

【计算机视觉】siamfc论文复现

什么是目标跟踪 使用视频序列第一帧的图像(包括bounding box的位置)&#xff0c;来找出目标出现在后序帧位置的一种方法。 什么是孪生网络结构 孪生网络结构其思想是将一个训练样本(已知类别)和一个测试样本(未知类别)输入到两个CNN(这两个CNN往往是权值共享的)中&#xff0…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...