荀耀圳 · 面试复习计划

总进度
0%
总览
第1周
0
第2周
0
第3周
0
第4周
0
每日安排
面试策略
4
周周期
12
核心模块
90+
知识点
3
轮模拟面试
60+
高频面试题
计划说明 — 本计划基于你的简历技术栈(Python/PySide6 + C#/.NET WPF 双栈、BLE Mesh、C++/Python 互操作、跨平台构建)量身定制。勾选知识点可自动保存进度到本地,刷新页面不会丢失。
核心策略 — 你有 8 年桌面端实战经验,项目深度和架构设计是你的最大优势,但计算机基础(OS/网络/算法)可能因长期偏应用层而生疏。计划将基础补强放在第 1 周,项目深挖放在第 3 周,确保两手都硬。

🎯 自我评估矩阵

点击星星标注当前掌握程度(1=完全不会 → 5=能深入讲解),制定复习优先级

📘 第1周 · 计算机基础 + 语言深度

夯实计算机基础八股 + Python/C# 语言深度,确保基础题不丢分。8年应用层开发后基础容易生锈,这周优先补强。

操作系统 计算机网络 Python 高级 C# 核心 数据结构

📗 第2周 · 框架原理 + 架构设计

Qt/PySide6 + WPF 框架底层原理、MVVM 架构、IoC/DI、设计模式实战、C++/Python 互操作。这是展现资深度和架构能力的关键周。

PySide6/Qt WPF MVVM IoC/DI 设计模式 C++/Python 互操作

📙 第3周 · 项目深度复盘 + 领域知识

逐个深挖 5 个项目,每个能讲 3 层深度(业务 → 架构 → 实现)。覆盖 BLE Mesh、FFmpeg/MPV、CI/CD、数据库 ORM 等领域知识。

Amaran Desktop Sidus TC Sync Sidus Link WPF 企业IM Revit BIM

📕 第4周 · 模拟面试 + 系统设计 + 手撕代码

3 轮模拟面试 + 系统设计题 + 手撕代码练习。查漏补缺,确保面试当天状态在线。

模拟面试 ×3 系统设计 手撕代码 高频八股

⚙️ 1.1 操作系统核心 必考

进程与线程
高频面试题
  • 进程和线程的区别?为什么线程切换比进程切换快?
  • 死锁的四个必要条件?如何避免?你在项目中遇到过死锁吗?
  • Python 的 GIL 和操作系统的线程是什么关系?GIL 是操作系统层面的还是 Python 层面的?
  • 你在 BLE 指令节流管道中用了哪些同步机制?为什么选这些?
内存管理
高频面试题
  • 虚拟内存的作用?缺页中断是什么过程?
  • C# 的 GC 分几代?大对象为什么放在 LOH?
  • Python 的垃圾回收和 C# 的 GC 有什么本质区别?
  • 你在桌面应用中遇到过内存泄漏吗?怎么排查的?
文件系统与 I/O

🌐 1.2 计算机网络 必考

TCP/IP 协议栈
高频面试题
  • TCP 为什么是三次握手不是两次?四次挥手为什么需要 TIME_WAIT?
  • TCP 的滑动窗口是什么?拥塞窗口和接收窗口有什么区别?
  • HTTPS 的握手过程?对称加密和非对称加密在哪里用?
长连接与实时通信(你的 IM 项目相关)
关键答题点

你的 IM 项目中组织架构增量同步、离线消息本地存储(SQLite)、上线后增量拉取 — 这些都是面试官会追问的网络通信实战点,准备好具体的技术方案。

BLE 蓝牙通信协议(你的核心领域)
高频面试题
  • BLE Mesh 和普通 BLE GATT 有什么区别?为什么要用 Mesh?
  • 你的 BLE 指令三级节流管道(LIFO 栈去重 → ID 版本号失效 → 定时串行消费)能详细讲讲设计思路吗?
  • BLE Mesh 网络状态机有哪 6 种状态?状态转换的守卫机制是什么?
  • Composition Data 你是怎么解析的?Unicast 地址分配算法是什么?
  • 快速拖拽时蓝牙指令洪泛崩溃,具体表现是什么?你是怎么定位和解决的?
这是你的最大亮点 — 必须能讲 3 层深度

第 1 层:业务场景(灯光控制需要实时响应)→ 第 2 层:架构设计(三级管道各解决什么问题)→ 第 3 层:实现细节(LIFO 为什么不是 FIFO、200ms 怎么定的、版本号怎么生成)

🐍 1.3 Python 高级特性 必考

GIL 与并发编程
元类与装饰器(简历亮点)
高频面试题
  • 元类和装饰器都能修改类行为,什么时候用哪个?你项目里 LightControlMeta 为什么选元类?
  • 解释一下描述符协议?property 和普通 attribute 有什么区别?
  • __getattr____getattribute__ 的区别?什么时候用哪个?
  • 你元类中自动生成属性和信号的具体实现是什么?如果让你重新设计,有更好的方案吗?
内存管理与类型系统
Python 工程实践

🔷 1.4 C# 核心机制 必考

CLR 与垃圾回收
异步编程
高频面试题
  • async/await 的底层原理?编译器生成了什么?
  • Task 和 Thread 有什么区别?什么时候用 Task 什么时候用 Thread?
  • async void 为什么危险?在什么场景下必须用 async void?
  • ConfigureAwait(false) 在什么场景下必须用?不写会怎样?
委托、事件与 LINQ

📊 1.5 数据结构与算法基础 重要

复杂度分析
核心数据结构
常用算法模式
建议

每日 LeetCode 2 题,Python 和 C# 交替刷。桌面端面试手撕代码通常不会太难(中等难度为主),重点练:链表操作、二叉树遍历、字符串处理、动态规划基础题。面试可能指定语言。

🎯 2.1 PySide6 / Qt 核心机制 必考

信号与槽
事件循环与线程
高频面试题
  • QThread 的 moveToThread 和继承 QThread 有什么区别?你在项目中用的哪种?为什么?
  • Qt 的信号槽跨线程是怎么传递的?QueuedConnection 的底层机制?
  • Qt 事件循环如果被阻塞了怎么办?processEvents 有什么风险?
  • 你在 Amaran Desktop 中多线程是怎么管理的?BLE 通信在哪个线程?
Model/View 架构
Qt 对象模型与内存管理

🎨 2.2 WPF 核心机制 必考

依赖属性与数据绑定
路由事件与视觉树
自定义控件与性能
高频面试题
  • 依赖属性和普通 CLR 属性有什么区别?为什么要用依赖属性?
  • WPF 路由事件的冒泡和隧道有什么区别?你在项目中怎么用的?
  • 你的 HSI 色轮取色器为什么用 WriteableBitmap 而不是 Shape?性能差异在哪?
  • CommunityToolkit.Mvvm 的 [ObservableProperty] 是怎么工作的?Source Generator 原理?
  • 你的全局快捷键系统是怎么设计的?键盘钩子有什么风险?

🏗️ 2.3 MVVM 架构深度 必考

MVVM 核心概念
PySide6 中的 MVVM 实践
高频面试题
  • 你在 PySide6 项目中是怎么实现 MVVM 的?Qt 没有原生 Binding,你怎么解决?
  • ViewModel 之间需要通信怎么办?你用过 Messenger 模式吗?
  • 40+ 服务依赖注入,启动性能如何?有没有懒加载?
  • 你的动态主题系统 JSON 驱动具体怎么做的?100+ 变量实时切换的性能怎么样?

💉 2.4 IoC / DI 容器 重要

高频面试题
  • 为什么需要 IoC 容器?不用 IoC 直接 new 有什么问题?
  • Transient 和 Singleton 有什么区别?什么场景用哪个?
  • 你的三种注册配置是什么?为什么需要多种注册方式?
  • 循环依赖怎么解决?punq 支持属性注入吗?
  • MEF 和普通 DI 容器有什么区别?为什么 Revit 插件用 MEF?

🎭 2.5 设计模式实战 重要

高频面试题
  • 你的同步框架为什么用策略模式而不是 if-else?策略怎么注册和发现?
  • 状态机和策略模式有什么区别?你的 BLE Mesh 状态机怎么防止非法状态转换?
  • MEF 的插件是怎么发现和加载的?和 .NET 自带的 DI 有什么区别?
  • 设计模式你实际用过哪些?手写一个线程安全的单例模式。

🔗 2.6 C++/Python 互操作 简历亮点

高频面试题
  • SIP 和 pybind11 有什么区别?你在项目中为什么两个都用了?
  • C++ 代码中如果不释放 GIL 会怎样?你在哪里用了 gil_scoped_release?
  • MPV 嵌入到 Qt 窗口的技术原理是什么?为什么不用 Python 直接调?
  • SIP 生成绑定的流程是什么?.sip 文件怎么写?
  • 你的 C++ 水平到什么程度?能独立写 C++ 模块吗?(坦诚回答使用范围)

📦 2.7 CI/CD 与构建发布 展现工程化

高频面试题
  • Nuitka 和 PyInstaller 有什么区别?为什么选 Nuitka?
  • macOS 签名和公证的完整流程?不公证会怎样?
  • 你的 Jenkins Pipeline 是怎么设计的?多平台构建怎么并行?
  • 应用自动更新怎么做的?增量更新原理是什么?

📡 2.8 日志与可观测性 重要

本周目标 — 每个项目准备 3 层深度:① 业务背景和价值 → ② 架构设计和技术选型 → ③ 实现细节和难点突破。面试官追问"再深入讲讲"时层层递进。

💡 3.1 Amaran Desktop — 增量同步框架 重点深挖

第 1 层:业务背景
第 2 层:架构设计
第 3 层:实现细节
面试官可能追问
  • 9 种冲突类型能列举几个?最复杂的是什么?
  • Flag 位运算聚合状态,现场写一下位运算逻辑
  • 如果同时有 100 个设备离线操作后上线,同步怎么处理?
  • 你觉得这个框架还有什么可以改进的地方?

📶 3.2 BLE 指令节流管道 + Mesh 状态机 重点深挖

三级节流管道
BLE Mesh 网络状态机
面试官可能追问
  • LIFO 栈去重为什么用 LIFO?FIFO 有什么问题?
  • ID 版本号失效的机制是什么?版本号怎么生成?
  • 200ms 定时间隔怎么确定的?太长太短各有什么问题?
  • BLE Mesh 6 种状态能画一下状态转换图吗?
  • 快速拖拽导致蓝牙崩溃的具体表现是什么?你怎么定位的?
  • Unicast 地址分配算法的边界情况?设备数量超过地址范围怎么办?
这是你的技术名片 — 准备一张白纸手画状态机图

面试时如果被问到 BLE Mesh 状态机,主动说"我可以在白板上画一下状态转换图" — 这比纯口述更有说服力,展现你对其了如指掌。

🎬 3.3 Sidus TC Sync — 跨平台素材同步 深挖

面试官可能追问
  • timecode 同步和 date 同步有什么区别?哪种更准?
  • FFmpeg 是用命令行还是 API?性能如何?500+ 条素材导入要多久?
  • AAF 和 FCPXML 格式有什么区别?为什么需要导出这么多格式?
  • macOS 沙盒对文件访问有什么限制?你怎么处理的?
  • SIP 生成 PyQt6 绑定的完整流程?

🎛️ 3.4 Sidus Link WPF — 蓝牙 Mesh 控制器 深挖

💬 3.5 企业级 IM 桌面客户端 深挖

📐 3.6 三维算量 For Revit — BIM 插件 了解即可

🗄️ 3.7 数据库与 ORM 重要

SQLite
SQLAlchemy + Alembic(你的项目用)
Entity Framework(你的项目用)
高频面试题
  • SQLite 的 WAL 模式是什么?和默认模式有什么区别?
  • SQLAlchemy 的 N+1 查询问题是什么?怎么解决?
  • Alembic 的 autogenerate 为什么不能完全信任?
  • EF Core 的 DbContext 是线程安全的吗?多线程怎么处理?
  • 你在 Amaran Desktop 中用 SQLAlchemy,在 Sidus Link WPF 中用 EF — 两个 ORM 有什么体验差异?

📝 4.1 桌面端高频面试题 必准备

🏗️ 4.2 系统设计题 加分项

答题框架

① 需求澄清(问清楚约束)→ ② 容量估算(用户量/QPS/数据量)→ ③ 高层架构(画图)→ ④ 核心模块设计 → ⑤ 数据存储方案 → ⑥ 扩展性和容错 → ⑦ 瓶颈和优化

💻 4.3 手撕代码高频题型 每日练习

桌面端常考设计模式(手写)
算法题(中等为主)
建议

用 Python 和 C# 各刷一遍,面试可能指定语言。桌面端面试手撕代码通常中等难度,重点是写对 + 讲清思路。每日 2 题,4 周约 40 题。

🎤 4.4 模拟面试安排 实战演练

轮次建议时间主题重点
第1轮周一自我介绍 + 项目概览3分钟自我介绍、项目一句话概括、技术栈总览。录音回放检查表达流畅度
第2轮周三项目深挖 + 架构设计Amaran Desktop 同步框架 / BLE 节流管道 / C++/Python 互操作链路。准备白板画图
第3轮周五八股文 + 手撕代码Python/C#/Qt/WPF 基础题 + 2道算法题(限时40分钟)
模拟面试技巧

① 用手机录音/录像,回放检查语速、停顿、口头禅 ② 找朋友/同事模拟面试官提问 ③ 每轮结束后复盘未答好的点,第二天补强 ④ 模拟真实面试时长(1-1.5 小时)

📅 每日时间分配建议

时间段内容时长说明
09:00 - 10:00 LeetCode 2题 1h Python/C# 交替,重点刷字符串/数组/树/DP
10:00 - 12:00 当日主题学习 2h 对照计划中的 checklist 逐项复习,做笔记
14:00 - 16:00 项目复盘 + STAR 话术 2h 每天深挖 1 个项目,整理"面试官追问"的答案
16:00 - 17:00 面试题口述练习 1h 口述回答高频面试题,录音回放检查表达
20:00 - 21:00 薄弱项补强 1h 计算机基础 / C++基础 / JS基础
21:00 - 21:30 当日总结 0.5h 记录未掌握的知识点,第二天优先复习
每日总时长约 7.5 小时 — 如果在职复习,可压缩为晚间 3 小时(LeetCode 30min + 主题 1h + 项目复盘 1h + 口述 30min),周期延长至 6-8 周。

🎯 面试策略与注意事项

1. 自我介绍 — 准备两个版本

3 分钟版:8年双栈桌面端 → 核心项目(Amaran / TC Sync / Sidus Link)→ 技术亮点(BLE Mesh + C++/Python 互操作 + MVVM 架构)
1 分钟版:只讲标签和代表作 — "8年桌面端,Python/C# 双栈,专注跨平台应用和 BLE 硬件通信,独立交付过 3 款产品"

2. 项目讲解 — STAR 模型

S (Situation):业务背景和痛点 → T (Task):你的职责和目标 → A (Action):技术方案和实现(重点) → R (Result):成果和数据
每个项目准备 2 分钟版5 分钟版,根据面试官反应调整深度。

3. 技术深度 — 三层递进

面试官说"再深入讲讲"时,要能层层递进:
业务层 → 解决什么问题 → 架构层 → 怎么设计的 → 实现层 → 代码怎么写的 → 原理层 → 底层机制是什么

4. 不熟就说 — 坦诚是最好的策略

简历写了 C++ 但标注"仅互操作层",被问 C++ 深入问题时坦诚说明使用范围,不要硬撑。可以说:"C++ 我主要在 SIP/pybind11 互操作层面使用,没有做过大型 C++ 项目,但在互操作方面经验比较深入。"然后引导到自己擅长的领域。

5. 薄弱项应对 — 用优势补叙事

学校背景(湖南人文科技学院)是客观短板,但你有 8 年实战经验 + 独立交付能力 + 架构设计经验 + BLE 硬件通信稀缺技能。面试时主动引导到项目深度和技术广度上。

6. 引导话题 — 主动展现亮点

面试官的问题往往有多个方向可以展开。比如问"你在项目中遇到过什么难点",不要随便讲一个 bug,要讲 BLE 指令三级节流管道增量同步框架的冲突处理 — 这些是你最亮眼的、最能展现技术深度的内容。

反问环节 — 准备 5 个问题

注意 — 面试最后一定要问 2-3 个问题,展现你的思考深度和对岗位的认真态度。不要问薪资福利(留到 HR 面谈)。