目录

  • 1. 前言
  • 2. 学习路径
    • 2.1. 了解所属小组的业务:
    • 2.2 整个项目跑起来:
    • 2.3 使用调试工具访问项目数据:
    • 2.4 项目运行涉及知识点汇总
      • 2.4.1 项目文件中的常见注解
      • 2.4.2 项目分层说明
      • 2.4.3 项目配置环境
    • 2.5 找到一个功能,查看源码操作:
    • 2.6 例子:如何实现一项功能:
    • 2.7 服务间如何进行方法调用
    • 2.8 项目框架的学习
    • 2.9 通过业务需求进行实战
      • 2.9.1 实战内容
      • 2.9.2 开发人员代码进行自测试
      • 2.9.3 需求从提出到落实步骤说明
    • 2.10 接口编写经验总结
  • 3. 实习体会总结

1. 前言

实习时间:在华为消费者BG软件部实习了两个月,作为一名后端开发工程师,对我帮助非常大,也让我接触了实战中会遇到的问题,与我自己独自练习有很大不同。
实习总结:在这两个月里,组内气氛融洽,组内同事都对提供了很多的帮助,故想记录一下这两个月的所学,也为以后打算实习的同学有个参考,提供些许帮助。

2. 学习路径

来公司之后,我们可能对公司项目一无所知,为了尽快熟悉业务,让自己能够上手,我推荐以下学习的步骤(如果我之前知道,可能效率就能更高些了)

2.1. 了解所属小组的业务:

1)新员工项目指导书:新员工项目指导书:刚开始的时候,一定要仔细看小组的新员工项目指导书,里面详细介绍了公司的业务。知道所属业务,能够使得自己大致掌握工作的内容方向,也为后面开发做铺垫。

2)介绍:我所在的项目组为鸿蒙智联开发者平台,为智能设备厂商进行智能产品的认证,嵌入到华为鸿蒙系统中使用。建立一个自助的可循环生态系统,使得大多数智能产品能够自助接入。

3)遇到的问题:业务信息了解个整体就可以,不用太细,可以在具体业务开发的时候再详细了解(当时项目介绍部分大篇幅在说认证的流程,我以为很重要,看了大半天,弄得比较细,但是后面发现我用到的不多),可以后续边学边了解

2.2 整个项目跑起来:

1)重要:组长当时和我强调,但是我不太会,中间也出错很多,花了很多时间,技巧是:先自己看教程,有问题还是多问,让别人帮着跑通项目程序。

2)介绍:我的项目有三个大文件,分别是platformService,UserService和PlatformAPI。不同项目大致也有类似三个服务。

(1)PlatformService实现平台的主要功能,里面有很多小服务;

(2)UserService里面包含一个服务,主要是与用户相关的功能,增删改查用户的信息。

(3)PlatformAPI:这个是网关,请求先通过网关,进行过滤鉴权等操作,后面才会转发给各个自服务。

3)遇到的问题:由于对项目安装不熟悉,所以最初花了很多时间在软件安装上面,后面还是在组长的帮助下跑通项目。最开始就要掌握:从CodeHub上面把代码克隆下来,然后能够自己配置文件,还有Maven的一些属性,使得能够跑通项目。

2.3 使用调试工具访问项目数据:

1)目的:这一步骤主要是验证,项目是否正常运行,能够得到想要的结果。

2)调试工具:我用的是PostMan,还是非常好用的。通过输入URL能够访问服务的请求,输出得到结果。操作简单,可自行查阅。

3)调试方法:调试的时候,有两种访问方式:跳过网关和不跳过;(网关的目的主要是实施一些与业务无关的操作,比如登录,鉴权,过滤。)

4) 跳过网关运行项目:
(1)访问url:本机ip:子服务端口号/服务中接口的路径?入参
(2)例子:127.0.0.1:8086/v1/community/list?pages=1
(3)参数输入:一般如果是get请求,入参放在url后面,如果是post请求,就放在url后面或者Body里面(如果输入一个实体类,那么只要把用到的成员变量放进去即可)

5) 通过网关运行项目:那么就需要传入cookie和token进行权限验证。(额外打开网关服务项目文件)
(1)访问url:本机ip:网关端口号/integration/服务名/服务中接口的路径
(2)例子:127.0.0.1:9210/integration/ProductyService/v1/community/list?pages=1
(3)加入网关之后,需要获取Cookie和token信息,放入Headers里
(4)其他入参:与不通过网关一致,url后面或者Body里面。

2.4 项目运行涉及知识点汇总

2.4.1 项目文件中的常见注解

(1)@RestController : 注解的作用为输出显示为json数据格式,而非视图
(2)@RequestMapping:是一个用来处理请求地址映射的注解,可以作用在类或者方法上面,用在类上,表示该类中的所有响应请求的方法都是以该地址作为父路径的。
(3)@Validated:数据校验注解,对类进行标注
(4)@Value()获取配置文件中的属性值。配置文件具有访问顺序::classpath:/具有最低的访问权限。配置文件使用的是application-local.yml文件中的,可以在Maven右边配置中进行选择。
(5)@RpcReference:调用了三个其他服务,其中中间一个没有找到。(已经在代码库里面找到这个文件了)
-. 是CSE提供的用于rpc调用的注解。通过这个注解可以实现通过rpc的方式调用别的微服务,而不用感知要调用的微服务在哪里,address是什么。
-. 有点类似于@Autowired。注解包含两个参数:microserviceName指向服务名字,schemaId指向具体业务名字。
-. 其他服务中,如果一个业务层想成为一个远程过程调用,就需要在文件夹中新建文件rpc.privider,里面写好需要进行远程调用的程序即可,需要加上注解:@RpcSchema。
(6)@Operate:自定义注解:规定资源和操作类型

2.4.2 项目分层说明

(1)Dao:数据访问层,同Mapper层(在resource),一张表就对应一个Dao层,对其进行处理。
(2)Service:业务层,基于Dao层,能够对功能进行实现;通常里面会有impl,即如果在业务层里面添加实现接口,对应在impl里面实现。通过接口和实现的模式,可以让实现类能够完成指定的功能。
(3)Controller:表现层,基于Service层。
(4)Util:工具层,封装一些与业务没有耦合的方法,方便调用
(5)Entity:实体类,即一些表的定义都是在这里,封装表等内部的数据情况。一表一实体。
(6)Rpc.provider:远程过程调用层,定义一些本服务可能会被远程调用的服务,并设置为rpc,其他服务后面直接调用就可以用了。
(设定:在本服务的一些类上加上标注:@RpcSchema,就可以申明为rpc类了)
(调用:@RpcReference(microserviceName =A, schemaId =B),包含两个参数,一个是服务的名字,一个是实例化的具体rpc类的名字 )
(7)Enums:枚举层,就是针对一些表格,通过用一些符号表示特殊的意义。

2.4.3 项目配置环境

Local:本地环境,用于开发人员自己本地开发使用。项目在本地运行都要在local环境中。
Dev:开发者环境,开发人员把项目部署上线,运行调试的环境
Sit:系统集成测试环境(内测),测试人员进行测试的环境
Uat:用户验收测试环境,非常接近于用户使用的环境,在做上线之前需要在这个环境内运行。

2.5 找到一个功能,查看源码操作:

1)当学习完前三步,已经能够独立操作一个项目了,后面就是对项目的原理进行了解了

2)可以找组长沟通,找一个熟悉的业务,如果你来做,会打算怎么做,然后对照项目中的代码,看看别人怎么写的。

3)在这一步,主要了解如何实现一个功能:Dao层,Service层,Controller层如何进行书写,是否需要新建Util实体类和Enum枚举类。

4)对上一部分不了解的,一定要找文章看一下,一个功能是如何实现的。简要说明:如果需要对数据库操作,书写Dao层,写明方法,然后再resource层mapper的. xml文件中书写sql语句实现;在Service层书写一些方法,通过使用Dao层的方法,完成一写指定功能;最后在Controller层,利用若干个个Service层的方法,完成整体的逻辑,并且提供接口进行外部访问。

2.6 例子:如何实现一项功能:

例子:我想实现一个功能:在网页上显示一个对白名单的操作页面,能够对白名单进行增删改查。

Util层:我需要新增一个白名单表的实体类,白名单表中有哪些信息可以查询。

Dao层:数据持久层,书写对数据库的操作方法,我需要对白名单进行增删改查四个操作,所以书写四个函数。然后书写对应的Mapper文件,在里面书写sql语句进行增删改查功能实现。

Service层:书写增删改查四个方法,比如对于删除,首先我需要判断是否存在这个元素,才能进行判断,所以我再删除要先要调用Dao层的查询方法,查询是否为空,不为空,再调用Dao层的删除方法。Service层的方法,可以同时使用多个Dao层方法。

Controller层:书写四个请求:增删改查。比如还是删除操作,在这一层就需要先鉴权了,可能不是每个用户都拥有删除的操作,先鉴权,然后再调用Service中的删除方法,这里又进一步在Service层多了些内容。

** 综上**,上面只是一个很简单的需求,但是开发的顺序就是这样,越底层,考虑的内容更少,越向上,考虑的东西就更多。

2.7 服务间如何进行方法调用

1)目的:当我们书写方法的时候,不同服务可能都会用到同一个方法,为了实现代码的复用,可以采用方法的调用。

2)调用方式:服务与服务之间相互调用
(1):http的调用:需要配置各种文件,很麻烦:https://server//path//…
(2):RPC:cse://server//path…,这个方便了一些,但是需要时在同一个注册中心,同一个APPID里面(每一个配置环境对应一个APPID)
(3):APIjar包:即在开发每一个服务的时候,开发出对应的API包,之后能够供其他服务进行方便的调用,就像调用本地的方法一样。

3)下面主要介绍服务间的通信方法:RPC和RESTful API
4)RPC:远程过程调用
(1)定义:一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议,可以实现像调用本地方法一样调用其他服务方法。RPC是一种技术代名词,可以采用Http协议,也可以采用TCP/IP协议,通过动态代理实现像在本地调用一样。
(2)优缺点:调用简单,清晰,透明,不用像 rest 一样复杂,就像调用本地方法一样简单;低延时,高性能,自带负载均衡;耦合性强,定制化程度更高,适合公司内部使用。
5)RPC:实战中调用步骤
(1)在原有的服务里面新建一个文件夹rpc,里面放两个文件(最好放在子服务-api中)

接口放在api中,实现类放在service中
接口的实现类,需要额外添加一个注解;@RpcSchema(schemaId = “w3RpcServiceProvider”)
(2)在需要调用rpc的service上面进行书写服务注入
@RpcReference(schemaId = “w3RpcServiceProvider”, microserviceName = “NotificationCenter”)
private W3RpcService w3RpcService
(3) 在需要调用rpc的pom中添加
-. 添加rpc原服务的jar包

项目名字

子服务名

${project.version}

6)REST:
(1)定义:REST 是一种使用 HTTP 协议的进程间通信机制,一般使用 Json 来传递数据;可以使用自定义的URL进行服务调用,而不用关心服务的具体地址。
(2)优缺点:通用性更强,定制化程度小,效率会比RPC低些。

2.8 项目框架的学习

1)总结:学习完上面的,至少对如何运行项目,项目之间服务的架构,还有如何编写程序实现功能的逻辑,接下来需要了解更深一些,可以去获知项目使用的框架。

2)项目框架问题

(1)项目使用的底层框架是什么?SpringBoot

(2)微服务是什么,为什么需要使用微服务?最简单是为了开发更加高效,专注于一个点

(3)微服务框架有哪些?华为内部使用的是什么?华为使用的是CSE

(4)CSE与Spring Cloud的区别是什么?CSE性能更高,功能更全。

2.9 通过业务需求进行实战

2.9.1 实战内容

1)上面都是了解只是,看别人怎么写代码;

2)真正想上手,还是得自己实现一定的需求,进行实战。

3)这其中就包括如何使用Git对项目进行管理,如何对所写代码进行测试(接口测试与业务功能测试)

4)还包括一个需求如何从提出到落实

2.9.2 开发人员代码进行自测试

1)对Service实现类测试:这个主要通过Spring Boot的测试方法来实现
(1)框架使用:JUnit+AssertJ
(2)活用注解:@BeforeClass,@Before;@AfterClass,@After
(3)测试用例代码三段式:Give:基本数据参数;When:调用被测试方法;Then:结果的输出
2)Controller接口的测试:主要使用Postman进行完成(因为是前后端分离的)
(1) url:路径
(2) type:类型,Get/Post/Put等
(3) header:消息头,主要说明一些数据格式(Content-Type,Token,Cookie)
(4) Body:消息体,主要输post输入参数放在这
(5) param:消息,主要是get中在url的参数会解析放在这

2.9.3 需求从提出到落实步骤说明

(1)确定需求:首先是客户经理或者开发测试人员提出需求:可以是未涉及的功能,也可以是性能的提升。
(2)纳入版本计划:开版本讨论会,确定需求编入该版本。
(3)串讲:开发人员对所需要实现的需求进行实现逻辑讲解,这其中包含前端和后端开发人员,设计一个可行的实现方案,同时与需求提出人员进行比对,查验开发人员与需求提出人员对需求的理解是否一致。
(4)反串讲:开发人员再详细讲解具体实现逻辑,测试人员根据开发逻辑,进而提出测试的逻辑。
(5)开发:开发人员进行开发,代码书写完,需要进行自测试,然后提交给测试人员之前需要demoshow(即展示基本逻辑是否能够实现);demoshow通过之后提交测试
(6)测试:测试人员根据不同的情况,对接口进行访问,查找出可能会出错的地方。
(7)代码合并:一个需求就这么结束了

2.10 接口编写经验总结

1)遇到错误总结:在编写接口实现功能的时候,为了使得代码清晰,也方便后期的维护,有一定的规范性,我遇到的问题总结如下:
(1)关键日志输出:对关键数据进行日志行的输出,方便查看运行情况
(2)常量定义:代码中出现数字或者字符串,用常量表示,且全为大小,下划线分割
(3)类复用:重复代码定义为类,方便继承
(4)解释说明:一定要说清楚方法的目的,输入参数与输出参数的具体意义。
(5)版权注释:在文件顶部,注释版权许可信息
(6)删除无意义行:代码编写是,可能会引入多余参数或注入,后续没有用到,需要统一删除,精简代码。
2)接口编写规范注意项总结
(1)接口参数校验:对输入,输出参数进行校验
(2)接口兼容性:不能直接删除老接口,要进行兼容
(3)接口扩容性:接口不应该局限于一种功能,应该可以拓展为多种类似功能
(4)第三方接口调用注意:考虑超时,异常和重试次数,方便自己的逻辑。
(5)日志打印:关键代码位置,日志打印好,方便查看运行情况
(6)接口功能单向:接口能够实现的功能单一,不能进行杂糅,与可拓展性不冲突
(7)可变参数配置化:一些经常会变动的数据,作为一个配置类进行数据配置,适用不同范围
(8)接口实现:SQL的优化
(9)接口状态与错误:接口运行成功返回值,运行失败,返回对应的错误码和描述,不能直接抛出异常信息。
(10)接口的异常处理:
(11)优化程序逻辑
(12)接口的安全:隐私信息的脱敏;不能随意访问,采用token机制
(13)接口定义:清晰易懂,命名规范

3. 实习体会总结

在华为实习两个月,虽然不是很长,但是让我切切实实体会到未来工作的日常。没来之前听说华为内部加班特别厉害,但是来了才知道,得分部门,分时段,所以还是只有亲身体会才知道。
组内氛围很好,主管与同事之间也都非常热情帮助我,虽然有时一些问题确实很简单,但是还是耐心讲解,也让我从一个小白,逐渐能够独立完成一些任务。
在实习过程中,自我感觉有以下几点是非常重要的,我之后也会坚定贯彻下去:
1)不要拒绝思考一些东西,留出一部分时间思考是非常重要的思想。
2)时刻别忘记自己因为什么而出发,在每一个小的阶段都非常重要
(1)阶段性询问自己,为什么现在在做这件事,做事情的意义在哪里?
(2)根据上一步的结果,及时调整计划走向(总结归纳)
(3)每天留给自己一些安静思考的时间,巩固一天所学,用讲述的方式讲给自己听。
3) 如何快速理解一个全新的大的项目?
(1):从上到下去理解项目(上指局部,下指自我业务源码,先大后小)
(2):遇到问题,自己先解决,带着自己查阅的资料,不会再问身边的同事,进行快速了解;一定要有自己思考的时间,不可不思考直接询问,这样印象也不会深刻。

华为开发后端实习体验总结帖(详细)相关推荐

  1. 2023 4月份 华为硬件开发岗位实习生机考回忆

    2023 4月份 华为硬件开发岗位实习生机考回忆 Proscribe !本帖只用作学习之意,若违反任何要求或侵权将立马删除,其中答案也可能错误,实际的工程应用和理论也有所区别,仅收录部分题目和答案等, ...

  2. 详细记录基于vue+nodejs+mongodb构建的商城学习(四)基于项目的node.js开发后端的学习与梳理总结...

    前置: 本系列文章是一个本人边学习边梳理的学习笔记,俗话说好脑袋不如烂笔头,再好的记忆力时间长了也会有细节忘记,本项目选择的前端框架是vue,后端开发使用是node.js,数据库使用的是mongodb ...

  3. php源码二次开发的技术,Thinkphp二次开发威客RW平台源码详细搭建教程(技术分享帖)-一颗优雅草科技yungui...

    Thinkphp二次开发威客RW平台源码详细搭建教程(技术分享帖)-一颗优雅草科技yungui原地址:这里不能发 应会员要求,本着互帮互助的原则,在这里出一套搭建教程. 首先 查看是否跟我的运行环境一 ...

  4. 211非科班阿里Java后端实习面经(三面+HR面)(已意向)

    写在前面 本人目前是北邮非科班大三在读,GPA中上,培养方案内包括一些不是很硬的计算机课程,如C.Java程序开发.Web应用开发.数据库.计算机网络等,讲得比较水,主要靠自学和项目. 有过一段京东物 ...

  5. 华为产品测评官-开发者之声 - 华为云CodeArts真实体验感想

    华为产品测评官-开发者之声 - 华为云CodeArts真实体验感想 我先是在6月17日参加了华为在深圳举办的开发者大会,后面看到群里发的"2023华为产品测评官-开发者之声"活动, ...

  6. [经验]2020届后台开发方向实习,秋招经验总结

    文章目录 [经验]2020届后台开发方向实习,秋招经验总结 实习 秋招 准备 1.算法题 2.简历 3.基础知识 4.招聘信息 5.智力题 6.心态 7.面经 [经验]2020届后台开发方向实习,秋招 ...

  7. 跟我学Springboot开发后端管理系统8:Matrxi-Web权限设计实现

    上篇文章讲述了Matrix-web整体实现的权限控制的思路.现在来回顾一下: 首先,用户需要登录,填用户名.密码,后端接收到登录请求,进行用户.密码的校验,校验成功后则根据用户名生成Token,并返回 ...

  8. 跟我学Springboot开发后端管理系统4:数据库连接池Druid和HikariCP

    上一篇文章主要讲解了如何再Matrix-Web中使用Mybatis-Plus,Mybatis-Plus作为Orm框架,连接数据库需要连接数据库的依赖.WEB 系统高并发环境下,频繁的进行数据库连接操作 ...

  9. 【产品评测】华为开源镜像站体验:美好终将不期而遇

    电脑因为前段时间有问题,昨天刚刚重装好系统,之前一大堆运行环境全部要重新弄--T_T 今天碰上华为开源镜像站体验,那就测试和体验一把吧! 先说说测试环境: 网络:广东电信20M企业光纤 系统:Wind ...

  10. 华为鸿蒙系统深度体验报告,堪比苹果IOS的存在!

    前段时间备受期待的鸿蒙系统终于正式亮相了,华为也公布了首批适配机型,很多人都和小编一样,在第一时间将自己的华为手机升级至了鸿蒙系统,接下来让我们来看看鸿蒙系统的实际上手体验到底如何呢? 根据实际体验, ...

最新文章

  1. springboot(十六):使用Jenkins部署Spring Boot
  2. 实习二 栈、队列和递归算法设计 (题目:停车场管理 )
  3. Russ Miles:被忽略的架构师和混沌工程
  4. 11月12日云栖精选夜读 | 2135亿!新技术的力量刚刚开始
  5. yarn ngc使用练习
  6. 爬虫小记:利用cookies跳过登陆验证码
  7. Deep Learning(深度学习)网络资源
  8. 强烈推荐一个在线caffe网络可视化工具!!
  9. 用一个div模拟textarea的实现【前端每日一题-15】
  10. 无责任书评——DOOM启示录 BORLAND传奇
  11. matlab生成16进制正弦波表
  12. linux cxf服务端,Apache CXF 框架应用实战
  13. 1.12 线性表的链式存储结构(C语言)
  14. 黑客穷追不舍攻击“谷姐” [转]
  15. 顶级摄影师的磨皮美白利器Portraiture,支持搭配微设证件大师使用
  16. 实例详解ISA防火墙策略元素
  17. 1.3(1) 框架——内嵌框架
  18. Linux - 轻量级虚拟机工具QEMU
  19. 移动硬盘明明有空间显示内存不足,删除部分空间后仍显示不足的问题解决
  20. 黑马程序员——阿龙的学习历程——Java初见

热门文章

  1. html 实现蒙板效果,用css3实现ps蒙版效果+动画
  2. 预充电电路工作原理_课堂 | 为什么锂电池在充电过程中首先要进行预充电
  3. cos(a-b)=cosa*cosb+sina*sinb的推导过程
  4. 软件测试系统性总结思维导图
  5. 小程序二维码生成普通链接并携带参数
  6. hashcat简单使用
  7. 计算机ps移动是什么键,ps快捷键都有哪些 移动工具V等
  8. centos7,php7.3使用pecl安装swoole,新手教学
  9. 第十六章 python Pygame的使用
  10. php居民小区物业水电费管理系统mysql