# 桌面端面试题精选 Electron 与 Tauri
本章以现代
Electron与Tauri 2.x官方API为基线,共 200 道题。重点不是背模块名,而是能说清运行时架构、权限收敛、故障恢复、性能预算与发布信任链。
# 阅读建议
- 初级岗位先完成第 1~4 组,能独立写出安全的
preload与IPC。 - 中高级岗位重点练第 5~20 组,回答时给出指标、失败路径和平台差异。
- 带交互演示的题先切换正常/边界路径,再展开详细解析复述机制。
# 1 基础架构与选型
# Electron 的本质是什么,它如何把 Web 技术变成桌面应用?
⚡ 30 秒速记
- 核心结论:
Electron把Chromium、Node.js与原生桌面能力组合为应用运行时;它不是把网页简单打成一个可执行文件。 - 底层机制:应用随包携带浏览器内核和运行时,主进程管理原生生命周期,每个页面由独立渲染进程承载,再通过受控桥接访问系统能力。
- 工程边界:跨平台共享的是大部分业务代码,不是所有系统行为;安装、签名、权限、菜单、窗口和更新仍要按平台处理。
- 回答时先划分权限与生命周期,再说明数据如何跨边界,最后给失败场景和验证办法
Electron 本质上是把 Chromium、Node.js 和原生桌面能力组合成运行时,并不是简单地把网页封装成可执行文件。 主进程负责窗口和应用生命周期,页面运行在渲染进程中,再通过 preload 与受控的 IPC 桥接系统能力。这样可以复用大部分 Web 业务代码,但安装、签名、权限、菜单和更新仍要按不同平台处理。工程上不应向页面暴露通用 Node API,而要校验调用来源和参数,并覆盖窗口关闭、进程崩溃等失败路径。
Electron 把 Chromium、Node.js 与原生桌面能力组合为应用运行时;它不是把网页简单打成一个可执行文件。
应用随包携带浏览器内核和运行时,主进程管理原生生命周期,每个页面由独立渲染进程承载,再通过受控桥接访问系统能力。
把它放进真实项目时,先画出参与者和信任边界:谁持有系统权限,谁只处理界面,数据在哪个进程产生,又在哪个阶段被验证。跨平台共享的是大部分业务代码,不是所有系统行为;安装、签名、权限、菜单、窗口和更新仍要按平台处理。 这能避免把 API 用法当成架构答案。
可验证的做法是同时准备正常路径和失败路径:记录输入、进程或窗口标识、耗时、结果码与资源清理状态;再用非法参数、窗口提前关闭、进程崩溃或网络中断验证系统不会越权、卡死或重复执行。面试中如果能把这条证据链讲清楚,答案就从“知道概念”升级成“做过工程”。
可运行代码示例
下面用 main、preload 与 renderer 三段最小闭环验证“Electron 的本质是什么,它如何把 Web 技术变成桌面应用?”的权限边界和失败处理。
// main.ts
ipcMain.handle('desktop:execute', async (event, input: unknown) => {
assertTrustedSender(event.senderFrame)
const request = RequestSchema.parse(input)
return desktopService.execute(request)
})
// preload.ts
contextBridge.exposeInMainWorld('desktop', {
execute: (input: ExecuteRequest) => ipcRenderer.invoke('desktop:execute', input)
})
// renderer.ts
const controller = new AbortController()
try { showResult(await window.desktop.execute({ resourceId: 'doc-42' })) }
catch (error) { showSafeError(normalizeDesktopError(error)) }