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

JavaScript 中常见的鼠标事件及应用

JavaScript 中常见的鼠标事件及应用

在 JavaScript 中,鼠标事件是用户与网页进行交互的重要方式,通过监听这些事件,开发者可以实现各种交互效果,如点击、悬停、拖动等。
在 JavaScript 中,鼠标事件类型多样,下面为你详细介绍常见的鼠标事件类型及应用:

一. 基础交互事件

1. click

触发时机:

当用户在元素上按下并释放鼠标主按钮(通常是左键)时触发。

应用场景:

常用于处理按钮点击、链接跳转、表单提交等操作。

示例代码:
<!DOCTYPE html>
<html lang="en">
<body><button id="myButton">点击我</button><script>const button = document.getElementById('myButton');button.addEventListener('click', function () {alert('按钮被点击了!');});</script>
</body>
</html>

2. dblclick

触发时机:

当用户在短时间内快速连续点击两次鼠标主按钮时触发。

应用场景:

可用于实现双击放大图片、编辑文本等功能。

示例代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head><style>#myDiv {width: 200px;height: 200px;background-color: lightblue; /* 初始背景颜色 */display: flex; /* 使用flex布局 */justify-content: center; /* 水平居中 */align-items: center; /* 垂直居中 */font-size: 30px;font-weight: bold;}</style>
</head>
<body><h1>双击鼠标事件,改变颜色</h1><div id="myDiv">双击我,<br>改变颜色</div><script>const div = document.getElementById('myDiv');// 颜色数组const color = ['lightblue', 'pink', 'lightgreen', 'lightyellow', 'lightgray']; // 初始化计数器为-1,以便第一次双击时颜色数组从索引0开始变化let dblcount = -1; // 添加双击事件监听器div.addEventListener('dblclick', function () {dblcount++;// 循环改变背景颜色this.style.backgroundColor = color[dblcount % color.length]; });</script>
</body>
</html>

二、按钮状态事件

3. mousedown

触发时机:

当用户在元素上按下任意鼠标按钮时触发。

应用场景:

常用于实现拖动元素、绘制图形等操作的起始点。

示例代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Untitled-1</title>
</head>
<body><h1>鼠标事件-按下</h1><div id="draggable" style="width:100px;height:100px;background-color:red;">拖动我</div><script>const draggable = document.getElementById('draggable');draggable.addEventListener('mousedown', function () {console.log('鼠标按下');draggable.style.backgroundColor = 'blue';});</script>
</body>
</html>

4. mouseup

触发时机:
  • 当用户在元素上释放之前按下的鼠标按钮时触发。
应用场景:
  • 通常与 mousedown 事件配合使用,用于完成拖动、绘制等操作。
示例代码:
<!DOCTYPE html>
<html lang="en">
<body><div id="drawArea" style="width: 200px; height: 200px; border: 1px solid black;"></div><script>const drawArea = document.getElementById('drawArea');drawArea.addEventListener('mousedown', function () {console.log('鼠标按下');drawArea.style.backgroundColor = 'blue';});drawArea.addEventListener('mouseup', function () {console.log('鼠标释放');drawArea.style.backgroundColor = 'red';});</script>
</body>
</html>

此代码的主要功能是通过监听鼠标在指定div上的按下和释放事件,实现div背景颜色的变化。具体来说:

  • 当用户点击div时,div的背景颜色会变为蓝色,同时在控制台输出“鼠标按下”。
  • 当用户松开鼠标时,div的背景颜色会变为红色,同时在控制台输出“鼠标释放”。

这段代码主要用于演示如何使用JavaScript的事件监听机制来响应用户的鼠标操作,并实时更新网页元素的样式。

三、鼠标移动事件

5. mousemove

触发时机:
  • 当鼠标指针在元素上移动时,会持续触发该事件。
应用场景:
  • 常用于实现鼠标跟随效果、绘制轨迹、实时更新鼠标位置信息等。
示例代码:
<!DOCTYPE html>
<html lang="en">
<body><div id="moveArea" style="width: 200px; height: 200px; border: 1px solid black;"></div><p>请在黑色区域内移动鼠标,并查看下面的鼠标位置。</p><p>鼠标位置: (0, 0)</p><script>const moveArea = document.getElementById('moveArea');moveArea.addEventListener('mousemove', function (event) {console.log(`鼠标位置: (${event.offsetX}, ${event.offsetY})`);// 使用querySelector选择页面中最后一个<p>标签,并将其文本内容更新为当前鼠标的位置。document.querySelector('p:last-of-type').textContent = `鼠标位置: (${event.offsetX}, ${event.offsetY})`;});</script>
</body>
</html>

这段代码的主要功能是在网页上创建一个200x200像素的黑色边框区域,并实时显示用户在这个区域内的鼠标位置。每当鼠标在该区域内移动时,位置信息会被更新到页面上的最后一个段落标签中,并且在控制台中输出。

6. mouseovermouseout

触发时机:
  • mouseover当鼠标指针从元素外部移动到元素内部时触发,并且当鼠标进入该元素的子元素时也会触发。mouseout当鼠标指针从元素内部移动到元素外部时触发,并且当鼠标离开该元素的子元素时也会触发。
应用场景:
  • mouseover常用于实现鼠标悬停效果,如显示下拉菜单、改变元素样式等。mouseout通常与 mouseover 事件配合,用于恢复元素的原始样式。
示例代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>鼠标悬停切换类</title><style>/* 设置div的基本样式 */div {position: relative;display: inline-block;place-content: center;text-align: center;font-size: 20px;color: white;cursor: pointer;}/* 定义原始样式 */.original {width: 180px;height: 180px;background-color: lightgray;}/* 定义悬停时的样式 */.hovered {width: 180px;height: 180px;background-color: pink;border: 2px solid black;}</style>
</head>
<body><!-- 创建一个div元素,初始应用original样式 --><div id="element" class="original">悬停切换样式</div><script>// 获取id为element的div元素const element = document.getElementById('element');// 添加鼠标悬停事件监听器,切换到hovered样式element.addEventListener('mouseover', function () {this.classList.remove('original');this.classList.add('hovered');});// 添加鼠标移出事件监听器,切换回original样式element.addEventListener('mouseout', function () {this.classList.remove('hovered');this.classList.add('original');});</script>
</body>
</html>

这段代码的主要功能是在网页上实现一个简单的鼠标悬停效果。当用户将鼠标悬停在特定的div元素上时,该元素的背景颜色会从浅灰色变为粉色,并且增加一个黑色边框。当鼠标移开时,div元素的样式会恢复到原来的浅灰色背景无边框状态。这是一种常见的交互设计,用于提高用户体验,通过视觉反馈来告知用户他们与页面元素的交互状态。

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>悬停下拉菜单示例</title><style>.menu {list-style-type: none;margin: 0;padding: 0;}.menu-item {position: relative;display: inline-block;}.menu-item a {display: block;padding: 10px;color: #fff;background-color: #007BFF;text-decoration: none;}.submenu {display: none;position: absolute;top: 100%;left: 0;background-color: #007BFF;list-style-type: none;margin: 0;padding: 0;box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);}.submenu li {width: 200px;}.submenu li a {padding: 12px 16px;text-decoration: none;display: block;color: white;}.submenu li a:hover {background-color: #555;}</style>
</head>
<body><ul class="menu"><li class="menu-item"><a href="#">菜单项1</a><ul class="submenu"><li><a href="#">子菜单项1-1</a></li><li><a href="#">子菜单项1-2</a></li><li><a href="#">子菜单项1-3</a></li></ul></li><li class="menu-item"><a href="#">菜单项2</a><ul class="submenu"><li><a href="#">子菜单项2-1</a></li><li><a href="#">子菜单项2-2</a></li><li><a href="#">子菜单项2-3</a></li></ul></li></ul><script>document.addEventListener('DOMContentLoaded', function () {const menuItems = document.querySelectorAll('.menu-item');menuItems.forEach(function (item) {item.addEventListener('mouseover', function () {const submenu = this.querySelector('.submenu');if (submenu) {submenu.style.display = 'block';}});item.addEventListener('mouseout', function () {const submenu = this.querySelector('.submenu');if (submenu) {submenu.style.display = 'none';}});});});</script>
</body>
</html>

下面是对 javascript 代码的逐步分解:

  1. document.addEventListener('DOMContentLoaded', function () { ... });

    • 这行代码的作用是监听整个文档是否已经完全加载完毕。只有在文档加载完成后,脚本中的内容才会被执行,确保在操作DOM元素时这些元素已经存在。
  2. const menuItems = document.querySelectorAll('.menu-item');

    • 使用querySelectorAll方法选择所有带有menu-item类名的元素,并将它们存储在一个NodeList对象menuItems中。在这个例子中,menuItems包含了两个菜单项,即“菜单项1”和“菜单项2”。
  3. menuItems.forEach(function (item) { ... });

    • 对于NodeList中的每一个元素(即每个菜单项),执行一次回调函数。回调函数中的参数item代表当前正在处理的菜单项。
  4. item.addEventListener('mouseover', function () { ... });

    • 为每个菜单项添加一个mouseover事件监听器。当鼠标进入菜单项时,会触发回调函数中的代码。
  5. const submenu = this.querySelector('.submenu');

    • mouseover事件的回调函数中,this指向触发事件的菜单项。通过querySelector方法,我们在这个菜单项内部查找第一个带有submenu类名的元素,即子菜单。
  6. if (submenu) { submenu.style.display = 'block'; }

    • 如果找到了子菜单(即submenu不为null),则将它的display属性设置为’block’,使子菜单显示出来。
  7. item.addEventListener('mouseout', function () { ... });

    • 为每个菜单项添加一个mouseout事件监听器。当鼠标离开菜单项时,会触发回调函数中的代码。
  8. if (submenu) { submenu.style.display = 'none'; }

    • 同样地,在mouseout事件的回调函数中,如果找到了子菜单,则将其display属性设置为’none’,使子菜单隐藏起来。

7. mouseentermouseleave

触发时机:
  • mouseenter当鼠标指针从元素外部移动到元素内部时触发,但当鼠标进入该元素的子元素时不会再次触发。mouseleave当鼠标指针从元素内部移动到元素外部时触发,但当鼠标离开该元素的子元素时不会触发。
应用场景:
  • mouseenter与 mouseover 类似,但不会受子元素影响,适合需要精确控制悬停范围的场景。
  • mouseleave与 mouseout 类似,但不会受子元素影响,常与 mouseenter 配合使用。
示例代码:
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>mouseenter 事件示例</title><style>.tooltip {display: none;position: absolute;background-color: #007BFF;color: white;padding: 5px 10px;border-radius: 5px;font-size: 12px;}.button-container {position: relative;display: inline-block;}</style>
</head>
<body><div class="button-container"><button id="myButton">悬停我</button><div class="tooltip" id="myTooltip">这是一个提示信息</div></div><script>document.addEventListener('DOMContentLoaded', function () {const button = document.getElementById('myButton');const tooltip = document.getElementById('myTooltip');button.addEventListener('mouseenter', function () {// 显示提示框tooltip.style.display = 'block';// 获取按钮的位置,并设置提示框的位置const buttonRect = button.getBoundingClientRect();tooltip.style.top = `${buttonRect.bottom + window.scrollY}px`;tooltip.style.left = `${buttonRect.left + window.scrollX}px`;});button.addEventListener('mouseleave', function () {// 隐藏提示框tooltip.style.display = 'none';});});</script>
</body>
</html>

mouseenter 事件与 mouseover 事件的主要区别在于,mouseenter 不会冒泡到其子元素上,而 mouseover 会。这意味着当鼠标进入一个元素时,mouseenter 只会触发一次,而 mouseover 可能在鼠标进入子元素时再次触发。

mouseenter 事件最适合用于需要精确控制事件只在特定元素上触发的场景,而不需要考虑子元素的情况。例如,当你想要在鼠标进入某个按钮时显示一个提示,但不希望在子元素上重复显示这个提示时,可以使用 mouseenter

在上面的示例中,我们创建了一个按钮和一个提示框。当鼠标进入按钮区域时,使用 mouseenter事件来显示提示框,并根据按钮的位置动态设置提示框的位置,确保提示框显示在按钮下方。当鼠标离开按钮区域时,使用 mouseleave 事件来隐藏提示框。

这里使用 mouseenter 和 mouseleave 事件而不是 mouseover 和 mouseout 事件,是为了避免当鼠标移动到按钮的子元素(如果有)时,提示框被重复显示或隐藏。在这个简单的例子中,按钮没有子元素,但如果有更复杂的结构,mouseenter 和 mouseleave 的非冒泡特性会更显优势。

四、鼠标滚轮事件

8. wheel

触发时机:
  • 当用户滚动鼠标滚轮时触发。
应用场景:
  • 常用于实现页面滚动、缩放元素、切换幻灯片等功能。
示例代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>滚轮事件示例</title><style>body {height: 2000px; /* 为了能看到滚动效果 */}</style>
</head>
<body>
<script>// 获取body元素var body = document.body;// 添加滚轮事件监听器body.addEventListener('wheel', function(event) {// 阻止默认行为event.preventDefault();// 判断滚轮滚动的方向if (event.deltaY > 0) {console.log(event.deltaY);console.log('向下滚动');} else {console.log('向上滚动');}});
</script>
</body>
</html>

这段代码的主要功能是在网页的<body>元素上添加一个滚轮事件监听器,用于检测用户鼠标滚轮的滚动方向,并在控制台中输出滚动方向的信息。需要注意的是,这段代码还阻止了页面的默认滚动行为,因此即使用户尝试滚动鼠标滚轮,页面也不会发生自动的上下滚动。

五、鼠标右键事件

9. contextmenu

触发时机:
  • 当用户在元素上点击鼠标右键时触发。
应用场景:
  • 可用于自定义上下文菜单,替代浏览器默认的右键菜单。
示例代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>右击事件示例</title><style>body {height: 2000px;/* 为了能看到滚动效果 */position: relative;}#customMenu {display: none;position: absolute;background-color: #f9f9f9;border: 1px solid #d3d3d3;box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3);padding: 5px 0;width: 150px;z-index: 1000;}#customMenu div {padding: 8px 15px;cursor: pointer;}#customMenu div:hover {background-color: #ddd;}</style>
</head>
<body><div id="customMenu"><div onclick="showAlert('选项1')">选项1</div><div onclick="showAlert('选项2')">选项2</div><div onclick="showAlert('选项3')">选项3</div></div><script>// 获取body元素,以便在页面上添加事件监听器var body = document.body;// 获取自定义菜单元素,该元素在用户右击时显示var customMenu = document.getElementById('customMenu');// 添加右击事件监听器body.addEventListener('contextmenu', function (event) {// 阻止默认行为(显示浏览器的上下文菜单)event.preventDefault();// 设置自定义菜单的位置为鼠标点击的位置customMenu.style.left = event.pageX + 'px';customMenu.style.top = event.pageY + 'px';// 显示自定义菜单customMenu.style.display = 'block';});// 添加点击页面其他地方隐藏菜单的事件监听器document.addEventListener('click', function (event) {if (event.target !== customMenu) {customMenu.style.display = 'none';}});// 显示弹窗的函数,用于测试菜单选项function showAlert(option) {alert('你点击了:' + option);}</script>
</body>
</html>

六、事件对象

在上述示例中,事件处理函数通常会接收一个事件对象作为参数(如 event)。通过这个事件对象,可以获取与鼠标事件相关的信息,如鼠标的坐标、按下的按钮等。常见的属性包括:

  • clientXclientY:鼠标相对于浏览器窗口可视区域的坐标。

  • offsetXoffsetY:鼠标相对于触发事件的元素的坐标。

  • button:表示按下的鼠标按钮,0 代表左键,1 代表中键,2 代表右键。

这些鼠标事件为开发者提供了丰富的交互手段,可以根据具体需求灵活运用,打造出更加生动和交互性强的网页。

相关文章:

JavaScript 中常见的鼠标事件及应用

JavaScript 中常见的鼠标事件及应用 在 JavaScript 中&#xff0c;鼠标事件是用户与网页进行交互的重要方式&#xff0c;通过监听这些事件&#xff0c;开发者可以实现各种交互效果&#xff0c;如点击、悬停、拖动等。 在 JavaScript 中&#xff0c;鼠标事件类型多样&#xff0…...

使用Expo框架开发APP——详细教程

在移动应用开发日益普及的今天&#xff0c;跨平台开发工具越来越受到开发者青睐。Expo 是基于 React Native 的一整套工具和服务&#xff0c;它能够大幅降低原生开发的门槛&#xff0c;让开发者只需关注业务逻辑和界面实现&#xff0c;而不用纠结于复杂的原生配置。本文将从零开…...

深入探究 Hive 中的 MAP 类型:特点、创建与应用

摘要 在大数据处理领域,Hive 作为一个基于 Hadoop 的数据仓库基础设施,提供了方便的数据存储和分析功能。Hive 中的 MAP 类型是一种强大的数据类型,它允许用户以键值对的形式存储和操作数据。本文将深入探讨 Hive 中 MAP 类型的特点,详细介绍如何创建含有 MAP 类型字段的表…...

前端开发工厂模式的优缺点是什么?

一、什么是工厂模式&#xff1f; 工厂模式属于创建型设计模式&#xff0c;核心思想是将对象的实例化过程封装到特定方法或类中&#xff0c;让客户端不需要直接通过new关键字创建对象。 举个例子&#xff1a;就像奶茶店不需要顾客自己调配饮品&#xff0c;而是通过"点单-…...

框架PasteForm实际开发案例,换个口味显示数据,支持echarts,只需要标记几个特性即可在管理端显示(2)

PasteForm框架的主要思想就是对Dto进行标记特性,然后管理端的页面就会以不一样的UI呈现 使用PasteForm框架开发,让你免去开发管理端的烦恼,你只需要专注于业务端和用户端! 在管理端中,如果说表格是基本的显示方式,那么图表chart就是一个锦上添花的体现! 如果一个项目拥…...

QEMU学习之路(5)— 从0到1构建Linux系统镜像

QEMU学习之路&#xff08;5&#xff09;— 从0到1构建Linux系统镜像 一、前言 参考&#xff1a;从内核到可启动镜像&#xff1a;0到1构建你的极简Linux系统 二、linux源码获取 安装编译依赖 sudo apt install -y build-essential libncurses-dev flex bison libssl-dev li…...

AI Agent设计模式一:Chain

概念 &#xff1a;线性任务流设计 ✅ 优点&#xff1a;逻辑清晰易调试&#xff0c;适合线性处理流程❌ 缺点&#xff1a;缺乏动态分支能力 from typing import TypedDictfrom langgraph.graph import StateGraph, END# 定义后续用到的一些变量 class CustomState(TypedDict):p…...

实操(进程状态,R/S/D/T/t/X/Z)Linux

1 R 状态并不直接代表进程在运行&#xff0c;而是该进程在运行队列中进行排队&#xff0c;由操作系统在内存维护的队列 #include <stdio.h> #include <unistd.h>int main() {while(1){printf("我在运行吗\n");sleep(1);}return 0; }查看状态&#xff08…...

T-SQL语言的自动化运维

T-SQL语言的自动化运维 引言 在现代IT环境中&#xff0c;自动化运维成为了提高效率、降低成本、提升稳定性的重要手段。数据库作为系统的重要组成部分&#xff0c;运维工作往往需要耗费大量的人力物力。T-SQL&#xff08;Transact-SQL&#xff09;作为Microsoft SQL Server的…...

Day06 分割编译与中断处理

文章目录 1. 例程harib03c&#xff08;c源文件分割并整理makefile文件&#xff09;2. 例程harib03c&#xff08;用于描述段的信息&#xff09;3. 例程harib03d&#xff08;初始化PIC&#xff09;4. 例程harib03e&#xff08;中断处理程序&#xff09; 1. 例程harib03c&#xff…...

数字化三维实训室:无穿戴动作捕捉技术如何赋能体育与舞蹈

在高校体育与舞蹈教学中&#xff0c;精准的动作训练至关重要。传统训练方式依赖教练的肉眼观察与手动记录&#xff0c;存在效率低下、误差较大的情况。尤其在快速连续动作或复杂肢体形态的捕捉中&#xff0c;人工判读易受主观经验限制&#xff0c;难以实现标准化评估。面对传统…...

6. RabbitMQ 死信队列的详细操作编写

6. RabbitMQ 死信队列的详细操作编写 文章目录 6. RabbitMQ 死信队列的详细操作编写1. 死信的概念2. 消息 TTL 过期(触发死信队列)3. 队列超过队列的最大长度(触发死信队列)4. 消息被拒(触发死信队列)5. 最后&#xff1a; 1. 死信的概念 先从概念上解释上搞清楚这个定义&#…...

AI浪潮下,新手短视频制作的破局之道

AI浪潮下&#xff0c;新手短视频制作的破局之道 引言&#xff1a;短视频新时代&#xff0c;AI 带来的机遇与挑战 在当下这个信息飞速流转的时代&#xff0c;短视频已然成为了人们生活中不可或缺的一部分。无论是在通勤路上、午休间隙&#xff0c;还是茶余饭后&#xff0c;打开…...

合肥SMT贴片制造工艺全解析

内容概要 作为电子制造领域的核心工艺&#xff0c;SMT&#xff08;表面贴装技术&#xff09;在合肥地区电子产业链中占据重要地位。本解析以合肥本地化生产场景为基础&#xff0c;系统梳理从焊膏印刷到成品检测的全流程工艺框架。具体而言&#xff0c;制造流程涵盖四大核心阶段…...

ctfshow VIP题目限免 协议头信息泄露

根据提示是协议头信息泄露&#xff0c;那就我们抓个包&#xff0c;抓包才能看到请求体响应体里的协议头啊&#xff0c;抓包之后在响应包里发现了 flag...

【国产工具链发展,生态链分析,TSMaster VS Zcanpro的技术对比】

黎明篇&#xff1a;国产汽车测试工具链的崛起、差距与未来 副标题&#xff1a; 从跟随到超越&#xff0c;中国技术如何重塑全球研发体系 一、国产工具链的崛起逻辑 政策驱动&#xff1a;信创战略与供应链安全需求 国家“十四五”规划明确提出支持关键领域技术自主化&#xff0…...

Linux线程同步与互斥:【线程互斥】【线程同步】【线程池】

目录 一.线程互斥 1.1相关概念 1.2互斥量 为什么会出现负数&#xff1f;&#xff1f; 互斥量的接口 问题&#xff1a; 1.3互斥量实现原理探究 1.4互斥量封装 二.线程同步 2.1条件变量 2.2同步概念与竞态条件 2.3接口 2.4生产者消费者模型 优点 2.5基于BlockingQueue的…...

网络安全基础知识总结

什么是网络安全 采取必要措施&#xff0c;来防范对网络的攻击&#xff0c;侵入&#xff0c;干扰&#xff0c;破坏和非法使用&#xff0c;以及防范一些意外事故&#xff0c;使得网络处于稳定可靠运行的状态&#xff0c;保障网络数据的完整性、保密性、可用性的能力(CIA)。 举例…...

请求被中止: 未能创建 SSL/TLS 安全通道。

需要安装vs2019社区办&#xff0c;下载VisualStudioSetup.exe后&#xff0c;报无法从"https://aka,ms/vs/16/release/channel"下载通道清单错误&#xff0c;接着打开%temp%目录下的最新日志&#xff0c;发现日志里报&#xff1a; [27d4:000f][2025-04-04T21:15:43] …...

FPGA学习(四)——状态机重写LED流水灯并仿真

FPGA学习&#xff08;四&#xff09;——状态机重写LED流水灯并仿真 目录 FPGA学习&#xff08;四&#xff09;——状态机重写LED流水灯并仿真一、状态机编程思想1、状态机要素2、状态迁移图3、状态机写法 二、LED流水灯仿真实现1、代码实现2、modesim仿真 三、实现效果1、仿真…...

spark 集群

hadoop客户端环境准备 找到资料包路径下的Windows依赖文件夹&#xff0c;拷贝hadoop-3.1.0到非中文路径&#xff08;比如d:\hadoop-3.1.0&#xff09; ① 打开环境变量 ② 在下方系统变量中新建HADOOP_HOME环境变量,值就是保存hadoop的目录。 效果如下&#xff1a; ③ 配置P…...

leetcode117 填充每个节点的下一个右侧节点指针2

LeetCode 116 和 117 都是关于填充二叉树节点的 next 指针的问题&#xff0c;但它们的区别在于 树的类型 不同&#xff0c;117与 116 题类似&#xff0c;但给定的树是 普通二叉树&#xff08;不一定完全填充&#xff09;&#xff0c;即某些节点可能缺少左或右子节点。 树的结构…...

Java全栈面试宝典:线程安全机制与Spring Boot核心原理深度解析

目录 一、Java线程安全核心原理 &#x1f525; 问题1&#xff1a;线程安全的三要素与解决方案 线程安全风险模型 线程安全三要素 synchronized解决方案 &#x1f525; 问题2&#xff1a;synchronized底层实现全解析 对象内存布局 Mark Word结构&#xff08;64位系统&…...

CCF GESP C++编程 三级认证真题 2025年3月

C 三级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 D B A A B A C A C D D D B D C 1 单选题 第 1 题 Base64 编码将每3字节的输入数据编码为 4 字节的输出数据。如果输入数据长度不是 3 的倍数&#xff0c;会用 号填充。在Base64编码中&#xff0c;如果…...

人工智能爬虫导致维基共享资源带宽需求激增 50%

2025 年 4 月 1 日&#xff0c;维基媒体基金会在博文中表示&#xff0c;自 2024 年 1 月以来&#xff0c;维基共享资源下载多媒体的带宽消耗激增 50%&#xff0c;这一变化趋势主要由用于 AI 训练数据集的网络爬虫导致。以下是具体分析1&#xff1a; 爬虫流量特征与数据存储模式…...

方案精读:华为数据治理之旅【全文阅读】

本文介绍了华为的数据管理工作,包括数据治理、数据质量建设、数据管理工作两阶段历程、数据管理组织和数据管理工作思考。华为以业务数字化为前提,以数据入湖为基础,重点建设数据中台,提高数据质量和管理能力,以支撑公司数字化转型。 重点内容: 1. 数据治理:华为进行数…...

Tradingview 策略分享 - SSL 混合和 CE 交易策略

交易策略&#xff5c;https://v.wkbrowser.com/s/e9DIvLGvYRo/&#xff5c;复制浏览器打开 各位交易员大家好 在本文中&#xff0c;我将分享一个简单的日内交易策略。我将 SSL 混合指标与 CE EXIT 相结合&#xff0c;以创建一个高效且有利可图的设置。此策略简单而强大&#x…...

华为OD机试真题——投篮大赛(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025Q1 A卷 100分 题型 本文涵盖详细解题思路、代码注释、讲解、复杂的分析以及测试用例&#xff1b; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式&#xff01; 华为OD机试A卷真题《投篮大赛》&#xff1a; 题目名称&#xff1a;投篮大赛 知识点&am…...

rcore day2

目前常见的操作系统内核都是基于 C 语言的&#xff0c;为何要推荐 Rust 语言&#xff1f; C 语言的指针灵活且易于使用&#xff0c;但不保证安全性&#xff0c;且缺x少有效的并发支持。这导致内存和并发漏洞成为当前基于 C 语言的主流操作系统的噩梦。Rust 语言具有与 C 一样的…...

【MATLAB定位例程】TDOA(到达时间差)的chan-tylor,三维环境,附完整代码

该代码实现了基于三维空间的动态目标TDOA定位,结合了Chan算法(解析解)与Taylor级数展开法(迭代优化)的双重优势。 文章目录 运行结果MATLAB代码代码讲解代码功能概述核心算法原理代码结构解析可视化与结果分析运行结果 定位示意图: 三轴状态曲线: 三轴误差曲线: MA…...

LLM面试题六

NLP方向CRF算法面试题 什么是CRF?CRF的主要思想是什么&#xff1f; 设X与Y是随机变量&#xff0c;P(Y | X)是给定条件X的条件下Y的条件概率分布&#xff0c;若随机变量Y构成一个由无向图G(V,E)表示的马尔科夫随机场。则称条件概率分布P(X | Y)为条件随机场。CRF的主要思想统计…...

FPGA(四)——状态机

FPGA(四)——状态机 文章目录 FPGA(四)——状态机一、状态机编程思想二、LED流水灯仿真实验三、实现效果四、CPLD和FPGA芯片主要技术区别五、hdlbitsFPGA——组合逻辑学习1、创建一个D触发器2、简单状态转换3、4位移位寄存器4、计数器1-125、边缘捕获寄存器 一、状态机编程思想…...

AI 浪潮下企业身份管理:特点凸显,安全挑战升级

“在 AI 时代的浪潮中&#xff0c;企业身份管理是安全之锚&#xff0c;精准把握权限边界&#xff0c;方能抵御身份安全的暗流。” 在人工智能迅猛发展的当下&#xff0c;企业身份管理呈现出诸多新特点&#xff0c;同时也面临着前所未有的身份安全挑战。要理解这些&#xff0c;我…...

OBS 录屏软件 for Mac 视频录制

OBS 录屏软件 for Mac 视频录制 文章目录 OBS 录屏软件 for Mac 视频录制一、介绍二、效果三、下载 一、介绍 Open Broadcaster Software for mac版&#xff0c;OBS 有多种功能并广泛使用在视频采集&#xff0c;直播等领域。而且该软件功能全面&#xff0c;专业强大&#xff0…...

从文本到多模态:如何将RAG扩展为支持图像+文本检索的增强生成系统?

目录 从文本到多模态&#xff1a;如何将RAG扩展为支持图像文本检索的增强生成系统&#xff1f; 一、为什么需要扩展到多模态&#xff1f; 二、多模态 RAG 系统的基本架构 三、关键技术点详解 &#xff08;一&#xff09;多模态嵌入&#xff08;Embedding&#xff09;技术 …...

AI助力高效PPT制作:从内容生成到设计优化

随着人工智能技术的不断发展&#xff0c;AI在各个领域的应用日益普及&#xff0c;尤其是在文档和演示文稿的创建过程中。PowerPoint&#xff08;PPT&#xff09;作为最常用的演示工具之一&#xff0c;借助AI的技术手段&#xff0c;可以极大地提高制作效率并提升最终呈现效果。在…...

调用kimi api

官网支持python&#xff0c;curl和node.js 因为服务器刚好有php环境&#xff0c;所以先用curl调个普通的语音沟通api <?php // 定义 API Key 和请求地址 define(MOONSHOT_API_KEY, sk-PXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXgk1); define(MOONSHOT_API_URL, https://…...

自定义注解导入自定义Bean

在Spring框架中&#xff0c;通过自定义注解实现容器启动时自动导入Bean&#xff0c;通常需要结合 Import 注解、ImportBeanDefinitionRegistrar 接口 或 Configuration 配置类。以下是具体实现步骤和示例&#xff1a; 1. 定义自定义注解 创建一个注解&#xff0c;用于标记需要…...

kettle插件-postgresql插件

今天是清明节&#xff0c;放假第一天也不得清闲。上午整理公司的交付文档&#xff0c;中午陪孩子户外骑行踏青&#xff0c;下午趁着休息的时间给老铁们讲下如何使用postgressql cdc插件来实时捕获数据。 注&#xff1a;CDC (Change Data Capture) 是一种技术&#xff0c;用于实…...

【CMake】《CMake构建实战:项目开发卷》笔记-Chapter7-构建目标和属性

第7章 构建目标和属性 本章重点关注CMake的构建目标和属性&#xff0c;它们是用来组织项目构建流程的核心概念。毫不夸张地说&#xff0c;如果学习CMake的目标就是组织简单的C和C小项目的构建流程&#xff0c;那么阅读掌握本章内容就足够了。 本章与第1章的“旅行笔记”遥相…...

单元测试之mockito

简介 mockito是一款模拟测试框架&#xff0c;用于Java开发中的单元测试。通过mockito&#xff0c;可以创建和配置一个对象&#xff0c;通过它来替换对象的外部依赖。 作用&#xff1a;模拟一个类的外部依赖&#xff0c;保证单元测试的独立性。例如&#xff0c;在类A中会调用类…...

定长池的实现

目录 一、定长池的框架 二、如何脱离malloc的内存池&#xff0c;直接从堆拿空间&#xff1f; 三、如何设计内存块的指针&#xff1f; 四、代码框架及实现 五、性能测试 一、定长池的框架 在学习高并发内存池之前&#xff0c;我们先来实现一个定长池&#xff0…...

C++多线程函数介绍

1.C11前没有线程库问题 对于多线程操作&#xff0c;Linux选择使用POSIX标准&#xff0c;而windows没有选择POSIX标准&#xff0c;自己设计了一套API和系统调用&#xff0c;叫Win32 API&#xff0c;就跟Linux存在标准差异&#xff0c;在Linux的代码移植到Windows就可能运行不了…...

图解AUTOSAR_SWS_LINTransceiverDriver

AUTOSAR LIN收发器驱动(LinTransceiverDriver)详解 AUTOSAR通信栈物理层组件详细解析 目录 AUTOSAR LIN收发器驱动(LinTransceiverDriver)详解 目录1. 概述 1.1. LIN收发器驱动的作用1.2. 在AUTOSAR架构中的位置2. 架构设计 2.1. 模块结构2.2. 组件关系2.3. 接口定义3. 状态管理…...

vue-element-admin 组件没有展示在中间部分

解决办法&#xff1a; router index.ts 中新增 要展示的组件的 import type { App } from "vue"; import { createRouter, createWebHashHistory, type RouteRecordRaw } from "vue-router";export const Layout () > import("/layout/index.…...

当机器学习遇见购物车分析:FP-Growth算法全解析

一、引言&#xff1a;购物篮里的秘密 想象一下&#xff0c;你是一家超市的数据分析师&#xff0c;看着每天成千上万的购物小票&#xff0c;你是否好奇&#xff1a;顾客们买面包的时候&#xff0c;是不是也经常顺手带上牛奶&#xff1f;买啤酒的人&#xff0c;会不会也喜欢买尿…...

OCR迁移

一、环境 操作系统&#xff1a;Centos57.6 数据库版本&#xff1a;12.2.0.1 场景&#xff1a;将OCR信息从DATA磁盘组迁移到OCR磁盘组 二、操作步骤 1.查看可用空盘 set lin 200 set pagesize 200 col DGNAME format a15 col DISKNAME format a15 col PATH format a20 col N…...

【架构艺术】Go大仓monorepo中使用wire做依赖注入的经验

在先前的文章当中&#xff0c;笔者分享了一套简洁的go微服务monorepo代码架构的实现&#xff0c;主要解决中小团队协同开发微服务集群的代码架构组织问题。但是在实际代码开发过程中&#xff0c;怎么组织不同的业务服务service实例&#xff0c;就成了比较棘手的问题。 为什么会…...

生活电子常识--删除谷歌浏览器搜索记录

前言 谷歌浏览器会记录浏览器历史搜索,如果不希望看到越来越多的搜索记录,可以如下设置 解决 设置-隐私-自动填充表单 这个和浏览器记录的密码没有关系,可以放心删除...

每日一题(小白)模拟娱乐篇13

今天题目比较简单&#xff0c;直接分析。小蓝想知道2024这个数字中有几个1&#xff0c;计算机组成学习好的同学肯定可以直接长除法或者瞪眼法得出答案&#xff1a; 202411111101000&#xff08;B&#xff09;也就是说2024中有一共有六个1 接下来用代码实现 &#xff0c;我们也…...