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

赋予网页健壮的灵魂 —— TypeScript(下)

7 DOM 操作与类型定义:赋予网页真正的交互

回到最初的目标:让网页动起来。在 TypeScript 中,我们如何安全地操作 HTML 元素并响应用户的交互呢?TypeScript 提供了内置的类型定义来描述浏览器环境中的各种对象(如 document, window, DOM 元素,事件对象等),这使得我们在操作 DOM 时也能享受到类型检查带来的便利和安全。

7.1 获取 DOM 元素及其类型

当你使用像 document.getElementById()document.querySelector() 这样的方法获取 DOM 元素时,TypeScript 会根据方法签名返回一个特定的类型。

  • document.getElementById() 返回 HTMLElement | null
  • document.querySelector() 返回 Element | null (更通用的类型)。

它们返回的可能是找到的元素类型(如果是特定标签,会有更精确的类型,比如 HTMLDivElement for <div>),或者在找不到元素时返回 null

// seventh.ts// 获取一个 div 元素
const myDiv = document.getElementById("myDiv");// myDiv 的类型是 HTMLElement | null
if (myDiv) {// 在这个 if 块中,myDiv 的类型被缩小为 HTMLElementmyDiv.textContent = "你好,DOM!";// HTMLElement 类型有通用的属性和方法console.log("Div 元素的标签名:", myDiv.tagName);
} else {console.error("找不到 id 为 myDiv 的元素");
}// 获取一个输入框元素
const myInput = document.getElementById("myInput");// myInput 的类型是 HTMLElement | null
if (myInput) {// 如果确定它是 input 元素,并且你需要访问 input 特有的属性 (如 value),// 你需要使用类型断言或者更精确的选择器方法。// 直接访问 value 会报错,因为 HTMLElement 上没有 value 属性// console.log(myInput.value); // 编译时报错// 使用类型断言const inputElement = myInput as HTMLInputElement;console.log("输入框的值 (断言):", inputElement.value);// 或者使用更精确的查询方法(如果存在)或结合类型守卫(后面会讲)// const inputElement2 = document.querySelector<HTMLInputElement>("#myInput"); // 泛型方法// if (inputElement2) {//   console.log("输入框的值 (querySelector 泛型):", inputElement2.value);// }
}

7.2 类型断言用于 DOM 元素

当你明确知道获取到的元素的具体类型时(比如你确定一个通过 ID 获取的元素就是 <canvas>),可以使用类型断言将其断言为更精确的类型,以便访问该元素特有的属性和方法。

// seventh.ts (接着上面的代码)// 假设 HTML 中有一个 <canvas id="myCanvas"></canvas>
const canvas = document.getElementById("myCanvas") as HTMLCanvasElement;// 现在 TypeScript 知道 canvas 是 HTMLCanvasElement 类型,可以安全地访问 getContext 方法
if (canvas) {const ctx = canvas.getContext("2d");if (ctx) {ctx.fillStyle = 'red';ctx.fillRect(10, 10, 50, 50);}
}

7.3 事件处理

处理用户交互依赖于事件。TypeScript 为各种事件提供了类型定义,这使得在事件处理函数中访问事件对象 (evente) 的属性时也能获得类型提示和检查。

// seventh.ts (接着上面的代码)const myButton = document.getElementById("myButton"); // 假设 HTML 中有一个 <button id="myButton">点击我</button>if (myButton) {// 添加点击事件监听器myButton.addEventListener("click", (event: MouseEvent) => {// event 参数是 MouseEvent 类型,具有 clientX, clientY 等属性console.log("按钮被点击了!");console.log("点击位置:", event.clientX, event.clientY);// event 对象是 Event 或其子类型event.preventDefault(); // 阻止默认行为});
}const myTextInput = document.getElementById("myTextInput") as HTMLInputElement; // 假设 HTML 中有一个 <input type="text" id="myTextInput">if (myTextInput) {// 添加键盘按下事件监听器myTextInput.addEventListener("keydown", (event: KeyboardEvent) => {// event 参数是 KeyboardEvent 类型,具有 key, code 等属性console.log("键盘按下:", event.key, event.code);if (event.key === 'Enter') {console.log("按下了 Enter 键,当前输入框的值:", myTextInput.value);}});
}

常见的事件类型:Event, MouseEvent, KeyboardEvent, ChangeEvent, SubmitEvent 等。

7.4 获取第三方库的类型定义 (@types)

很多流行的 JavaScript 库(如 jQuery, React, Lodash 等)最初并不是用 TypeScript 编写的。为了让 TypeScript 用户能够享受到类型检查和智能提示,社区维护了大量的类型声明文件 (.d.ts 文件)。这些文件只包含类型信息,不包含具体的实现代码。

这些类型声明文件通常发布在 @types 组织下,你可以使用 npm 或 yarn 安装它们。

例如,如果你想在 TypeScript 项目中使用 Lodash 库:

  1. 安装 Lodash: npm install lodash
  2. 安装 Lodash 的类型声明文件: npm install @types/lodash --save-dev

现在,你就可以在 TypeScript 代码中导入并使用 Lodash 了,TypeScript 会根据 @types/lodash 中的类型信息为你提供强大的类型检查和代码补全。

// seventh.ts (接着上面的代码)// 我们通过declare const _: any;告诉TypeScript全局lodash变量的存在
declare const _: any;const numbers = [1, 2, 3, 4, 5];
const sumOfNumbers = _.sum(numbers); // TypeScript 知道 _.sum 接受一个 number 数组并返回一个 number
console.log("数字总和 (lodash):", sumOfNumbers);const users = [{ 'user': 'barney', 'age': 36, 'active': true },{ 'user': 'fred',   'age': 40, 'active': false }
];const activeUsers = _.filter(users, { 'active': true }); // TypeScript 知道 filter 的用法和返回类型
console.log("活跃用户 (lodash):", activeUsers);

当你安装一个本身就是用 TypeScript 编写的库时(比如 React 的新版本、Vue 3 等),它们通常已经自带了类型声明文件,你无需额外安装 @types 包。

编译 seventh.ts

tsc seventh.ts

会生成 seventh.js 文件。然后在 HTML 中引入 seventh.js,并确保你的 HTML 中有相应的 div, input, button, canvas 元素。

<!DOCTYPE html>
<html>
<head> <title>TS DOM 操作</title> </head>
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
<body><div id="myDiv">这是一个 div</div><input type="text" id="myInput" value="默认值"><input type="text" id="myTextInput"><button id="myButton">点击触发事件</button><canvas id="myCanvas" width="200" height="100" style="border: 1px solid black;"></canvas><script src="dist/seventh.js"></script> </body>
</html>

小结: TypeScript 提供了丰富的内置类型来描述 DOM 和事件对象,结合类型断言和 @types 声明文件,可以让我们在进行客户端 DOM 操作和使用第三方库时,编写出类型安全、易于维护的代码。

练习:

  1. 创建一个 HTML 文件,包含一个段落 <p id="myParagraph">原始文本</p> 和一个按钮 <button id="changeTextBtn">改变文本</button>
  2. 编写 TypeScript 代码:获取段落和按钮元素,为按钮添加点击事件监听器。在事件处理函数中,获取段落元素,并将其 textContent 修改为“文本已更新!”。确保在 TypeScript 代码中使用了合适的类型。
  3. 创建一个 HTML 文件,包含一个图像元素 <img id="myImage" src="" alt="图片"> 和一个输入框 <input type="text" id="imageUrlInput" placeholder="输入图片 URL">
  4. 编写 TypeScript 代码:获取图像元素和输入框。为输入框添加 change 事件监听器(当输入框的值改变并失去焦点时触发)。在事件处理函数中,获取输入框的值,并将其设置为图像元素的 src 属性。
  5. (进阶)选择一个你感兴趣的流行 JavaScript 库(如 Moment.js),尝试使用 npm 安装它以及对应的 @types 包,然后在 TypeScript 代码中导入并使用该库的功能,体验类型提示。

相关文章:

赋予网页健壮的灵魂 —— TypeScript(下)

7 DOM 操作与类型定义&#xff1a;赋予网页真正的交互 回到最初的目标&#xff1a;让网页动起来。在 TypeScript 中&#xff0c;我们如何安全地操作 HTML 元素并响应用户的交互呢&#xff1f;TypeScript 提供了内置的类型定义来描述浏览器环境中的各种对象&#xff08;如 docu…...

ARM Linux 设备树

Linux 设备驱动开发详解&#xff1a;基于最新的Linux 4.0内核, 机械工业出版社, 宋宝华, 2015 1. 设备树的起源 • 背景: ARM架构中大量板级代码冗余&#xff0c;硬编码在mach-xxx目录&#xff0c;设备树&#xff08;Device Tree&#xff09;引入结构化描述硬件。 • 目的: 减…...

35、C# 中的反射(Reflection)

反射是 C# 和 .NET 框架中的一个重要特性&#xff0c;它允许程序在运行时检查、访问和操作类型、对象、属性和方法等元数据信息。 反射的核心概念 运行时类型检查&#xff1a;反射允许你在程序运行时获取类型的详细信息&#xff0c;而不需要在编译时知道这些信息。动态操作&a…...

驱动中的 mmap() 函数和 file_operations 中的 mmap() 原型的区别

在 Linux 驱动开发中&#xff0c;mmap() 系统调用和 file_operations 结构中的 mmap() 方法虽然功能相关&#xff0c;但原型和用途有显著区别。以下是两者的详细对比&#xff1a; 1. 系统调用 mmap() 的原型 这是用户空间程序调用的系统调用接口&#xff0c;定义在 <sys/mma…...

Go语言八股文之Map详解

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...

矿泉水瓶的绘制

1.制作中心矩形&#xff0c;大小为60&#xff0c;注意设置矩形的两条边相等 2.点击拉伸&#xff0c;高度为150mm 3.使用圆角命令&#xff0c;点击连接到开始面&#xff0c;同时选中4条边&#xff0c;进行圆角转化&#xff0c;圆角大小为10mm&#xff0c;点击多半径圆角&#xf…...

LeetCode 热题 100 54. 螺旋矩阵

LeetCode 热题 100 | 54. 螺旋矩阵 大家好&#xff0c;今天我们来解决一道经典的算法题——螺旋矩阵。这道题在LeetCode上被标记为中等难度&#xff0c;要求我们按照顺时针螺旋顺序返回矩阵中的所有元素。下面我将详细讲解解题思路&#xff0c;并附上Python代码实现。 问题描述…...

方案精读:业财融合转型路径和华为实践【附全文阅读】

在当今快速变化、竞争激烈的时代,业务面临不确定性,业财融合至关重要。以华为为例,其从财务到财经的转型,历经财务四统一变革、IFS 变革等,构建了包含财经能力中心(COE)、业务伙伴(BP)和财经共享中心(SSC)的财务组织架构 。通过实现财务四算拉通、提升预算预测、项目…...

AIDC智算中心建设:计算力核心技术解析

目录 一、智算中心发展概览 二、计算力核心技术解析 一、智算中心发展概览 智算中心是人工智能发展的关键基础设施&#xff0c;基于人工智能计算架构&#xff0c;提供人工智能应用所需算力服务、数据服务和算法服务的算力基础设施&#xff0c;融合高性能计算设备、高速网络以…...

Javase 基础加强 —— 02 泛型

本系列为笔者学习Javase的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程&#xff0c;java零基础入门到大牛一套通关》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习Javase系列课程的同学们提供参考。 01 认识泛型…...

PowerShell 备份 Windows10/11 还原计算机驱动程序SOP

一、现在计算机C目录下创建一个新的文件夹名称为 driverbackup 二、打开cmd 以管理员身份执行 dism /online /export-driver /destination: C:\driverbackup 在正常情况下&#xff0c;Windows 10会自动检测您的设备所需的驱动程序&#xff0c;并将其安装到您的PC上。 但是&am…...

Python 中的 collections 库:高效数据结构的利器

Python 中的 collections 库&#xff1a;高效数据结构的利器 在 Python 编程中&#xff0c;数据结构的高效使用往往能极大地提升代码的性能和可读性。今天&#xff0c;就让我们来深入了解一下 Python 的 collections 库&#xff0c;它是一个非常实用且强大的工具库&#xff0c…...

2025年- H24-Lc132-94. 二叉树的中序遍历(树)---java版。

1.题目描述 2.思路 递归遍历&#xff1a;返回值&#xff0c;中序遍历的节点值列表 List。 &#xff08;1&#xff09;首先是一个中序遍历的结果函数&#xff0c;传入root参数&#xff0c;定义一个节点值列表result&#xff0c;然后递归调用中序遍历的函数 &#xff08;2&#…...

第十六届蓝桥杯单片机组省赛(第一套)

看到很多人在问第十六届蓝桥杯单片机难不难&#xff0c;以及实现多少功能可以获得省一。 先介绍下我的作答情况吧&#xff0c;选择题只对一题&#xff0c;程序题的求连续两次距离差值没有考虑负数的情况&#xff0c;其他功能都实现了&#xff0c;成绩是福建省省一第一页&#x…...

使用python写多文件#inlcude

使用下面的程序可以将当前文件夹下面的.c文件的写入main.h文件&#xff0c;我这里是将自己的基于标准库stm32初始化io文件为例。 import osbase ["#ifndef main_H","#define main_H\n","#endif" ]includes set() for file in os.listdir():if…...

深度学习中保存最优模型的实践与探索:以食物图像分类为例

深度学习中保存最优模型的实践与探索&#xff1a;以食物图像分类为例 在深度学习的模型训练过程中&#xff0c;训练一个性能良好的模型往往需要耗费大量的时间和计算资源。而保存最优模型不仅可以避免重复训练&#xff0c;还能方便后续使用和部署。本文将结合食物图像分类的代…...

OpenCv实战笔记(2)基于opencv和qt对图像进行灰度化 → 降噪 → 边缘检测预处理及显示

一、实现效果 二、应用场景 这三步是经典的 “灰度化 → 降噪 → 边缘检测” 预处理流程&#xff0c;常用于&#xff1a; 计算机视觉任务&#xff08;如物体识别、特征提取&#xff09;。 图像分析&#xff08;如文档扫描、车牌识别&#xff09;。 减少后续算法的计算复杂度&a…...

个人文章不设置vip

今天没登录打开自己文章&#xff0c;发现自己读自己文章还要充值。就感觉很扯。 继而去查看个人的历史文章&#xff0c;发现很多被标注为高质量的文章设置成了VIP文章。 如果仅有一两篇&#xff0c;还可能是本人手滑误设置&#xff0c;这么多就解释不通了。 &#xff08;大概有…...

【聚类分析】基于copula的风光联合场景生成与缩减

目录 1 主要内容 风光出力场景生成方法 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序方法复现《融合风光出力场景生成的多能互补微网系统优化配置》风光出力场景生成部分&#xff0c;目前大多数研究的是不计风光出力之间的相关性影响&#xff0c;但是地理位置相近…...

CSDN积分详解(介绍、获取、用途)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 积分**一、积分类型及用途****二、积分获取途…...

运维--计划任务

计划任务分为一次性和循环性的计划任务 1.date的用法 date 月日时分年 eg:date 100118222023 date:查看时间和日期、修改时间和日期 获取当前日期:date +%F F:日期 获取当前时间:date +%H:%M:%S H:时 M:分 S:秒 获取周几: date +%w w:周 …...

AVL树(2):

我们之前讲AVL树&#xff0c;我们讲到了旋转&#xff0c;然后讲了左单旋和右单旋。 但是我们这里的单旋产生的条件都是纯粹的一边比较高&#xff0c; 我们看上面这个图片&#xff0c;当我们插入新的结点导致一边的子树比较高的时候&#xff0c;我们必须是存粹的一边高&#xf…...

架构思维:异构数据的同步一致性方案

文章目录 一、引言二、全景架构回顾三、潜在问题问题1&#xff1a;Binlog 延迟——理想 vs 实际问题2&#xff1a;Binlog 格式解析问题3&#xff1a;高可靠消费1. 串行 ACK 消费2. 并行消费&#xff0b;乱序风险3. 解决方案 问题4&#xff1a;缓存数据结构设计1. Key–Value 冗…...

nginx 正反向代理和nginx正则

目录 一. 正向代理 1. 编译安装Nginx 2. 配置正向代理 二. 反向代理 1. 配置nginx七层代理 2. 配置nginx四层代理 三. Nginx 缓存 1. 缓存功能的核心原理和缓存类型 2. 代理缓存功能设置 四. Nginx rewrite和正则 1. Nginx正则 2. nginx location 3. Rewrite …...

SAM-Decoding_ 后缀自动机助力大模型推理加速!

SAM-Decoding: 后缀自动机助力大模型推理加速&#xff01; 大语言模型&#xff08;LLMs&#xff09;的推理效率一直是研究热点。本文介绍的SAM-Decoding方法&#xff0c;借助后缀自动机&#xff08;Suffix Automaton&#xff0c;SAM&#xff09;实现推测解码&#xff0c;在提升…...

使用Scrapy构建高效网络爬虫:从入门到数据导出全流程

在数据驱动的时代&#xff0c;网络爬虫已成为获取公开信息的核心工具。本文将带您通过Scrapy框架完成一个实战项目&#xff0c;涵盖从零搭建爬虫到多格式数据导出的完整流程&#xff0c;并深入解析Scrapy的Feed Exports功能。 一、项目背景与目标 我们将爬取书籍网站&#xff…...

Docker安装Gitblit(图文教程)

本章教程,使用Docker安装部署Gitblit。 一、Gitblit简介 Gitblit 是一个基于 Java 的 Git 仓库管理工具,主要用于在局域网或小型团队环境中搭建私有 Git 服务器。它提供了一个简单易用的 Web 界面,用于浏览代码、管理仓库和用户权限等。 二、拉取镜像 sudo docker pull git…...

SpringBoot的汽车商城后台管理系统源码开发实现

概述 汽车商城后台管理系统专为汽车4S店和经销商设计&#xff0c;提供全面的汽车管理系统解决方案。 主要内容 1. 核心功能模块 系统提供以下主要功能&#xff1a; ​​销售管理​​&#xff1a;记录销售信息&#xff0c;跟踪交易进度​​客户管理​​&#xff1a;维护客户…...

组合模式(Composite Pattern)

非常棒&#xff01;你现在进入了结构型设计模式中最典型的「树形结构」设计模式 —— 组合模式&#xff08;Composite Pattern&#xff09;。 我将通过简明解释 清晰代码 类图演示&#xff0c;一步步帮你理解它。 &#x1f9e0; 一句话定义 组合模式允许你将对象组合成树形结…...

Java捕获InterruptedException异常后,会自动清空中断状态

InterruptedException异常一般是在一个线程处于等待&#xff08;像Thread.sleep()、Object.wait()、Thread.join()等方法&#xff09;状态时被另一个线程调用interrupt()方法中断而抛出的。一旦捕获到InterruptedException&#xff0c;Java 会自动清除该线程的中断状态。 以下…...

HTML04:图像标签

图像标签 常见的图像标签 JPGGIFPNGBMP <img src"路径" alt"名称" title"悬停名称" width"高" height"宽"/><!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…...

供应链算法整理(二)--- 智能补货

供应链业务的目标价值是&#xff1a;优化货品的供给、销售提供支撑&#xff0c;以降低成本&#xff0c;提高时效、收益&#xff0c;最终提升用户体验。基于目标价值&#xff0c;整体的算法模块分为&#xff1a;智能选品、智能预测、品仓铺货、智能补货、智能调拨、仓网路由、快…...

【毕设通关】——Word交叉引用

&#x1f4d6; 前言&#xff1a;在论文中&#xff0c;我们经常会在文段贴图片时&#xff0c;写“如图x所示”的内容&#xff0c;如果每次都手动写数字&#xff0c;那么当需要在前面内容插入图片时&#xff0c;后续更新会很繁琐&#xff0c;这时就需要交叉引用功能。 &#x1f5…...

java技术总监简历模板

模板信息 简历范文名称&#xff1a;java技术总监简历模板&#xff0c;所属行业&#xff1a;其他 | 职位&#xff0c;模板编号&#xff1a;XDNUTA 专业的个人简历模板&#xff0c;逻辑清晰&#xff0c;排版简洁美观&#xff0c;让你的个人简历显得更专业&#xff0c;找到好工作…...

视频编解码学习三之显示器

整理自&#xff1a;显示器_百度百科&#xff0c;触摸屏_百度百科,百度安全验证 分为阴极射线管显示器&#xff08;CRT&#xff09;&#xff0c;等离子显示器PDP&#xff0c;液晶显示器LCD 液晶显示器的组成。一般来说&#xff0c;液晶显示器由以下几个部分组成&#xff1a; […...

【人工智能】大模型安全的深度剖析:DeepSeek漏洞分析与防护实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的广泛应用,其安全性问题日益凸显。DeepSeek作为中国领先的开源AI模型,以低成本和高性能著称,但近期暴露的数据库…...

架构思维:使用懒加载架构实现高性能读服务

文章目录 一、引言二、读服务的功能性需求三、两大基本设计原则1. 架构尽量不要分层2. 代码尽可能简单 四、实战方案&#xff1a;懒加载架构及其四大挑战五、改进思路六、总结与思考题 一、引言 在任何后台系统设计中&#xff0c;「读多写少」的业务场景占据主流&#xff1a;浏…...

【AI提示词】黑天鹅模型专家

提示说明 详细解释黑天鹅模型的理论背景、定义、分类及其在不同领域的应用。 提示词 # Role: 黑天鹅模型专家## Profile - language: 中文 - description: 详细解释黑天鹅模型的理论背景、定义、分类及其在不同领域的应用 - background: 黑天鹅模型是尼尔斯莫尔提出的理论&a…...

pip安装包时网络不畅,替换国内PyPI镜像源

1、PyPI 镜像源 1.1、定义 PyPI 镜像源是对 Python Package Index&#xff08;PyPI&#xff09;官方仓库的复制。 PyPI 是 Python 社区中最大的软件包仓库&#xff0c;存储着大量的 Python 包&#xff0c;供开发者们下载和使用。 然而&#xff0c;由于 PyPI 服务器位于国外&a…...

TS 类型推论

应用场景&#xff1a; 1.变量初始化 仅声明不初始化无法推断是什么类型&#xff0c;必须手动添加类型注解 2.决定函数返回值 根据函数体内的运算可以推断出返回值的类型 函数参数的类型声明建议一定要手写...

Java基于SaaS模式多租户ERP系统源码

目录 一、系统概述 二、开发环境 三、系统功能介绍 一、系统概述 ERP&#xff0c;全称 Enterprise Resource Planning 即企业资源计划。是一种集成化的管理软件系统&#xff0c;它通过信息技术手段&#xff0c;将企业的各个业务流程和资源管理进行整合&#xff0c;以提高企业…...

PHP的include和require

文章目录 环境require和includerequire VS includerequire&#xff08;include&#xff09; VS require_once&#xff08;include_once&#xff09;路径问题当前工作目录对相对路径的影响题外话总结其它 参考 环境 Windows 11 专业版XAMPP v3.3.0 PHP 8.2.12Apache 2.4.58 VSC…...

日本人工智能发展全景观察:从技术革新到社会重构的深度解析

一、日本IT产业演进与AI技术崛起的历史脉络 1.1 信息化时代的奠基&#xff08;1990-2010&#xff09; 日本IT产业的腾飞始于"信息高速公路计划"的实施。1994年NTT推出全球首个商用光纤网络&#xff0c;至2005年实现全国光纤覆盖率突破80%。这一时期培育出富士通、N…...

什么是DGI数据治理框架?

DGI数据治理框架是由数据治理研究所&#xff08;Data Governance Institute, DGI&#xff09;提出的一套系统性方法论&#xff0c;旨在帮助企业或组织建立有效的数据治理体系&#xff0c;确保数据资产的高质量管理、合规使用和价值释放。以下是关于DGI数据治理框架的核心内容&a…...

[硬件电路-12]:LD激光器与DFB激光器功能概述、管脚定义、功能比较

一、LD激光器&#xff08;普通半导体激光器&#xff09;功能 核心功能&#xff1a; LD激光器通过半导体材料的电子-空穴复合实现受激辐射&#xff0c;将电能直接转换为高相干性激光&#xff0c;是光电子系统的核心光源。 基础光发射功能 工作原理&#xff1a;正向偏置电流注入…...

升级 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后验证指南:功能与虚拟环境检测

#工作记录 在 NVIDIA 发布 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后&#xff0c;开发者纷纷选择升级以获取新特性和性能提升。 CUDA Toolkit 12.9 与 cuDNN 9.9.0 发布&#xff0c;带来全新特性与优化-CSDN博客 然而&#xff0c;升级完成并不意味着大功告成&#xff0c;确认升级后…...

湖仓一体架构解析:如何平衡数据灵活性与分析性能?

一、什么是湖仓一体架构&#xff1f;解决哪些核心问题&#xff1f; 在数据爆炸的时代&#xff0c;企业面临着如何高效处理和分析海量数据的挑战。传统架构难以同时满足灵活性和性能需求&#xff0c;湖仓一体架构应运而生。 传统数据架构的局限 数据湖&#xff08;存储各类原…...

56、【OS】【Nuttx】编码规范解读(四)

背景 接之前 blog 53、【OS】【Nuttx】编码规范解读&#xff08;一&#xff09; 54、【OS】【Nuttx】编码规范解读&#xff08;二&#xff09; 55、【OS】【Nuttx】编码规范解读&#xff08;三&#xff09; 分析了行宽格式&#xff0c;注释要求&#xff0c;花括号风格等&#…...

MySQL基础关键_007_DQL 练习

目 录 一、题目 二、答案&#xff08;不唯一&#xff09; 1.查询每个部门薪资最高的员工信息 2.查询每个部门高于平均薪水的员工信息 3. 查询每个部门平均薪资等级 4.查询部门中所有员工薪资等级的平均等级 5.不用分组函数 max 查询最高薪资 6.查询平均薪资最高的部门编…...

气泡图、桑基图的绘制

1、气泡图 使用气泡图分析某一年中国同欧洲各国之间的贸易情况。 气泡图分析的三个维度&#xff1a; • 进口额&#xff1a;横轴 • 出口额&#xff1a;纵轴 • 进出口总额&#xff1a;气泡大小 数据来源&#xff1a;链接: 国家统计局数据 数据概览&#xff08;进出口总额&…...