来公司之后,我们可能对公司项目一无所知,为了尽快熟悉业务,让自己能够上手,我推荐以下学习的步骤(如果我之前知道,可能效率就能更高些了)
1)刚开始的时候,一定要仔细看小组的新员工项目指导书,里面详细介绍了公司的业务。知道所属业务,能够使得自己大致掌握工作的内容方向,也为后面开发做铺垫。
2)介绍:我所在的项目组为鸿蒙智联开发者平台,为智能设备厂商进行智能产品的认证,嵌入到华为鸿蒙系统中使用。建立一个自助的可循环生态系统,使得大多数智能产品能够自助接入。
3)遇到的问题:业务信息了解个整体就可以,不用太细,可以在具体业务开发的时候再详细了解(当时项目介绍部分大篇幅在说认证的流程,我以为很重要,看了大半天,弄得比较细,但是后面发现我用到的不多)
1)这个是最重要的,组长当时和我强调,但是我不太会,中间也出错很多,花了很多时间,技巧是:先自己看教程,有问题还是多问,让别人帮着跑通项目程序。
2)介绍:我的项目有三个大文件,分别是platformService,UserService和PlatformAPI。不同项目大致也有类似三个服务。
(1)PlatformService实现平台的主要功能,里面有很多小服务;
(2)UserService里面包含一个服务,主要是与用户相关的功能,增删改查用户的信息。
(3)PlatformAPI:这个是网关,请求先通过网关,进行过滤鉴权等操作,后面才会分发给各个自服务。
3)遇到的问题:由于对项目安装不熟悉,所以最初花了很多时间在软件安装上面,后面还是在组长的帮助下跑通项目。最开始就要掌握:从CodeHub上面把代码克隆下来,然后能够自己配置文件,还有Maven的一些属性,使得能够跑通项目。
1)这一步骤主要是验证,项目是否正常运行,能够得到想要的结果。
2)调试工具我用的是PostMan,还是非常好用的。通过输入URL能够访问服务的请求,输出得到结果。操作简单,可自行查阅。
3)在调试的时候,有两种访问方式:
(1)第一种是通过不网关,这个时候输入的url:
“本地IP:服务对应的端口号/服务里面的访问路径”,例如:127.0.0.1:9030/v1/productMange/getList?page=1&pageSizes=17;其中问好后面的数需要输入的参数,在Get请求中,就直接拼接在url后面。
(2)第二种需要通过网关,则除了url不同外,输入也不一样,需要加上账号的X-token和Cookie等信息进行过滤操作,否则会报错:无权限访问。URL的格式如下:
“本地IP:网关对应的端口号/网关名/服务名/服务里面的访问路径”,例如:
127.0.0.1:9010/integration/DevicePartnerProducts/v1/productMange/getList?page=1&pageSizes=17
1)当学习完前三步,已经能够独立操作一个项目了,后面就是对项目的原理进行了解了
2)可以找组长沟通,找一个熟悉的业务,如果你来做,会打算怎么做,然后对照项目中的代码,看看别人怎么写的。
3)在这一步,主要了解如何实现一个功能:Dao层,Service层,Controller层如何进行书写,是否需要新建Util实体类和Enum枚举类。
4)对上一部分不了解的,一定要找文章看一下,一个功能是如何实现的。简要说明:如果需要对数据库操作,书写Dao层,写明方法,然后再resource层mapper的. xml文件中书写sql语句实现;在Service层书写一些方法,通过使用Dao层的方法,完成一写指定功能;最后在Controller层,利用若干个个Service层的方法,完成整体的逻辑,并且提供接口进行外部访问。
5)例子:我想实现一个功能:在网页上显示一张对白名单的操作页面,能够对白名单进行增删改查。
(1)Util层:我需要新增一个白名单表的实体类,白名单表中有哪些信息可以查询。
(2)Dao层:数据持久层,书写对数据库的操作方法,我需要对白名单进行增删改查四个操作,所以书写四个函数。然后书写对应的Mapper文件,在里面书写sql语句进行增删改查功能实现。
(3)Service层:书写增删改查四个方法,比如对于删除,首先我需要判断是否存在这个元素,才能进行判断,所以我再删除要先要调用Dao层的查询方法,查询是否为空,不为空,再调用Dao层的删除方法。Service层的方法,可以同时使用多个Dao层方法。
(4)Controller层:书写四个请求:增删改查。比如还是删除操作,在这一层就需要先鉴权了,可能不是每个用户都拥有删除的操作,先鉴权,然后再调用Service中的删除方法,这里又进一步在Service层多了些内容。
(5):综上,上面只是一个很简单的需求,但是开发的顺序就是这样,越底层,考虑的内容更少,越向上,考虑的东西就更多。
1)目的:当我们书写方法的时候,不同服务可能都会用到同一个方法,为了实现代码的复用,可以采用方法的调用。
2)方法:有两种实现途径,第一是服务之间的通信,进而调用其他服务的方法;第二种是引入jar包,把共同的功能封装,使得需要的服务进行jar包的调用,就能够调用里面的方法。下面主要介绍服务间的通信方法:RPC和RESTful API
3)RPC:远程过程调用
(1)定义:一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议,可以实现像调用本地方法一样调用其他服务方法。RPC是一种技术代名词,可以采用Http协议,也可以采用TCP/IP协议,通过动态代理实现像在本地调用一样。
(2)优缺点:调用简单,清晰,透明,不用像 rest 一样复杂,就像调用本地方法一样简单;低延时,高性能,自带负载均衡;耦合性强,定制化程度更高,适合公司内部使用。
4)REST:
(1)定义:REST 是一种使用 HTTP 协议的进程间通信机制,一般使用 Json 来传递数据;可以使用自定义的URL进行服务调用,而不用关心服务的具体地址。
(2)优缺点:通用性更强,定制化程度小,效率会比RPC低些。
1)学习完上面的,至少对如何运行项目,项目之间服务的架构,还有如何编写程序实现功能的逻辑,接下来需要了解更深一些,可以去获知项目使用的框架。
2)项目框架问题
(1)项目使用的底层框架是什么?SpringBoot
(2)微服务是什么,为什么需要使用微服务?最简单是为了开发更加高效,专注于一个点
(3)微服务框架有哪些?华为内部使用的是什么?华为使用的是CSE
(4)CSE与Spring Cloud的区别是什么?CSE性能更高,功能更全。
1)上面都是了解只是,看别人怎么写代码;
2)真正想上手,还是得自己实现一定的需求,进行实战。
3)这其中就包括如何使用Git对项目进行管理,如何对所写代码进行测试(接口测试与业务功能测试)
1)确定需求:首先是客户经理或者开发测试人员提出需求:可以是未涉及的功能,也可以是性能的提升。
2)纳入版本计划:开版本讨论会,确定需求编入该版本。
3)串讲:开发人员对所需要实现的需求进行实现逻辑讲解,这其中包含前端和后端开发人员,设计一个可行的实现方案,同时与需求提出人员进行比对,查验开发人员与需求提出人员对需求的理解是否一致。
4)反串讲:开发人员再详细讲解具体实现逻辑,测试人员根据开发逻辑,进而提出测试的逻辑。
5)开发:开发人员进行开发,代码书写完,需要进行自测试,然后提交给测试人员之前需要demoshow(即展示基本逻辑是否能够实现);demoshow通过之后提交测试
6)测试:测试人员根据不同的情况,对接口进行访问,查找出可能会出错的地方。
1)在编写接口实现功能的时候,为了使得代码清晰,也方便后期的维护,有一定的规范性,我遇到的问题总结如下: