项目进展

Posted by CodingWithAlice on December 26, 2024

项目进展

一、功能

LTN工具 J-Table

  • 规划表
  • LTN v1.0 工具:记录每题做题时间 ✅ + 提示下次做题时间 ✅
  • LTN V2.0 工具:在网站记录答案 + 做题记录

复盘工具 Next_Pro

  • Nextjs + API Route + Sequelize + MySQL + Mongodb ✅

  • 日报✅、周报✅、月报✅、季报✅
  • 阅读、影视化相关日报中:想要实现【一句之诗】,每天把喷涌的思考,汇总成一句话

莱特纳盒子学习法 v2.x

二、功能开发进展 changeLog

  • 需求4:AI 查询 - 当前工程里面没有接入,周末要结束了,AI 下周再支持
## 2025.04.11-13
  • 需求3:提供做题界面 + 做题时间 + 做题时长

功能梳理:前端视角需要的接口信息记录

  • 点开弹窗,调用①初始化接口:判断是否展示正确答案界面 ✅
    • 不展示就停,等做题 ✅
    • 展示则将接口中查询的剩余信息展示 ✅
  • 做完题,点击校验,调用校验接口:需要调用2个接口
    • ②post 接口用于存储最新一次做题答案,同时返回需要展示的数据 ✅
    • ③AI 查询当前输入的内容 和 正确答案的 错误信息分析、推论 todo 📢
  • ④保存:可以填写修改 历史错误信息 + 做题时长,点击保存按钮,将数据落表 ✅
    • 刷新做题时间 + 模拟之前 Box 的升降功能(页面升降入口关闭)✅
// 核心 两个 mongodb 表
// 正确答案记录表,唯一查询: topicId
question_answers: {
    rightAnswer: string; // 正确答案
    wrongNotes: string; // 错误记录
    topicTitle: string;
    topicId: number; // 关联 MySQL
}
// 做题记录表,唯一查询: topicId+submitTime
answer_records: {
    topicTitle: string;
  durationSec: number; // 做题时长
  submitTime: string; // 提交时间(和 mysql 中的 solveTime 对齐)
  topicId: number;
  isCorrect: boolean; // 升/降BOx
  recentAnswer: string; // 最近一次的答案
}
// 做题界面 - ③AI 校验返回的信息使用另一个接口异步返回(一般比较慢)
{
    suggesttion: [] //不落表
}
## 2025.04.08

哭泣,找房子、搬家、加班,终于有时间把清明节安排的 LTN 优化方案实践了

  • 需求2:mongodb 管理 题目答案(弹窗手动添加/修改) ✅
## 2025.04.04
  • 需求1:添加表 level + 给所有题目定级(借助 AI) 并更新间隔时间✅

      // 题目答案主文档(答案唯一性)
      {
          _id: ObjectId("5f8d..."), // MongoDB自动生成
          topic_id: 123,            // 关联题目ID
          topic_title: "React Fiber架构原理", 
          right_answer: "答案",
          wrong_notes: ["❌错误1", "❌错误2"] ,
          create_at: ISODate("2025-04-01"),
          update_at: ISODate("2025-04-10")
      }
      // 做题记录子文档(独立集合)
      {
          _id: ObjectId("5f8e..."),
          topic_id: 123,             // 外键关联
          duration_ms: 45000,        // 本次耗时(毫秒)
          is_correct: false,         // 是否正确
          wrong_reason: "误解了双缓冲机制", // 错误摘要
          created_at: ISODate("2025-04-05T10:00:00"), 
      }
    
## 2025.03.29
  • 方案确定,如下 v2.0 的描述,每日复盘提供 工作模式/自学模式 的切换

一、工作模式切换 - v2.0优化

2025.04.04

对当前 莱特纳盒子学习法 的【间隔周期】进行优化,以适应工作后的学习节奏

可以牺牲一部分学习效果来维持学习法的持续性,例如减少 40% 的时间,达成 85% 的学习效果

  • 题目优先级划分(根据优先级来定默认间隔周期)
  • 间隔时间根据 优先级对应的默认间隔周期 + 一些系数(工作强度、错误情况)计算

历史数据处理方案: box_id * 基本间隔时间 basic_duration

-- 更新数据库中的 custom_duration 计算
UPDATE `ltn_topic_list` t
JOIN `ltn_topic_level` l ON t.level_id = l.id
SET t.custom_duration = 
  LEAST(
      t.box_id * l.basic_duration,  -- 计算基础值
      l.max_duration                -- 不超过最大值
  );
方案2:五级优先级划分矩阵(技术+记忆双维度)
  • 这种细粒度分级经MIT 2023年实验验证,相比三级分类能提升约22%的时间利用率(数据来源:《Spaced Repetition Optimization for Engineers》)。关键是要坚持前两个月的详细数据记录,为后续合并提供决策依据。

划分 5 个优先级 - 每个优先级对应 基础间隔时间 + 理想最长间隔

level 技术深度要求 记忆特性 基础间隔时间 理想最长间隔
A 底层、原理 推导记忆、关联点多 7 28
B 高频 API、网络、性能优化 刻意记忆、关联点多 8 32
C 日常工具链、数据库操作 肌肉记忆、关联点少 9 38
D 边缘功能、css技巧 独立知识点、易混淆 11 42
E 生活知识、非技术内容 自然记忆 13 54
// 渐进式增加间隔(防止爆发式增长) - 做对
card.duration = Math.min(
    card.duration + baseDuration * 0.2,
    baseDuration * 2.5  // 上限控制
);
// 判断是否在基础间隔内重复错误(是否为连续错误) - 做错
function isConsecutiveWrong(card) {
    const baseInterval = {1:7, 2:8, 3:9, 4:10, 5:11}[card.level];
    return (now() - card.solve_time) <= baseInterval * 86400;
}
if (!isCorrect) {
    const isConsecutive = isConsecutiveWrong(card);
    const penalty = isConsecutive ? 0.6 : 0.8; // 连续错误惩罚更重
    card.duration = Math.max(1, baseDuration * penalty); // 至少1天
}
  • 首次错误:间隔缩短20%(×0.8)
  • 连续错误:间隔缩短40%(×0.6)
  • 连续正确:每次延长基础间隔的20%
方案1:三级优先级划分矩阵(三维度九指标法)(参考)
  • 考虑到是工作后的第一次调整,如果只是划分 ABC 三个等级 - 关联间隔周期,后续实际使用中,如果还需要优化 - 再拆分分级成本比较高 -> 层级划分得更细一点,之后优化可以合并层级,成本更低
graph TD
A[优先级划分] --> B[技术维度]
A --> C[应用维度]
A --> D[记忆维度]
B --> B1(技术深度)
B --> B2(技术时效性)
B --> B3(岗位相关性)
C --> C1(使用频率)
C --> C2(错误成本)
C --> C3(复用场景)
D --> D1(记忆难度)
D --> D2(关联知识点数)
D --> D3(遗忘速度)

image-20250404124609639

莱特纳盒子学习法 v1.x

v1.1 说明:自学模式,间隔周期 BOXId * 7天 + 上次做题时间 solveTime

  • 做错的题目 / 新增的BOX1题目:隔天重做

v1.0 说明:自学模式(GAP期间),间隔周期 BOXId * 7天 + 上次做题时间 solveTime

一、AI ✅

拥抱 AI,当前规划需要实现的功能

  • 内容

    • 月报 - 回顾总结 - 前端、回顾总结 - 其他 ✅

    • 后续跟进其他推荐

      • 周报 - 下周主要学习的内容、前端概况、做得棒的地方、可以做得更好的地方、睡眠情况、运动情况、电影、TED主题、阅读情况 ✅
  • 目标:利用 AI 给出可能性 -> 减少人工比较带来的基础工作,当前周报一般耗时1h,期望减少一半时长

二、AI changeLog

以下为 集成 deepseek 接入网站过程记录

2025.03.04
  • 将服务器 docker 数据迁移到数据盘
    • 首先要停止 Docker 服务,然后将/var/lib/docker目录下的数据备份并迁移到数据盘的合适位置。接着修改 Docker 的配置文件,一般在/etc/docker/daemon.json中添加或修改"data-root": "/test",指定新的数据目录。最后启动 Docker 服务,检查是否正常运行,并且数据是否正确存储在新的位置
  • J-Table 添加权限校验 - 守卫
  • nginx 配置处理 http://codingwithalice.top:4001
2025.03.02
  • Next_pro 的所有后端接口,添加权限校验 - 全局中间件
2025.03.01
  • Next_pro 的 DEEPSEEK_API_KEY 存储在服务器 config.env 中统一管理
  • Next_pro 的 deepseek 的 AI 提示语存储在 config.env 中
2025.02.28
  • Next_Pro 调通本地的 AI 调用提示 月报总结信息

三、功能 changeLog

以下为 2025.1.15 - 2025.2.26 记录的复盘工具、LTN工具开发、部署上线过程

2025.1.15 进展

Next_Pro 日报落表 - 时间周期落表

image-20250115202239765

2025.1.17 进展

J-Table 后端接口需求梳理:


CREATE TABLE `ltn_data` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL COMMENT '题目标题',
  `source` BIGINT NOT NULL COMMENT '题目来源作业/博客',
  `box_id` BIGINT NOT NULL COMMENT '归属box',
  `solve_time` TIME NOT NULL COMMENT '做题时间',
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) 
接口
1查询接口 /findAll  box_id 分组
2某题操作按钮 /operate 参数id + type:upgrade[box_id+1]/degrade[box_id降为1]
3过滤接口 /filter 参数startTime + endTime[solve_time+box_id*7[start,end]]
建议 startTime: now endTime: now+10(一个周期)
2025.1.18 进展
  • J-Table 后端服务使用 nestjs 初始化

  • 快速打通数据库,提供查询接口

2025.1.20 进展

LTN工具未来迭代方向:结合记忆曲线,在遗忘曲线的周期内,对知识进行回顾

J-Table

  • 前端路由 + 莱特纳盒子
  • /ltn 查询接口,按 boxId 分组返回 + 前端侧按盒子分组展示
  • /ltn/operate 修改接口,升/降LTN内容 + 前端侧提供按钮
  • 提供过滤接口,生成当前周期的 LTN 题库
2025.1.21 进展

Next_Pro

  • 日报 事项记录 前后端+数据库
2025.1.22 进展
  • 买域名 codingwithalice.top + 买 轻量应用服务器(4个月,得到 ICP 备案资格,并提交备案)

  • 两个项目分工:一个专门梳理 LTN 盒子;一个记录生活

image-20250122165531204

2025.1.23 进展
  • J-Table:展示周期 + 切换LTN/all 展示
2025.1.25 进展
  • 清理博客和印象笔记中的「LTN题目」管理Tag 和列表
  • J-Table:新增添加 Box 弹窗 + 统一管理所有题目和周期
2025.1.26
  • Next_Pro 每日数据 接口+展示
2025.1.27
  • Next_Pro 周报 查询 + 落表 + 展示
2025.2.2 进展

部署至云端数据库(服务器默认安装了 Docker 环境 - 提供了容器化的部署方式

// check docker 安装
docker --version // Docker version 26.1.3, build b72abbb
2025.2.10 进展
  • Next_Pro 周报 数据源 modal+页面展示,并投入使用写 LTN15周报
2025.2.12 进展
  • Next_Pro 月报
  • Next_Pro 初始化部署

部署指令操作:

1、更新 Next_Pro 代码

  • https://gitee.com/CodingWithAlice/Next_Pro 更新
  • 方便国内 git pull 拉取

2、在 Next_Pro 目录构建:

sudo docker build -t next_pro .
  • 本地 npm run build 确认没有问题
  • => => writing image sha256:32f2351a67a8c4704e94e42177f64cdb1e16aa7d1e9eb4bb2c59c3d8ac2c3440 => => naming to docker.io/library/next_pro 212.7s

3、启动服务:

sudo docker run -d -p 3000:3000 next_pro
  • 查看运行中的容器

     sudo docker ps
    

    如果 找到对应 IMAGES + STATUS为 up 即成功

  • 查看容器日志 sudo docker logs next_pro 获取日志

  • 检查端口占用情况 sudo netstat -tuln | grep :3000 检查主机的 3000 端口是否被监听 (启动后, 在防火墙配置开放该端口 3000 的入站规则)

访问链接:

http://121.43.164.209:3000

http://codingwithalice.top:3000/

2025.2.13 进展
  • Next_Pro 在服务器部署 mysql,修改代码根据环境适配
2025.2.14 进展
  • Next_Pro 修改手机端样式
2025.2.17 进展
  • Next_Pro 添加二次阅读工具页面
2025.2.18 进展
  • J-Table 也部署到线上
2025.2.26 进展

配置 nginx ,方便不携带端口访问 - 在 NextJS 项目中添加 nginx 配置

  • http://codingwithalice.top/ 可以直接访问
// 使用 docker-compose
sudo docker pull nginx // 安装 nginx