一、Linux
- 基础命令
- 如何查看当前进程?
答:ps -aux
或top
(实时监控)。 - 如何查找文件?
答:find /path -name "filename"
或locate filename
。 - 如何查看系统日志?
答:tail -f /var/log/syslog
或journalctl
(Systemd 系统)。
- 如何查看当前进程?
- 权限管理
- 如何修改文件权限?
答:chmod 755 filename
或chmod u+x filename
。 - 如何修改文件所有者?
答:chown user:group filename
。
- 如何修改文件权限?
- 性能排查
- CPU 使用率过高如何排查?
答:top
找到占用高的进程,结合strace
或perf
分析。 - 如何查看内存使用情况?
答:free -h
或vmstat
。 - 如何排查磁盘 I/O 问题?
答:iostat
或iotop
。
- CPU 使用率过高如何排查?
- Shell 脚本
- 如何实现定时任务?
答:crontab -e
添加任务。 - 如何传递参数给脚本?
答:通过$1
,$2
等获取参数。
- 如何实现定时任务?
二、Docker
- 基础概念
- Docker 和虚拟机的区别?
答:Docker 共享宿主机内核,轻量级;虚拟机需要完整操作系统。 - 镜像(Image)和容器(Container)的关系?
答:镜像是只读模板,容器是镜像的运行实例。
- Docker 和虚拟机的区别?
- 常用命令
- 如何构建镜像?
答:docker build -t image-name .
。 - 如何进入运行中的容器?
答:docker exec -it container-id /bin/bash
。
- 如何构建镜像?
- 高级问题
- Dockerfile 中
COPY
和ADD
的区别?
答:ADD
支持自动解压和远程 URL,COPY
仅复制本地文件。 - 如何限制容器资源?
答:docker run --memory=1g --cpus=2
。 - Docker 网络模式有哪些?
答:bridge
(默认)、host
、none
、overlay
。
- Dockerfile 中
- 实战场景
- 如何持久化容器数据?
答:使用数据卷(Volume)或绑定挂载(Bind Mount)。 - Docker Compose 和 Docker Swarm 的区别?
答:Compose 用于单机多容器编排,Swarm 是 Docker 原生的集群管理工具。
- 如何持久化容器数据?
三、Redis
- 核心概念
- Redis 支持哪些数据类型?
答:String、List、Hash、Set、Sorted Set、Bitmaps 等。 - 什么是缓存穿透/雪崩/击穿?如何解决?
答:- 穿透:查询不存在的数据 → 布隆过滤器。
- 雪崩:大量缓存同时过期 → 随机过期时间。
- 击穿:热点 key 失效 → 互斥锁或永不过期。
- Redis 支持哪些数据类型?
- 持久化
- RDB 和 AOF 的区别?
答:RDB 是快照,恢复快但可能丢失数据;AOF 记录写操作,更安全但文件大。 - 如何选择持久化方式?
答:生产环境通常同时开启 RDB 和 AOF。
- RDB 和 AOF 的区别?
- 高可用
- 主从复制原理?
答:主节点异步复制数据到从节点。 - 哨兵(Sentinel)和 Cluster 的区别?
答:哨兵监控主从故障转移,Cluster 分片存储数据。
- 主从复制原理?
- 性能优化
- 如何减少大 Key 的影响?
答:拆分大 Key 或使用压缩算法。 - Redis 为什么快?
答:内存操作、单线程避免上下文切换、I/O 多路复用。
- 如何减少大 Key 的影响?
四、SpringCloud
- 核心组件
- Eureka 和 Nacos 的区别?
答:Nacos 支持动态配置管理和服务发现,Eureka 仅服务发现。 - Ribbon 的负载均衡策略有哪些?
答:轮询、随机、加权响应时间等。
- Eureka 和 Nacos 的区别?
- 服务治理
- Hystrix 的作用?
答:服务熔断、降级、隔离,防止雪崩效应。 - Gateway 和 Zuul 的区别?
答:Gateway 基于异步非阻塞模型(Netty),性能更高。
- Hystrix 的作用?
- 配置中心
- Spring Cloud Config 如何实现动态刷新?
答:通过@RefreshScope
注解 + Spring Cloud Bus 通知。 - 如何保证配置安全?
答:加密敏感配置(如使用 Jasypt)。
- Spring Cloud Config 如何实现动态刷新?
- 分布式事务
- Seata 的 AT 模式原理?
答:通过全局锁 + 反向 SQL 日志实现两阶段提交。
- Seata 的 AT 模式原理?
五、MQ(消息队列)
- 核心概念
- 为什么使用 MQ?
答:解耦、异步、削峰填谷。 - 如何保证消息不丢失?
答:生产者确认(ACK)、MQ 持久化、消费者手动提交。
- 为什么使用 MQ?
- 常见问题
- 如何处理消息重复消费?
答:幂等性设计(如唯一 ID + 数据库去重)。 - 如何保证消息顺序性?
答:单分区(Kafka)或同一队列(RabbitMQ)顺序消费。
- 如何处理消息重复消费?
- 对比与选型
- Kafka 和 RabbitMQ 的区别?
答:Kafka 高吞吐适合日志场景,RabbitMQ 功能丰富适合业务消息。 - RocketMQ 的特性?
答:支持事务消息、延迟消息、消息轨迹。
- Kafka 和 RabbitMQ 的区别?
- 实战场景
- 消息堆积如何处理?
答:增加消费者、设置过期时间、批量处理。 - 如何实现延迟队列?
答:RabbitMQ 死信队列,RocketMQ 内置延迟级别。
- 消息堆积如何处理?
高频综合问题
- 如何用 Docker 部署 SpringCloud 微服务?
答:打包镜像 → 使用 Docker Compose 定义服务依赖 → 配置网络和卷。 - Redis 在 SpringCloud 中如何实现分布式锁?
答:SET key value NX EX timeout
+ Lua 脚本释放锁。 - 如何通过 MQ 实现最终一致性?
答:生产者发送事务消息 → 消费者处理成功后确认。