前言
之前为了准备面试,收集整理了一些面试题。
本篇文章更新时间2023年12月27日。
最新的内容可以看我的原文:https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv
MySQL
索引
说一下有哪些锁?
行锁有哪些?
性能优化
分库分表
常用库:mycat、shardingsphere
Sharding 策略
- 哈希取模
- 范围:时间范围、ID范围
- 增加映射表
高性能、高可用
什么时候分库?什么时候分表?
分库的时机:
- 性能需求:比如高并发下,连接数不够用。
- 数据规模:数据库服务器空间不足、数据量大性能下降。
分表时机:
- 单表过大
- 冷、热数据分离;
分布式系统
分布式锁
分布式事务
Seata提供的分布式事务方案
分布式接口幂等性
SpringCloud
什么是微服务?
微服务标签:一种架构风格、拆分成多个小服务、独立进程、服务围绕业务功能而构建、可独立开发、部署、扩展、轻量级通信、多语言&不同存储技术
简单地说,微服务架构风格就是一种将单个应用拆分成一组小服务开发的方法,每一个小服务运行在它自己的进程中并且使用轻量的协议通信,通常是一个HTTP资源API。这些服务围绕业务能力构建并且由自动化部署机器部署。这些服务有着最小化的中央管理,这个中央管理可以使用不同语言编写并使用不同的数据存储技术。—— James Lewis and Martin Fowler(马丁·福勒)
SpringBoot和SpringCloud的区别?
SpringBoot专注开发单个服务。
SpringCloud关注全局的微服务协调治理。
SpringCloud依赖SpringBoot。
谈谈服务降级、熔断、服务隔离
- 服务降级:服务不可用时直接返回结果给客户端,不用一直等待。
- 熔断:错误率达到一定的阈值之后就断路,之后慢慢重新开放。
- 隔离:防止调用雪崩。一般是通过线程池、或信号量隔离。
服务隔离方案
类别 | 线程池隔离 | 信号量隔离 |
---|---|---|
线程 | 使用线程池的内的线程,而非调用线程 | 与调用线程是同一个 |
开销 | 线程切换、排队、调度 | 无切换开销 |
异步 | 支持 | 不支持 |
超时 | 支持 | 支持 |
并发控制 | 线程池大小控制 | 信号量数控制 |
微服务治理
微服务治理是指在微服务架构中,通过一系列的策略、工具和实践来 管理、监控和控制微服务的运行和交互。
它旨在确保微服务系统的可靠性、高效性和可扩展性,并提供一致的开发和运维体验。