威海天之卫网络空间安全科技有限公司 实习总结
2019年7月13日 周六第一天上班(因为这周有一天停电,调到周六),期间周末双休。
2019年8月23日结束实习。
时间:2019年7月15日11:20:42
1、分层: 从上到下:api(对外提供接口)-biz(业务逻辑层)-domain(领域层)-dal(数据持久层)(dao和mapper)
2、数据流向:
数据库—PO对象—DO(对内的DO)—DO(对外的DO)—目标数据格式。
外部请求参数——内部请求innerRequest——PO——数据库。
注:PO(persistant object) 持久对象 数据库与PO对象一一对应。
DO(Domain Object)领域对象
3、实现类中少写注释,写在接口中。注释的写法都是javadoc格式。
方法名、变量名 命名规范,使用驼峰命名法。命名体现方法、变量的含义。
eg:VpnsLinkInfo ,List<VpnsLinkInfo> vpnsLinkInfos
4、git使用:
git clone ‘url’ :克隆一个项目到本地,“url” 是项目链接
git pull :拉取新的代码
git checkout -b "branch name" :切出一个新的分支。
git add . :提交代码:若有新增文件 ,则先add .。
git commit -a -m “提交内容解释”:提交代码。“提交内容解释”是对本次修改的注释。
git push :将本地代码push到远端,也就是从本地push到网络中。
merge request :合并请求。
5、postman 接口测试软件
6、mybatis +mapper 操作数据库
7、redis 缓存
8、radius
9、rabbitmq 消息队列
时间:2019年7月16日10:09:04
1、各层功能:
api层 功能少,参数校验、数据转换等。
biz层 负责主要的业务逻辑,各种判别,验证数据
domain层 用户与数据库交互的核心中转站,控制用户数据收集,控制请求转向
dal层 读写数据库 分为mapper和dao
mapper 直接读写数据库,dao继承自mapper。
2、IDEA使用小结:
格式化代码 ctrl+alt+L
全部修改变量名:shift+F6
时间:2019年7月17日10:25:39
1、获取实时在线人数,dao层需要两个参数,prefix和key,不用从上层传入,应该直接在dao层 写好。返回的是在线用户集合就Ok。
2、注解如何使用。
时间:2019年7月18日07:56:54
时间:2019年7月19日07:57:17
1、int 和Integer
Integer可以接收null,int不能接收null,所以如果存在可能是空值得参数,一般用Integer接收。
2019年7月22日09:28:16:
1、推送用户消息至RabbitMQ消息队列,从消息队列读取至influx数据库。
2019年7月23日08:13:20
1、工具类要写的通用一些。
2、mvn clean delopy:maven 指令的用法
3、跳板机的概念和使用。
4、实时推送用户注册消息。
控制中心:新建一个监听器,监听到用户注册,将消息写入RabbitMQ
大屏展示后端:接受用户注册消息,将消息写入Influxdb
2019年7月24日07:56:38:
1、实时推送用户上线消息
控制中心:监听到用户上线,将消息写入RabbitMQ
大屏展示后端:接收用户上线消息,将消息写入Influxdb
2019年7月29日15:36:48
2019年7月30日07:57:04
1、画序列图 :同步还是异步的画法不同。
2019年7月31日08:03:19
1、@value 读取properties 配置文件(归类位注解的用法)
2、配置文件和配置类有区别
3、
Integer.parseInt(StringUtils.remove(softVersion, '.'));
此处代码使用了String的remove工具。
4、枚举的用法。
比如当用户类型有固定的两种,在程序中还经常使用,这时候应该定义一个UserType枚举类;
2019年8月1日09:26:53
1、Oss对象存储
2019年8月2日14:37:34:
1、Mapper层直接操作数据库,
2、DAO层 可加缓存
3、Swagger 用于接口测试
4、@postmapping 一般的写操作,包含敏感信息参数
@getmapping 一般的读操作
时间:2019年8月5日08:18:54
1、@ResponseBody 返回对象时候使用。
2、前端逻辑和后端逻辑要区分开来。
后端只需要提供数据接口即可。
2019年8月6日13:44:59
1、@Param注解(归类为注解用法)
2019年8月7日14:04:17
1、Pojo类内 都用Integer类型参数
2、PO对象列表批量转换为DO对象列表的方法。
3、要学的内容:
Junit: 单元测试
Foeach: 批量查询、插入
Lambda表达式
时间:2019年8月13日16:03:29
1、
不再用get方法,直接用gatewayTypePO.id. (属于mybatis内容。)
时间:2019年8月14日08:09:39
1、innerRequest 应该处于domain层。
2、分页查询
3、用到Lambda表达式的地方。
//1.获取国家名称列表
List<CountryDO> countryDOS = softDomainService.getCountries(countryCodes);
if (CollectionUtils.isEmpty(countryDOS)) {
log.warn("不存在此国家列表,countryCodes:{}", countryCodes);
return new HashMap<>();
}
//2.获取vpns
Map<Integer, List<String>> vpnIps = new HashMap<>();
List<String> countries = countryDOS.stream().map(CountryDO::getCountryName).collect(Collectors.toList());
List<VpnsResourceDO> vpnsResourceDOS = vpnServerDomainService.getVpnsResources(countries);
if (CollectionUtils.isEmpty(vpnsResourceDOS)) {
log.warn("不存在与此国家列表对应的vpns资源,countries:{}", countries);
return new HashMap<>();
}
//3.获取vpsIp列表
for (CountryDO countryDO : countryDOS) {
List<String> vpnsIp = vpnsResourceDOS
.stream()
.filter(vpnsResourceDO -> (Objects.equals(vpnsResourceDO.getCountry(), countryDO.getCountryName())))
.map(VpnsResourceDO::getVpnsIp)
.collect(Collectors.toList());
vpnIps.put(countryDO.getCode(), vpnsIp);
}
return vpnIps;
2019年8月20日14:28:01
1、类命名时候,注意是否显示业务含义。
例如;Request类,要体现业务含义。
2、去除字符串中的 “.”,强转为int。
Integer.parseInt(StringUtils.remove(softVersion, '.'))
3、Map的用法之一
4、swagger注解使用:
虽然接受参数是国家代码列表contryCodeList,但是dataType = "int", allowMultiple = true 。 因为allowMultiple=true,所以dataType=int
@ApiImplicitParams({
@ApiImplicitParam(name = "countryCodes", value = "国家代码列表", required = true, dataType = "int", allowMultiple = true, paramType = "query"),
})
@GetMapping("/listvpnsips")
public @ResponseBody
PlainResult<Map<Integer, List<String>>> listVpnsIps(@RequestParam("countryCodes") List<Integer> countryCodes) {
来源:51CTO
作者:mrzhangfd
链接:https://blog.csdn.net/qq_26930265/article/details/100066897