JavaScriptWeb API (DOM和BOM操作)
Web API (基础部分)
-
作用: 使用 JS 去操作 html 和浏览器
-
分类: DOM 和 BOM
- DOM: 操作 HTML 文档的 API
- BOM: 操作浏览器的 API
DOM(文档对象模型)
-
是用来呈现以及与任意 HTML 或 XML 文档进行交互的 API
-
作用: 开发网页内容特效和实现用户交互
- 动态创建 HTML 元素
- 改变 HTML 元素的样式
- 读取或修改 HTML 元素的内容
- 响应用户事件
DOM 树
- 将 HTML 文档转换为树形结构的对象模型, 体现了标签与标签之间的关系
DOM 对象
-
浏览器根据 html 标签生成的 JS 对象
-
所有的标签属性和方法都可以通过 DOM 对象访问
-
修改这个对象可以映射到 HTML 标签的变化
-
核心思想: 把标签当做对象处理
DOM 基本操作
获取元素(通过 css 选择器)
document.querySelector("css选择器");
// 获取匹配的第一个元素, 返回值为DOM(HTMLElement)对象
// 可以直接操作修改document.querySelectorAll("css选择器");
// 获取所有匹配的元素, 返回值为NodeList对象集合
// 得到的是一个伪数组, 可以索引访问但没有数组的方法
// 可以遍历修改
操作元素内容
对象.innerHTML = "新的内容";
// 直接修改元素的内容
// 显示HTML代码, 解析标签对象.innerText = "新的内容";
// 只能修改元素内的文本内容
// 显示纯文本, 不解析标签
操作元素常用属性
- 常用属性: 如 href, title, src, alt 等
const img = document.querySelector("img");
img.src = "图片地址";
// 修改图片地址
操作元素样式属性
- 通过 style 属性操作元素的样式
对象.style.属性名 = "属性值";const div = document.querySelector("div");
div.style.width = "500px";
div.style.height = "500px";
div.style.backgroundColor = "red"; //当属性名为多个单词时, 需使用小驼峰命名法
给元素添加类名
元素.className = "类名";
// 设置类名, 多个类名用空格分隔
// 新值换旧值, 会覆盖之前的类名元素.classList.add("类名");
// 添加类名, 不存在则添加, 存在则忽略元素.classList.remove("类名");
// 删除类名, 不存在则忽略元素.classList.toggle("类名");
// 切换类名, 不存在则添加, 存在则删除元素.classList.contains("类名");
// 判断是否存在某个类名, 返回布尔值
// 排他思想: 只有一个元素可以有某个类名
const old = document.querySelector(".seclected");
if (old) {old.classList.remove("selected");
}
操作表单元素属性
const input = document.querySelector("input");console.log(input.value);
// 获取输入框的值input.value = "新值";
// 设置输入框的值input.type = "text";
// 设置输入框类型input.checked = true;
// 设置单选框或复选框是否选中input.disabled = true;
// 设置输入框是否禁用input.reset();
// 重置表单
操作自定义属性
- 可以给元素添加自定义属性, 方便操作
<div id="myDiv" data-my-attr="自定义属性"></div>
const div = document.querySelector("#myDiv");console.log(div.dataset.myAttr);div.dataset.myAttr = "新值";
// 设置自定义属性的值delete div.dataset.myAttr;
// 删除自定义属性
定时器(间歇函数)
setInterval(function () {}, 时间间隔);
// 重复执行函数, 每隔指定时间间隔执行一次, 时间单位为毫秒
// 如果是有名函数, 直接写函数名, 不加小括号
// 定时器会返回一个定时器对象(id数字), 可以使用 clearInterval() 停止定时器clearInterval(定时器对象);
// 停止定时器
事件监听
-
用户操作, 如鼠标点击, 键盘按下等称为事件
-
监听事件发生, 执行相应的函数
-
事件监听三要素
- 事件类型: 如 click, mouseover, keydown 等
- 事件源: 触发事件的元素
- 事件处理函数: 响应事件的函数
-
常用事件类型:
- click: 鼠标点击
- mouseenter: 鼠标进入
- mouseleave: 鼠标离开
- mouseover: 鼠标移入(会冒泡)
- mouseout: 鼠标移出(会冒泡)
- focus: 表单获得焦点
- blur: 表单失去焦点
- change: 表单元素值改变
- input: 输入框值改变
- keydown: 键盘按下
- keyup: 键盘松开
- load: 页面加载完成
- scroll: 滚动条滚动
- resize: 窗口大小改变
- submit: from表单提交
对象.addEventListener("事件类型", 函数);
// 给对象添加事件监听, 当事件类型发生时, 执行函数// eg:const btn = document.querySelector("button");
btn.addEventListener("submit", function () {console.log("按钮被点击了");
});
事件对象
-
是个对象, 包含事件触发时的所有信息
-
如何获取事件对象:
作为函数参数传入: 函数(event) {}
元素.addEventListener("事件类型", function (event) {}); // event 就是事件对象
-
常用属性:
-
type: 获取当前的事件类型
-
clientX/Y: 获取鼠标在页面(根据可视窗口左上角)的坐标
-
offsetX/Y: 获取鼠标相对于事件源(根据当前 dom 元素左上角)的坐标
-
key: 获取按下的键盘的键值
-
trim 方法
- 去除字符串前后空格
const str = " hello world ";
const newStr = str.trim();
console.log(newStr); // "hello world"
环境对象
-
定义: 指的是函数内部特殊的变量 this, 它代表着当前函数运行时所处的环境, 在普通函数中, this 指向全局对象 window
-
函数的调用方式不同, this 的指向(对象)也不同, 一般来说, 谁调用的函数, this 就指向谁
const btn = document.querySelector("button");
btn.addEventListener("submit", function () {console.log(this); // 输出: <button>...</button>this.style.backgroundColor = "red"; // 改变按钮的背景色
});
webAPI (DOM 进阶操作)
事件流
-
定义: 指的是事件完整执行过程中的流动路径
-
捕获阶段: 事件从最外层的窗口对象开始,逐层向内传播到目标元素,并触发相应的事件处理程序。
-
冒泡阶段: 事件从目标元素开始,逐层向外传播到最外层的窗口对象,并触发相应的事件处理程序。
-
事件捕获
document.addEventListener('click', function(event) {console.log('文档');
}, true) // 第三个参数为true表示使用事件捕获, false表示使用事件冒泡, 默认为falsefather.addEventListener('click', function(event) {
console.log('父亲');
}, true)son.addEventListener('click', function(event) {
console.log('儿子');
}, true)- 点击 son 元素,输出顺序为:文档、父亲、儿子。
- 点击 father 元素,输出顺序为:文档、父亲。
- 点击 document 元素,输出顺序为:文档。
事件冒泡
document.addEventListener('click', function(event) {console.log('文档');
})father.addEventListener('click', function(event) {
console.log('父亲');
})son.addEventListener('click', function(event) {
console.log('儿子');
})- 点击 son 元素,输出顺序为:儿子、父亲、文档。
- 点击 father 元素,输出顺序为:父亲、文档。
- 点击 document 元素,输出顺序为:文档。
- 阻止冒泡:
event.stopPropagation()
事件解绑
DOM.romoveEventListener("click", 函数名);
阻止元素默认行为
const form = duocument.querySelector("form");
form.addEventListener("submit", function (event) {event.preventDefault(); // 阻止默认提交行为
});
事件委托
-
定义: 将事件监听器添加到父元素上,当子元素触发事件时,元素通过事件冒泡机制将事件传递给父元素的事件监听器,从而实现事件的委托。
-
优点: 减少内存占用,提高性能。
-
原理: 利用事件冒泡,父元素的事件监听器可以监听到子元素的事件,从而实现事件的委托。
// 父元素
const ul = document.querySelector("ul");
ul.addEventListener("click", function (event) {// 子元素if (event.target.tagName === "LI") {// 判断点击的是不是子元素event.target.style.color = "blue"; //使用target属性获取触发事件的元素const id = event.target.dataset.id; // 使用dataset属性获取自定义属性值}
});
更多事件类型
页面加载事件: load / domcontentloaded
-
load: 页面加载完成时触发。
它不仅可以监听页面的加载完成,还可以监听页面的资源加载情况,比如图片、样式表、脚本等。
// 等待页面所有资源加载完毕, 就执行回调函数
window.addEventListener("load", function () {});
-
domcontentloaded: 页面 DOM 结构加载完成时触发。
它与 load 事件不同,它只会在 DOM 结构加载完成时触发,不会等待资源的加载。
// 等待DOM结构加载完成, 就执行回调函数
document.addEventListener("DOMContentLoaded", function () {});
元素滚动事件
- 可以个页面添加, 也可以给元素添加。
window.addEventListener("scroll", function (event) {consol.log("页面滚动了");
});
- 获取位置
-
scrollTop: 获取或设置当前页面的垂直滚动条的位置。(被卷去的部分)
-
scrollLeft: 获取或设置当前页面的水平滚动条的位置。
- 它们的值可
读写
, 类型为数字型
/*页面平滑滚动*/
html {scroll-behavior: smooth;
}
const div = document.querySelector("div");
window.addEventListener("scroll", function (event) {const n = document.documentElement.scrollTop;if (n > 100) {div.style.display = "block";}
});
页面尺寸事件
window.addEventListener("resize", function (event) {console.log("页面尺寸变化了");
});
- 获取尺寸
const div = document.querySelector("div");
console.log(div.clientWidth); // 盒子宽度
console.log(div.clientHeight); // 盒子高度
元素尺寸与位置
-
offsetwidth: 元素的宽度,包括内容宽度和内边距。(包括边框和间距)
-
offsetheight: 元素的高度,包括内容高度和内边距。
-
offsetTop: 元素相对于其定位父元素的上边缘的距离。(只读属性)
-
offsetLeft: 元素相对于其定位父元素的左边缘的距离。
- 若 3 和 4 的父元素无定位, 则找定位祖先元素, 直至 body 元素为止。
-
element.getBoundingClientRect().top/left: 获取元素的边界框信息(相对于视口), 返回一个对象。
-
event.pageX/Y: 鼠标相对于页面的坐标。
日期对象
实例化
const date = new Date(); // 当前日期和时间const date1 = new Date(year, month, day, hours, minutes, seconds, milliseconds); // 指定日期和时间
方法
-
getFullYear(): 获取完整的年份。
-
getMonth(): 获取月份(0-11)。
-
getDate(): 获取日期(1-31)。
-
getDay(): 获取星期几(0-6)。
-
getHours(): 获取小时(0-23)。
-
getMinutes(): 获取分钟(0-59)。
-
getSeconds(): 获取秒(0-59)。
-
getMilliseconds(): 获取毫秒(0-999)。
-
getTime(): 获取从 1970 年 1 月 1 日午夜到当前时间的毫秒数。
-
getTimezoneOffset(): 获取时区偏移量。
-
setFullYear(year): 设置完整的年份。
-
setMonth(month): 设置月份(0-11)。
-
setDate(day): 设置日期(1-31)。
-
setHours(hours): 设置小时(0-23)。
-
setMinutes(minutes): 设置分钟(0-59)。
-
setSeconds(seconds): 设置秒(0-59)。
-
setMilliseconds(milliseconds): 设置毫秒(0-999)。
-
setTime(milliseconds): 设置从 1970 年 1 月 1 日午夜到指定时间的毫秒数。
-
toUTCString(): 将日期对象转换为 UTC 格式的字符串。
-
toDateString(): 将日期对象转换为日期格式的字符串。
-
toTimeString(): 将日期对象转换为时间格式的字符串。
-
toLocaleString(): 将日期对象转换为本地格式的字符串。
时间戳
-
定义: 时间戳是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒(北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒)起至现在的总秒数。
-
使用场景: 如果计算倒计时效果, 前面方法无法直接计算, 需要借助于时间戳完成。
-
算法:
-
获取当前时间戳:
-
const timestamp = Date.now();
-
const timestamp = +new Date();
-
const timestamp = (new Date()).getTime();
-
-
计算倒计时:
-
const d = parseInt(总秒数 / 60 / 60 / 24); 计算天数
-
const h = parseInt((总秒数 / 60 / 60) % 24); 计算小时数
-
const m = parseInt((总秒数 / 60) % 60); 计算分钟数
-
const s = parseInt(总秒数 % 60); 计算秒数
-
节点操作
- DOM节点: 指的是文档对象模型(Document Object Model)中的节点, 包括元素节点、属性节点、文本节点、注释节点等。
查找节点(根据元素之间的关系)
-
父节点查找:
子元素.parentNode
, 返回值为object, 找不到返回null -
子节点查找:
父元素.children
, 返回值为array(仅包含子元素节点), 找不到返回空数组 -
兄弟节点查找:
元素.previousElementSibling
(前一个兄弟节点) 或元素.nextElementSibling
(后一个兄弟节点), 返回值类型为object, 找不到返回null
创建节点(新增元素节点)
-
创建节点:
document.createElement(标签名)
, 返回值类型为object, 即新创建的元素节点 -
插入节点(方法一):
父元素.appendChild(新元素名)
, 插入到最后 -
插入节点(方法二):
父元素.insertBefore(新元素名, 参照元素)
, 插入到参照元素之前 -
克隆节点:
元素.cloneNode(true/false)
, true表示深复制, false表示浅复制, 返回值类型为object, 即新创建的元素节点
删除节点
- 删除节点:
父元素.romoveChild(子元素)
, 删除该元素节点
M端事件
-
tauchstart: 手指触摸屏幕时触发
-
touchmove: 手指在屏幕上滑动时触发
-
touchend: 手指从屏幕上松开时触发
JS插件(swiper)
-
官网: https://swiper.com.cn/
-
下载: https://swiper.com.cn/download
-
引入: 下载压缩包, 解压, 找到 package文件夹, 引入 js文件和 css文件即可。
webAPI (BOM 操作)
JS 执行机制
-
javascript 是单线程的, 也就是说, 只能同时执行一个任务。
-
为了解决这个问题, 利用多核 CPU 的计算能力, HTML5 提出 Web Worker API, 允许 JavaScript 脚本创建多个线程, 并将任务分配给这些线程。
-
于是, JS 出现了同步和异步的概念。同步任务是指在执行过程中, 必须等待前一个任务执行完毕, 才能继续执行; 异步任务是指在执行过程中, 不必等待前一个任务, 而是可以同时执行多个任务。
-
同步任务: 都在主线程上执行, 形成一个执行栈。
-
异步任务: 都在主线程之外, 形成一个事件队列。
-
事件循环: 主线程不断从事件队列中取出事件, 执行事件。(优先级: 同步任务 > 异步任务)
window 对象
-
定义: window 对象是 JavaScript 中最顶层的对象, 它代表了浏览器窗口, 也是所有全局变量和函数的宿主。
-
BOM 对象: 浏览器对象模型(Browser Object Model)
定时器 - 延时函数
-
settimeout()方法: 设定一个定时器, 在指定的时间间隔后执行一次函数。
setTimeout(function(){},delay);- 参数: function() - 要执行的函数名或函数体。 - 参数: delay - 延迟时间,单位为毫秒。// 清除延时函数 clearTimeout(timeoutID);- 参数: timeoutID - 要清除的延时函数的ID。
location 对象
- 定义: location 对象代表当前页面的 URL 信息。
// 获取当前页面的URL
var url = location.href;// 获取当前页面的域名
var domain = location.hostname;// 获取当前页面的协议
var protocol = location.protocol;// 获取URL中的查询字符串
location.search;// 获取URL中的hash值
location.hash;// 重定向到新的页面
location.href = "http://www.example.com";// (强制)刷新当前页面
location.reload(true);
navigator 对象
-
定义: navigator 对象代表浏览器的信息。
-
通过 userAgent 属性可以获取浏览器的类型和版本信息。
// 获取浏览器类型
var browser = navigator.appName;// 获取浏览器版本
var version = navigator.appVersion;// 获取操作系统类型
var os = navigator.platform;// 获取用户代理信息
var userAgent = navigator.userAgent;// 判断是否为移动设备// 检测 userAgent(浏览器信息)
!(function () {const userAgent = navigator.userAgent;// 验证是否为Android或iPhoneconst android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/);const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/);// 如果是Android或iPhone,则跳转至移动站点if (android || iphone) {location.href = "http://m.itcast.cn";}
})();
history 对象
-
定义: history 对象代表浏览器的历史记录。
-
属性和方法
back(); // 后退
forward(); // 前进
go(num); // 前进或后退到指定页面back.addEventListener("click", function () {history.back();// 或者// history.go(-1);
});forward.addEventListener("click", function () {history.forward();// 或者// history.go(1);
});
本地存储(localStorage)
-
定义: 本地存储是指在浏览器端存储数据, 使得数据在浏览器关闭后依然存在。
-
常用方法
// 存储数据
localStorage.setItem("key", "value"); //本地存储只能存储字符串// 获取数据
var value = localStorage.getItem("key");// 删除数据
localStorage.removeItem("key");
-
sessionStorag: 与 localStorage 类似, 但数据在浏览器关闭后就丢失。
-
cookie: 存储在用户本地的小型文本文件, 用于存储少量数据, 并在每次请求时发送给服务器。
-
IndexedDB: 是一个高性能的本地数据库, 它使得客户端存储大量结构化数据变得十分简单。
存储复杂数据类型
-
JSON.stringify()方法: 将对象转换为 JSON 字符串。
-
JSON.parse()方法: 将 JSON 字符串转换为对象。
// 存储对象
let obj = { name: "John", age: 30, city: "New York" };
let jsonStr = JSON.stringify(obj);
localStorage.setItem("user", jsonStr);// 获取对象
let jsonStr = localStorage.getItem("user");
let obj = JSON.parse(jsonStr);
正则表达式
-
定义: 正则表达式(regular expression)是一种文本模式, 它能帮助你方便的检查、匹配、替换文本。
-
语法:
let str = "this is a test string, pattern, flags";// 定义规则
const pattern = /pattern/;// 匹配规则
pattern.test(str); // true
pattern.exec(str); // ["pattern", index: 10, input: "this is a test string, pattern, flags"]
元字符
-
定义: 元字符(metacharacter)是指用来匹配、搜索、替换文本的特殊字符。
-
常用元字符
[a - zA - Z]; // 匹配所有小写字母和大写字母
-
分类
- 字符类: [abc] 匹配 a 或 b 或 c
- 字符类范围: [a-z] 匹配所有小写字母(有一个就为 true)
- 字符类否定: [^abc] 匹配除了 a、b、c 以外的字符
- 字符类组合: [a-zA-Z0-9] 匹配所有字母和数字
- 字符类转义: \d 匹配数字, \D 匹配非数字
- 字符类预定义: \w 匹配字母、数字、下划线, \W 匹配非字母、数字、下划线
- 字符类转义: \s 匹配空白字符(包括空格、制表符、换行符), \S 匹配非空白字符
- 字符类边界: \b 匹配单词边界
- 字符类回溯: \B 匹配非单词边界
- 字符类数量词: {n} 匹配 n 次, {n,} 匹配 n 或更多次, {n,m} 匹配 n 到 m 次
- 字符类贪婪与懒惰: * 匹配 0 或多个字符, + 匹配 1 或多个字符,? 匹配 0 或 1 个字符
- 字符类锚点(边界符): ^ 匹配字符串开始(匹配以正则开头的字符), $ 匹配字符串结束(匹配以正则结尾的字符)
- 字符类子表达式: ( ) 匹配子表达式的内容
- 字符类反向引用: \1 引用第 1 个子表达式的内容
- 字符类. : 匹配除换行符以外的任意字符
/^哈+$/.test("哈哈哈哈哈哈"); // true
/^哈+$/.test("哈哈"); // true
/^哈+$/.test("二哈"); // false
修饰符
-
定义: 修饰符(modifier)是指在正则表达式中用于控制匹配方式的符号。
-
常用修饰符
// 全局匹配
/pattern/g;// 忽略大小写
/pattern/i;
替换
let str = "this is a test string, pattern, Pattern, flags";let newStr = str.replace(/pattern/gi, "replacement"); // "this is a test string, replacement, replacement, flags"
相关文章:
JavaScriptWeb API (DOM和BOM操作)
Web API (基础部分) 作用: 使用 JS 去操作 html 和浏览器 分类: DOM 和 BOM DOM: 操作 HTML 文档的 APIBOM: 操作浏览器的 API DOM(文档对象模型) 是用来呈现以及与任意 HTML 或 XML 文档进行交互的 API 作用: 开发网页内容特效和实现用户交互 动态创建 HTML 元素改变 HTML…...
AM-Thinking-v1论文解读:以32B规模推进推理前沿
《AM-Thinking-v1: Advancing the Frontier of Reasoning at 32B Scale》论文解读 一、引言 过去半年,大型语言模型(LLMs)在推理领域(如数学问题求解和代码生成)取得了显著进展,扩大了其在现实场景中的应…...
Spark--RDD中的转换算子
1、算子的简单介绍 Transformation(转换)算子:根据数据集创建一个新的数据集,计算后返回一个新RDD,例如一个rdd进行map操作后生了一个新的rdd。 Action(动作)算子:对rdd结果计算后返回一个数值value给驱动程序(driver),例如collect算子将数据集的所有元素收集完成返回给驱动程…...
【文件上传漏洞】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文件上传漏洞 定义客户端js检测 服务器检测后缀黑名单白名单 检测内容其他 定义 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服…...
electron进程通信
electron进程通信 模式 1:渲染器进程到主进程(单向) send和on 1.渲染器进程调用方法 click setTitle2.预加载进程暴露setTile方法 setTitle: (title) > ipcRenderer.send(set-title, title),3.主进程监听到方法 ipcMain.on(set-title…...
[C++面试] lambda面试点
一、入门 1、什么是 C lambda 表达式?它的基本语法是什么? Lambda 是 C11 引入的匿名函数对象,用于创建轻量级的可调用对象。 [捕获列表] (参数列表) mutable(可选) 异常声明(可选) -> 返回…...
【愚公系列】《Manus极简入门》040-科技与组织升级顾问:“项目掌舵人”
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! …...
2505C++,py和go调用雅兰亭库的协程工具
原文 神算调用C 一般调用pybind11封装的C库实现神算调用C库,pybind11封装c的接口很简单. 创建一个py_example.cpp文件 #include <pybind11/pybind11.h> #include <string> namespace py pybind11; PYBIND11_MODULE(py_example, m) {m.def("hello", …...
题解:P12207 [蓝桥杯 2023 国 Python B] 划分
链接 题目描述 给定 40 个数,请将其任意划分成两组,每组至少一个元素。每组的权值为组内所有元素的和。划分的权值为两组权值的乘积。请问对于以下 40 个数,划分的权值最大为多少。 5160 9191 6410 4657 7492 1531 8854 1253 4520 9231126…...
英迈国际Ingram Micro EDI需求分析
Ingram Micro(英迈国际)成立于1979年,是全球领先的技术和供应链服务提供商,总部位于美国加州尔湾。公司致力于连接全球的技术制造商与渠道合作伙伴,业务涵盖IT分销、云服务、物流和供应链优化等多个领域。Ingram Micro…...
【Linux】网络基础与socket编程基础
一.网络发展 计算机的出现是在网络之前的。而网络产生之初就是为了解决局部计算机无法交互的问题。所以,网络在诞生之初,最先出现的就是我们的局域网LAN,用来结局局部多台计算机的通信问题。 而随着时间的推移,局域网已经不能满…...
漂亮的收款打赏要饭网HTML页面源码
这是一款专为个人收款及接受打赏设计的HTML页面,其设计简洁且美观。 下载地址:漂亮的收款打赏要饭网HTML页面源码 备用地址:漂亮的收款打赏要饭网HTML页面源码...
【图书推荐】几本人工智能实用性图书
《OpenCV计算机视觉开发实践:基于Python》 《OpenCV计算机视觉开发实践:基于Python》【摘要 书评 试读】- 京东图书 《PyTorch深度学习与计算机视觉实践》 《PyTorch深度学习与计算机视觉实践(人工智能技术丛书)》(王晓华)【摘要 书评 试读…...
uniapp+vite+cli模板引入tailwindcss
目前vitecli方式用的都是官方提供的模板,vite版本还是4.14版本,较旧,而tailwindcss已经有了4版本,实际发现引入最新版会报错,因而继续使用3.3.5版本 pnpm install tailwindcss3.3.5 uni-helper/vite-plugin-uni-tail…...
【使用 C# 获取 USB 设备信息及进行通信】
文章目录 使用 C\# 获取 USB 设备信息及进行通信为什么需要获取 USB 设备信息?方法一:使用 C\# 库 (推荐)1. HidSharp2. LibUsbDotNet 方法二:直接调用 Windows API (P/Invoke)理解设备通信协议 (用于数据交换)总结 使用 C# 获取 USB 设备信息…...
Spring Cloud探索之旅:从零搭建微服务雏形 (Eureka, LoadBalancer 与 OpenFeign实战)
引言 大家好!近期,我踏上了一段深入学习Spring Cloud构建微服务应用的旅程。我从项目初始化开始,逐步搭建了一个具备服务注册与发现、客户端负载均衡以及声明式服务调用功能的基础微服务系统。本文旨在记录这一阶段的核心学习内容与实践成果…...
四维时空数据安全传输新框架:压缩感知与几何驱动跳频
四维时空数据安全传输新框架:压缩感知与几何驱动跳频 1. 引言 1.1 研究背景 随着三维感知技术(如激光雷达、超宽带定位)与动态数据流(如无人机集群、工业物联网)的快速发展,四维时空数据(三维…...
CSS相关知识补充
:root伪类 css自定义变量和var()引用自定义变量 https://developer.mozilla.org/zh-CN/docs/Web/CSS/var 在 SCSS 中,变量的声明和使用是用 $ 符号,比如: $primary-color: #ff5722;.button {color: $primary-color; }SCSS 里没有 var() 这…...
DeepSeek 赋能物联网:从连接到智能的跨越之路
目录 一、引言:物联网新时代的开启二、DeepSeek 技术揭秘2.1 DeepSeek 是什么2.2 DeepSeek 技术优势 三、DeepSeek 与物联网的融合之基3.1 物联网发展现状与挑战3.2 DeepSeek 带来的变革性突破 四、DeepSeek 在物联网的多元应用场景4.1 智慧电力:开启能源…...
谷歌量子计算机:开启计算新纪元
量子计算的黎明 原始尺寸更换图片 在科技迅猛发展的时代,量子计算作为前沿领域,正逐渐崭露头角,吸引着全球无数科研人员与科技巨头的目光。它宛如一把开启未来科技大门的钥匙,为解决诸多复杂难题提供了前所未有的可…...
桃芯ingchips——windows HID键盘例程无法同时连接两个,但是安卓手机可以的问题
目录 环境 现象 原理及解决办法 环境 PC:windows11 安卓:Android14 例程使用的是HID Keyboard,板子使用的是91870CQ的开发板,DB870CC1A 现象 连接安卓手机时并不会出现该现象,两个开发板都可以当做键盘给手机发按…...
AMC8 -- 2009年真题解析(中文解析)
Problem 1 Answer: E 中文解析: Bridget最后有4个,给了Cassie3个, 则给Cassie之前有7个。在此之前给了一半的苹果给Ann, 那么在给Anna之前,他有7*214个苹果。 因此答案是E。 Problem 2 Answer: D 中文解析࿱…...
深入解析CountDownLatch的设计原理与实现机制
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、概述 CountDownLatch是Java并发包(java.util.concurrent)中用于协调多线程同步的核心工具类,其设计目标是允许一个或…...
缓存的相关内容
缓存是一种介于数据永久存储介质与数据应用之间数据临时的存储介质 实用化保存可以有效地减少低俗数据读取的次数 (例如磁盘IO), 提高系统性能 缓存不仅可以用于提高永久性存储介质的数据读取效率,还可以提供临时的数据存储空间 spring boot中提供了缓存技术, 方便…...
JVM方法区核心技术解析:从方法区到执行引擎
方法区 方法区的内部结构 在经典方法区设计中,主要存储以下核心数据内容: 一、类型信息 方法区维护的类型信息包含以下要素: 类全称标识 类名称(含完整包路径)直接父类的完全限定名(包含完整包路径&am…...
AIbase推出全球MCP Server集合平台 收录超12万个MCP服务器客户端
2025年,AI领域迎来了一项重要的技术进展——MCP(Model Context Protocol,模型上下文协议)的广泛应用。全球MCP Server集合平台AIbase(https://mcp.aibase.cn/)应运而生,为AI开发者提供了一站式的MCP服务器和客户端整合…...
Python训练打卡Day22
复习日: 1.标准化数据(聚类前通常需要标准化) scaler StandardScaler() X_scaled scaler.fit_transform(X) StandardScaler() :这部分代码调用了 StandardScaler 类的构造函数。在Python中,当你在类名后面加上括号…...
【ALINX 实战笔记】FPGA 大神 Adam Taylor 使用 ChipScope 调试 AMD Versal 设计
本篇文章来自 FPGA 大神、Ardiuvo & Hackster.IO 知名博主 Adam Taylor。在这里感谢 Adam Taylor 对 ALINX 产品的关注与使用。为了让文章更易阅读,我们在原文的基础上作了一些灵活的调整。原文链接已贴在文章底部,欢迎大家在评论区友好互动。 在上篇…...
【数据结构入门训练DAY-35】棋盘问题
本次训练聚焦于使用深度优先搜索(DFS)算法解决棋盘上的棋子摆放问题。题目要求在一个可能不规则的nn棋盘上摆放k个棋子,且任意两个棋子不能位于同一行或同一列。输入包括棋盘大小n和棋子数k,以及棋盘的形状(用#表示可放…...
张 提示词优化(相似计算模式)深度学习中的损失函数优化技巧
失函数的解释 损失函数代码解析 loss = -F.log_softmax(logits[...
Elasticsearch 常用语法手册
🧰 Elasticsearch 常用语法手册 📚 目录 索引操作文档操作查询操作聚合查询健康与状态查看常见问题与注意事项 🔹 索引操作 查询全部索引 GET _search创建索引 PUT /es_db创建索引并设置分片数和副本数 PUT /es_db {"settings&quo…...
华宇TAS应用中间件与亿信华辰多款软件产品完成兼容互认证
近日,华宇TAS应用中间件与亿信华辰多款产品成功通过兼容互认证测试,双方产品在功能协同、性能优化及高可用性等维度实现全面适配,将为用户提供更加稳定、高效、安全的国产化解决方案。 此次认证也标志着华宇在国产化生态适配领域再添重要里程…...
AI大模型从0到1记录学习numpy pandas day24
第 1 章 环境搭建 1.1 Anaconda 1.1.1 什么是Anaconda Anaconda官网地址:https://www.anaconda.com/ 简单来说,Anaconda Python 包和环境管理器(Conda) 常用库 集成工具。它适合那些需要快速搭建数据科学或机器学习开发环境的用…...
开源GPU架构RISC-V VCIX的深度学习潜力测试:从RTL仿真到MNIST实战
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 一、开篇:AI芯片架构演变的三重挑战 (引述TPUv4采用RISC-V的行业案…...
VirtualiSurg使用SenseGlove触觉手套开发XR手术培训体验
虚拟现实和虚拟现实触觉 作为一个领先的培训平台,VirtualiSurg自2017年以来一直利用扩展现实(XR)和触觉技术,为全球医疗保健行业提供个性化的数据驱动学习解决方案。它们使医疗专业人员能够协作学习和培训,提高他们的技能,让他们…...
AbstractErrorController简介-笔记
1. AbstractErrorController简介 org.springframework.boot.autoconfigure.web.servlet.error.AbstractErrorController 是 Spring Boot 提供的一个用于处理 HTTP 错误(如 404、500 等)的抽象类,用于自定义错误响应的逻辑。它是 Spring Boot…...
next.js实现项目搭建
一、创建 Next.js 项目的步骤 1、安装 npx create-next-applatest # 或 yarn create next-app # 或 pnpm create next-app 按照交互式提示配置你的项目: 输入项目名称 选择是否使用 TypeScript 选择是否启用 ESLint 选择是否启用 Tailwind CSS 选择是否使用 s…...
使用GoLang版MySQLDiff对比表结构
概述 下载地址: https://github.com/camry/mysqldiff/ 编译安装 git clone https://github.com/camry/mysqldiff.git go env -w GOPROXYhttps://goproxy.cn,direct go env -w GOPRIVATE*.corp.example.com go build .\mysqldiff.go执行对比 ./mysqldiff --sourc…...
git工具使用详细教程-------命令行和图形化工具
下载 git下载地址:https://git-scm.com/downloads TortoiseGit(图形化工具)下载地址:https://tortoisegit.org/download/ 认识git结构 工作区:存放代码的地方 暂存区:临时存储,将工作区的代码…...
失控的产品
大部分程序员很难有机会做一个新的产品,绝大多时候去一家新公司也都是在旧产品上修修补补。 笔者还是很幸运得到了开发新品的机会,从2023年开始做,中间经历了许多磕磕碰碰。 有的小伙伴从中离开,偶尔又加入1~2个人,但…...
区块链blog1__合作与信任
🍂我们的世界 🌿不是孤立的,而是网络化的 如果是单独孤立的系统,无需共识,而我们的社会是网络结构,即结点间不是孤立的 🌿网络化的原因 而目前并未发现这样的理想孤立系统,即现实中…...
ES常识9:如何实现同义词映射(搜索)
在 Elasticsearch(ES)中实现同义词映射(如“美丽”和“漂亮”),核心是通过 同义词过滤器(Synonym Token Filter) 在分词阶段将同义词扩展或替换为统一词项,从而让搜索时输入任意一个…...
aws 实践创建policy + Role
今天Cyber 通过image 来创建EC2 的时候,要添加policy, 虽然是administrator 的role, 参考Cyber 提供的link: Imageshttps://docs.cyberark.com/pam-self-hosted/14.2/en/content/pas%20cloud/images.htm#Bring 1 Step1:...
兰亭妙微B端UI设计:融合多元风格,点亮品牌魅力
在B端产品市场,独特的品牌形象是企业脱颖而出的关键。兰亭妙微专注于B端UI设计,通过融合多元风格,为企业点亮品牌魅力,助力品牌价值提升。 兰亭妙微主创团队源自清华,历经多年沉淀,积累了丰富的设计经验。…...
高项-逻辑数据模型
逻辑数据模型的核心理解 1. 定义与特点 逻辑数据模型(Logical Data Model, LDM): 是一种抽象的数据结构设计,用于描述业务实体(如客户、订单)及其关系(如“客户下单”),…...
Aquatone安装与使用
前言:aquatone工具获取网页截图,在资产收集的时候,对于网站可以起到快速浏览 michenriksen/aquatone: A Tool for Domain Flyovershttps://github.com/michenriksen/aquatone 任务一 安装chromium sudo apt install chromiumchromium -h 任务二 下载aquatone Relea…...
解读RTOS 第八篇 · 内核源码解读:以 FreeRTOS 为例
1. 引言 FreeRTOS 作为最流行的嵌入式实时操作系统之一,其内核源码简洁且功能完善。通过剖析其关键模块(任务管理、调度器、队列、内存管理和移植层),不仅能够更深入地理解 RTOS 的运行机制,还能掌握根据项目需求进行内核定制与优化的能力。本章将带你以 FreeRTOS 10.x 版…...
6、登录功能后端开发
6、登录功能后端开发 https://xiaoxueblog.com/ai/%E7%99%BB%E5%BD%95%E5%8A%9F%E8%83%BD%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91.html 1、新建用户表SQL脚本 -- CREATE DATABASE aicloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;-- 创建用户表 drop table if exi…...
「彻底卸载 Quay 容器仓库」:干净移除服务、镜像与配置的全流程指南
文章目录 🧹 第一步:停止并禁用 systemd 服务🚮 第二步:移除 Podman 容器与相关资源1. 删除 quay-app 容器2. 删除镜像(如果你想彻底清理)3. 删除挂载卷(比如 SQLite 存储) …...
C++从入门到实战(十五)String(上)介绍STL与String的关系,为什么有string类,String有什么用
C从入门到实战(十五)String(上) 前言一、STL与String的关系1. STL 是什么?2. String 是什么?3. String 与 STL 的关系 二、为什么有string类,有什么用1. 为什么需要 string 类?2. st…...