banner
按时间整理的学习笔记。

文章归档

Scroll down
IT

一、什么是离线优先

离线优先不是“没有网络时给个错误页”,而是应用的核心流程尽量先依赖本地数据,网络只负责同步。

用户打开页面时,优先读取本地数据库;网络请求成功后再更新本地数据,并通过响应式数据流刷新界面。

一、为什么本地开发需要 Compose

后端项目通常不只是一个应用进程,还依赖数据库、缓存、消息队列、对象存储、搜索引擎等组件。如果每个成员都手动安装,环境差异会越来越大。

Docker Compose 的价值是把这些依赖写成一份可执行的环境说明。

一、为什么要用 asyncio 写爬虫

传统同步爬虫的瓶颈通常不在 CPU,而在网络等待。一个请求发出去后,大部分时间都在等服务器响应,如果用同步方式串行执行,CPU 会长时间空闲。

asyncio 的核心价值是:在等待网络 I/O 时切换到其它任务,让一个进程同时推进多个请求。

一、什么是 OTA

OTA 是 Over-The-Air,通过网络远程升级设备软件。嵌入式设备一旦部署到现场,人工拆机升级成本很高,所以 OTA 是产品化必备能力。

OTA 可能升级:

  • 应用程序。
  • 配置。
  • RootFS。
  • Kernel。
  • U-Boot。
  • 全量固件。

一、嵌入式稳定性为什么难

嵌入式设备经常长期无人值守运行,环境比普通服务器复杂:

  • 可能突然断电。
  • 可能网络不稳定。
  • 可能温度变化大。
  • 可能存储寿命有限。
  • 可能没有人工现场维护。

所以嵌入式开发必须考虑异常恢复。

一、什么是 RTOS

RTOS 是 Real-Time Operating System,实时操作系统。它常用于单片机和资源受限设备中,用来管理多个任务、定时器、同步和通信。

常见 RTOS:

  • FreeRTOS。
  • RT-Thread。
  • Zephyr。
  • ThreadX。

一、发布不只是复制文件

很多程序本地能跑,但上线后容易出问题,原因通常不是代码本身,而是发布流程不规范。

一个可靠发布流程要解决:

  • 发布哪个版本。
  • 发布哪些文件。
  • 配置放在哪里。
  • 日志怎么看。
  • 失败怎么回滚。
  • 依赖库是否齐全。
  • 启动和停止是否可控。

一、为什么要规范工程结构

小 demo 可以一个 main.c 加一条 gcc 命令解决,但真实项目会有多个模块、多个库、测试、安装和部署。工程结构不清晰,后期会很难维护。

一个比较常见的 C/C++ 项目结构:

1
2
3
4
5
6
7
8
9
10
11
my_app/
├── CMakeLists.txt
├── include/
│ └── my_app/
│ └── version.h
├── src/
│ ├── main.c
│ └── version.c
├── tests/
│ └── test_version.c
└── README.md

一、为什么要重视内存

Linux 应用运行时间越长,内存问题越容易暴露。短时间测试正常,不代表长期运行稳定。内存泄漏、越界访问、重复释放、use-after-free 都可能导致崩溃、性能下降或系统被 OOM killer 杀死。

常见内存问题:

  • 内存泄漏。
  • 空指针访问。
  • 数组越界。
  • 重复释放。
  • 释放后继续使用。
  • 栈空间不足。
  • 内存碎片。

一、嵌入式调试的层次

嵌入式调试比普通应用复杂,因为问题可能出在硬件、启动链路、内核、驱动、文件系统或应用。

常见调试手段:

  • 串口日志。
  • LED 状态灯。
  • JTAG/SWD。
  • OpenOCD。
  • GDB。
  • gdbserver。
  • 逻辑分析仪。
  • 示波器。
14567816
请输入关键词进行搜索