总结与规划

总结

数据结构和算法的基础知识到这里就完结了,但这并不意味着我们就完全掌握了这些知识,也不是说我们就有能力能够轻易的解答各种算法题目,或者在实际的项目中使用它。但这是这一切的开始。

从今年的四月份开始,我就着手研究数据结构以及它们的Java实现,也就是JDK中的Java集合源码,以及基于这些数据结构的各种排序、查找等算法,到现在也算是收获颇丰。最开始受面试需要的影响,也因为自己的一点兴趣,仅仅想要提高一点自己的能力而学习。但是随着学习的深入,我渐渐感觉到这些知识的迷人。每一个数据结构的设计,每一个算法的诞生都富有创造性,能让我们感觉到前人在此投入了大量的精力和思考,也激励了我要不断学习和思考问题,而不是陷于终日写重复代码而不反思的陷阱里(虽然许多时间都是为了生存而不断的Ctrl+C、Ctrl+V)。学习这些知识,并不能给我的编码能力带来直接的提升,平时的工作中需要算法的场景少之又少。但是这些知识大大的提升了我的认知,纠正了我之前许多错误,也可能依靠这些知识将来有望胜任更加复杂的工作。

这里举一个简单的例子来做收获总结吧。数组和链表大抵是现在面试必问的知识点了,多数也都会问到它们的区别。我们在各种文章中都能看到增删多用链表、查询多用数组的说法,但这种说法并不完全正确。只要我们对数组和链表稍加分析,就会发现它们查询数据时都很慢,O(n)的时间复杂度使得它们只能处理少量的数据。链表的确在增删时比数组优秀的多,而数组因为RandomAccess特性能按下标获取值,但这只是获取而不是查询,而且它的使用场景远不如查询多。所以当我们看到一个论断时不能贸然相信,除非它有十分合理的证明,或者我们自己亲自求证。

类似这样的还有很多,只有知道的更多,才能理解的更加深刻。所以,如果想跟上知识发展的脚步,我们需要不停的学习,不断的充实自己,给自己的未来增加强有力的保障。

规划

现在我们已经掌握了这些知识,但是这种掌握只能说是走马观花,只有充分运用起来才能发挥它们最大的价值。LeetCode上拥有很多优秀的算法题目,而且有为数众多的活跃用户,用来巩固知识再好不过,所以LeetCode刷题是接下来重要的事情之一。

不过由于题目众多(目前已经接近1000道),我们不可能把全部的精力用在刷题上,所以近期的规划主要有两点:LeetCode和多线程。

多线程的知识体系十分庞大,读了一些书和文章之后依然感觉入不了门,即使能操作线程池,能处理中断,也因为无法透彻理解它的机制,只能复制别人的代码,而没有清晰合理的逻辑。所以我希望自己能够把这些东西琢磨清楚,并分享出来,希望大家能够指正,或者和我一起进步。


本文到此就结束了,如果您喜欢我的文章,可以关注我的微信公众号: 大大纸飞机

或者扫描下方二维码直接添加:

公众号

您也可以关注我的github:https://github.com/LtLei/articles

编程之路,道阻且长。唯,路漫漫其修远兮,吾将上下而求索。

你可能感兴趣的:(总结与规划)