十年酬尽英雄泪,一朝闻道轩辕巅!
百二秦关终属楚,三千越甲可吞吴。十年追梦,几度折戟。有人倒在决赛前夜,有人困在命运门外。但只要还没有放弃,故事就永远没有结束。 2026 年 6 月 21 日,NiKo 终于在科隆捧起了属于他的第一座 Major 奖杯。 这不是一场普通的胜利,也不只是一座冠军奖杯。对于一个被天赋、期待、遗憾和质疑包围了十年的选手来说,这更像是一次迟来的加冕。 初识:从达拉斯开始的喜欢第一次完整看 NiKo 的比赛,是 2024 年的 IEM 达拉斯。 那时 G2 的指挥 HooXi 因为参加姐姐的婚礼缺席赛事,队伍只能带着替补出战。赛前几乎没有多少人看好这支 G2,可他们偏偏在最不被期待的时候,一路杀出重围,最终拿下了 IEM 达拉斯冠军。 那种以弱胜强的故事很难不让人动容。也就是从那时开始,我真正成为了 NiKo 的粉丝。 在那之前,我也零零散散刷到过他的高光片段,比如对阵 BIG 时的沙鹰 ACE。那时候的 NiKo 凭借上一年的 TOP2 排名,依然是许多人心中的“世一步”。直到年底上海 Major 绿龙夺冠前,社区里关于 NiKo 和 donk 谁才是“世一步”的讨论,依然吵得不可...
滑动窗口
1. 长度最小的子数组题目描述给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回 0 。 示例 1: 123输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。 示例 2: 12输入:target = 4, nums = [1,4,4]输出:1 示例 3: 12输入:target = 11, nums = [1,1,1,1,1,1,1,1]输出:0 题解123456789101112131415161718192021class Solution { public int minSubArrayLen(int target, int[] nums) { int n = nums.length; int ans = n + 1;...
相向双指针
1. 两数之和题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1: 123输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 12输入:nums = [3,2,4], target = 6输出:[1,2] 示例 3: 12输入:nums = [3,3], target = 6输出:[0,1] 题解1. 暴力两次枚举,需要两次遍历,时间复杂度O(n²) 12345678910111213class Solution { public int[] twoSum(int[] nums, int target) { for (int i = 0; i < n; i++) { // 枚举 i ...
听书项目专题|Seata 集成笔记
集中整理 Seata 的全局事务流程、应用模式、TC 服务配置,以及服务端接入的学习步骤。 本篇要点 理解 TC、TM、RM 的职责 比较不同事务模式 核对 TC 部署与客户端配置 **学习提示:**本篇为 Seata 学习与配置笔记,不能仅凭配置示例推断跨服务事务已在生产环境验证;示例口令和密钥已占位。 3 Seata概述3.1 Seata流程 使用阿里巴巴提供分布式事务框架Seata实现 Seata事务管理中有三个重要的角色: 1、TC (Transaction Coordinator) - **事务协调者:**全局事务决策者。 2、TM (Transaction Manager) - **事务管理器:**全局事务发起者。 3、RM (Resource Manager) - **资源管理器:**管理分支(本地)事务。 实现流程: 1、由TM发起开启全局事务到TC服务器 2、TC服务器开启全局事务,会返回xid(本次全局事务的id) 3、各个微服务模块分支事务,在TC服务器进行注册(注册到全局事务里面) 4、各个微服务模块执行业务SQL,把各个模块执行结果...
听书项目专题|RabbitMQ 可靠性与延迟消息
整理 RabbitMQ 生产者确认、消费者确认、重试机制,以及死信队列和延迟插件两类延迟消息方案。 本篇要点 分开看生产者、Broker 和消费者确认 了解发送失败后的重试 比较死信队列与延迟插件 **学习提示:**本篇是 RabbitMQ 机制笔记;项目实际的订单超时取消方案要以对应代码为准,消息可靠性也不等于“绝不丢失、绝不重复”。 RabbitMQ使用1、消息可靠性配置1.1、介绍MQ消息的可靠性,一般需要三个方面一起保证: 生产者不丢数据 MQ服务器不丢数据 消费者不丢数据 保证消息不丢失有两种实现方式: 开启事务模式 消息确认模式(生产者,消费者) **说明:**开启事务会大幅降低消息发送及接收效率,使用的相对较少,因此我们生产环境一般都采取消息确认模式,以下我们只是讲解消息确认模式 1.2、消息发送确认配置消息发送确认可以保证生产者不丢数据 封装发送端消息确认配置类12345678910111213141516171819202122232425262728293031323334353637383940414243@Slf4j@Componen...
听书项目 Day 17|分布式事务与 Seata
学习分布式事务方案、Seata 的 TC/TM/RM 角色与集成步骤,并整理登录模块的面试复习笔记。 本篇要点 比较分布式事务的常见方案 认识 Seata 的角色与配置 复盘登录链路和面试问答 **学习提示:**文末“自我介绍”是笔记中的示例口径,不应直接当成个人履历;Seata 配置中的示例口令和密钥已替换为占位符。 分布式事务1、分布式事务理论1.1 本地事务 在同一个数据库里面,操作多张表,保证同一个数据库多张表数据一致性,要么都成功,如果一个失败所有都失败,称为本地事务 事务四个特性:原子性、一致性、隔离性、持久性 如果不考虑事务隔离性,产生脏读、不可重复读、幻(虚)读,解决设置事务隔离级别 – MySQL默认隔离级别:可重复读 事务传播行为(经常问) – 指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。 – REQUIRED:默认传播行为 如果当前有事务使用当前事务,如果没有创建新的事务 – REQUIRES_NEW: 新建事务 1.2 分布式事务概念 保证不同数据库中数据一致性。操作表在不...
听书项目 Day 16|充值与 XXL-JOB 任务调度
记录充值订单、支付结果处理和 XXL-JOB 的部署与接入,并复盘订单模块涉及的异步处理。 本篇要点 梳理充值订单与支付记录 学习 XXL-JOB 调度中心和执行器 复盘订单异步处理 **学习提示:**课程中的支付、延迟方案与调度配置应按实际代码和环境验证;不要把示例配置视为生产部署结果。 内容回顾1、设计模式优化你熟悉设计模式? 你项目中是否使用过设计模式? 你项目做过哪些代码级别优化? – 使用策略模式优化添加购买记录 – 使用aop + 注解方式实现专辑缓存 策略模式:使用的就是面向对象的多态机制,从而实现同一行为在不同场景下有不同实现 场景:添加购买记录 订单包含vip、声音和专辑,购买这些都需要添加购买记录,买内容不同添加记录不同 这个场景使用策略模式进行优化 – 第一步 创建接口,定义添加购买记录方法 – 第二步 根据不同购买类型比较多个实现类,创建vip、声音和专辑实现类,分别实现方法 – 第三步 创建环境类,根据不同购买类型返回不同实现类对象 2、微信支付 发起微信支付请求 查询微信支付状态 项目中,对于微信支付如何判断成功或者失败? 1 ...
听书项目 Day 15|支付状态、购买记录与微信支付
记录余额支付后的订单状态更新、购买记录策略模式改造,以及微信支付发起、状态查询与回调处理。 本篇要点 处理余额支付后的订单状态 用策略模式整理购买记录 梳理微信支付请求与回调 **学习提示:**微信支付相关代码和测试片段属于学习记录,不代表已经通过真实商户环境的端到端验收。 内容回顾1、提交订单接口 检查和扣减余额 保存订单数据 延迟消息(订单超时未支付自动取消) – RabbitMQ的TTL+死信队列 – RabbitMQ延迟插件 – Redisson实现 保存购买记录 今天内容0、订单模块总结第一,订单模块流程(图) 第二,细节或者技术等 进行重复提交判断 进行数据加密防止篡改 使用策略模式对添加购买记录优化 1、余额支付完成修改订单状态 使用余额支付成功之后,修改订单状态变成已经支付 1234567891011121314151617181920212223242526272829303132//根据订单编号修改订单状态public void orderPaySuccess(String orderNo) { //根据订单编号...
听书项目 Day 14|订单提交与余额扣减
梳理订单创建、远程检查和扣减账户余额、消息可靠性与超时未支付订单处理方案。 本篇要点 串联提交订单的业务步骤 检查余额并进行条件扣减 区分消息可靠性与延迟取消方案 **学习提示:**笔记中列出 TTL/死信队列和延迟插件等方案;方案介绍不等于当前项目的超时取消链路已使用 RabbitMQ 延迟消息。 内容回顾 登录 搜索 详情 订单 1、跳转到结算页面 订单:vip、专辑、声音 都是跳转结算页面,显示vip、专辑、声音 2、生成订单接口(一部分) 重复提交 数据加密判断 今天内容1、订单实现流程 2、订单接口OrderService订单方法123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384//提交订单接口@Overridepublic String submitOrder(OrderIn...
听书项目 Day 13|声音结算页与订单提交
记录购买声音的结算页、可购买集数、订单提交前的业务检查及用户余额查询。 本篇要点 进入购买声音的结算流程 计算和展示可购买声音 梳理提交订单与余额查询 内容回顾1、canal工具 canal解决mysql和redis数据一致性问题 底层机制 – 相当于mysql从机,监控主机二进制日志变化 2、订单模块 跳转结算页面需求 – 购买vip – 购买专辑 – 购买声音 优惠价格计算公式 – 比如100,打八折,优惠20 – 原始价格 * (10-折扣)/ 10 防止重复提交 防止数据被篡改,数据加密 今天内容 登录 搜索 详情 订单 1、跳转结算页面(购买声音)1.1 实现流程 实现上面流程,编写两个接口 第一个接口,显示可以购买声音集数 第二个接口,跳转声音购买结算页面 1.2 显示可以购买声音集数接口 123456789//显示可以购买声音集数@GuiguLogin@Operation(summary = "获取用户声音分集购买支付列表")@GetMapping("/findUserTrackPaidL...

