在“爪哇缪斯”公众号里发布算法文章,仔细算来是从去年7月初开始的,这么一看,马上也快1年了,在这一年的时间里,《图解LeetCode》算法解析的文章一共写了206篇,虽不算多,但其实也不少了。
在这1年的算法图解文章写作的过程中,经历了很多的快乐与心酸。拿一篇中等难度的算法题来说,从解题->修改->优化->画图解析->写文字解析->全网发布,这一套操作下来基本是在4个小时左右的,那么,每当看到在LeetCode平台上面的读者们留言感谢的时候,自己真的很开心。后来呢,由于某些原因,LeetCode平台的“每日一题”我就不去写图解了,改成了在公众号发布《剑指Offer》系列和《LeetCode TopXXX》系列的图解文章了,优点是轻松了很多,缺点就是没啥人看,也就更没有什么正向反馈了。
其实关于对算法的看法,听到过好多人的观点是“平时工作也用不到,就应付面试时候用,临面试前刷一刷就行了”。这个不奇怪,以前我也是这么认为的,甚至这个观点一度是我劝解自己不去费力刷算法题的“理由”。但真的是这样吗?
为什么我们平时感觉不怎么用到算法?以数据库操作为例,查询操作我们使用SQL语句编写就可以了,然后从数据库中获得查询到的结果,搞定!那算法应用在哪里呢?在数据库系统中。那算法性能消耗在哪里呢?也是在数据库系统中。这种情况,我们当然可以不用算法了。但是,随着数据量的增大,如果将这部分性能交给我们“最后底牌”数据库,那我们的优化空间必然非常小了,而且如果我们真的要从关系型数据库切换为非关系型数据库,那改造的成本也会非常的大。那应该怎么做呢?
我们应该将数据的拼装及操作逻辑提取到我们自己的算法中,而针对数据库中数据的查询操作尽量是针对单表少量条件查询的,甚至实现仅需根据id或者ids主键来进行数据的提取操作。这样,耗费性能的数据拼装逻辑就可以由我们去处理了,而性能优化的方式和手段也会有更多的选择,并且如果要执行关系型数据库与非关系型数据库互相切换,也可以对我们的代码逻辑几乎不会有任何影响。
当然,如果从更普适的角度来看,我们平时写的业务代码也是算法,只不过逻辑并没有算法题里面的那么复杂而已。因此,开发语言+框架+算法其实是我们作为程序员日常工作的3大利器,那么,算法还不重要吗?
我常常表达一个自己的观点,就是平时我们跑步、健身是为了让我们身体越来越强壮;而平时每天做几道算法题,是为了让我们的脑子更“强壮”;身体+大脑双重发展,何乐而不为呢?
那么如何提升自己的算法能力呢?数据结构+算法解题大类+每日N题,前两者是在理论上可以提升自己的解题能力,而最后的“每日N题”,则会使你在日积月累中“潜移默化”的达到算法能力从质变到量变的过程,此处引用复利曲线,这条曲线时常的在我要放弃某件事情的时候提醒我,要咬牙坚持下去,否则,前面的努力几近“白废”,只有达到那个飞速发展的点,我们的努力才会得到更大的收益。
回到上面的话题“算法文章人家又不爱看,你写它干啥?”确实,写了也没人看,是没啥用,所以我决定,不写算法文章了!
哈哈哈,开个玩笑,由于年初自己规划2023年要写完3个系列的技术文章,分别是Spring源码解析系列、图解DDD系列和Dubbo源码解析系列。而由于最近工作比较繁忙,Spring源码解析系列的第6篇AOP源码解析Delay了好久好久了,所以我打算这段时间,先把Spring源码解析系列文章写完(还剩AOP、事务、SpringMVC这3部分),然后再继续更新算法图解文章了。反正,还是那句话,无论大家爱看不爱看,还是以我自己爱写不爱写为基准吧~ 毕竟咱也没靠这些技术文章收1分钱的费用,那再不随着自己的兴趣写文章,图啥呢?是不是?
今天的文章内容就这些了:
写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。
更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」