谈谈做oj

   前同事离职了,向他请教了一下应该怎么工作,然后跳槽。他说每天抽出一小时做一下oj,然后多看看资深员工写的代码。这两点都很重要吧。在办公室听领导谈话,招聘时做oj也是常规手段,因为简单有效,没有谁有那么多时间。做oj就是解决一个小问题,这虽然对业务理解没有什么益处,但你当你处理业务时,就会发现熟练的编程技巧能够快速完成任务。同时,我也在尝试看spring源码,但是源码真的太难看了,就是学习书上的一个小章节,感觉都很难理解,因为它不仅仅是增删改查,设计到复杂文件的解析等,所以做oj也有利于增加对源码的理解能力,而不仅仅是crud,也算是提高自己的算法能力。

  就拿今天的奥运会奖牌排名问题,虽然是一个不难的问题,有思路,但是要写地快,性能好,资源占用低,容易理解,还是会学到很多东西的。这就是我初中历史老师教的以点带面复习方法。比如涉及到基本的Scanner的方法,Comparator使用,List排序的原理,看它的源码就是调用了Arrays和Collections的排序方法。这其中,我又参考了<effective java>,发现这个Josh Boch就是这个Comparator的作者,看看国外写书的人就是不一样。在测试时还发现Comparator中的reversed方法和预期的效果有差异,虽然没有看懂源码,但是经过测试,发现了别人写的博客中有错误。虽然一天一题都没有完整解决,但是真的遇到了很多问题,然后自己也解决了,学到了很多,所以应该多做一些算法题。

  比如做oj时有排序的需要,就需要考虑到java中List和Collection中的排序算法,这就要考虑到其排序的稳定性。查看源代码的解释,这些都是稳定的,也可以看到,其大概是用的是归并排序算法,而不是快速排序算法,因为快速排序算法是不稳定的。

 

posted @ 2019-10-10 23:49  懂得了才能做一些改变  阅读(378)  评论(0编辑  收藏  举报