From 1cb6bc6fdad9f66f2e062f43e0e7652de805dc68 Mon Sep 17 00:00:00 2001 From: Guide Date: Wed, 6 Mar 2024 12:18:27 +0800 Subject: [PATCH] =?UTF-8?q?[docs=20update]=E5=AE=8C=E5=96=84=E7=AE=80?= =?UTF-8?q?=E5=8E=86=E7=BC=96=E5=86=99=E6=8C=87=E5=8D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ead-and-write-separation-and-library-subtable.md | 11 +++++++++++ docs/interview-preparation/resume-guide.md | 13 +++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/docs/high-performance/read-and-write-separation-and-library-subtable.md b/docs/high-performance/read-and-write-separation-and-library-subtable.md index 92cd7a01a06..2b627d04dfa 100644 --- a/docs/high-performance/read-and-write-separation-and-library-subtable.md +++ b/docs/high-performance/read-and-write-separation-and-library-subtable.md @@ -214,6 +214,17 @@ MySQL 主从同步延时是指从库的数据落后于主库的数据,这种 - **融合算法分片**:灵活组合多种分片算法,比如将哈希分片和范围分片组合。 - …… +### 分片键如何选择? + +分片键(Sharding Key)是数据分片的关键字段。分片键的选择非常重要,它关系着数据的分布和查询效率。一般来说,分片键应该具备以下特点: + +- 具有共性,即能够覆盖绝大多数的查询场景,尽量减少单次查询所涉及的分片数量,降低数据库压力; +- 具有离散性,即能够将数据均匀地分散到各个分片上,避免数据倾斜和热点问题; +- 具有稳定性,即分片键的值不会发生变化,避免数据迁移和一致性问题; +- 具有扩展性,即能够支持分片的动态增加和减少,避免数据重新分片的开销。 + +实际项目中,分片键很难满足上面提到的所有特点,需要权衡一下。并且,分片键可以是表中多个字段的组合,例如取用户 ID 后四位作为订单 ID 后缀。 + ### 分库分表会带来什么问题呢? 记住,你在公司做的任何技术决策,不光是要考虑这个技术能不能满足我们的要求,是否适合当前业务场景,还要重点考虑其带来的成本。 diff --git a/docs/interview-preparation/resume-guide.md b/docs/interview-preparation/resume-guide.md index dd6a6b33854..f0eb891b90f 100644 --- a/docs/interview-preparation/resume-guide.md +++ b/docs/interview-preparation/resume-guide.md @@ -162,17 +162,22 @@ icon: jianli - 使用 xxx 技术优化了 xxx 模块,响应时间从 2s 降低到 0.2s。 - …… -个人职责介绍示例 : +个人职责介绍示例(这里只是举例,不要照搬,结合自己项目经历自己去写,不然面试的时候容易被问倒) : - 基于 Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权,使用 RBAC 权限模型实现动态权限控制。 -- 参与项目订单模块的开发,负责订单创建、删除、查询等功能。 -- 整合 Canal + RocketMQ 将 MySQL 增量数据(如商品、订单数据)同步到 ES。 +- 参与项目订单模块的开发,负责订单创建、删除、查询等功能,基于 Spring 状态机实现订单状态流转。 +- 商品和订单搜索场景引入 Elasticsearch,并且实现了相关商品推荐以及搜索提示功能。 +- 整合 Canal + RabbitMQ 将 MySQL 增量数据(如商品、订单数据)同步到 Elasticsearch。 +- 利用 RabbitMQ 官方提供的延迟队列插件实现延时任务场景比如订单超时自动取消、优惠券过期提醒、退款处理。 +- 使用 MAT 工具分析 dump 文件解决了广告服务新版本上线后导致大量的服务超时告警的问题。 - 排查并解决扣费模块由于扣费父任务和反作弊子任务使用同一个线程池导致的死锁问题。 +- 基于 EasyExcel 实现广告投放数据的导入导出,通过 MyBatis 批处理插入数据,基于任务表实现异步。 - 负责用户统计模块的开发,使用 CompletableFuture 并行加载后台用户统计模块的数据信息,平均相应时间从 3.5s 降低到 1s。 -- 使用 Sharding-JDBC 以用户 ID 后 4 位作为 Shard Key 对订单表进行分库分表,共 3 个库,每个库 2 个订单表,单表数据量保持在 500w 以下。自定义雪花算法生成订单 ID 的规则,把分片键同时作为的订单 ID 一部分,避免了额外存储订单 ID 与路由键的关系。 +- 基于 Sentinel 对核心场景(如用户登入注册、收货地址查询等)进行限流、降级,保护系统,提升用户体验。 - 热门数据(如首页、热门博客)使用 Redis+Caffeine 两级缓存,解决了缓存击穿和穿透问题,查询速度毫秒级,QPS 30w+。 - 使用 CompletableFuture 优化购物车查询模块,对获取用户信息、商品详情、优惠券信息等异步 RPC 调用进行编排,响应时间从 2s 降低为 0.2s。 - 搭建 EasyMock 服务,用于模拟第三方平台接口,方便了在网络隔离情况下的接口对接工作。 +- 基于 SkyWalking + Elasticsearch 搭建分布式链路追踪系统实现实现全链路监控。 **4、如果你觉得你的项目技术比较落后的话,可以自己私下进行改进。重要的是让项目比较有亮点,通过什么方式就无所谓了。**