如何快速上手一个项目

2020-03-28 00:42:31 998

不知道你有没有经历过一个五年或者更长工作年限的开发人员半路加入团队的情况,可能第一两个星期他会问一些业务或者技术问题,不过一两个月他就可能在指导那些初级开发人员了。

什么原因呢?因为他已经从过往经验里面总结出来一些套路了。

那么套路是什么呢?

  1. 绝大部分业务系统,不管他后端是oracle、mysql、nosql还是内存数据库,也不管他前端是web、h5、winform、android还是ios,它的核心功能都是由增删改查组成然后通过通信、运算和人机交互串起来的,系统的复杂度主要体现在系统规模、性能、稳定性、业务流程、通信等方面。(部分工具类、基础架构类系统可能不一样)
  2. 绝大部份系统,不管是基于Java、.NET、C++还是Nodejs技术,都是遵循某种或几种设计模式分层进行开发的,最最常见的也就是MVC了。其他请参考一下设计模式教程。

那么怎么快速熟悉新的项目呢?同样也是套路。

  1. 先搞清楚新的系统是搞什么的,就问简单几个问题,谁在用这个系统?用这个系统做什么?然后自己根据这些问题去文档找答案。
  2. 弄清楚系统是怎么分层、分模块的,每层、每个模块都用到了什么技术和框架,之间是怎么通信的。有架构设计文档的话学习一下最好,没用过的技术先查查资料知道个大概。
  3. 把开发环境搭起来,通过几个典型的功能弄清楚系统里面增删改查、通信、用户交互是怎么实现的。最简单的方法是根据系统的分层,先从前端到数据库把代码疏通一下,搞不清楚的话打开debug模式一步一步走一下。
  4. 经过上面三个步骤基本上就可以改几个bug和照葫芦画瓢做个功能了。后面重点关注那些没用过的技术和组件:先搞清它的目的、背景、实现原理和功能列表,再照着文档做几个demo,平常工作时把它的文档建个快捷方式,随手查询学习一下。
  5. 平常开发过程中如果遇到问题首先要相信: 1)绝大部分自己遇到的问题很多人已经遇到过并且解决了 。 2)绝大部分自己遇到的问题在当前系统里面已经有了答案。 3)绝大部分自己遇到的问题在你用的框架和组件里面都有现成的解决方案。
  6. 对于规模比较大的系统或者系统集合,其实你平时工作接触到的也就是其中的一个系统或者模块,先把自己接触的部分搞定就行了。 新接手一个系统,如果你的目的是假设需要你排查一个问题,你就能快速定位代码位置这样的要求即可的话,掌握系统的大体架构和核心流程即可。

大体手段都差不多,从全局角度理解问题,拆开看细节实现。

1,弄明白系统是什么(定位,以及对外提供的功能) 2,有文档就看系统的设计文档,弄明白系统的模块结构,理解系统是如何构成的。(如果没文档只好看代码目录结构了,然后试图通过模块间的接口梳理清楚模块关系) 3,看一下核心功能实现,理解整个功能流程是如何走通。

至于后续如果需要你去优化系统关键流程,优化架构,就需要你对业务、对原理、对实现更深刻的理解了,这个没有什么捷径可走,只能花时间思考和折腾。

仅从单个项目的角度而言,有两个思路:

  1. 按接口从上往下梳理
  2. 按数据库从下往上梳理

需要梳理的东西主要有两个:

  1. 类/方法/函数之间的调用关系
  2. 参数传递与变化

通过上面的方法基本能整理出一套从接口到各处理类/方法/函数再到数据库的逻辑链条,然后再具体看每个类/方法/函数的实现,基本就能快速上手了

每日邮件 推送天气、鸡汤、博客

功能邮件提醒每日天气每日鸡汤每日博客邮件格式你好,xxx,今天是2019年7月21日,农历六月十五 【每日天气】 城市[北京] 天气[晴]\n温度[31℃ ~ 24℃] 白天风力[东南风<3级] 夜间风力[东北风<3级] 紫外线指数[最弱--辐射弱,涂擦SPF8-12防晒护肤品]\n穿衣指数[短袖
2020-03-28

如何快速上手一个项目

不知道你有没有经历过一个五年或者更长工作年限的开发人员半路加入团队的情况,可能第一两个星期他会问一些业务或者技术问题,不过一两个月他就可能在指导那些初级开发人员了。什么原因呢?因为他已经从过往经验里面总结出来一些套路了。那么套路是什么呢?绝大部分业务系统,不管他后端是oracle、mysql、nos
2020-03-28

解决VM虚拟机启动后假死

一、开机后黑屏假死管理员cmd 输入netsh winsock reset,回车,重启系统二、启动后假死关闭本机防火墙
2020-03-27

如何快速上手一个项目

不知道你有没有经历过一个五年或者更长工作年限的开发人员半路加入团队的情况,可能第一两个星期他会问一些业务或者技术问题,不过一两个月他就可能在指导那些初级开发人员了。什么原因呢?因为他已经从过往经验里面总结出来一些套路了。那么套路是什么呢?绝大部分业务系统,不管他后端是oracle、mysql、nos
2020-03-28

每日邮件 推送天气、鸡汤、博客

功能邮件提醒每日天气每日鸡汤每日博客邮件格式你好,xxx,今天是2019年7月21日,农历六月十五 【每日天气】 城市[北京] 天气[晴]\n温度[31℃ ~ 24℃] 白天风力[东南风<3级] 夜间风力[东北风<3级] 紫外线指数[最弱--辐射弱,涂擦SPF8-12防晒护肤品]\n穿衣指数[短袖
2020-03-28

SpringDataRedis 常用操作

//向redis里存入数据和设置缓存时间 stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS); //根据key获取缓存中的val stringRedisTemplate.opsForValue().
2020-03-28

js向json中添加属性

object['attr'] = {};
2020-03-28

如何在Java中替换多个if语句

1. 概述选择结构是任何编程语言的重要组成部分。但是我们编写了大量嵌套的if语句,这使得我们的代码更加复杂和难以维护。 在本教程中,我们将介绍替换嵌套if语句的各种方法。 让我们探索如何简化代码的不同选项。2. 案例研究我们经常遇到涉及很多条件的业务逻辑,并且每个都需要不同的处理。为了演示,我们以C
2020-03-28

SpringBoot Undertow http跳转https

package com.mtons.mblog.config; import io.undertow.Undertow; import io.undertow.UndertowOptions; import io.undertow.servlet.api.SecurityConstraint; i
2020-03-28

Java中的Date和时区转换

1.Date中保存的是什么在java中,只要我们执行 Date date = new Date(); 就可以得到当前时间。如:Date date = new Date(); System.out.println(date); 输出结果是: Thu Aug 24 10:15:29 CST 2017 也
2020-03-28
解决SpringBoot+JPA中使用set方法时自动更新数据库问题

解决SpringBoot+JPA中使用set方法时自动更新数据库问题

首先引入EntityManager:然后用它来强转获得HibernateEntityManager,然后调用获得Session,然后在set完之后用Session的.evict()方法清掉该对象缓存(并非所有对象缓存),如此就ok了...好吧,已经java11不建议用了,不过还能用,先用着吧!更新了
2020-04-04