开发笔记

代码开发

1、不要把服务器路径返回给前端

2、数据请求参数在后端作一定的校验,记住前端是不可靠的

3、限制查询条数,提前过滤掉不当请求

4、拿到的数据记得做非空校验,特别是之后要调用这个对象的方法的时候

5、每个查询sql最后务必按时间和主键order by,防止分页出现数据重复的问题

6、调用第三方接口时,要确保生产环境是否能够调通

后端调用接口

try {
    Req req = new Req();
    req.setId(Id);
    log.info("调用接口, Id: {}", Id);
    String repsonse = HttpTemplates.create()
        .headers(getRequestHeader())
        .url(url)
        .body(JsonUtils.toJsonString(req))
        .post();
    ResponseMsg<String> responseMsg = new ObjectMapper().readValue(repsonse, TypeFactory.defaultInstance().constructType(new TypeReference<ResponseMsg<String>>() {}));
    if (!CODE_SUCCESS.equals(responseMsg.getCode())) {
        throw new AppException(MessageFormat.format("调用接口失败, Id: {}", Id));
    }
    String price = responseMsg.getData();
    log.info("调用接口结束, Id: {}", Id);
} catch (Exception e) {
    log.error("调用接口失败", e);
}

缓存处理

前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。

一、缓存穿透

大量并发请求缓存和数据库中都没有的数据。

二、缓存击穿

大量并发请求同一条数据,但该数据缓存中没有但数据库中有。

三、缓存雪崩

大量并发请求不同数据,这些数据缓存中没有但数据库中有。

四、解决方案

1、Controller层增加校验,如用户鉴权校验,id基础校验 。

2、设置热点数据永远不过期。

3、对数据加互斥锁,保证其中一个请求去数据库中取数据时,其他线程等待,最后从缓存中取数据。

4、缓存数据的过期时间设置随机。

5、热点数据均匀分布在不同的数据库中。

Java各种对象

VO:值对象(Value Object),通常用于业务层之间的数据传递。

表现层对象(View Object),主要对应展示界面显示的数据对象。

PO:持久对象 (persistent object),就是在Object/Relation Mapping(orm) 框架中的Entity,PO的每个属性基本上都对应数据库表里面的某个字段。

DTO:数据传输对象(Data Transfer Object),我们不需要把整个PO对象全部字段传输到客户端,而是可以用DTO重新封装,传递到客户端。此时,如果这个对象用来对应界面的展现,就叫VO。

POJO:POJO(Plain Ordinary Java Object)简单的Java对象。一个POJO持久化以后就是PO,直接用它传递、传递过程中就是DTO,直接用来对应表示层就是VO

DAO: 数据访问对象(Data Access Object),就对应了Mybatis的Mapper接口

posted @ 2022-04-16 16:00  云轻YK  阅读(38)  评论(0)    收藏  举报