https://github.com/LiuKay/the-way-to-upgrade/blob/master/ARTS/ARTS-2020-05-31.md
最近两周刷了一些 Leetcode 上 Array
和 List
相关的基础题
(leetcode 中英文切换可以直接将https://leetcode.com/XXX改为https://leetcode-cn.com/XXX跳到对应题目)
Array:
Container With Most Water
3Sum
Climbing Stairs
Move Zeroes
Remove Duplicates from Sorted Array
List:
Plus One
Reverse Linked List
正在实践 覃超推荐的“五毒神掌”–五遍刷题法,有时间做题目的时间比较分散,往往会忘记做题的时间,所以应该还是得记录一下每天做了什么题,按照时间线来进行复习。
在这两周的做题中发现一些固定的模式,
双指针法
的使用,要理解清楚每个指针的作用是什么,以及何时会改变,还有边界在哪里双指针
其实是一种 一维上二维的思想Discuss
区的最高投票里面总能看到各路大神的精彩解答The Key to Accelerating Your Coding Skills - KEN MAZAIKA
作者的个人主页:https://kenmazaika.com/about/
作者在这篇文章中说明了快速提升编程能力的关键点
domain-specific knowledge
),比如用 Ruby怎么写循环,用代码从数据库读取特定数据, 这方面的知识往往与具体的编程环境相关Debug error message
, 知道发生了什么,二是能够从每一个你犯的错误中去学习,当下次再遇到的时候就能够快速的解决你永远不可能知道所有的知识来解决所有的问题,要保持终生学习的态度
当下面这些情形发生的时候,说明你已经度过起步阶段进入下一阶段了:
这个阶段称为The Inflection Point
, 虽然只是整个学习过程的一部分,但却是最重要的一个阶段,因为在这个阶段你将要面对的是那些没有现成答案的问题。
很多时候你会觉得自己并没有准备好,而且倾向于去做一些基础性的工作,比如一些Get started
工作。这个阶段你甚至会怀疑自己是不是真的适合做一名开发人员。一个很重要的原因是:
During the inflection phase, you will be coding 10-20 times SLOWER than in the previous phase
在这个转折点上,你的编码速度将会比入门时慢10到20倍
尽管在感觉上你会觉得自己进步很慢,甚至自我怀疑,但是实际上,你其实在那些最重要的事情上取得进步。
这里作者引出了相对于domain-specific knowledge
的另一种知识:procedural knowledge
Procedural knowledge is the ability to teach yourself what you don’t know along the way.
简单来说就是在学习过程中如何自学自己不知道的东西的能力。比如你要实现一个新的功能,你该如何开始,如何设计,如何实现?
对于开发者来说,domain-specific knowledge
和precedural knowledge
同样重要。
作者给出了对开发者的中肯建议:
For the rest of your life, go outside your limits every single day
对于很多工程师来说,他们一旦找到自己的舒适区就会裹足不前,他们大多数以维护者的身份出现。而你应该追寻的是那些每天都在寻找突破自己能力限制的人,尝试去解决那些在你技术栈之外的问题,以此来扩展你的技能。
The web development inflection point
你有能力构建任何数据库驱动的系统 ,我们通常来说叫掌握了CRUD
The algorithm and data structures inflection point
算法和数据结构,掌握数据结构和算法意味着掌握了某一门编程语言的基本知识,以及操纵数据和能够理解一些性能上的取舍
When learning to code,domain-specific knowledge doesn’t matter in the grand scheme of things
当学习编码时,domain-specific knowleage
其实并没那么重要,真正重要的是:
这里作者用各大厂为什么如此看重算法和数据结构来举例说明,真正重要的东西其实就是这2样。
对于开发者来说,最好的参考就是你曾经写过的类似的代码,当你完全理解了你所写的东西,你根本不用去记他们,所以每次开发一个新的功能时请先反问一下自己 :“我是不是写过类似的代码?”如果是,请翻出以前的代码并逐行解释给自己,现在是否能够重用?
During the tutorial phase, take breaks from going over structured material and give yourself challenge problems along the way
通过拐点是一件很有挑战性的事,理解这些能够帮助你更好的学习:
The final stage of the inflection point process is acceptance. Acceptance that software
development is a process of continuous learning
终于明白编程其实是不断持续的学习,去解决更为复杂的问题。
学习是为了找到方法,而不是问题的答案。
Typora
是一个所见即所得的 Markdown 编辑器,支持 Windows, Mac 等,用它来进行 markdwon 写作简直不要太爽。但是众所周知 markdown 写作的一个问题就是图片链接,在本地写作时,插入的链接可以是本地图片的路径,这就导致了在需要发布文章的时候,需要手动将图片上传到图床上去,然后替换为网络地址。所幸的是 Typora
也帮我们解决了这个问题。 Typora
本身不支持上传图片,但是它支持使用第三方的图床工具,比如我们这里要用到的 PicGo
。
PicGo 是一个强大的开源的图床工具,支持各大图床如腾讯云COS, 七牛云等,甚至还能使用 GitHub 作为图床仓库,上传图片自动返回图片链接到Typora
。
在安装好了 PicGo 之后,进入 Typora 的偏好设置->图像->上传服务设定
选定 PicGo 的安装程序即可。
需要注意的是,如果使用 GitHub 作为图床,由于网络原因有时候图片可能出现无法显示的问题,这个时候其实可以替换成以Gitee(码云)
作为图床,需要在 PicGio 安装github
的一个插件,如下图,配置和 github 类似,可以参考 PicGo 的使用文档,这样在国内的环境下图片显示还是很稳定的。
可以参考这篇文章进行 Gitee 作为图床的配置以及 PicGo 的官方文档, 这些地方都有详细的教程,我就不再赘述。
Gitee图床+PicGo+Typora便捷在博客中使用图片
PicGo
在我看来作为一名软件开发者,应该是有最基本的职业素养的,而不是说只要功能能跑就行了,这当然是最低的标准,但是如果仅仅只是满足于功能能跑就行,那也只能在日复一日的重复劳动中度过。
工程师也应该站在客户的角度去理解问题,即所谓的business value
,你所做的工作到底能够给用户带来多大的价值,这是公司评判你贡献的标准,如何提高这方面的输出,才是公司愿意给你高薪的理由。