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

Elecron 相关介绍以及常见的面试问题

一、深入介绍 Electron

Electron 是一个由 GitHub 开发和维护的免费开源软件框架,允许开发者使用 Web 技术(HTML、CSS 和 JavaScript)构建桌面应用程序 。它将 Chromium 渲染引擎和 Node.js 运行时环境相结合,为开发者提供了一套独特的桌面应用开发解决方案。
从架构层面来看,Electron 应用包含 “主” 进程和多个 “渲染器” 进程 。主进程负责运行应用程序的主要逻辑,例如管理应用的生命周期(如应用的启动、退出)、创建和管理窗口等。它能够调用操作系统的底层 API,通过 Node.js 的能力实现与系统资源的交互 。渲染进程则专注于渲染用户界面,每个渲染进程负责一个窗口的 HTML 和 CSS 渲染工作,使得开发者可以像开发网页一样构建桌面应用的界面。并且,若启用了 Node.js 集成,主进程和渲染器进程都能运行,这让开发者可以在渲染进程中使用 Node.js 的模块,进一步拓展了应用的功能。
在技术融合方面,Chromium 为 Electron 提供了强大的 UI 渲染能力 。由于 Chromium 本身具备跨平台特性,这使得开发者无需担心在不同操作系统(如 Windows、macOS、Linux)上的界面兼容性问题,能够轻松实现一致的界面呈现效果。不过,Chromium 缺乏原生 GUI 的操作能力,因此 Electron 集成了 Node.js 。通过 Node.js,开发者在编写 UI 的同时,能够调用操作系统的底层 API,例如文件系统模块(fs)用于文件的读写操作、路径模块(path)用于处理文件路径、加密模块(crypto)用于加密相关功能等 。此外,Electron 还通过 Native API 获得原生系统的 GUI 支持,以此可以调用原生应用程序接口,实现如操作原生菜单、发送系统消息提醒、使用系统托盘等功能 。简单来说,Chromium 负责页面 UI 渲染,Node.js 负责业务逻辑处理,Native API 提供原生能力和跨平台支持,三者协同工作,赋予了 Electron 强大的桌面应用开发能力。
众多知名的开源项目都基于 Electron 构建,例如 Atom(一款流行的代码编辑器)、GitHub Desktop(用于管理 GitHub 仓库的桌面客户端)、Visual Studio Code(广受欢迎的代码编辑器)、Evernote(笔记应用)以及 WordPress Desktop(WordPress 博客管理客户端)等 。这些应用充分展示了 Electron 在实际应用中的强大功能和广泛适用性,涵盖了代码编辑、版本控制、笔记记录、博客管理等多个领域。
当然,Electron 也并非十全十美 。一方面,由于 Electron 应用捆绑了浏览器 Chromium 内核和 Node.js,导致应用体积通常较大,一个简单的 Electron 应用在未压缩的情况下可能达到 120MB 左右,这对于一些对应用体积敏感的场景不太友好 。另一方面,每个窗口都对应一个新的进程,这使得 Electron 应用在运行时可能会占据大量内存,在一些内存资源有限的设备上,可能会影响应用的性能表现。

二、面试题及答案

1、请解释一下 Electron 的运作原理?

答案:Electron 基于 Chromium 和 Node.js 构建。在运行时,主进程负责应用程序的整体控制,管理应用生命周期,比如创建、销毁 BrowserWindow 实例来控制窗口的显示与关闭 。它利用 Node.js 的能力调用操作系统底层 API 。渲染进程则基于 Chromium,负责解析和渲染 HTML、CSS 以及执行 JavaScript 来呈现用户界面 。主进程和渲染进程之间通过进程间通信(IPC)机制进行交互,例如主进程可以向渲染进程发送消息来更新界面状态,渲染进程也可以向主进程请求某些系统操作 。此外,Electron 通过 JavaScript 绑定,将许多用 C++ 或 Objective-C 编写的原生 API 暴露给开发者,让开发者能够方便地使用这些系统级功能来增强应用 。

2、Electron 有哪些优势和劣势?

答案:
优势:
技术门槛低:开发者可以利用熟悉的 Web 技术(HTML、CSS、JavaScript)来开发桌面应用,无需学习全新的编程语言和平台,大大降低了桌面应用的开发门槛 。例如有 Web 开发经验的团队能够快速上手开发 Electron 应用。
跨平台性强:一套代码可以在 Windows、macOS、Linux 等多个操作系统上运行,减少了为不同平台单独开发的工作量和成本 。像 Visual Studio Code 就是通过 Electron 实现了跨平台的代码编辑功能。
丰富的生态:结合了 Node.js 的生态系统,开发者可以使用大量的 Node.js 模块来扩展应用功能,同时也能利用众多前端框架和工具,如 React、Vue 等,加速开发进程 。
开发效率高:热重载等功能使得在开发过程中,开发者修改代码后能即时看到效果,无需频繁重新启动应用,提高了开发效率 。
劣势:
应用体积大:由于捆绑了 Chromium 内核和 Node.js 运行时,Electron 应用的安装包体积通常较大,这可能会影响下载速度和占用较多磁盘空间 。
内存占用高:每个窗口对应一个渲染进程,随着打开窗口数量增加,内存占用会显著上升,在一些配置较低的设备上可能导致性能问题 。
性能问题:相比原生应用,某些对性能要求极高的操作,如复杂图形渲染、大规模数据处理等,Electron 应用可能存在性能瓶颈 。

3、如何在 Electron 应用中实现主进程和渲染进程的通信?

答案:Electron 提供了多种进程间通信(IPC)机制 。
使用 ipcMain 和 ipcRenderer:在主进程中通过ipcMain模块来监听渲染进程发送的消息,例如ipcMain.on(‘message - from - renderer’, (event, arg) => { /* 处理消息 */ });在渲染进程中使用ipcRenderer模块来发送消息,如ipcRenderer.send(‘message - from - renderer’, data)。同时,ipcRenderer也可以通过sendSync方法发送同步消息 。
使用 webContents:主进程可以通过BrowserWindow实例的webContents属性与对应的渲染进程通信,例如win.webContents.send(‘message - to - renderer’, data),渲染进程可以通过event.sender.send来回复主进程 。
使用 remote 模块(高版本需单独安装 @electron/remote):渲染进程可以通过remote模块调用主进程的方法和对象,例如const { app } = require(‘@electron/remote’),从而实现间接通信 。不过在使用remote模块时需要注意安全问题,因为它允许渲染进程访问主进程的对象,可能会带来安全风险 。

4、在 Electron 中如何创建和管理窗口?

答案:在主进程中,通过BrowserWindow类来创建和管理窗口 。首先,引入electron模块中的app和BrowserWindow,例如const { app, BrowserWindow } = require(‘electron’) 。创建窗口时,定义窗口的各种属性,如大小、位置、是否显示菜单栏等,然后实例化BrowserWindow,如下:
let win;
app.on(‘ready’, () => {
win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true, // 启用Node.js集成
contextIsolation: false // 关闭上下文隔离,以便在渲染进程中使用Node.js模块,在高版本中需谨慎使用
}
});
win.loadFile(‘index.html’); // 加载HTML文件作为窗口内容
});

管理窗口时,可以通过BrowserWindow实例的方法来实现各种操作,如win.close()关闭窗口、win.minimize()最小化窗口、win.maximize()最大化窗口、win.show()显示窗口等 。还可以监听窗口的事件,例如win.on(‘closed’, () => { win = null; }),在窗口关闭时进行相应处理 。对于多窗口应用,可以创建多个BrowserWindow实例,并根据应用逻辑进行管理 。

5. 如何在 Electron 应用中引入和使用 Node.js 模块?

答案:如果在 Electron 应用中启用了 Node.js 集成(在webPreferences中设置nodeIntegration: true,但在高版本 Electron 中需注意安全问题,也可通过其他安全方式实现类似功能),在渲染进程和主进程中都可以像在普通 Node.js 环境中一样引入和使用 Node.js 模块 。例如,在主进程中引入文件系统模块来读取文件:
const fs = require(‘fs’);
fs.readFile(‘test.txt’, ‘utf8’, (err, data) => {
if (err) throw err;
console.log(data);
});

在渲染进程中,同样可以引入和使用 Node.js 模块,如引入path模块来处理路径:
const path = require(‘path’);
const filePath = path.join(__dirname, ‘assets’, ‘image.png’);

需要注意的是,在高版本 Electron 中,默认关闭了渲染进程的nodeIntegration,以增强安全性 。此时若要在渲染进程中使用 Node.js 模块,可以通过preload脚本的方式 。先创建一个preload.js文件,在其中引入需要的 Node.js 模块并通过contextBridge暴露给渲染进程,例如:
const { contextBridge, ipcRenderer } = require(‘electron’);
contextBridge.exposeInMainWorld(‘electronAPI’, {
readFile: (path) => ipcRenderer.invoke(‘read - file’, path)
});

在主进程中监听read - file事件并处理文件读取操作,在渲染进程中就可以通过window.electronAPI.readFile(‘test.txt’)来调用相关功能 。

6. Electron 应用的性能如何优化?

答案:
减少不必要的模块加载:只引入应用真正需要的 Node.js 模块和前端库,避免引入过多冗余模块增加应用启动时间和内存占用 。
合理使用异步 I/O:在进行文件读写、网络请求等 I/O 操作时,使用异步方法,避免阻塞主线程 。例如使用fs.readFile的异步版本,而不是fs.readFileSync 。
利用多线程:对于一些耗时的任务,如复杂数据处理,可以利用 Electron 的worker模块创建新的线程来处理,避免影响主线程的流畅性 。
优化渲染进程:减少不必要的 DOM 操作,合理使用 CSS 动画和过渡效果,避免使用复杂的、性能消耗大的样式 。对于频繁更新的界面部分,可以考虑使用虚拟列表等技术来提高渲染效率 。
代码拆分和懒加载:将应用代码拆分成多个模块,在需要的时候再进行加载 。例如在路由切换时,懒加载对应的页面组件,减少初始加载的代码量 。
图片优化:对图片进行压缩处理,选择合适的图片格式(如 WebP 格式在很多场景下能提供更好的压缩比),避免加载过大尺寸的图片 。

7、如何实现 Electron 应用的自动更新?

答案:通常可以使用electron - updater库来实现 Electron 应用的自动更新 。首先,在项目中安装electron - updater:npm install electron - updater --save - dev 。然后,在主进程中进行如下配置和使用:
const { autoUpdater } = require(‘electron - updater’);
autoUpdater.on(‘update - available’, () => {
// 提示用户有可用更新
});
autoUpdater.on(‘update - downloaded’, () => {
// 提示用户更新已下载,可选择安装
});
autoUpdater.on(‘error’, (error) => {
// 处理更新过程中的错误
});
autoUpdater.checkForUpdatesAndNotify(); // 检查更新并通知用户

还需要在应用的构建过程中,配置好更新服务器相关信息 。例如,对于 GitHub 发布的应用,可以使用 GitHub Releases 作为更新源,配置如下:
autoUpdater.setFeedURL({
provider: ‘github’,
owner: ‘your - username’,
repo: ‘your - repo - name’
});

这样,应用在运行时就会自动检查是否有可用更新,并根据配置进行相应提示和更新操作 。

8. Electron 应用的安全性如何保障?

答案:
内容安全策略(CSP):通过设置 CSP,限制渲染进程中可以加载的资源来源,防止跨站脚本攻击(XSS)等安全问题 。例如,在webPreferences中设置contentSecurityPolicy,如webPreferences: { contentSecurityPolicy: “default - src’self’” },表示只允许加载当前应用来源的资源 。
禁用 Node.js 集成(适用于高风险场景):如果应用不需要在渲染进程中使用 Node.js 模块,可以在webPreferences中设置nodeIntegration: false,这样渲染进程无法直接访问 Node.js 的 API,降低安全风险 。
使用ses(session)模块隔离会话:通过ses模块创建不同的会话,每个会话有独立的缓存、Cookie 等,防止不同页面或功能之间的信息泄露和干扰 。例如const ses = new electron.Session();,然后在创建BrowserWindow时关联该会话 。
输入验证:对用户输入的数据进行严格验证,避免恶意代码注入 。无论是在渲染进程还是主进程中接收用户输入时,都要确保输入符合预期格式和范围 。
更新依赖和 Electron 版本:及时更新 Electron 框架本身以及应用所依赖的库和模块,以修复已知的安全漏洞 。因为 Electron 团队会持续关注安全问题并发布更新 。
如何在 Electron 中使用前端框架(如 React、Vue)?
答案:以 Vue 为例,首先初始化一个 Vue 项目,可以使用vue - cli,如vue create my - electron - app 。然后,在 Electron 项目中整合 Vue 。在main.js(主进程文件)中,配置窗口加载 Vue 项目编译后的index.html文件 。在 Vue 项目的webpack配置中,确保正确输出文件路径等 。例如,在main.js中:
const { app, BrowserWindow } = require(‘electron’);
let win;
app.on(‘ready’, () => {
win = new BrowserWindow({
width: 800,
height: 600
});
win.loadFile(‘path/to/your/vue/dist/index.html’);
});

对于 React 项目,同样先创建 React 项目(如npx create - react - app my - electron - react - app),然后在 Electron 主进程中配置窗口加载 React 项目编译后的index.html 。在 React 项目中,可能需要根据 Electron 的环境对一些配置进行微调,比如处理相对路径等问题 。还可以使用一些专门的工具来简化 Electron 与前端框架的集成,如electron - vite等,它可以统一主进程、渲染进程和preload脚本的构建配置,支持渲染进程热更新等功能,提高开发效率 。
10. 请描述一下 Electron 应用的打包过程?
答案:常见的 Electron 应用打包工具有electron - builder等 。首先,在项目中安装electron - builder:npm install electron - builder --save - dev 。然后,在项目根目录下创建package.json文件(如果没有的话),在其中配置打包相关信息 。例如:
{
“name”: “my - electron - app”,
“version”: “1.0.0”,
“description”: “My Electron application”,
“main”: “main.js”,
“scripts”: {
“build”: “electron - builder”
},
“devDependencies”: {
“electron - builder”: “^24.6.0”
},
“build”: {
“appId”: “com.example.myapp”,
“mac”: {
“category”: “public.app-category.productivity”
},
“win”: {
“target”: “nsis”
},
“linux”: {
“target”: “deb”
}
}
}

在上述配置中,appId是应用的唯一标识 。mac、win、linux分别配置了针对不同操作系统的打包目标 。配置完成后,在命令行中运行npm run build,electron - builder会根据配置将 Electron 应用打包成对应操作系统的安装包,如在 Windows 下生成.exe安装文件,在 macOS 下生成.dmg文件,在 Linux 下生成.deb或.rpm文件等 。打包过程中,electron - builder会将应用的代码、依赖的模块、Electron 运行时等文件进行整合和压缩,生成最终的安装包 。

相关文章:

Elecron 相关介绍以及常见的面试问题

一、深入介绍 Electron Electron 是一个由 GitHub 开发和维护的免费开源软件框架,允许开发者使用 Web 技术(HTML、CSS 和 JavaScript)构建桌面应用程序 。它将 Chromium 渲染引擎和 Node.js 运行时环境相结合,为开发者提供了一套…...

基于STM32、HAL库的ADAU1701JSTZ音频接口芯片驱动程序设计

一、简介: ADAU1701JSTZ 是 Analog Devices 公司推出的一款高性能、低功耗音频编解码器 (CODEC) 芯片。它专为便携式音频设备设计,集成了麦克风前置放大器、ADC、DAC、耳机放大器等功能模块,支持多种音频接口和采样率,非常适合与 STM32 微控制器配合使用。 主要特性: 24…...

【氮化镓】电子辐照下温度对GaN位移阈能的影响

2024年,华东师范大学的彭胜国等人基于从头算分子动力学(AIMD)方法,研究了低能电子束辐照下温度对氮化镓(GaN)位移阈能(TDE)的影响。实验结果表明,在初始动能40至80 eV的范围内,镓(Ga)和氮(N)原子作为初级击出原子(PKAs)引发的位移对温度呈现不同的敏感性:Ga 的…...

NLTK库: 数据集3-分类与标注语料(Categorized and Tagged Corpora)

NLTK库: 数据集3-分类与标注语料(Categorized and Tagged Corpora) 1.二分类语料 主要是电影语料,和情绪(积极消极、主观客观)有关,有以下2个语料: 1.1 movie_reviews: IMDb 影评 IMDb(Internet Movie …...

物理:人的记忆是由基本粒子构成的吗?

问题: 基因属于人体的一部分,记忆也是人体的一部分,那么为什么基因可以代际遗传,但是记忆却被清空重置。如果基因是由粒子构成,那么记忆是不是也应该由粒子构成?如果记忆是粒子构成的,那么能否说明记忆永恒,即使死亡了身体被分解了,那么只要保证其身体有关的所有粒子被…...

加速度策略思路

一种基于技术指标和动态止损策略的交易方法,旨在提高交易的灵活性和风险控制能力。 1 -动态止损价格计算:该函数通过计算ATR(平均真实范围)和盈利峰值价,结合加速系数,动态调整止损价格。具体来说&#xf…...

【计算机组成原理】第二部分 存储器--分类、层次结构

文章目录 分类&层次结构0x01 分类按存储介质分类按存取方式分类按在计算机中的作用分类 0x02 层次结构 分类&层次结构 0x01 分类 按存储介质分类 半导体存储器磁表面存储器磁芯存储器光盘存储器 按存取方式分类 存取时间与物理地址无关(随机访问&#…...

Spring AI 开发本地deepseek对话快速上手笔记

Spring AI Spring AI是一个旨在推进生成式人工智能应用程序发展的项目,Spring AI的核心目标是提供高度抽象化的组件,作为开发AI应用程序的基础,使得开发者能够以最少的代码改动便捷地交换和优化功能模块‌ 在开发之前先得引入大模型&#xf…...

Python训练打卡Day23

机器学习管道 pipeline 基础概念 pipeline在机器学习领域可以翻译为“管道”,也可以翻译为“流水线”,是机器学习中一个重要的概念。 在机器学习中,通常会按照一定的顺序对数据进行预处理、特征提取、模型训练和模型评估等步骤,以…...

【每天一个知识点】Dip 检验(Dip test)

Dip 检验(Dip test)是一种用于检验一维数据分布是否为单峰(unimodal)的非参数统计方法。该检验由 Hartigan 和 Hartigan 于 1985 年提出,通常用于探索性数据分析中,以判断数据是否仅具有一个峰值结构&#…...

AbstractQueuedSynchronizer之AQS

一、前置知识 公平锁和非公平锁: 公平锁:锁被释放以后,先申请的线程先得到锁。性能较差一些,因为公平锁为了保证时间上的绝对顺序,上下文切换更频繁 非公平锁:锁被释放以后,后申…...

【Qt】pro工程文件转CMakeLists文件

1、简述 Qt6以后默认使用cmake来管理工程,之前已经一直习惯使用pro,pro的语法确实很简单、方便。 很多项目都是cmake来管理,将它们加入到Qt项目中,cmake确实是大势所趋。比如,最近将要开发的ROS项目,也是使用的cmake语法。 以前总结的一些Qt代码,已经编写成pro、pri等…...

docker-compose部署thingsboard/tb-cassandra

1、配置 阿里云服务器2H8G 最低 系统:Ubuntu20.0.4 安装 docker 和 docker-compose 环境 ====================安装docker====================== # 更新包 sudo apt update# 安装docker sudo apt install docker.io# 查看是否安装成功 docker --version==================…...

MySQL 日期计算方法 date_sub()、date_add()、datediff() 详解-文中有示例帮助理解

1、date_sub()、date_add() date_sub() 和date_add() 语法相同,只不过一个加一个减。 从日期中减去指定时间间隔 语法: DATE_SUB(start_date, INTERVAL expr unit) start_date: 起始日期(如 now() , 字段名)。 INTERVAL expr…...

GPT-4.1和GPT-4.1-mini系列模型支持微调功能,助力企业级智能应用深度契合业务需求

微软继不久前发布GPT-4.1系列模型后,Azure OpenAI服务(国际版)现已正式开放对GPT-4.1和GPT-4.1-mini的微调功能,并通过Azure AI Foundry(国际版)提供完整的部署和管理解决方案。这一重大升级标志着企业级AI…...

如何将两台虚拟机进行搭桥

虚拟机网络搭桥配置指南 要实现两台虚拟机之间的网络互通("搭桥"),需要根据您的虚拟化平台选择合适的网络模式。以下是主流虚拟化软件的配置方法: 一、VMware 虚拟机互通配置 方案 1:使用桥接模式&#x…...

无缝对接主流电商平台接口,解决货源难题

行业调查显示,大多数代购商每天要花费数小时在淘宝、1688等平台寻找合适商品。手动复制商品链接、整理信息不仅耗时耗力,还容易出错——价格标错、库存不准等问题时有发生,直接影响客户体验。更麻烦的是,不同平台的商品信息格式不…...

GZip+Base64压缩字符串在ios上解压报错问题解决(安卓、PC模拟器正常)

java这边的压缩代码 引入的是java8 jdk自带的gzip压缩( java.util.zip.GZIPOutputStream)、BASE64Encoder( sun.misc.BASE64Encoder) public static String compress(String str) {if (str ! null && str.length() ! 0) {ByteArrayOutputStream…...

Cookie、 Local Storage、 Session Storage三种客户端存储方式

存储特性对比表 特性CookieLocal StorageSession Storage生命周期可设置过期时间永久保存会话结束自动清除存储容量4KB左右5-10MB5-10MB自动发送到服务器每次HTTP请求头携带不发送不发送访问方式服务端/客户端均可读写仅客户端仅客户端 使用场景及示例 1. Cookie - 用户身份…...

进程等待简单讲解

1. 基本概念 1.1 进程终止与退出状态 当一个进程终止时,它会向其父进程发送一个信号(通常是SIGCHLD),并保存退出状态(exit status)。退出状态可以是一个正常终止的返回值,也可以是一个信号导致…...

基于大模型预测胸椎管狭窄诊疗全流程的研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、胸椎管狭窄症概述 2.1 疾病定义与分类 2.2 病因与发病机制 2.3 流行病学特征 三、大模型技术原理与应用现状 3.1 大模型基本原理 3.2 在医疗领域的应用案例 3.3 用于胸椎管狭窄…...

Oracle OCP认证考试考点详解083系列15

题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 71. 第71题: 题目 解析及答案: 关于在 Oracle 18c 及更高版本中基于 Oracle 黄金镜像的安装,以下哪…...

【老飞飞源码】新版高清飞飞源码+数据库+客户端+服务器端完整文件打包

【老飞飞源码】新版高清飞飞源码数据库客户端服务器端完整文件打包下载 编译环境 vs2022 搭建环境 sql2022 测试运行环境 windows 11 本地测试生成搭建都成功 功能包含: pvp排行榜 宠物特效 箱子预览系统 vip系统 宝箱系统 内挂系统 离线摆摊系统 特效帽子系…...

Maven 动态插件配置:Profile的灵活集成实践

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

Python爬虫如何应对网站的反爬加密策略?

在当今的互联网环境中,网络爬虫已经成为数据采集的重要工具之一。然而,随着网站安全意识的不断提高,反爬虫技术也越来越复杂,尤其是数据加密策略的广泛应用,给爬虫开发者带来了巨大的挑战。本文将详细介绍Python爬虫如…...

STM32H743输出50%的占空比波形

使用cubeMX进行配置如下: 时钟配置如下: 具体代码如下: /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program b…...

ios remote debut proxy 怎么开启手机端调试和inspect

手机开启远程调试教程(适用于 Chrome / Safari) 前端移动端调试指南|适用 iPhone 和 Android|WebDebugX 出品 本教程将详细介绍如何在 iPhone 和 Android 手机上开启网页检查器,配合 WebDebugX 实现远程调试。教程包含…...

GraspVLA:基于Billion-级合成动作数据预训练的抓取基础模型

25年5月来自银河通用(Galbot)、北大、港大和 BAAI 的论文“GraspVLA: a Grasping Foundation Model Pre-trained on Billion-scale Synthetic Action Data”。 具身基础模型因其零样本泛化能力、可扩展性以及通过少量后训练即可适应新任务的优势&#x…...

BGP联邦实验

一.需求 1.AS1存在两个环回,一个地址为192.168.1.0/24,该地址不能再任何协议中宣告 AS3存在两个环回,一个地址为192.168.2.0/24,该地址不能再任何协议中宣告 AS1还有一个环回地址为10.1.1.0/24,AS3另一个环回地址是…...

自动化测试基础知识详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 自动化测试是指利用自动化工具和脚本,模拟人工操作进行软件测试的过程。它在软件开发中扮演着非常重要的角色,可以提高测试效率、降低成本…...

Java后端快速生成验证码

Hutool是一个小而全的Java工具类库,它提供了很多实用的工具类,包括但不限于日期处理、加密解密、文件操作、反射操作、HTTP客户端等。 核心工具类:CaptchaUtil,CaptchaUtil 是 Hutool 提供的一个工具类,用于创建各种类…...

【愚公系列】《Manus极简入门》036-物联网系统架构师:“万物互联师”

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! &#x1f…...

主流高防服务器技术对比与AI防御方案实战

1. 高防服务器核心能力对比 当前市场主流高防服务商(如阿里云、腾讯云、华为云)的核心防御能力集中在流量清洗与静态规则防护,但面临以下挑战: 静态防御瓶颈:传统方案依赖预定义规则,对新型攻击&#xff…...

带格式的可配置文案展示

方案一(格式包含颜色换行等) 服务端:配置后接口输出带标签的字符串,但是尖括号不能被转义前端:v-html接受字符串(vue项目),原生用innerHTML赋值 方案二(格式针对只存在…...

湖南大学3D场景问答最新综述!3D-SQA:3D场景问答助力具身智能场景理解

作者: Zechuan Li, Hongshan Yu, Yihao Ding, Yan Li, Yong He, Naveed Akhtar 单位:湖南大学,墨尔本大学,悉尼大学,安徽大学 论文标题:Embodied Intelligence for 3D Understanding: A Survey on 3D Sce…...

【PyTorch】深度学习实践——第二章:线性模型

参考:刘二老师的《PyTorch深度学习实践》完结合集 本章实现了一个简单的线性回归模型,用于学习输入x和输出y之间的线性关系(yw*x)。 一、代码细节 1.数据准备 x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0]定义了训练数据,x和y之间显然…...

【Python 中文编码】

在 Python 中处理中文编码问题时,需重点关注文件编码声明、字符串编码转换及环境配置。以下是分步指南和最佳实践: 一、Python 3 的默认编码行为 Python 3.x:默认使用 UTF-8 编码(与 Python 2.x 的 ASCII 默认编码不同&#xff0…...

Excel宏和VBA

Excel宏和VBA(Visual Basic for Applications)是自动化Excel操作的强大工具,可帮助用户批量处理数据、自定义功能、提升效率。以下是详细使用方法及示例: --- ### **一、基础操作** #### 1. **录制宏** - **步骤**&#xff1…...

1688 API 接口使用限制

在使用 1688 API 接口时,需要注意以下几方面的限制和注意事项,以确保合规使用并避免不必要的问题。 一、调用频率限制 1688 平台对 API 接口的调用频率通常有限制,以防止滥用和对服务器造成过大压力。具体限制如下: 免费版&…...

5. 动画/过渡模块 - 交互式仪表盘

5. 动画/过渡模块 - 交互式仪表盘 案例&#xff1a;数据分析仪表盘 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><style type"text/css">.dashboard {font-family: Arial…...

数据擦除标准:1-Pass vs. 3-Pass vs. 7-Pass有什么区别,哪个更好?

虽然像美国国防部(DoD)5220.22-M这样的旧标准提倡多次覆盖,但像NIST 800-88和新兴的IEEE 2883标准这样的新指南已经改变了对数据擦除效果的看法。在这篇博客中,我们解释了不同的擦除方法,并分析了旧标准在新时代是否仍然相关。 理解数据擦除方法 数据擦除包括用0、1或随…...

MySQL推荐书单:从入门到精通

给大家介绍一些 MySQL 从入门到精通的经典书单&#xff0c;可以基于不同学习阶段的需求进行选择。 入门 MySQL必知必会 这本书继承了《SQL必知必会》的优点&#xff0c;专门针对 MySQL 用户&#xff0c;没有过多阐述数据库基础理论&#xff0c;而是紧贴实战&#xff0c;直接从…...

Rodrigues旋转公式-绕任意轴旋转

Rodrigues旋转公式 给定旋转轴单位向量 k ( k x , k y , k z ) \mathbf{k}(k_x,k_y,k_z) k(kx​,ky​,kz​)和旋转角度 θ \theta θ&#xff0c;旋转矩阵 R R R可以表示为&#xff1a; R I sin ⁡ θ K ( 1 − cos ⁡ θ ) K 2 RI\sin \theta K(1-\cos \theta)K^2 RIsin…...

【大模型面试每日一题】Day 17:解释MoE(Mixture of Experts)架构如何实现模型稀疏性,并分析其训练难点

【大模型面试每日一题】Day 17&#xff1a;解释MoE&#xff08;Mixture of Experts&#xff09;架构如何实现模型稀疏性&#xff0c;并分析其训练难点 &#x1f4cc; 题目重现 &#x1f31f;&#x1f31f; 面试官:解释MoE&#xff08;Mixture of Experts&#xff09;架构如何…...

Datawhale 5月coze-ai-assistant 笔记1

课程地址&#xff1a; coze-ai-assistant-课程摘要 | Datawhalehttps://www.datawhale.cn/learn/summary/105 动手实践 链接&#xff1a;https://www.coze.cn/home 作业&#xff1a;智能体链接地址扣子扣子是新一代 AI 大模型智能体开发平台。整合了插件、长短期记忆、工作…...

2025.5.13总结

想要成为自己想要成为的那个人&#xff0c;并不是一件容易的事情。在我报口才课的时候&#xff0c;老师一针见血的指出了我的不足。因为不敢&#xff0c;所以不做&#xff0c;因为不去做&#xff0c;所以不会&#xff0c;而正因为不会&#xff0c;也导致了你不敢。当我听到这个…...

spring中的@Async注解详解

一、核心功能与作用 Async 是Spring框架提供的异步方法执行注解&#xff0c;用于将方法标记为异步任务&#xff0c;使其在独立线程中执行&#xff0c;从而提升应用的响应速度和吞吐量。其主要作用包括&#xff1a; 非阻塞调用&#xff1a;主线程调用被标记方法后立即返回&…...

计算机视觉----时域频域在图像中的意义、傅里叶变换在图像中的应用、卷积核的频域解释

1、时域&#xff08;时间域&#xff09;——自变量是时间,即横轴是时间,纵轴是信号的变化。其动态信号x&#xff08;t&#xff09;是描述信号在不同时刻取值的函数。 2、频域&#xff08;频率域&#xff09;——自变量是频率,即横轴是频率,纵轴是该频率信号的幅度,也就是通常说…...

分布式链路跟踪

目录 链路追踪简介 基本概念 基于代理&#xff08;Agent&#xff09;的链路跟踪 基于 SDK 的链路跟踪 基于日志的链路跟踪 SkyWalking Sleuth ZipKin 链路追踪简介 分布式链路追踪是一种监控和分析分布式系统中请求流动的方法。它能够记录和分析一个请求在系统中经历的每…...

从数据中台到数据飞轮:实现数据驱动的升级之路

从数据中台到数据飞轮&#xff1a;实现数据驱动的升级之路 随着数字化转型的推进&#xff0c;数据已经成为企业最重要的资产之一&#xff0c;企业普遍搭建了数据中台&#xff0c;用于整合、管理和共享数据&#xff1b;然而&#xff0c;近年来&#xff0c;数据中台的风潮逐渐减退…...