如何快速接手并熟悉新项目

论文档的重要性

新项目,基本是之前完全没参与过的,我多么希望有<<xx项目说明文档>>,<<xx项目部署文档>>,<<xx项目历史记录文档>>等等,

但是,耳边响起李宗盛的歌声 "想得却不可得,你奈人生何?"

既然前人不种树,后人不可乘凉, 那我自己种树吧,从此,此路是我开,此树是我栽,若从此路过,留下hello world.

 

论脸皮厚的重要性

可能之前负责这个项目的同事已经离职,也可能此项目几经易手,但此时此刻,由你来接,又有各种不熟悉的地方,怎么办? 问,发挥脸皮厚的精神,尽量不打扰别人工作的情况下,准备好问题,争取做到,问必答,答必果,果必形成文档. 

 

1.熟悉业务

此次接手的项目是某app的一个子模块功能,我通过以下几种方式熟悉业务.

>翻阅曾经版本的需求文档,产品原型图,UI设计图也有有个大致了解

>询问测试人员,测试组的妹子,对业务的熟悉程度,超乎你的想象.

2.熟悉基本功能使用

下载app到手机,注册账号,摆弄一番,至少了解这个项目是做什么的,大致有哪些功能, 

从一个普通用户的角度体验下,产品功能,比如发个帖子,发个评论,对文章点个赞,等等.

但你看到的,可能不是代码的全部,还有部分用户无感知的事情,但依然要用代码去实现,

比如,统计埋点上报, 消息队列, 日志收集分析系统.等等.

 

3.熟悉代码结构

 

想要看代码,前提是你已经get到代码,代码管理工具,用的是svn,还是git呢?  代码地址多少呢? svn/git账号没有怎么办呢? 找运维呀,论与运维关系好的重要性.哈哈..

svn客户端推荐使用

又称小乌龟,

话说,svn是真的不如git好用, 特别是在分支管理上,git 中不同的分支,切换即可,代码始终只有一份,

svn每新增一个分支,代码就多一份, 有时还需要开启2个Eclipse视图窗口,

        另外,但项目版本已迭代很多版本时,svn仓库已经几个G的大小了   下载代码又依赖网速,实在是慢,

但又只能等待,别无他法.

目录分别如下:

首先要熟悉每一个的作用

facade:内部接口定义interface [只定义不实现]

model: 与mhysql table互相映射的数据库实体.

openserver-facade:对外服务接口定义[只定义不实现] rpc请求处理层

service 业务实现层,实现1,3定义的所有接口

web  http请求处理层

代码目录结构调用关系:

 

4.熟悉MVC
mvc技术是最常用的代码分层模式了,但真的只有这三层吗?

有没有serivce业务层,或者又成为biz层

有没有封装了对数据库进行crud操作的dao层?

用一张图来表示吧,有图有真相:

 

C控制器层,与V视图层,如何协作? 

A:http api  通过http接口, html用js发起ajax请求.  好处是前后端完全分离.

如图所示:

 

B:在html页面中,使用jsp 标签,如图所示:   

本人极其讨厌第二种写法, 其因有二,

1.在html代码中加入其他语言的代码,增加了h5人员的学习成本. 要对每个新来的h5同事进行培训.

2.html代码只负责页面元素展示,css负责样式,js负责交互逻辑,数据逻辑. html+css+js足矣. 纯粹的的前后端分离.

 

5.了解相关技术组件

以java web项目为例吧

 

  • jdk环境如何搭建?
  • eclipse 如何配置tomcat ?
  • eclipse svn插件,maven插件等各种常用插件安装
  • 如何使用maven编译,部署项目?
  • 是否是使用Jenkins持续部署项目?
  • 是否有jvm  mysql 等监控系统?
  • 是否使用禅道等项目管理工具?访问地址多少?
  • spring hibernate  struts2  经典的SSH,这个不必多言.
  • 可能还有其他,欢迎小伙伴们,在评论中补充.

 

6.使用到微服务了吗?服务之间如何互相调用?

      java中服务治理比较成熟的框架是dubbo,由alibaba开源,原理层面的东西,有兴趣的可以看dubbo的官方网站,咱就从代码层面,了解下,但服务A,想要使用服务B的功能时,应该怎么做,请看截图.    理解了服务提供者,和服务消费者就基本清晰了

 

让我们再详细些:

 

 

配置解释:

dubbo:reference  表示引用其他服务。

id 服务引用的bean id

interface class 服务接口名

check  启动时,是否检查此服务是否存在。

timeout 服务方法的调用,超时时间,单位毫秒
 

<dubbo:application name=”应用名称”/>

当前应用名称,用于注册中心计算应用间依赖关系,

注意:消费者和提供者应用名不要一样,此参数不是匹配条件,你当前项目叫什么名字就填什么,和提供者,消费者角色无关

 

<dubbo:registry />

protocol

注同中心地址协议,支持dubbo, http, local三种协议,分别表示,dubbo地址,http地址,本地注册中心

 

address

注册中心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port,不同集群的注册中心,请配置多个<dubbo:registry>标签

 

 

<dubbo:protocol name="协议名称"port="对外提供服务的端口" />

 

服务提供者暴露服务配置:i

<dubbo:serviceinterface="com.szy.openservice.audit.facade.AuditFacade"ref="auditGrowthService" retries="0"timeout="15000" />

解释:

<dubbo:service interface="服务接口名"ref="服务对象实现引用" retries="远程服务调用重试次数,不包括第一次调用,不需要重试请设为0" timeout="超时时间(毫秒)" />

 

服务提供者缺省值配置:

<dubbo:providerfilter="SzyEyeFilter" />

服务提供方远程调用过程拦截器名称

服务消费者缺省值配置:

<dubbo:consumerfilter="SzyEyeFilter" />

服务消费方远程调用过程拦截器名称

 

7.接口请求流程

使用charles抓包软件,看看应用启动时,请求的http接口,看看nginx service location块的请求转发到了哪里,顺藤摸瓜最终找到代码,

看看

是否操作了缓存?

是否访问了mysql?等等.

 

9.技术难点?已知的坑?

 举个栗子:

>redis内存占用达到多少?

>mysql数据量达到多少? 单表最大达到多少? 几千万?几亿? 分库分表策略做了吗? 数据量这么大,能否从产品手段解决下?

>是否有需要定时执行的脚本?

>是否有特殊的维护操作?  

10.※全程参与开发,调试,测试,打包,部署,上线整套流程.

必须找到一个切入点, 比如 解决一个测试反馈的bug,在熟悉和解决这个bug的过程中,不仅熟悉了代码,也了解了相关业务,

 

在这个过程中,整理一些代码片段

如:

>如何使用log日志功能

>如何获取http请求参数并校验

>如何对mysql进行CRUD操作,是否封装了统一的处理类?

>如何对cache进行简单的get set 操作?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值