大厂面试精选
- 微服务设计一般都遵循什么原则?(阿里)
答:(1)单一职责原则。让每个服务独立,有界限的工作,每个服务只关注自己的业务,做到高内聚低耦合(服务之间耦合)
(2)服务自治原则。每个服务要能做到独立开发、独立测试、独立构建、独立部署、独立运行,与其他服务进行解耦。
(3)轻量通讯原则。让每个服务之间的调用是轻量级,并且能够跨平台、跨语言、。例如采用Restful风格,利用消息队列进行通信等
(4)粒度进化原则。对每个服务的粒度把控,其实没有统一的标准,这个得结合解决的具体业务问题,不要过度设计,服务的粒度随着业务和用户的发展而发展。
软件是为业务服务的,好的系统不是设计出来的,而是进化出来的。
- Redis6.0 为什么要引入多线程?(美团)
答:对小公司而言,数据量不是特别大,一般的业务单线程就够了,数据——>内存 100ns,比较小的数据包,8w-10w QPS(极限值)
针对大的公司,可能需要更大的QPS,超过10wQPS, 多线程其实是IO多线程,内部执行命令还是单线程
为什么不采用分布式架构——很大的缺点,服务数量多,维护成本高
Redis命令,不适用数据分区,数据分区,无法解决热点读/写的问题
数据倾斜、重新分配、扩容、缩容,更加复杂
多线程任务分摊到Redis 同步IO中读写负载。充分利用多核CPU优势。
- 什么是分库分表?什么时候进行分库分表?(百度)
答:简单来说,分库分表就是指通过某种特定软件,将我们存放在同一个数据库中的数据分散存放到多个数据库上,以达到分散单台设备负载的效果。
分库分表解决什么问题?
分库分表的目的就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来单体服务的数据库进行拆分,将数据大表拆分成若干数据表组成,使得单一数据表的数据量变小,从而达到提升数据库性能的目的。
什么情况下要进行分库分表?
单机存储容量遇到瓶颈
连接数处理能力达到上限
实践中要结合实际情况进行,一般单表存储达到1000万或100G的时候,性能会变慢,可以考虑分库分表。数据量小的话不建议分库分表。
分库分表策略?
- 垂直分库
数据库中不同的表对应着不同的业务,垂直切分是指按照业务的不同将表进行分类,分布到不同的数据库上面,将数据库部署在不同服务器上,从而达到多个服务器共同分摊压力的效果。
- 垂直分表
将一张表拆分成多种表
垂直拆分带来的一些提升
- 解决业务层面的耦合,业务清晰
- 能对不同业务的数据进行分级管理、维护、监控、扩展等
- 高并发场景下,垂直分库一定程度的提高访问性能
垂直拆分没有彻底解决单表数据量过大的问题。
- 水平分库
将单站表的数据切分到多个服务器上去,每个服务器具有相应的库与表,只是表中数据集合不同。水平分库分表能够有效的缓解单机和单库的性能瓶颈和压力,突破IO、连接数、硬件资源等瓶颈。
简单说就是根据表中的数据逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,例如将订单表按照ID是奇数还是偶数,分别存储在不同数据库中。
- 水平分表
针对数据量巨大的单张表(比如订单表),按照规则把一张表的数据切分到多张表里去,但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈的。
总结:
垂直分表:将一个表按照字段分成多表,每个表存储其中一部分字段。
垂直分库:根据表的业务不同,分别存放在不同的库中,这些库分别部署在不同的服务器。
水平分库:把一张表的数据按照一定规则,分配到不同的数据库,每一个库只有这张表的部分数据。
水平分表:把一张表的数据按照一定规则,分配到同一个数据库的多张表中,每个表只有这个表的部分数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)