0%

核心概念

K3s 是什么?和标准 K8s 的区别?(轻量级、简化部署、适合边缘)

一句话原理 K3s 是由 Rancher Labs 开发的轻量级 Kubernetes 发行版,它删除了 K8s 中非必需的遗留代码、Alpha/Beta 特性和内置插件(如默认 Storage Driver),将所有组件打包进一个小于 100MB 的单一二进制文件中。

一句话源码 在 Linux 服务器上只需执行 curl -sfL https://get.k3s.io | sh - 即可完成 K8s 集群的安装,无需复杂的 kubeadm init 和证书配置。

一句话项目/场景 在“物联网边缘计算”项目中,将 K3s 部署在 ARM 架构的树莓派或工业网关上,用于管理运行在边缘侧的容器应用,实现离线数据处理和低延迟响应。

基础使用

Docker Compose 的作用是什么?解决了什么问题?

一句话原理 Docker Compose 是一个用于定义和运行多容器应用的工具,通过一个 YAML 文件(docker-compose.yml)将应用的架构、网络和数据卷配置“代码化”,实现一键构建、启动和销毁。

一句话源码 使用 docker-compose up -d 一键启动复杂架构,替代了原本需要编写数十行 Shell 脚本或冗长的 docker run 命令。

一句话项目/场景 在“微服务开发环境搭建”中,需要同时启动 API 服务、MySQL 数据库、Redis 缓存和 RabbitMQ 消息队列,使用 Compose 可以一键拉起整套环境,团队成员无需手动配置每个组件的 IP 和端口映射。

镜像与容器

Docker 镜像和容器的区别是什么?

一句话原理 Docker 镜像是静态的只读模板(相当于“类”或“安装包”),包含了运行应用所需的代码、库和环境;而容器是镜像的动态运行实例(相当于“对象”或“进程”),拥有独立的文件系统和资源隔离环境。

一句话源码 在操作层面,通过 docker builddocker pull 生成镜像,通过 docker run 将镜像实例化为容器,容器在镜像层之上叠加了一个可写的容器层。

一句话项目/场景 在 CI/CD 流水线中,开发人员构建出一个版本固定的 镜像,测试人员将该镜像部署到测试环境运行成 容器,运维人员再将同一镜像部署到生产环境,实现“一次构建,到处运行”。


详细区别对比

维度Docker 镜像Docker 容器
生命周期静态,永久存储(除非手动删除)动态,可创建、启动、停止、销毁
面向对象类比对象
物理文件类比安装包 / 光盘运行中的软件 / 正在播放的电影
读写权限只读,不可修改可读写,修改发生在最上层
关系是容器的基础模板是镜像的运行实例
存储结构分层存储,多层共享,节省空间在镜像层之上增加“容器层”

基础实现

如何用 Redis 实现分布式锁?核心步骤是什么?

一句话原理:Redis 分布式锁基于“占用式”思想,利用 SET NX EX 原子命令抢占锁标识,通过唯一 Value 防止误删,并结合 Lua 脚本确保“判断+删除”解锁过程的原子性。

一句话源码:在 db.c 中,SET NX 命令本质上调用 setKey 函数,在 lookupKeyWrite 查找 Key 不存在时执行 dbAdd 写入并关联 setExpire 过期时间,从而实现互斥。

一句话项目/场景:在电商秒杀扣减库存场景中,使用 SET lock:stock UUID NX EX 10 加锁,业务执行完毕后通过 Lua 脚本校验 UUID 并 DEL,严防超卖与死锁。

Redis 为什么这么快?(内存、IO 多路复用、单线程)

一句话原理:Redis 基于纯内存操作规避磁盘 I/O 瓶颈,利用 epoll 机制实现 IO 多路复用,在单线程事件循环中串行处理命令,彻底避免了多线程上下文切换与锁竞争的开销。

一句话源码:核心逻辑位于 aeProcessEvents 函数,通过 aeApiPoll 监听就绪 Socket,将网络读写与命令执行封装为 FileEvent 事件,在主线程中由 aeMain 循环按顺序无锁调度执行。

一句话项目/场景:在 Redis 6/7 版本的高并发场景下,针对网络 I/O 瓶颈引入多线程进行数据协议的读写解析,但核心命令执行仍保持单线程,既利用多核提升吞吐,又规避了事务与 Lua 脚本的并发原子性问题。