Algorithm

主要是为了编程训练和学习。每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard)。进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练。关于做Leetcode的的优势,你可以看一下我在coolshell上的文章 Leetcode 编程训练 - 酷 壳 - CoolShell

[middle] 剑指 Offer 13. 机器人的运动范围
总结:

  1. 看题解之前使用暴力解法O(mn) ,看了题解的解法也是O(mn)。所以以后在解的时候,不要一上来就想着使用最优解法,而是应该想怎么能先把这个题解出来,然后再进行优化。
  2. 需要对满足 sum <= k 的点的可达性进行判断,这一点之前是没有想到的。

Review

主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。所以,需要你阅读并点评至少一篇英文技术文章,我个人最喜欢去的地方是http://Medium.com(需要梯子)以及各个公司的技术blog,如Netflix的。

https://engineering.tines.com/blog/understanding-why-our-build-got-15x-slower-with-webpack

针对使用 webpack5 构建比使用 webpack4 变慢的问题,进行原因排查,最终找到根本原因是 webpack5 中使用了 Symbol.isConcatSpreadable 导致。该问题的排查过程非常值得学习,过程涉及:对 webpack 构建过程进行 profile; Devtool 的 profile 数据分析;从 V8 源码找到 Array.concat 相关处理;重新编译 Nodejs;以及构造一个重现问题的仓库,等等

Tip

主要是为了总结和归纳你在是常工作中所遇到的知识点。学习至少一个技术技巧。你在工作中遇到的问题,踩过的坑,学习的点滴知识。

Review 的文章中,学习到:

  • git bisect: 二分查找来排查问题的 commit
    • git bisect start END_COMMIT START_COMMIT: 开始二分查找过程,执行后会切换到 START 和 END 区间的中间提交
    • 使用 git bisect goodgit bisect bad 来说明当前提交是否有问题,直到找到问题提交
    • git bisect reset: 退出查错
  • fnargs: 函数传参可以通过模板字符串的写法,函数接收到的是一个数组:[args]

Share

主要是为了建立你的影响力,能够输出价值观。分享一篇有观点和思考的技术文章。

本周发现一个笔记应用「Flomo」。这个是看公司同事 Zara 的文章时了解到的,特地试用了下产品功能,也对产品背后的理念做了下了解。

Flomo, 浮墨笔迹。设计理念是促进记录来激发思考,提供「多级标签」、「批注」、「每日回顾」等方式将记录转化为知识,帮助个人积累知识资产。flomo 本身定位是一个思考工具,而非文档工具。这种提倡先有记录后有知识的理念,对我来说是较为新颖的。

回顾个人之前在印象笔记中的种种记录,整体来说是比较杂乱的,知识管理做的不太好。接下来希望通过这个工具,逐渐改进下自己的知识管理,逐渐建立起自己的知识库。

官网:https://help.flomoapp.com/
Flomo 用法:https://help.flomoapp.com/best-practices.html