据他介绍刷题后总结出一些算法框架,并写出来分享给网友。我看了一些,感觉是写得不错的,相对更容易理解吧。 他有个建议,刷题从二叉树开始,树的遍历是后续算法的核心。
上次用到算法是节前。遍历数组,每次遍历用了 count
,担心会是 n 方的复杂度,就改了(后来发现想多了)。
上上次,是发现 redis 有个慢查询,查了下,是因为用了 HGETALL,而 HGETALL 是 O(N) 的复杂度。
可能用不着实现算法,但复杂度的分析还是经常用到的。
学会算法一定是有好处的,不过实际应用来说,最大的作用还是大厂拿来做筛人门槛,如果你的工种还是 WEB CRUD,带来的效果一定不如工程思维和开源软件和框架的熟练度°当然高端人才和高端职位另说。
我们是做 IM 开发,IM 开发还挺特殊的,也不好被完全算进 web 开发。
有些问题可以被当做算法问题,比如 N + 1,就是复杂度 + 网络传输。
我们在做一些设计的时候,也会考虑时间和空间复杂度,主要是怕把服务搞挂掉。。。当然多数的时候不需要考虑。
有些算法问题,其实也是编程能力的问题,像二叉树遍历、归并算法,如果递归掌握的好,这些算法就很好理解了。
递归 ruby 中用的比较少,但写 clojure、erlang 这种,递归写不好,真玩不转。。。
工程师也会“相轻”的,跟不同背景的同事吹逼,聊到算法,设计模式以及“众所周知”的 pattern 一定不能露怯,否则将会被暗暗鄙视(其实大部分人都是半桶水,所以都会很默契的不会聊的很深入)
面试中算法有点像义务教育里那些感觉没用的课程,一是能快速筛掉学习能力差的人,二是算法确实对编码有影响。
不会反转一颗二叉树就是学习能力差啦?那你是不是认为 Max Howell 比你学习能力差远了?https://www.infoq.cn/article/aId5mfexybXO2lSJaF7E
我那句提反转二叉树了?贴个老梗显得自己懂得多?一个极端特例当论据是不是抬扛?一直用反问句回复别人是不是自我感觉很良好?