# growing **Repository Path**: S_Yang/growing ## Basic Information - **Project Name**: growing - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-11-11 - **Last Updated**: 2026-01-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Growing - Java 技术提升实践项目 [![Java](https://img.shields.io/badge/Java-17-orange.svg)](https://www.oracle.com/java/) [![Spring Boot](https://img.shields.io/badge/SpringBoot-3.5.7-success.svg)](https://spring.io/projects/spring-boot) [![Maven](https://img.shields.io/badge/Maven-3.9+-blue.svg)](https://maven.apache.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) > 一个“长期迭代 + 系统化学习”型仓库:既覆盖 CodeTop 前 100 高频算法题的 Java 实现与解题思路,也包含常见后端业务场景 / 系统设计题的落地方案(Redis 数据结构实战等)。旨在打通“算法刷题 → 场景设计 → 工程实现”的技术成长路径。 --- ## 🧩 模块总览 | 模块 | 说明 | 侧重点 | 入口目录 | |------|------|--------|------------------------------------------------| | codetop100 | CodeTop 高频前 100 题实现,含多类数据结构与算法套路 | 算法、复杂度、编码规范 | [CodeTop100](https://gitee.com/S_Yang/growing/tree/master/codetop100/src) | | scenarios | 常见场景题 / 系统设计 Demo(点赞、购物车等) | 数据结构选型、接口语义、可扩展性 | `scenarios/src/main/java/cn/yanceysong/scene/` | --- ## 🚀 当前进度 & 里程碑 ### 算法题分段完成度 | 分段 | 题号范围 | 完成 | 总数 | 进度 | |------|----------|------|------|-------| | s1_s10 | 1-10 | 10 | 10 | ✅ | | s11_s20 | 11-20 | 10 | 10 | ✅ | | s21_s30 | 21-30 | 10 | 10 | ✅ | | s31_s40 | 31-40 | 10 | 10 | ✅ | | s41_s50 | 41-50 | 10 | 10 | ✅ | | s51_s60 | 51-60 | 9 | 10 | ⚠️ 缺 S58 | | s61_s70 | 61-70 | 10 | 10 | ✅ | | s71_s80 | 71-80 | 10 | 10 | ✅ | | s81_s90 | 81-90 | 10 | 10 | ✅ | | s91_s100 | 91-100 | 10 | 10 | ✅ | | 合计 | 1-100 | 99 | 100 | 99% | - 最近里程碑:完成 90% → 95% → 99% - 下一个目标:补全缺失题 S58 + 增加题目标签统计脚本 ### 场景题 | 场景 | 状态 | 核心数据结构 | 文件 | |------|------|--------------|------| | 朋友圈点赞 | ✅ | Redis ZSet (有序集合) | `RedisLikeDemo.java` | | 购物车设计 | ✅ | Redis Hash | `GoodsCar.java` | | 未来: 限流、缓存淘汰策略、分布式锁 | 📋 规划中 | - | - | --- ## 🏗 项目结构(简化) ``` ./ ├── codetop100/ # 算法题模块 │ ├── pom.xml │ └── src/main/java/com/yanceysong/codetop/ │ ├── s1_s10/ ... s91_s100/ # 分段目录 │ ├── common/ # 公共结构: ListNode/TreeNode 等 │ └── other/ # 补充:排序、工具等 ├── scenarios/ # 场景题模块 │ ├── pom.xml │ └── src/main/java/cn/yanceysong/scene/ │ ├── s1_s10/ # 已完成场景题分段 │ └── s11_s20/ # 预留(当前空) ├── pom.xml # 顶层聚合 POM (packaging=pom) ├── LICENSE └── README.md ``` --- ## ⚙️ 快速开始 ### 1. 环境要求 - JDK: 17+ - Maven: 3.8+/3.9+ - Redis: 用于场景题运行 (点赞 / 购物车) - IDE: IntelliJ IDEA (推荐) / Eclipse / VSCode ### 2. 克隆 & 构建 ```powershell # 克隆仓库 git clone https://github.com/yanceysong/growing.git cd growing # 构建全部模块 mvn clean install -DskipTests # 仅构建算法模块 mvn -pl codetop100 -am clean compile # 仅构建场景题模块 mvn -pl scenarios -am clean compile ``` ### 3. 运行算法题示例 很多题目包含 `main` 测试方法,可直接在 IDE 中运行;也可使用 `exec` 插件(如自行添加)或编写临时 Runner。 ### 4. 运行场景题 (需要 Redis + Redisson 配置) ```powershell # 启动 Spring Boot 场景模块(如后续补充入口/配置) mvn -pl scenarios spring-boot:run ``` > 当前 Demo 类(`RedisLikeDemo`, `GoodsCar`)为纯服务类设计,建议在 Spring 环境中注入 `RedissonClient` 后编写集成测试运行。 ### 5. Redis 快速启动(本地) ```powershell # Docker 方式(示例) docker run -d --name redis -p 6379:6379 redis:7-alpine ``` --- ## 📚 算法模块说明 (codetop100) ### 1. 文件命名规范 `S{序号}_{难度}_{题号}_{题目中文名}.java` - 序号:按项目内部进度与热度排序(非原题号) - 难度:Easy / Mid / Hard → 中文名:简单 / 中等 / 困难 - 题号:LeetCode 原始题号 - 中文名:题意概要(统一风格便于检索) 示例:`S2_Mid_146_LRU缓存机制.java` - S2 → 排名/顺序第 2 - Mid → 中等难度 - 146 → LeetCode 题号 - LRU缓存机制 → 题目名称 ### 2. 题目文件结构推荐 ```java public class S2_Mid_146_LRU缓存机制 { /** * 题目描述 & 约束 * 输入输出示例 * 思路讲解(多解法对比: 哈希+双向链表 vs LinkedHashMap) * 时间 / 空间复杂度 */ // 解法核心 static class LRUCache { /* ... */ } public static void main(String[] args) { // 基本功能 / 边界 / 性能用例 } } ``` ### 3. 学习路径建议 ``` 阶段一:数据结构基础 (链表 / 数组 / 字符串) 阶段二:经典算法模式 (双指针 / 滑动窗口 / 递归 / 回溯 / 排序) 阶段三:动态规划与设计题 (LRU / 编辑距离 / 计算路径) 阶段四:综合与优化 (区间 / 图 / 难题拆解) ``` 配合:记录错题 → 分类整理 → 复盘复杂度 → 反向复述解法。 ### 4. 常用模板示例 链表反转: ```java public ListNode reverseList(ListNode head) { ListNode prev = null, cur = head; while (cur != null) { ListNode next = cur.next; cur.next = prev; prev = cur; cur = next; } return prev; } ``` 滑动窗口: ```java int left = 0, right = 0; Map window = new HashMap<>(); while (right < s.length()) { char c = s.charAt(right++); window.put(c, window.getOrDefault(c,0)+1); while (/* 收缩条件 */) { char d = s.charAt(left++); window.put(d, window.get(d)-1); } // 更新答案 } ``` --- ## 🧪 场景题模块说明 (scenarios) 围绕“高频业务需求 → 数据结构选型 → 可扩展点”进行 Demo 实现。 ### 1. 朋友圈点赞功能 (Redis ZSet) - 需求:记录点赞、去重、顺序展示、数量统计、是否点赞检查、TopN 最早点赞用户。 - 选型:ZSet → member=用户ID, score=时间戳,实现排序+去重。 - 核心操作:`ZADD / ZREM / ZRANGE / ZCARD / ZSCORE`。 - 时间复杂度:新增/删除 O(logN),列表获取 O(M+logN),计数 O(1)。 核心片段: ```java boolean likePost(String postId, String userId) { RScoredSortedSet set = redisson.getScoredSortedSet("like:" + postId); if (set.contains(userId)) return false; // 去重 set.add(System.currentTimeMillis(), userId); // 时间戳排序 return true; } ``` 可扩展: - 防刷点赞:滑动窗口限流 + 布隆过滤器 - 最近取消恢复:保留历史表或消息队列推送 - 排行榜:同一结构复用,附加定期快照 ### 2. 购物车设计 (Redis Hash) - 需求:增删改查商品、数量更新、清空、合并登录前后购物车。 - 选型:Hash → key=`cart:userId`, field=`skuId`, value=结构体/JSON。 - 操作:`HGET / HSET / HDEL / HGETALL / DEL`。 - 优点:按 SKU O(1) 操作;拓展多字段;易于统计数量。 核心片段: ```java void addToCart(String userId, String skuId, int count) { RMap cart = redisson.getMap("cart:" + userId); CartItem item = cart.get(skuId); if (item != null) { item.setCount(item.getCount()+count); } else { item = new CartItem(skuId, count, System.currentTimeMillis()); } cart.put(skuId, item); } ``` 可扩展: - 合并匿名购物车:登录后遍历本地列表合并到 Redis - 失效策略:SKU 下架检测 → 定时校验 / 惰性删除 - 总价计算:实时查商品服务 (避免价格缓存过期问题) ### 3. Redis 数据结构选型对比 | 场景 | 使用结构 | 为什么不是其他 | 可替代方案 | |------|----------|----------------|------------| | 点赞顺序 + 去重 | ZSet | 有序+去重+范围查询 | List+去重缓存 (复杂) | | 用户购物车 | Hash | Key→用户, Field→SKU, O(1) CRUD | ZSet(按时间排序)、JSON 存整个列表 | --- ## 🛠 技术栈 & 依赖 | 名称 | 版本 | 用途 | |------|------|------| | Java | 17 | 语言特性 (Record, Switch 增强可选) | | Spring Boot | 3.5.7 | 聚合管理 / 场景题后端运行环境 | | Redisson | 3.18.0 | Redis 客户端高级封装 (分布式结构) | | Hutool | 5.8.28 | HTTP 辅助、工具类 (算法题数据拉取扩展) | | Fastjson2 | 2.0.52 | JSON 解析/序列化 | | Lombok | 1.18.36 | 简化 POJO 代码 | --- ## 🤝 如何贡献 1. Fork 本仓库 2. 创建特性分支:`git checkout -b feature/add-s58` / `feature/scene-cart-merge` 3. 遵循命名 & 注释规范:题目类添加 Javadoc;场景服务写清操作语义 4. 提交: ```powershell git add . git commit -m "feat(codetop): 完成 S58_Mid_xxx 题解 (含测试用例)" ``` 5. 推送 & PR:`git push origin feature/add-s58` 6. PR 描述模板: ``` 描述: 新增题解 S58 解法: 双指针 / 前缀和 测试: 添加 6 组用例 (边界+性能) 影响: 无破坏性改动 ``` 7. Review 清单: - ✅ 编译通过 - ✅ 命名规范 - ✅ 注释 & 复杂度标注 - ✅ 无冗余调试输出 --- ## 🗺 Roadmap | 阶段 | 目标 | 说明 | |------|------|------| | Q1 | 补全 S58 + 测试基线 | 完成 100/100 & 添加用例基准脚本 | | Q2 | 新增 5+ 场景题 | 限流、缓存淘汰、排行榜、消息去重、延迟队列 | | Q2 | 引入 CI | GitHub Actions: 编译 + 单测 + 格式检查 | | Q3 | 英文 README | 国际化推广 | | Q3 | 题解 Tag 统计工具 | 自动生成按主题的学习路径 | --- ## ❓ FAQ | 问题 | 回答 | |------|------| | 为什么题目类前缀是 S? | 表示项目内部排序 (Sequence),区别于原题号。| | 如何仅运行一个模块? | `mvn -pl codetop100 -am compile` 或 `mvn -pl scenarios spring-boot:run`。| | Redis 没启动会怎样? | 场景题依赖 Redisson,相关服务/测试会失败;算法模块不受影响。| | 是否包含单元测试? | 题目暂以内置 main 测试;计划增补 JUnit5 用例。| | Fastjson2 的用途? | 预留拉取或序列化题目 / 测试数据的能力。| | Hutool 用在哪? | 扩展工具,后续接入在线数据或生成统计报表。| | 可以加 Python / Go 版本吗? | Roadmap 中规划跨语言题解目录。| --- ## 📄 许可证 本项目采用 MIT License,详见 [LICENSE](LICENSE)。 --- ## 🙏 致谢 - [LeetCode](https://leetcode.com/) & [CodeTop](https://codetop.cc/) 高频题库参考 - 开源社区的优质库:Redisson / Hutool / Fastjson2 / Lombok - 所有贡献者的时间与思考 --- ⭐ 如果这个仓库对你的学习有帮助,欢迎 Star、Fork、分享给更多同学! > Have fun & Keep Growing 🌱