1. 项目概述
"学习日记day79"这个标题看似简单,却蕴含着丰富的学习实践内涵。作为一名持续记录学习历程的实践者,我发现在第79天的学习过程中,积累了许多值得分享的经验和方法论。这种每日记录的学习方式,本质上是一种渐进式知识积累系统,通过持续的小步迭代实现能力的质变。
在当今快节奏的学习环境中,坚持79天以上的每日学习记录实属不易。这个标题背后反映的是一种深度学习态度:不追求短期速成,而是通过日积月累的沉淀来真正掌握知识。我的第79天学习日记特别有意义,因为这一天恰好遇到了几个关键的知识突破点,也总结出了一些高效学习的方法技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 学习内容规划与执行
2.1 当日学习主题选择
在第79天的学习规划中,我采用了"核心主题+延伸阅读"的双轨模式。主攻方向是数据结构中的图论算法,特别是Dijkstra最短路径算法的实现与优化。选择这个主题是因为它在实际开发中应用广泛,同时也是面试中的高频考点。
延伸阅读部分则包括了:
- 算法的时间复杂度分析技巧
- 不同编程语言实现同一算法的性能对比
- 实际工程中的应用案例研究
这种组合式学习法既能深入掌握核心知识,又能拓展视野,建立知识间的关联。我通常会提前一天规划好次日学习内容,确保学习方向明确、难度适中。
2.2 时间管理与学习节奏
79天的持续学习让我摸索出了一套高效的时间管理方法:
- 番茄工作法改良版:45分钟专注学习+15分钟休息,比传统25分钟更适配技术学习
- 黄金时段利用:将最难的内容安排在个人精力最旺盛的时段(对我来说是上午9-11点)
- 碎片时间处理:用手机APP复习概念性知识,适合在通勤等零散时间进行
当天的学习时间分配如下:
code复制08:30-09:00 复习昨日内容
09:00-10:30 Dijkstra算法原理研究
10:30-10:45 休息
10:45-12:15 算法代码实现
12:15-13:30 午休
13:30-15:00 性能优化实验
15:00-15:15 休息
15:15-16:45 延伸阅读与笔记整理
16:45-17:30 当日总结与明日规划
3. 核心学习内容详解
3.1 Dijkstra算法深度剖析
Dijkstra算法是解决单源最短路径问题的经典算法,我在第79天重点研究了它的几种实现方式:
基础实现(使用数组)
python复制def dijkstra_array(graph, start):
n = len(graph)
dist = [float('inf')] * n
dist[start] = 0
visited = [False] * n
for _ in range(n):
u = min((dist[i], i) for i in range(n) if not visited[i])[1]
visited[u] = True
for v, weight in enumerate(graph[u]):
if not visited[v] and weight > 0:
if dist[u] + weight < dist[v]:
dist[v] = dist[u] + weight
return dist
优先队列优化版
python复制import heapq
def dijkstra_heap(graph, start):
n = len(graph)
dist = [float('inf')] * n
dist[start] = 0
heap = [(0, start)]
while heap:
current_dist, u = heapq.heappop(heap)
if current_dist > dist[u]:
continue
for v, weight in enumerate(graph[u]):
if weight > 0:
if dist[u] + weight < dist[v]:
dist[v] = dist[u] + weight
heapq.heappush(heap, (dist[v], v))
return dist
通过对比实现,我总结了几个关键点:
- 优先队列版本的时间复杂度从O(V²)优化到O(E + VlogV)
- 稀疏图(E<<V²)情况下优先队列优势明显
- 实际编码时要注意优先队列的实现细节,特别是距离更新的处理
3.2 算法可视化与实践
为了加深理解,我使用Python的matplotlib库实现了算法执行过程的可视化:
python复制import matplotlib.pyplot as plt
import networkx as nx
def visualize_dijkstra(graph, path):
G = nx.DiGraph()
for i in range(len(graph)):
for j in range(len(graph[i])):
if graph[i][j] > 0:
G.add_edge(i, j, weight=graph[i][j])
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos, node_size=700)
nx.draw_networkx_edges(G, pos, edgelist=G.edges(), width=1)
nx.draw_networkx_labels(G, pos, font_size=20, font_family='sans-serif')
path_edges = list(zip(path, path[1:]))
nx.draw_networkx_edges(G, pos, edgelist=path_edges,
edge_color='r', width=2)
edge_labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
plt.axis('off')
plt.show()
可视化帮助我更直观地理解了算法每一步的选择逻辑,特别是优先队列如何影响节点的访问顺序。
4. 学习效率提升技巧
4.1 主动回忆与间隔重复
在第79天的学习中,我特别应用了认知科学中的两个重要原理:
- 主动回忆:学完一个概念后,主动尝试回忆而不看资料
- 间隔重复:按照遗忘曲线规划复习时间点
具体实施方法:
- 使用Anki创建算法概念卡片
- 设置合理的复习间隔(1天、3天、7天、14天...)
- 对复杂算法,用白板手写实现过程
4.2 费曼技巧应用
费曼技巧是验证是否真正理解某个概念的利器。我的使用步骤:
- 选择一个算法概念(如Dijkstra的贪心选择性质)
- 假装向一个初学者解释它
- 遇到解释不清的地方,回到资料重新学习
- 简化语言,使用类比(如将图算法比作地铁换乘)
例如,我对Dijkstra算法的费曼式解释:
"想象你站在一个地铁站(起点),要去城市各处。你不知道最短路线,但可以每次选择当前已知的最快路线继续探索。就像先查看到最近的一站,然后从那里再查看下一站,逐步扩展你的知识范围。"
4.3 代码实践方法论
单纯的理论学习远远不够,我的代码实践流程:
- 理解阶段:先阅读算法伪代码,理解每个步骤的意义
- 手写阶段:在纸上写出完整实现,标注关键点
- 初实现:基于手写版本编写可运行代码
- 测试验证:设计边界测试用例(空图、单节点、负权边等)
- 优化重构:改进代码结构和性能
- 对比学习:查看优秀开源实现(如NetworkX库)
5. 学习工具与资源
5.1 工具链配置
经过79天的迭代,我的学习工具链已经相当完善:
核心工具
- VS Code + Jupyter Notebook:代码编写与实验
- Git + GitHub:版本控制与知识管理
- Draw.io:算法流程图绘制
- Notion:学习笔记整理
辅助工具
- Pomodone:时间追踪
- RescueTime:效率分析
- Cold Turkey:专注模式
5.2 精选学习资源
在持续学习中筛选出的高质量资源:
算法学习
- 《算法导论》:理论基础
- LeetCode:实战练习
- VisuAlgo:算法可视化
- MIT OpenCourseWare:配套视频
编程提升
- Real Python:Python最佳实践
- Google Style Guides:代码规范
- Stack Overflow:问题解决
- GitHub Trending:学习优秀代码
6. 常见问题与解决方案
6.1 学习动力维持
坚持79天后,我总结了几条保持动力的经验:
- 小目标达成:每天设定可实现的小目标,积累成就感
- 进度可视化:使用GitHub的贡献图等工具展示连续学习天数
- 社群互动:加入学习小组,互相监督鼓励
- 奖励机制:完成阶段性目标后给自己适当奖励
6.2 知识遗忘应对
针对学完就忘的问题,我的应对策略:
- 建立知识图谱:用思维导图连接相关概念
- 项目驱动学习:通过实际项目应用知识
- 定期复盘:每周回顾关键知识点
- 教学相长:写技术博客或录制讲解视频
6.3 学习瓶颈突破
遇到理解困难时的处理方法:
- 多角度学习:寻找不同来源的讲解(文字、视频、图解)
- 简化问题:先研究简化版本,再逐步增加复杂度
- 寻求帮助:在技术社区提问或找mentor指导
- 暂时搁置:有时放几天后再看会有新视角
7. 学习效果评估与迭代
7.1 每日复盘模板
我的每日学习复盘包含以下几个部分:
- 今日收获:具体学到了哪些新知识
- 难点记录:哪些部分理解困难,为什么
- 效率评估:时间利用是否高效,如何改进
- 明日计划:基于今日进展调整明日目标
7.2 量化评估指标
为了客观评估学习效果,我设计了几个量化指标:
- 概念掌握度:能正确解释关键概念的数量
- 代码实现度:独立实现算法的完成度
- 问题解决力:能解决的LeetCode题目难度等级
- 知识迁移度:能将所学应用到新场景的案例数
7.3 持续改进循环
基于79天的经验,形成了PDCA改进循环:
- Plan:制定周学习计划
- Do:按计划执行并详细记录
- Check:周末评估学习效果
- Act:调整下周计划和方法
这个循环帮助我不断优化学习策略,从最初的盲目学习逐渐形成了系统化的知识体系。
