大家好,今天和大家分享的主题不是纯粹讲技术的,可能更加偏向职场和技术经验。所以下面所列的1、2、3、4、5并不敢妄称标准,只是个人的经验总结。所以见仁见智,大家还是怀着思考和交流心态来看为好。
以销管(后端)为例,销管为前后端分离项目
本次主题分享主要内容可概括为如下几点
第一步.项目环境
- 数据源:mysql,redis,mongoDB,相关url
- 语言&版本:java、1.8
- 运行环境:java(tomcat,jetty)
- 构建工具&&版本:maven 、3.3+ ,如有私服,相关url
- 版本控制协作工具:git,gitlib ,如有私有仓库,相关url
给“新人”的建议:一般项目迭代到一定阶段,团队沉淀到一定阶段,会有相关的文档,新人进来时就会给到你,在没有开始分配项目的时候,建议多读读相关的文档。
第二步.架构,结构
这个阶段一般项目已经可以完美运行起来了,你需要全面掌握下项目的架构层次,比如maven的多模块,每个模块间的关系,如api模块,RPC远程通信的代码。比如包的层次结构,每个包下的java文件的大致含义,如config下是配置信息代码,repository是数据访问相关代码。如果是业务项目,一般层次结构会相对容易理解。如果是底层框架类项目,架构层次会稍微复杂些。可以先从上层大致了解下即可,随着项目的推荐肯定会越来越清晰。了解项目整体架构有助于全面把握项目,了解项目运行原理。
快速接手一个项目,了解这个项目的技术栈,是必不可少的一个步骤,我的从业经历是,除了核心技术栈外,很少遇到两个项目的技术栈是一模一样的,总会有很多新鲜可玩的技术。怎么最快,最全面的了解到一个项目的技术栈呢?无论是后端项目还是前端项目,单独引用依赖的时代已经过去了,基本上主流的企业开发语言都有了相关的依赖管理工具,如前端额npm,bower,如java的maven,gradle。一般了解一个项目的技术栈都从这些依赖管理工具入手。这个时候你会发现你熟悉的技术,也会有未曾见过的技术,熟悉的技术可以看看有没有新的使用方式,新的技术可以记录下来,后面着手攻破。 这里提个小小的要求,项目依赖的每个jar包,尽量了解他们是干嘛的。
- RPC :dubbo,RabbitMQ,spring Cloud feign
- 数据:JPA,QueryDSL,tomcat jdbc,redisson,spirng data
- 框架:spring boot,spring mvc
- 配置:Apollo clien
第四步.项目配置
从项目配置入手,学习项目涉及到技术栈。这是最快认识怎么使用新的技术栈的着手点,一般如guava,Apache commons包这种技术看看代码,就知道怎么回事了。但是像数据库连接池,RPC等都需要通过配置来实例化一个spring 管理的bean,来集成到spring的体系当中去,这个配置和实例化的代码就是最好学习新技术的点。项目中的配置一般都是了解相关组件的入口,比如web.xml,整个web容器的入口比如application.propertis,spring boot的入口
第五步.了解项目常用封装
除了业界通用的如,guava,Apache commons,以及spring Utils相关包外,(集合,缓存,并发,字符串处理,io)。一般的业务系统也都会封装和业务相关的util工具类来简化具有重复代码的工作,所以,熟悉一个项目的一般流程和技术体系后,非常有必要了解一个项目的工具类。熟悉一个项目的Util后会让你少走很多弯路新技术学习
1.官方实例 xxx-examples,xxx-samples
说明:官方实例都是很简单的用例,真的如其项目的命名那样,所以能解决问题最好,不能解决请往下走
2.开源项目
说明:开源项目对相关技术的运用肯定会比官方简单实例来的更综合一点,所以,看完官方实例可以找个有【相关技术点】的对该技术有【综合性】的【全面性】的应用开源项目来深度学习一下
3.官方文档
说明:一个项目里面肯定不会应用项目的所有技术点,特别是大型框架,如spring这样的庞然大物,所以,解决特殊问题,或是解锁一些不常用的技术,还有一招,就是看官方文档,官方一般会讲解技术的方方面面
4.源码分析
说明:文档会解决技术的方方面面,但是文档不可能分析每处代码的设计思路,功能点,当你遇到的问题,以上三点都不无法解决的时候,我推荐你阅读下该问题相关的源代码,也许你会收获到更多
5.关于博客学习?
说明:大多数的博客分享的技术点都是片面的,我自己也写博客,所以我深知这一点,所以在学习新技术的时候推荐使用以上四个步骤,那什么时候可以参考博客来吸取养分呢?当你知道技术细节各个点,但是遇到一个你束手无策的异常,或是bug的时候,别人的经验可以成为你的救心丸
文末总结
读书百遍,其义自见,熟读唐诗三百首,不会写诗也会淫 。so,当你阅览项目无数时,上手一个新的项目不再那么束手无策,软件架构设计思想都是共通的,当你能高度抽象定义时,其他技术框架便能信手捏来,拿来就用。最后,期望大家在平时开发中多用心积累总结。