You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
source-code-hunter/docs/学习心得/个人经验/初级开发者应该从spring源码中学什么.md

28 lines
7.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

       作为一名初入职场的开发者最开始是在逛B站刷视频时看到的一个spring源码阅读解析当时作为一个只知道SSH和CRUD的boy看完后心里就两个词儿“卧槽牛B啊”而且在去年秋招面试阿里时几乎每次都会被面试官问道“有阅读过什么开源框架吗”每次我都只能一脸便秘的“嗯…呃…啊…木得…”。这在我心里埋下了一个想法硬着头皮也要把spring框架源码读一遍再不济也要看看猪是怎么跑的。
       从7月份开始到现在利用业余时间完成了spring核心实现IoC、DI、AOP及重要组件实现MVC、事务、JDBC的源码阅读并输出相关博客7篇在spring源码上做的详细注解也维护到了个人GitHub上并且将其整合到了开源学习社区Doocs上。
学习方法的话我个人比较喜欢先在B站上看相关视频知道怎么读从哪下口。然后自己买了本 计文柯老师的《Spring技术内幕》比对着从spring官网下载的源码包潜心研读。第一遍读什么都不懂按图索骥迷迷糊糊的读完了第二遍读就轻车熟路一些咯“卧槽原来如此”的感叹声也络绎不绝第三遍就能够在整体代码设计和细节实现两个不同的层次上去吸收spring框架的优点咯。
       这三个月来阅读spring源码给我带来的提升主要在专业技能上但同时也辐射到了我的工作、学习、社交等方面。所以写这篇文章一方面是应“码农翻身”专栏——刘欣老师的建议做个经验谈另一方面也是对自己这三个月学习成果的总结。
       下面我将分三个部分,谈一谈自己的经验。
### 一、工作方面(编码规范、编码能力、设计模式、英文阅读)
       我所从事的行业做的是to B的业务产品底层平台的框架代码累累堆积成山很多框架都是零几年写的有的甚至比spring还早。且最近国产化、中台、云服务等概念都在不断落地中有框架源码的阅读经验让我能够更从容地面对公司研发的新框架所维护的产品适配华为高斯数据库时也更清楚可能是JDBC框架中哪里做了特殊处理所导致的问题。当然最主要的还是对个人编码规范的养成设计模式的理解应用英文阅读的能力提升。
       作为一个初入职场的开发者编码规范是一个很重要的点能够让你写出的代码易于维护、阅读和理解。比如Spring框架虽然类图体系复杂丰富但对于类、方法、参数等的命名非常规范注释注解也非常严谨注重格式不会偷懒对于异常和日志的处理也具有很好的参考价值。比如之前产品中有遇到一个“将业务表单中的小数从科学计数法转换成普通计数法”数值过大的Double类型数字默认会以科学记数法显示这是用户无法接受的研读了复杂的业务代码之后发现填充到表单前的数据都是Object类型的且丢失了原本类型无法通过instanceof判断应该转成String还是Double这让我和我的师傅都有点头疼但spring源码中有过一段以异常捕获机制处理逻辑代码的片段让我灵光乍现于是我直接将Object强转成Double并使其不做科学记数法的处理并将这段代码try住如果没抛异常就转换成了Double抛了异常就在catch中强转成String。
       另外部门也经常会做代码评审规范的编码不但能够获得同事的认可一点一滴的细节也会使你的leader对你刮目相看。
       从IoC的各顶层接口到中间一层一层的抽象类再到最后的实现类这一整套体系的设计和实现对自己在日常工作中设计某些功能的接口、抽象类和具体实现都带来了很有价值的参考设计模式和巧妙的编码技巧也渐渐变得触手可及。比如设计一个VO字段校验功能时会先定义一个顶层接口抽象出公共方法抽象类中有做必输项字段非空校验的在其中利用模板方法模式对公共功能做具体实现特性化功能写成抽象方法交由各子类具体实现即可。
       Spring上很多接口和抽象类其注解甚至比代码还多我也经常尝试着去阅读理解这些注释看看自己的理解与书上的差异用这种方式来提升英文技术文档的阅读能力往往更实在一些。
### 二、学习方面(学习模式的构建、学以致用)
       虽然是做技术的,但我也是一个很爱出去耍的人。构建好自己的学习模式能够让你更从容地面对工作和生活。不加班的情况下(所幸部门加班并不太多),我一般会在晚饭之后以及周日时间充电。不管是学技术还是其它什么东西,我认为 以视频为入口以业界公认的名书继续深入理解以社交圈的同行或网上社区为输出交流管道最后持久化到思维导图及学习文档中。Spring源码学习是我工作之后对自己学习模式构建的一个尝试构建起这种学习模式之后个人的工作和生活也变得更加协调平衡不至于在繁杂忙碌的工作中渐渐丧失学习能力。另外一个比较重要的就是看spring源码时经常能看到一些与公司框架有异曲同工之妙的编码技巧及实现比如异常的批量抛出ConcurrentHashMap初始化其容量ThreadLocal的使用等等这些都是在读spring源码之前很少会注意或使用的。
### 三、社交方面GitHub、事业部内部授课
       对于我来说既然辛辛苦苦搞懂了一个技术那就一定得输出自己的理解和经验装波逼不然辛辛苦苦几个月什么产出都没有过一段时间又把学得给忘了这和被白嫖有什么区别。而输出知识的话当然要选一些比较优质的平台比如GayHubDoocs组织和其创建者就是我在GitHub上认识的这些大佬之所以牛逼能够成事必然有其原因加入他们的组织跟着混准能学到更多我想要的东西不仅仅是技术方面
       另外,我所在的事业部也有一个“王者荣耀”的学习进阶活动,将自己的学习成果整理成简单、易于理解的内部授课也更容易获得同事的认可与信赖。
### 个人建议:
       对于初级开发者学习spring源码来说我建议配合阿里的《Java开发手册》一起看因为编码能力和框架设计能力是需要很长时间的经验积累才能得到大幅提升的而编码规范则是我们最开始就能做到并做好的事情也是很多成熟公司越来越重视的东西。另外阿里的《Java开发手册》中不少规范都是参考了spring框架的这也从侧面体现了spring作为业界知名框架其编码的规范性是深受认可的。