15 php学习:表单验证

news2024/11/29 12:44:23

表单验证

在这里插入图片描述

表单验证在网页和应用程序开发中起着至关重要的作用,其主要目的是确保用户输入的数据符合预期的格式和规则,以提升用户体验、数据准确性和系统安全性。以下是表单验证的主要作用:

  1. 数据准确性:通过表单验证,可以确保用户输入的数据格式正确,有效避免因输入错误或格式不匹配而导致的数据问题。

  2. 防止恶意输入:表单验证可以防止用户提交恶意输入或攻击,如 SQL 注入、跨站脚本攻击等。

  3. 提升用户体验:合适的验证规则可以在用户提交表单之前给出反馈,帮助用户及时发现并纠正错误,提升用户体验。

  4. 数据安全性:通过验证用户输入的数据,可以减少潜在的安全漏洞,确保系统接收到可信任的数据。

  5. 节省时间和资源:有效的表单验证可以减少后续处理无效数据所需的时间和资源,提高系统效率。

  6. 降低错误率:有效的表单验证有助于降低数据录入错误的发生率,减少后续处理工作。

  7. 遵循业务规则:表单验证可以确保用户输入符合业务规则和法律法规要求,保障业务流程的顺利进行。

一个良好设计的表单验证系统,可以保证系统安全、数据一致性,提升用户体验,并降低数据处理的风险和成本。

表单验证的规则

在这里插入图片描述

表单验证是确保用户输入的数据符合特定规则或格式的过程,以确保系统收到的数据是有效和安全的。以下是常见的表单验证规则:

  1. 必填字段验证:确保必填字段不能为空,防止用户提交空值。

  2. 长度验证:限制字段的最小和最大长度,确保输入数据不超过给定范围。

  3. 数字验证:确保输入只包含数字字符,可以指定整数或浮点数。

  4. 邮箱验证:确保输入符合有效的电子邮件格式。

  5. URL 验证:确保输入是一个有效的 URL 地址。

  6. 日期验证:确保输入的日期符合指定的日期格式。

  7. 密码验证:通常要求密码包含特定字符(如字母、数字、特殊字符)并具有一定长度要求。

  8. 文件上传验证:确保用户上传的文件符合特定的文件类型、大小限制,并进行安全检查。

  9. 相等验证:用于比较两个字段的值是否相等,例如确认密码字段和密码字段是否一致。

  10. 验证码验证:要求用户输入正确的验证码,以防止机器人或恶意提交。

  11. 唯一性检查:在数据库中验证输入的值是否唯一,如用户名、邮箱等。

以上是常见的表单验证规则,根据具体应用场景和需求来设计适合的验证规则,提升用户体验和系统安全性。

必填字段验证

必填字段验证是表单验证中常见的一种,其作用是确保用户在提交表单时必须填写特定的字段,以防止空值或缺失数据导致的问题。以下是一些常见的必填字段验证方法:

  1. 前端验证:使用 HTML 的 required 属性可以要求用户在提交表单之前必须填写指定的字段。例如:

    <input type="text" name="username" required>
    
  2. 后端验证:在服务器端对提交的表单数据进行验证,确保必填字段不为空。例如,在 PHP 中可以这样验证:

    if (empty($_POST['username'])) {
        $errors[] = "用户名是必填字段";
    }
    
  3. 客户端 JavaScript 验证:使用客户端的 JavaScript 来验证表单字段,以增强用户交互性和提升用户体验,但仍需要在后端进行验证来确保安全性。

无论是前端、后端还是客户端 JavaScript,必填字段验证都是一个非常重要且常见的表单验证方式,它有助于确保用户输入数据的完整性和准确性。

长度验证

长度验证是表单验证中常用的一种,它用于确保用户输入的数据不超过指定的最小或最大长度范围。长度验证对于确保数据的准确性和数据库字段的容量限制至关重要。以下是关于长度验证的一些方法:

  1. 前端验证:在前端使用 HTML5 的 minlengthmaxlength 属性来指定字段的最小和最大长度。例如:

    <input type="text" name="username" minlength="4" maxlength="20">
    
  2. JavaScript 验证:通过客户端 JavaScript 来验证字段的长度,可以实时反馈给用户。例如:

    var username = document.getElementById('username').value;
    if (username.length < 4 || username.length > 20) {
        alert("用户名长度必须在4到20个字符之间");
        return false;
    }
    
  3. 后端验证:在服务器端使用编程语言(如 PHP、Python、Java 等)来验证字段的长度,以确保数据符合要求。例如:

    $username = $_POST['username'];
    if (strlen($username) < 4 || strlen($username) > 20) {
        $errors[] = "用户名长度必须在4到20个字符之间";
    }
    

通过长度验证,可以有效地控制用户输入数据的范围,防止过长或过短的数据影响系统的正常运行。在设计表单时,根据实际需求设定合适的长度验证规则对于保障数据准确性和系统安全性非常重要。

数字验证

数字验证是表单验证中常见的一种,用于确保用户输入的数据是有效的数字。数字验证可以限制用户只能输入数字字符,以防止非法字符或格式错误导致的问题。以下是一些数字验证的方法:

  1. 前端验证:在前端使用 HTML5 的 type="number" 属性可以限制输入框只接受数字输入,并且可以添加 minmax 属性限制数字的范围。例如:

    <input type="number" name="quantity" min="1" max="100">
    
  2. JavaScript 验证:通过客户端 JavaScript 来验证输入是否为有效的数字格式。例如:

    var quantity = document.getElementById('quantity').value;
    if (isNaN(quantity)) {
        alert("请输入有效的数字");
        return false;
    }
    
  3. 后端验证:在服务器端使用编程语言(如 PHP、Python、Java 等)来验证输入是否为有效的数字。例如,在 PHP 中可以使用 is_numeric() 函数进行数字验证:

    $quantity = $_POST['quantity'];
    if (!is_numeric($quantity)) {
        $errors[] = "请输入有效的数字";
    }
    

通过数字验证,可以确保用户输入的数据符合预期的数字格式,避免因非数字字符或格式错误而导致的数据问题。在设计表单时,根据实际需求来添加数字验证规则,以提升数据准确性和系统的安全性。

邮箱验证

邮箱验证是表单验证中常见的一种,用于确保用户输入的电子邮件地址符合有效的邮箱格式。邮箱验证可以有效避免用户输入错误格式的邮箱地址,提高数据的准确性和安全性。以下是一些邮箱验证的方法:

  1. 前端验证:在前端使用 HTML5 的 type="email" 属性可以验证输入是否符合电子邮件的格式要求。例如:

    <input type="email" name="email">
    
  2. JavaScript 验证:通过客户端 JavaScript 来验证邮箱地址是否符合特定的格式要求。例如:

    var email = document.getElementById('email').value;
    var emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
    if (!email.match(emailPattern)) {
        alert("请输入有效的电子邮件地址");
        return false;
    }
    
  3. 后端验证:在服务器端使用正则表达式或相关函数来验证输入的邮箱地址是否有效。例如,在 PHP 中可以使用 filter_var() 函数进行邮箱验证:

    $email = $_POST['email'];
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = "请输入有效的电子邮件地址";
    }
    

通过邮箱验证,可以确保用户输入的邮箱地址符合有效的格式要求,避免因输入错误导致的数据问题。在设计表单时,添加有效的邮箱验证规则对于保障数据的准确性和系统的安全性非常重要。

URL 验证

URL验证是表单验证中常见的一种,用于确保用户输入的网址链接符合有效的URL格式。这种验证有助于预防非法URL或错误格式的URL产生,并提高数据的准确性和安全性。以下是一些URL验证的方法:

  1. 前端验证:在前端使用正则表达式来验证输入是否为有效的URL格式。例如:

    <input type="url" name="website" pattern="https?://.+">
    

    在上面的示例中,使用pattern属性指定URL的格式,这样浏览器会在提交表单之前验证输入是否匹配要求。

  2. JavaScript 验证:通过客户端 JavaScript 来验证用户输入的URL地址是否符合有效的URL格式。例如:

    var url = document.getElementById('website').value;
    var urlPattern = /^(https?|ftp)://[^\s/$.?#].[^\s]*$/i;
    if (!url.match(urlPattern)) {
        alert("请输入有效的URL地址");
        return false;
    }
    
  3. 后端验证:在服务器端使用正则表达式或相关函数来验证输入的URL地址是否有效。例如,在 PHP 中可以使用 filter_var() 函数进行URL验证:

    $url = $_POST['website'];
    if (!filter_var($url, FILTER_VALIDATE_URL)) {
        $errors[] = "请输入有效的URL地址";
    }
    

通过URL验证,可以确保用户输入的URL地址符合有效的格式要求,避免因输入错误导致的数据问题。在设计表单时,添加适当的URL验证规则有助于保障数据的准确性和系统的安全性。

日期验证

日期验证是表单验证中常见的一种,用于确保用户输入的日期符合指定的格式和范围。日期验证有助于确保数据的准确性,并且可以防止非法或无效的日期输入。以下是一些日期验证的方法:

  1. 前端验证:在前端使用 HTML5 的 type="date" 属性可以要求用户输入符合指定格式(通常是 YYYY-MM-DD)的日期。例如:

    <input type="date" name="birthdate">
    
  2. JavaScript 验证:通过客户端 JavaScript 来验证用户输入的日期是否符合指定的格式和范围。例如:

    var dateInput = document.getElementById('birthdate').value;
    var datePattern = /^\d{4}-\d{2}-\d{2}$/;
    if (!dateInput.match(datePattern)) {
        alert("请输入有效的日期,格式为YYYY-MM-DD");
        return false;
    }
    // 进一步验证日期范围等
    
  3. 后端验证:在服务器端使用编程语言(如 PHP、Python、Java 等)来验证输入的日期是否有效,并进行进一步的逻辑验证。例如,在 PHP 中可以使用 DateTime 类来验证日期:

    $birthdate = $_POST['birthdate'];
    $dateObj = DateTime::createFromFormat('Y-m-d', $birthdate);
    if ($dateObj === false) {
        $errors[] = "请输入有效的日期,格式为YYYY-MM-DD";
    } else {
        // 进一步验证日期范围等
    }
    

通过日期验证,可以确保用户输入的日期符合指定的格式和范围要求,从而提高数据的准确性和系统的安全性。在设计表单时,根据实际需求添加适当的日期验证规则对于保障数据的准确性至关重要。

密码验证

密码验证是表单验证中非常重要的一种,用于确保用户输入的密码符合安全性要求。密码验证有助于提高系统的安全性,预防密码被轻易破解或盗用。以下是一些常见的密码验证规则:

  1. 密码长度验证:密码通常要求一定的长度,一般建议至少8-12个字符以上。通过前端或后端验证用户输入的密码长度是否满足要求。

  2. 密码复杂度验证:密码通常需要包含数字、大写字母、小写字母和特殊字符中的至少三种组合。可以通过正则表达式或其他方法验证密码是否符合复杂度要求。

  3. 密码确认验证:在注册或修改密码时,通常会要求用户输入两次密码,并验证两次输入是否一致,以确保用户输入的密码没有误差。

  4. 密码安全策略:一些系统要求密码使用周期性更改、禁止使用常见密码、禁止使用用户名作为密码等特定安全策略。

  5. 密码加密:在保存密码时,通常将密码进行加密存储,以防止数据库泄露导致密码被盗用。

当设计密码验证规则时,需要权衡安全性与用户体验之间的平衡。一方面需要确保密码足够安全,另一方面也需要考虑用户能够方便地记住和输入密码。因此,在密码验证规则中,需要综合考虑密码的长度要求、复杂性要求、确认验证、安全策略等方面的内容,以确保密码的安全性和用户友好性。

文件上传验证

文件上传验证是网站和应用程序中常见的安全性措施,用于确保用户上传的文件符合预期要求,同时防止恶意文件上传和安全漏洞。以下是一些建议的文件上传验证方法:

  1. 文件类型验证:限制允许上传的文件类型,通常通过检查文件的扩展名或MIME类型来实现。只允许上传安全的图片、文档、视频等常见文件类型,避免上传具有执行代码风险的文件。

  2. 文件大小验证:限制上传文件的大小,以防止超大文件占用过多服务器资源或造成拒绝服务攻击。根据需求设置适当的文件大小限制。

  3. 重命名文件:建议在接收到上传文件后,对文件进行重命名,避免恶意用户利用文件名进行攻击(如目录遍历攻击)。

  4. 安全扫描:如果条件允许,可以使用杀毒软件或安全扫描工具对上传的文件进行安全检测,确保文件不包含病毒或恶意代码。

  5. 存储位置:将上传文件存储在安全目录中,避免将文件存储在 Web 根目录下,防止恶意用户可以直接访问上传的文件。

  6. 访问权限:确保上传目录设置了恰当的文件系统权限,限制只有必要的用户才能访问上传文件。

  7. 详细日志:记录文件上传操作的相关信息,包括上传时间、用户ID、文件名等,便于追踪和审计。

通过以上文件上传验证方法,可以有效提高系统的安全性,预防恶意文件上传、文件处理错误等安全问题。在设计文件上传功能时,务必重视文件上传验证的重要性,并根据实际需求灵活地应用各种验证方法。

相等验证

相等验证通常用于确认两个值是否相等,这是在软件开发和表单处理中经常遇到的需求。以下是一些常见的相等验证方法:

  1. 数据相等验证:在编程中,可以使用相等运算符(如 =====)来比较两个变量或值是否相等。例如,JavaScript 中的相等验证:

    var x = 10;
    var y = "10";
    if (x == y) {
        console.log("x 和 y 相等");
    }
    
  2. 对象相等验证:在某些编程语言中,对于对象的相等性验证可能需要使用特定的方法,如 Java 中的 equals() 方法用于比较对象内容是否相等。

  3. 密码确认验证:在表单中,常见的相等验证是确保两次输入的密码是否一致。这可以用于注册页面或修改密码页面,确保用户没有误输入密码。

  4. 身份验证:在某些系统中,用户登录时可能需要确认用户名和密码是否与数据库中的记录相匹配,以进行身份验证。

  5. 表单字段相等验证:在表单提交时,有时可能需要验证两个字段的值是否相等,例如确认邮箱地址或其他信息。

相等验证是在软件开发和数据处理中非常常见的一种验证方式,确保了数据的准确性和安全性。根据具体场景和需求,可以灵活运用相等验证方法,确保所需数据的准确性。

验证码验证

验证码验证通常用于确认用户在进行特定操作(如登录、注册、重置密码等)时的身份和真实性。以下是一些常见的验证码验证方法:

  1. 短信验证码:用户在输入手机号码后,系统会向用户发送包含验证码的短信消息,用户需要在网页上输入该验证码以确认身份。

  2. 邮箱验证码:类似于短信验证码,系统会向用户邮箱发送验证码邮件,用户需要在网页上输入该验证码以确认身份。

  3. 图片验证码:在提交表单前,用户需要输入正确的图片验证码,这种验证码通常以图像形式展现出来,要求用户输入其中的文字或数字以确认身份。

  4. 人机验证:利用人机验证技术如 reCAPTCHA,要求用户进行识别图片、勾选复选框等操作来确认身份。

  5. 语音验证码:类似于短信验证码,系统会通过电话自动播放验证码,用户需要输入听到的验证码以确认身份。

验证码验证是确保用户操作的真实性和安全性的重要手段,可以有效防止恶意攻击和非法操作。在设计验证码验证时,需要考虑用户体验和安全性之间的平衡,以确保用户可以方便地完成验证,同时确保系统的安全性。

唯一性检查

在软件开发和数据库处理中,唯一性检查是指确保某个字段或值在系统中的唯一性,避免重复数据的存在。以下是一些常见的唯一性检查方法:

  1. 数据库约束:在数据库设计时,可以通过设置唯一约束或主键约束来确保特定字段的数值在表中唯一。当尝试插入或更新数据时,数据库会自动检查是否存在重复值。

  2. 编程验证:在应用程序的业务逻辑中,可以通过编程实现唯一性检查。例如,在插入新数据之前,先查询数据库检查是否已存在相同数值,如果存在则阻止插入。

  3. 索引:在某些情况下,可以为某个字段创建索引来加速唯一性检查,确保查询效率。唯一索引可以防止插入重复数值,提高性能。

  4. 前端验证:在前端页面上进行简单的格式验证,避免用户在输入时重复提交已存在的数值。这主要用于提升用户体验和辅助后端验证。

  5. 错误消息处理:当唯一性检查失败时,应用程序需要给出清晰明确的错误提示,告知用户输入的数值已存在,同时提供解决方案或引导用户进行正确操作。

通过有效的唯一性检查方法,可以确保系统数据的准确性和完整性,避免重复数据的存在,提高系统的性能和安全性。在开发过程中,根据具体需求选择合适的唯一性检查方法,并综合考虑数据库约束、编程验证、索引等因素,以确保数据的唯一性。

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++ C/C++ 入门(6)模板初阶

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 多多指教&#xff01; 一、泛型编程 在之前&#xff0c;我们进行编程的时候&#xff0c;总是针对于某一个具体的问题。就比如说&#xff0c;如何实现一个int类型的swap函数呢&#xff1f;大家肯定会写。…

NLP基础—jieba分词

jieba分词 支持四种分词模式 精确模式 试图将句子最精确地切开,适合文本分析;全模式 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;搜索引擎模式 在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。paddle模式 利用Paddle…

渗透测试工作任务概述

一、渗透测试工作任务介绍 渗透测试工作任务不是随便用个工具就可以完成的&#xff0c;需要了解网站业务情况&#xff0c;还需要在测试结束后给出安全加固的解决方案&#xff1b; 渗透测试与入侵工具区别&#xff1a; 渗透测试&#xff1a;出于保护系统的目的&#xff0c;更全…

zehpyr环境搭建和demo的编译

qemu可执行固件编译的探索 环境demo的模拟SDK构建zephyr环境设置安装依赖项下载 Aspeed Zephyr 软件包 安装工具链配置 环境 ubuntu22.04、 qemu9.0.0-rc1、cmake 3.25.2、python 3.8.10、dtc 1.5.0、west 1.2.0、zephyr-sdk-0.16.1 demo的模拟 首先先尝试一个可以正常跑起来…

即插即用模块详解SCConv:用于特征冗余的空间和通道重构卷积

目录 一、摘要 二、创新点说明 2.1 Methodology 2.2SRU for Spatial Redundancy​编辑 2.3CRU for Channel Redundancy 三、实验 3.1基于CIFAR的图像分类 3.2基于ImageNet的图像分类 3.3对象检测 四、代码详解 五、总结 论文&#xff1a;https://openaccess.thecvf.c…

基于 Operator 部署 Prometheus 监控 k8s 集群

目录 一、环境准备 1.1 选择版本 1.2 过滤镜像 1.3 修改 yaml 镜像 1.4 移动 *networkPolicy*.yaml 1.5 修改 service 文件 1.6 提前下载镜像并推送到私有镜像仓库 1.7 修改镜像&#xff08;可选&#xff09; 二、执行创建 三、查看 pod 状态 四、访问 prometheus、…

【Spring】依赖注入(DI)时常用的注解@Autowired和@Value

目录 1、Autowired 自动装配 1.1、要实现自动装配不是一定要使用Autowired 1.2、Autowired的特性 &#xff08;1&#xff09;首先会根据类型去spring容器中找(bytype),如果有多个类型&#xff0c;会根据名字再去spring容器中找(byname) &#xff08;2&#xff09;如果根据名…

冯喜运:4.16中东对抗风暴下,黄金原油市场何去何从?

黄金行情走势分析&#xff1a;4小时图布林道开始收口&#xff0c;昨日下探至下轨附近&#xff0c;也是此前的起涨低点2320启稳上升&#xff0c;十字K线配合单阳拉起&#xff0c;重新去摸高上轨。目前4小时图处于摸高当中。周线和日线留意多空转换&#xff0c;摸高之后是强势延续…

使用Scrapy选择器提取豆瓣电影信息,并用正则表达式从介绍详情中获取指定信息

本文同步更新于博主个人博客&#xff1a;blog.buzzchat.top 一、Scrapy框架 1. 介绍 在当今数字化的时代&#xff0c;数据是一种宝贵的资源&#xff0c;而网络爬虫&#xff08;Web Scraping&#xff09;则是获取网络数据的重要工具之一。而在 Python 生态系统中&#xff0c;S…

03-echarts如何画立体柱状图

echarts如何画立体柱状图 一、创建盒子1、创建盒子2、初始化盒子&#xff08;先绘制一个基本的二维柱状图的样式&#xff09;1、创建一个初始化图表的方法2、在mounted中调用这个方法3、在方法中写options和绘制图形 二、画图前知识1、坐标2、柱状图图解分析 三、构建方法1、创…

第七周学习笔记DAY.1-封装

学完本次课程后&#xff0c;你能够&#xff1a; 理解封装的作用 会使用封装 会使用Java中的包组织类 掌握访问修饰符&#xff0c;理解访问权限 没有封装的话属性访问随意&#xff0c;赋值也可能不合理&#xff0c;为了解决这些代码设计缺陷&#xff0c;可以使用封装。 面向…

RabbitMQ入门实战

文章目录 RabbitMQ入门实战基本概念安装快速入门单向发送多消费者 RabbitMQ入门实战 官方&#xff1a;https://www.rabbitmq.com 基本概念 AMQP协议&#xff1a;https://www.rabbitmq.com/tutorials/amqp-concepts.html 定义&#xff1a;高级信息队列协议&#xff08;Advanc…

LangChain入门:19.探索结构化工具对话

引言 在人工智能的浪潮中&#xff0c;对话代理技术正逐渐成为企业和开发者关注的焦点。LangChain&#xff0c;作为对话代理领域的一颗新星&#xff0c;自2021年9月诞生以来&#xff0c;以其强大的功能和灵活的应用场景迅速赢得了市场的认可。本文将带你深入了解LangChain中的S…

【从浅学到熟知Linux】进程控制上篇=>进程创建、进程终止与进程等待(含_exit与exit的区别、fork函数详解、wait与waitpid详解)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 进程创建fork函数写时拷贝 进程退出进程退出操作系统做了什么&#xff1f;进程退出场景进程退出的常见方法…

openstack修改实例名称但是gnocchi监控数据中实例名称没有变更的问题处理

文章目录 一、问题描述二、调研过程1、变更实例名称2、查看grafana中的监控数据3、libvirt服务中的xml文件4、现有的监控数据流转架构 总结 一、问题描述 openstack修改实例名称但是gnocchi监控数据中实例名称没有变更的问题处理。 通过修改实例名称的功能修改了实例名称&…

大模型赋能:爬虫技术的全新革命

大模型加持下的爬虫技术革新&#xff1a;从BS4到提示工程的飞跃 在爬虫技术的演进历程中&#xff0c;内容解析一直是一个核心环节。传统的爬虫技术&#xff0c;如使用BeautifulSoup&#xff08;BS4&#xff09;等工具&#xff0c;需要逐个解析网页内容&#xff0c;通过XPath或C…

XILINX 7系列时钟资源

文章目录 前言一、时钟概要1.1、CC1.2、BUFR、BUFIO、BUFMR1.3、CMT1.4、BUFH1.5、BUFG 二、时钟路由资源三、CMT 前言 本文主要参考xilinx手册ug472 一、时钟概要 7系列FPGA时钟资源主要有CC、BUFR、BUFIO、BUFMR、CMT、BUFG、BUFH和GTE_COMMON 1.1、CC “CC”&#xff0…

OpenHarmony开发案例:【自定义通知】

介绍 本示例使用[ohos.notificationManager] 等接口&#xff0c;展示了如何初始化不同类型通知的通知内容以及通知的发布、取消及桌面角标的设置&#xff0c;通知类型包括基本类型、长文本类型、多行文本类型、图片类型、带按钮的通知、点击可跳转到应用的通知。 效果预览&am…

TensorFlow实战Google深度学习框架 PDF书籍分享

今天又来给大家推荐一本TensorFlow方面的书籍<TensorFlow实战Google深度学习框架>。本书适用于想要使用深度学习或TensorFlow的数据科学家、工程师&#xff0c;希望了解大数据平台工程师&#xff0c;对人工智能、深度学习感兴趣的计算机相关从业人员及在校学生等。 下载当…

【数据结构与算法】用两个栈实现一个队列

题目 用两个栈&#xff0c;实现一个队列功能 add delete length 队列 用数组可以实现队列&#xff0c;数组和队列的区别是&#xff1a;队列是逻辑结构是一个抽象模型&#xff0c;简单地可以用数组、链表实现&#xff0c;所以数组和链表是一个物理结构&#xff0c;队列是一个逻…