HTML难点小记:一些简单标签的使用逻辑和实用化
HTML难点小记:一些简单标签的使用逻辑和实用化
@jarringslee
文章目录
- HTML难点小记:一些简单标签的使用逻辑和实用化
- 简单只是你的表象
- 标签不是随便用的
- `<div>` 滥用 vs 语义化标签的本质
- 嵌套规则的隐藏逻辑
- SEO 与可访问性的隐形关联
- 暗藏玄机的表单
- 复杂表单设计的三大原则
- 输入验证的进阶技巧
- 安全性初探:从 `name` 属性到 CSRF 攻击
- **避免 XSS 的 HTML 转义实践**
作为一名前端开发初学者,在跨过 HTML 这道门槛时,你可能会觉得它只是简单的标签罗列。然而,当你深入学习并参与实际项目后,会发现 HTML 的深度远超想象。它不仅是网页的骨架,更是连接设计、交互与性能的核心纽带。我们在学习和运用的过程中要从表象走向本质,从零散的标签使用迈向系统的工程化思维。
简单只是你的表象
HTML 的入门难度确实低,甚至可以说,只要你知道几个常用标签,就能搭建一个简单的页面。但正是这种简单会让我们产生错觉,认为掌握了基础语法就等于精通 HTML。
HTML虽然作为独立的语言来看,逻辑比编程语言都简单一些,但是它难就难在语义的精确表达和与CSS和JavaScript的深度协作,虽然很多东西我还没学,但是我们也需要了解到HTML并非孤立存在,它需要与CSS紧密配合来实现一个视觉效果,并与JavaScript协同完成交互功能在。
在数据结构的学习中,我们更多地关注算法逻辑和数据组织的抽象概念。而 HTML 则是将这些抽象逻辑具象化为用户可见的界面元素。这种从抽象到具象的转变需要前端开发者具备全新的思维方式。
以二叉树为例,在数据结构中,我们关心的是节点的关系、遍历算法等逻辑层面的内容。而在 HTML 中,如果要展示一个二叉树结构,我们需要考虑如何用标签来构建树的层级关系,如何通过 CSS 来布局节点的位置和样式,如何用 JavaScript 来实现节点的动态交互。这是一个将抽象数据结构映射到具体网页元素的过程,需要综合运用多种技术手段。
当你在浏览器中打开一个网页时,浏览器会对 HTML 文档进行解析,构建出文档对象模型(DOM)。DOM 是浏览器对 HTML 文档的内部表示,它决定了页面的结构和内容。
浏览器的渲染引擎会根据 DOM 和 CSSOM(CSS 渲染对象模型)来计算每个元素的布局和样式,最终将页面呈现给用户。因此,HTML 的编写方式会直接影响到 DOM 的构建效率和页面的渲染性能。例如,过多的嵌套标签会导致 DOM 树过于复杂,增加渲染时间;不合理的标签使用会影响 CSS 的选择器匹配效率。
标签不是随便用的
<div>
滥用 vs 语义化标签的本质
在初学 HTML 时,很多人可能会过度依赖 <div>
标签来构建页面布局。虽然 <div>
可以实现基本的页面结构划分,但它缺乏语义信息,无法向浏览器和辅助设备传达内容的真正含义。
语义化标签是为特定的内容和功能设计的,它们能够更准确地描述页面元素的含义。例如,
<nav>
用于定义导航链接部分,<header>
表示页面的头部区域,<footer>
用于页面的底部信息。使用语义化标签不仅可以提高页面的可读性和可维护性,还能提升 SEO 效果和无障碍体验。
传统布局 vs 语义化布局**
传统布局:
<div class="header"><div class="logo">炫酷帅气的logo</div><div class="nav"><a href="#">首页</a><a href="#">关于我们</a><a href="#">服务</a><a href="#">联系我们</a></div>
</div>
语义化布局:
<header><div class="logo">炫酷帅气的logo</div><nav><a href="#">首页</a><a href="#">关于我们</a><a href="#">服务</a><a href="#">联系我们</a></nav>
</header>
在语义化布局中,我们使用 <header>
和 <nav>
标签替换了部分 <div>
,使代码更具语义性。
示例:用 <article>
包裹文章却忽略 <time>
的常见错误
<article><h1>HTML难点小记:一些简单标签的使用逻辑和实用化</h1><p>ljl发表于 2025-05-11</p><p>文章内容</p>
</article>
在这个示例中,虽然使用了 <article>
标签来包裹文章内容,但忽略了对时间信息的语义化处理。正确的做法是使用 <time>
标签来标记时间:
<article><h1>HTML难点小记:一些简单标签的使用逻辑和实用化</h1><time datetime="2025-05-11">ljl发表于 2025-05-11</time><p>文章内容</p>
</article>
<time>
标签不仅能够明确标识时间信息,还可以被浏览器和屏幕阅读器更好地解析和利用。
嵌套规则的隐藏逻辑
HTML 标签的嵌套规则并非随意制定,它们背后有着严格的逻辑和语义考量。我们通过查阅资料,可以了解到嵌套规则的一些底层逻辑:
为什么
<a>
不能包裹<button>
?从语义上看,
<a>
标签用于定义超链接,而<button>
标签用于定义可点击的按钮。将<button>
放在<a>
中会导致语义混乱,因为一个按钮不应该出现在一个链接内部。此外,这种嵌套在实际渲染和交互中可能会引发问题,比如点击事件的冲突、样式应用的困难等。浏览器在解析这样的嵌套结构时,可能会进行修正或忽略部分标签,从而导致页面显示效果与预期不符。
<ul>
必须搭配<li>
的底层原因
<ul>
(无序列表)和<li>
(列表项)之间的搭配使用是基于列表的语义模型。<ul>
定义了一个项目列表,而<li>
则是列表中的具体项目。这种固定的搭配关系有助于浏览器正确解析列表结构,使其能够以合适的方式进行渲染,比如添加项目符号、计算列表项的布局等。如果违反这种嵌套规则,浏览器可能无法正确识别列表结构,进而影响页面的显示和可访问性。
SEO 与可访问性的隐形关联
屏幕阅读器如何解析
<nav>
与<header>
屏幕阅读器是一种辅助技术,用于帮助视障用户访问网页内容。它会根据 HTML 的语义化标签来解析页面结构,并向用户传达信息。当屏幕阅读器遇到
<nav>
标签时,它会识别出这是一个导航区域,通常会提供快捷键或特殊的导航模式,让用户能够快速跳转到导航链接。而<header>
标签则被识别为页面的头部信息区域,屏幕阅读器可能会告知用户页面的标题、标志等信息位于此处。
结构化数据对搜索引擎的影响实例
搜索引擎在抓取网页时,会分析页面的 HTML 结构来确定内容的相关性和重要性。使用语义化标签可以帮助搜索引擎更好地理解页面内容。例如,一个包含
<h1>
标签的标题会被认为是页面的核心内容之一,搜索引擎会给予它更高的权重。同样,<nav>
中的链接会被视为网站的重要导航路径,对网站的整体 SEO 表现有积极影响。通过合理的语义化标签使用,可以提升网页在搜索引擎结果页面中的排名,从而增加网站的流量。
暗藏玄机的表单
复杂表单设计的三大原则
字段分组:<fieldset>
与 <legend>
的实战应用
在复杂的表单中,合理地对字段进行分组可以提高用户的填写效率和体验。<fieldset>
标签用于将相关的表单元素分组,而 <legend>
标签则为分组提供标题说明。这部分我们还要配合好js的熟练运用。还是有点难度的
<form><fieldset><legend>个人信息</legend><label for="name">姓名:</label><input type="text" id="name" name="name"><br><label for="email">邮箱:</label><input type="email" id="email" name="email"></fieldset><fieldset><legend>账号设置</legend><label for="username">用户名:</label><input type="text" id="username" name="username"><br><label for="password">密码:</label><input type="password" id="password" name="password"></fieldset>
</form>
在这个示例中,我们使用 <fieldset>
将个人信息和账号设置分别分组,并用 <legend>
添加了分组标题。这样可以使表单结构更加清晰,用户在填写时能够更 easily 地理解每个字段的所属类别。
多步骤注册表单的 HTML 结构设计
<form id="multi-step-form"><fieldset><legend>步骤 1:基本信息</legend><label for="name-step1">姓名:</label><input type="text" id="name-step1" name="name-step1"><br><label for="email-step1">邮箱:</label><input type="email" id="email-step1" name="email-step1"><button type="button" onclick="showStep(2)">下一步</button></fieldset><fieldset id="step2" style="display: none;"><legend>步骤 2:账号设置</legend><label for="username-step2">用户名:</label><input type="text" id="username-step2" name="username-step2"><br><label for="password-step2">密码:</label><input type="password" id="password-step2" name="password-step2"><button type="button" onclick="showStep(1)">上一步</button><button type="button" onclick="submitForm()">提交</button></fieldset>
</form><script>function showStep(step) {document.getElementById('step1').style.display = step === 1 ? 'block' : 'none';document.getElementById('step2').style.display = step === 2 ? 'block' : 'none';}function submitForm() {// 表单提交逻辑alert('表单提交成功!');}
</script>
在这个多步骤表单示例中,我们通过 JavaScript 控制不同步骤的显示和隐藏,实现了分步骤填写表单的效果。这种设计可以减轻用户一次性填写大量信息的压力,提高表单的完成率。
输入验证的进阶技巧
pattern
属性的正则表达式陷阱
pattern
属性用于指定输入字段的值必须匹配的正则表达式模式。虽然它提供了一种方便的客户端验证方式,但在使用时需要注意一些潜在问题。
例如,以下代码使用 pattern
属性验证一个简单的电话号码格式:
<input type="text" name="phone" pattern="\d{3}-\d{3}-\d{4}" title="电话号码格式应为 xxx-xxx-xxxx">
这个正则表达式要求电话号码必须是三组数字,每组之间用短横线分隔。然而,用户可能会输入各种不同的格式,如没有短横线或短横线位置错误等情况。此外,不同的地区可能有不同的电话号码格式,这也可能使得正则表达式难以满足所有情况。
自定义验证消息的局限性
自定义验证消息可以通过 setCustomValidity()
方法来设置,但它存在一些局限性。例如,验证消息可能无法全面覆盖所有可能的错误情况,或者在不同的浏览器中显示效果可能有所不同。此外,当使用 setCustomValidity()
时,需要确保在输入有效时重置验证消息,否则可能会导致验证消息一直显示。
<input type="text" id="username" name="username" required>
<script>const usernameInput = document.getElementById('username');usernameInput.addEventListener('input', function() {if (this.value.length < 3) {this.setCustomValidity('用户名至少需要 3 个字符');} else {this.setCustomValidity(''); // 重置验证消息}});
</script>
为了解决这些局限性,可以结合后端验证和前端验证库来实现更全面的验证机制。同时,确保在前端验证中充分考虑各种可能的输入情况,并进行适当的测试。
安全性初探:从 name
属性到 CSRF 攻击
为什么表单必须要有 name
属性?
表单数据在提交时是通过 name
属性来标识每个字段的。如果没有 name
属性,表单字段的值将不会被包含在提交的数据中。例如:
<!-- 无 name 属性,数据无法提交 -->
<input type="email">
正确的写法是:
<input type="email" name="user_email">
在提交表单时,user_email
将作为键,与输入的邮箱值一起发送到服务器。
还有一个前几天刷短视频刷到的小知识点。
避免 XSS 的 HTML 转义实践
跨站脚本攻击(XSS)是一种常见的安全威胁,攻击者通过在表单输入中注入恶意脚本,这些脚本可能会在其他用户的浏览器中执行。说白了就是有人在你写好的HTML代码中在恶意输入代码导致一些不好的东西会在浏览器中执行。为了防止 XSS 攻击,需要对用户输入进行 HTML 转义,将特殊字符转换为对应的 HTML 实体。
例如,将 <
转换为 <
,>
转换为 >
,"
转换为 "
等。在服务器端和客户端都应该进行这样的转义处理,以确保用户输入不会被浏览器解释为 HTML 或 JavaScript 代码。
学好HTML的标签用法只是基础中的基础,难点在于逻辑的优化和交互运用。我们要在日后的实战当中不断联系对三件套的熟练运用。
相关文章:
HTML难点小记:一些简单标签的使用逻辑和实用化
HTML难点小记:一些简单标签的使用逻辑和实用化 jarringslee 文章目录 HTML难点小记:一些简单标签的使用逻辑和实用化简单只是你的表象标签不是随便用的<div> 滥用 vs 语义化标签的本质嵌套规则的隐藏逻辑SEO 与可访问性的隐形关联 暗藏玄机的表单…...
Linux : 31个普通信号含义
Linux : 31个普通信号 信号含义特殊的两个信号 信号含义 信号编号信号名信号含义1SIGHUP如果终端接口检测到一个连接断开,则会将此信号发送给与该终端相关的控制进程,该信号的默认处理动作是终止进程。2SIGINT当用户按组合键(一般…...
软件测试都有什么???
文章目录 一、白盒测试(结构测试)二、黑盒测试(功能测试)三、灰盒测试四、其他测试类型五、覆盖准则对比六、应用场景 软件测试主要根据测试目标、技术手段和覆盖准则进行分类。分为白盒测试、黑盒测试、灰盒测试及其他补充类型 一…...
LangGraph框架中针对MCP协议的变更-20250510
MCP(Model Context Protocol)的出现为AI Agent与外部工具及数据源的集成提供了标准化接口,而LangGraph作为基于LangChain的智能体开发框架,在MCP协议的影响下也进行了适配性调整,主要体现在工具调用、异步交互和多步推…...
YashanDB(崖山数据库)V23.4 LTS 正式发布
2024年回顾 2024年11月我们受邀去深圳参与了2024国产数据库创新生态大会。在大会上崖山官方发布了23.3。这个也是和Oracle一样采用的事编年体命名。 那次大会官方希望我们这些在一直从事在一线的KOL帮助产品提一些改进建议。对于这样的想法,我们都是非常乐于合作…...
二、transformers基础组件之Tokenizer
在使用神经网络处理自然语言处理任务时,我们首先需要对数据进行预处理,将数据从字符串转换为神经网络可以接受的格式,一般会分为如下几步: - Step1 分词:使用分词器对文本数据进行分词(字、字词);- Step2 构建词典:根据数据集分词的结果,构建…...
git 报错:错误:RPC 失败。curl 28 Failed to connect to github.com port 443 after 75000
错误:RPC 失败。curl 28 Failed to connect to github.com port 443 after 75000 ms: Couldnt connect to server致命错误:在引用列表之后应该有一个 flush 包 方法一: 直接换一个域名:把 git clone https://github.com/zx59530…...
软考 系统架构设计师系列知识点之杂项集萃(56)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(55) 第91题 商业智能关注如何从业务数据中提取有用的信息,然后采用这些信息指导企业的业务开展。商业智能系统主要包括数据预处理、建立()、数据分…...
数据库的脱敏策略
数据库的脱敏策略:就是屏蔽敏感的数据 脱敏策略三要求: (1)表对象 (2)生效条件(脱敏列、脱敏函数) (3)二元组 常见的脱敏策略规则: 替换、重排、…...
Lora原理及实现浅析
Lora 什么是Lora Lora的原始论文为《LoRA: Low-Rank Adaptation of Large Language Models》,翻译为中文为“大语言模型的低秩自适应”。最初是为了解决大型语言模在进行任务特定微调时消耗大量资源的问题;随后也用在了Diffusion等领域,用于…...
力扣热题100之合并两个有序链表
题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 代码 方法一:新建一个链表 这里就先随便新建一个节点作为一个链表的头节点,然后每次遍历都将小的那个节点放入这个链表,遍历完一…...
Linux511SSH连接 禁止root登录 服务任务解决方案 scp Vmware三种模式回顾
创造一个临时文件 引用 scp -p 3712 atthistime.txt code11.1.1.100:/at ssh connect to host 11.1.1.100 port 22:No route to host lost connection 对方虚拟机是[rootlocalhost caozx26]# ll -d /at drwxr-xr-x. 2 root root 6 5月 11 11:10 /at sshd_config文件修改了port为…...
python实现用户登录
使用python实现用户登录,输入用户名和密码,进行验证,正确登录成功,错误登录失败,允许用户输入三次。 代码: 下面展示一些 内联代码片。 for i in range(3):username input(请输入用户名:)pas…...
信息系统项目管理师-软考高级(软考高项)2025最新(十五)
个人笔记整理---仅供参考 第十五章项目风险管理 15.1管理基础 15.2项目风险管理过程 15.3规划风险管理 15.4识别风险 15.5实施定性风险分析 15.6实施定量风险分析 15.7规划风险应对 15.8实施风险应对 15.9监督风险...
力扣-二叉树-101 对称二叉树
思路 分解问题为,该节点的左孩子的左子树和右孩子的右子树是不是同一棵树 && 该节点的左孩子的右字数和右孩子的左子树是不是同一课树 && 该节点的左右孩子的值相不相同 代码 class Solution {public boolean isSymmetric(TreeNode root) {// 层…...
07.three官方示例+编辑器+AI快速学习webgl_buffergeometry_attributes_integer
本实例主要讲解内容 这个Three.js示例展示了WebGL 2环境下的整数属性渲染技术。通过创建大量随机分布的三角形,并为每个三角形分配不同的整数索引,实现了基于索引动态选择纹理的效果。 核心技术包括: WebGL 2环境下的整数属性支持顶点着色…...
Python Day 22 学习
学习讲义Day14安排的内容:SHAP图的绘制 SHAP模型的基本概念 参考学习的帖子:SHAP 可视化解释机器学习模型简介_shap图-CSDN博客 以下为学习该篇帖子的理解记录: Q. 什么是SHAP模型?它与机器学习模型的区别在哪儿? …...
OrangePi Zero 3学习笔记(Android篇)6 - hid-ft260
目录 1. 将hid-ft260.c拷贝到Android目录内 2. 修改hid-ids.h 3. 修改hid-quirks.c 4. 修改Kconfig 5. 修改Makefile 6. 配置内核 7. 编译内核 8. 增加权限 9. 验证 在Android中添加驱动模块ko文件,以hid-ft260为例。 1. 将hid-ft260.c拷贝到Android目录内…...
部署Superset BI(五)连接oracle数据库失败
折腾完了hana和sqlserver数据库的连接,开始折腾oracle数据库连接 1.requirements-local.txt配置 尝试在requirements-local.txt中设置,结果容器弄瘫痪了,拉不起来了,只要又去掉修改 rootNocobase:/usr/superset/superset/docker# …...
快速搭建一个vue前端工程
一、环境准备 1、安装node.js 下载地址:Node.js 推荐版本如下: 2、检查node.js版本 node -v npm -v 二、安装Vue脚手架 Vue脚手架是Vue官方提供的标准化开发工具。vue官网:https://cn.vuejs.org/ 全局安装vue/cli (仅第一次…...
蓝桥杯14届 数三角
问题描述 小明在二维坐标系中放置了 n 个点,他想在其中选出一个包含三个点的子集,这三个点能组成三角形。然而这样的方案太多了,他决定只选择那些可以组成等腰三角形的方案。请帮他计算出一共有多少种选法可以组成等腰三角形? 输…...
在Python中计算函数耗时并超时自动退出
更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 方法1:使用装饰器结合信号模块(仅Unix-like系统)方法2:使用多线程(跨平台解决方案)方法3:使用concurrent.futures(Python 3.2+)方法4:使用 multiprocessing + Process(跨平台)方法5:使用 time 手动计…...
jna总结1
java使用JNA调用dll的方法_(jnacalldllapi) native.loadlibrary(path-CSDN博客 JNA(Java Native Access):建立在JNI之上的Java开源框架,SUN主导开发,用来调用C、C代码,尤其是底层库文件(windows中叫dll文件,…...
[Java][Leetcode simple]26. 删除有序数组中的重复项
思路 第一个元素不动从第二个元素开始:只要跟上一个元素不一样就放入数组中 public int removeDuplicates(int[] nums) {int cnt1;for(int i 1; i < nums.length; i) {if(nums[i] ! nums[i-1]) {nums[cnt] nums[i];}}return cnt;}...
BUUCTF——Ezpop
BUUCTF——Ezpop 进入靶场 给了php代码 <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected $v…...
springboot3+vue3融合项目实战-大事件文章管理系统-更新用户密码
大致分为这三步 首先在usercontroller中增加updatePwd方法 PatchMapping ("/updatePwd")public Result updatePwd(RequestBody Map<String,String> params){//1.校验参数String oldPwd params.get("old_pwd");String newPwd params.get("n…...
用浏览器打开pdf,如何使用划词翻译?
1. 浏览器 | 扩展 | 获取 Microsoft Edge 扩展 2. 搜索 “沙拉查词” 点击“获取” 3. 扩展这里选择 管理扩展 勾选 “允许访问文件url” 注:这里一定要勾选,否则沙拉查词无法访问.pdf 文件!!!会出现下图错误 4. 右击…...
大模型项目:普通蓝牙音响接入DeepSeek,解锁语音交互新玩法
本文附带视频讲解 【代码宇宙019】技术方案:蓝牙音响接入DeepSeek,解锁语音交互新玩法_哔哩哔哩_bilibili 目录 效果演示 核心逻辑 技术实现 大模型对话(技术: LangChain4j 接入 DeepSeek) 语音识别(…...
split和join的区别
split和join是Python中用于处理字符串的两种方法,它们的主要区别在于功能和使用场景。 split()方法 split()方法用于将字符串按照指定的分隔符分割成多个子串,并返回这些子串组成的列表。如果不指定分隔符,则默认分割所有的空白字符&am…...
Qt坐标系 + 信号和槽 + connect函数(8)
文章目录 Qt坐标系信号和槽connect函数connect函数的介绍connect函数具体的使用方式一个简单的例子 两个问题咋知道的QPushButton有一个clicked信号官方文档找不到相关线索怎么办 简介:上篇文章:Qt 通过控件按钮实现hello world 命名规范(7&…...
Maven 公司内部私服中央仓库搭建 局域网仓库 资源共享 依赖包构建共享
介绍 公司内部私服搭建通常是为了更好地管理公司内部的依赖包和构建过程,避免直接使用外部 Maven 中央仓库。通过搭建私服,团队能够控制依赖的版本、提高构建速度并增强安全性。公司开发的一些公共工具库更换的提供给内部使用。 私服是一种特殊的远程仓…...
蓝桥杯14届国赛 合并数列
问题描述 小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案,分别将他们列为两个数组 {a1,a2,...,an} 和 {b1,b2,...,bm}。两个数组的和相同。 定义一次合并操作可以将某数组内相邻的两个数合并为一个新数,新数的值是…...
人工智能100问☞第20问:神经网络的基本原理是什么?
目录 一、通俗解释 二、专业解析 三、权威参考 神经网络通过模拟人脑神经元连接结构,借助多层神经元的前向传播(输入到输出逐层计算)与反向传播(误差逆向调整参数)机制,利用激活函数(如ReLU、Sigmoid)引入非线性特征,通过权重迭代优化实现从数据中自主学习,最终完…...
AMD FPGA书籍推荐-初学者、一线工程师适用
!](https://i-blog.csdnimg.cn/direct/b78c8f0d015240e28aaad985f0f6eca9.jpg...
CSS 盒子模型与元素定位
CSS 盒子模型与元素定位 一、元素类型与转换 1. 基本元素类型 块级元素 (block) 特点:独占一行,可设置宽高,默认宽度100%示例:<div>, <p>, <h1>-<h6>, <ul>, <li> 行内元素 (inline) 特…...
Java常用类-比较器
目录 一、为什么需要比较器?二、核心差异速记表三、Comparable:对象自带的 “默认规则”1. 核心作用2. 源码定义3. 实战:给Student类加默认规则4. 源码验证(以Integer为例) 四、Comparator:临时的 “外部规…...
【Linux系列】bash_profile 与 zshrc 的编辑与加载
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【大模型】解决最新的Dify1.3.1版本 无法基于Ollama成功添加模型
本地搭建参考链接,但是版本不是最新的1.3.1 DeepSeek Dify :零成本搭建企业级本地私有化知识库保姆级教程 windows环境下部署。 查看模型添加,提示成功,但实际模型接口返回值为空,即看不到已添加的模型。 解决方法…...
6.空气质量检测和语音播报
目录 传感器 传感器分类 数字量传感器 模拟量传感器 电压型模拟量传感器 电流型模拟量传感器 接收不同数字电平信号 KQM6600 简介 获取数据手册 关注手册的内容 KQM660硬件层 编辑 KQM协议层 语音识别和语音播报模块 SU03T作用 SU03T简介编辑 SU03T硬件层 …...
LeetCode 热题 100 543. 二叉树的直径
LeetCode 热题 100 | 543. 二叉树的直径 大家好,今天我们来解决一道经典的二叉树问题——二叉树的直径。这道题在 LeetCode 上被标记为简单难度,要求计算给定二叉树的直径。 问题描述 给你一棵二叉树的根节点,返回该树的直径。二叉树的直径…...
D. Explorer Space(dfs+剪枝)
Problem - 1517D - Codeforces 题目大意:给你一个n行m列的矩阵,以及每个点上下左右相邻点的边权,求出每个点任意走k步后再回到当前这个点的最小路程,如果不能回到起始点则输出-1 思路:既然走k步后要回到起始点&#…...
# KVstorageBaseRaft-cpp 项目 RPC 模块源码学习
KVstorageBaseRaft-cpp 项目 RPC 模块源码学习 。 一、项目简介 KVstorageBaseRaft-cpp 是一个基于 Raft 一致性算法实现的分布式 KV 存储系统,采用 C 开发。项目的核心目标是帮助开发者理解 Raft 原理和分布式 KV 存储的基本实现。RPC 模块是分布式系统通信的关…...
QT6 源(93)篇三:阅读与注释共用体类 QVariant 及其源代码,本类支持比较运算符 ==、!=。
(9) 本类支持比较运算符 、! : 可见, QString 类型里可存储多个 unicode 字符,即使只存储一个 unicode 字符也不等于 QChar。 (10)本源代码来自于头文件 qvariant . h : #ifndef Q…...
Qt开发经验 --- 避坑指南(13)
文章目录 [toc]1 安装Qt creator后无法使用debug调试2 安装VS后之间安装自带的Windows SDK3 Qt配置ssl4 ubuntu编译linuxdeployqt 更多精彩内容👉内容导航 👈👉Qt开发经验 👈 1 安装Qt creator后无法使用debug调试 安装最新版本Q…...
go 通过汇编学习atomic原子操作原理
文章目录 概要一、原理1.1、案例1.2、关键汇编 二、LOCK汇编指令2.1、 LOCK2.2、 原理2.2.1、 缓存行2.2.2、 缓存一致性之MESI协议2.2.3、lock原理 三、x86缓存发展四、x86 DMA发展参考 概要 在并发操作下,对一个简单的aa2的操作都会出错,这是因为这样…...
LOJ 6346 线段树:关于时间 Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),另有一个存储三元组的列表 L L L. 有 m m m 个操作分两种: add ( l , r , k ) \operatorname{add}(l,r,k) add(l,r,k):将 ( l , r , …...
Python----神经网络(基于Alex Net的花卉分类项目)
一、基于Alex Net的花卉分类 1.1、项目背景 在当今快速发展的科技领域,计算机视觉已成为一个备受关注的研究方向。随着深度学习技术的不断进步,图像识别技术得到了显著提升,广泛应用于医疗、安防、自动驾驶等多个领域。其中,花卉…...
影刀RPA开发-魔法指令-玩转图片识别
聊聊天,就能生成指令! 1. 影刀RPA提取图片内容的方式 官方AI识别 集成的第三方识别指令 免费的识别指令 使用python自己编写识别代码,自己安装第三方库 import easyocr# 创建一个 EasyOCR 识别器,指定同时识别中文(简…...
从零开始开发纯血鸿蒙应用之XML解析
从零开始开发纯血鸿蒙应用 〇、前言一、鸿蒙SDK中的 XML API1、ohos.xml2、ohos.convertxml 三、XML 解析实践1、源数据结构2、定义映射关系3、定义接收对象4、获取文章信息 四、总结 〇、前言 在前后端的数据传输方面,论格式化形式,JSON格式自然是首选…...
运算放大器稳定性分析
我们常见的运放电路大多是在闭环状态。那么就必然遵循闭环控制系统的基本原理。闭环控制系统的核心是通过反馈来调节系统的输出,使其更接近期望值。 本文从闭环控制系统的角度,画出同相、反相差分电路的经典控制框图。有了控制框图就可以利用经典控制理论…...