看似代码写的没问题,但如果不理解对应的方法(源代码),可能会出问题(面试常考的一个,也是Java开发中用的最多的,如equals和==,你不理解写的就会出问题)
数据最终会存入数据库,但也会从数据库中拿出来展示,展示过程中不管你是XML还是JSON,你都需要用到数据结构(Java相关的如String、Array、List、ArrayList、LinkedList、Vector、Map、HashMap、Set等,Java程序员们一定不陌生)
某些时候宕机的原因并不是因为用户多了,而是代码写的有问题(不仅仅是逻辑问题,也是写的方法有问题。举个例子,在创业公司开发智能酒店项目时,曾有段时间频繁宕机,为此我临时写一个shell脚本监控着,如果宕机,自动重启,为了保障能用,只得如此了,最后某天仔细排查,发现就是一段代码问题,代码问题反映的不仅仅是逻辑,也是对这门编程语言的深度理解)
我们延伸一下,回到个人职业生涯上看:
浅度等同于不深入,不深入意味着普通和平庸,普通和平庸意味着可替代性很强。可替代性很强就意味着很容易被替换。这也就解释了为什么程序员会有中年危机(不仅仅是程序员这一行,其它行业也是通用的)。
我的导师,给了我一个很好的意见,这里我分享给大家。
就是从读一些自己常用的代码开始(如String、ArrayList、HashMap、FastJSON等相关的)。因为常用,避免陌生感,同时因为常用读起来也就是更有意义。同时也可以参考相关的优质博文,看看前人是如何深入理解的,不过在看前人写的之前,自己必须要有自己的意见(因为这代表着你思考过)。
接下来我也会写相关的源代码理解文章。写的目的也是希望自己不再是一个”API搬砖工人(这里我就不用码农了)”。
也许有读者朋友疑惑,为什么数据库也被我列为Java程序员的两项通用能力之一呢?以MySQL为例,我对于INNODB和MyISAM(单单一个InNODB没有真正的弄懂)、索引原理、视图和触发器、存储过程和游标等,仅仅是了解而非真正弄懂。
虽说即便不懂,也能正常进行简单业务、较复杂业务、复杂业务的CRUD。丝毫不影响业务开发。但是不真正弄懂的话,会成为真正高级Java开发工程师的瓶颈,到时候即便年限到了5年,理所当然成为一名高级研发工程师,但是实力并未达到,等到去面试的时候,一问三不知,最后可能会被面试官说:五年的工作经验,连这都不知道,怎么好意思要这么高的薪资呢?
我之前公司一个领导T哥曾对我说过,深入掌握Java和数据库对于一个Java程序员是非常重要的,因为无论你到那家公司,这两项都是必需,而非所谓的业务能力(每家公司的技术栈相差不是特别大,业务相差是比较大的,但对于程序员而言,业务知识不一定要求你精通100%,最多也就是20%~30%左右,业务知识通常可迁移性不是特别强,比方说,你从外包到自主创业公司或者是从创业公司到其它行业公司都可以,没有什么限制,当然了,金融方面可能对业务知识方面要求高一些)。
其实仔细想来,这些年开发过的CRM、OA、ERP、CMS、智能酒店和门锁、物联网云平台、电商、编程平台、教育平台等项目(其中也包括二次开发),排除其中的编程语言(因为有用到Node.js、Python、PHP等),基本上数据库都是共性,而且用的都是MySQL。仔细在从另外一个角度来看,一个项目从0到1,最终上线投入运营使用,包含高可用、高并发、高性能等,都与数据库紧密相关,因为这考验着你的数据库设计是否合理,一个设计不合理的数据库,会无限增大成本(服务器的投入,为了保证”三高”,最简单的办法就是加机器,不断的加机器,但如果设计的合理,机器可以加少点,加少点同时也意味着降低企业成本,当然也不排除一些公司盈利不错,盈利不错,意味着这些成本可以不忽略不计)。
再回过头来,即便是数据库也有值得深入研究并掌握的?以MySQL为例,我首推INNODB。因为INNODB存储引擎是用的最多的。
同时还有一点十分重要,那就是SQL能力(包含能够写复杂的SQL、优化SQL、知道如何加索引等)。基本上可以说,如果你的SQL能力不错,那么工作效率和工作质量将会上一个档次或者高好几个档次。以Java的三层架构,数据访问层、业务逻辑层、视图层(又称UI层),其中的数据访问层就考验你的SQL能力,业务逻辑层依赖于数据访问层(SQL能力),如果你的数据访问层写的不好有问题,那么自下向上都会受到影响,关于一点我深有体会过(曾经也深受其害)。