Java开发规范&开发工具使用经验&Java基础知识&简单业务场景

1、接口创建。方法名用动词,path用名词。或者方法名和path用名词,把请求方式当作动词。

2、接口抽出的层次结构。从控制层所在服务抽离出实体类,单独用一个module存放实体,实体中只包含属性,不包含方法。业务相关的实现包括方法就写在服务自己的module中。

3、架构角度-gateway。保证纯洁性,存粹的用来做转发和限流,相关业务实现写在下游,比如说秒杀接口就在下游。

4、git工具解决代码冲突。有三列,中间那列是我最终想要的结果,左边是自己未提交的代码(是需要添加到中间那列的),右边是remote,别人提交的代码(如果没什么问题,也应该将代码添加到中间那一列)。导致的原因:有多个人更改了同一个文件。

5、分支-branch。bug、新增需求。如果我改动的文件很有可能被其它人更改(不是全新的一个模块),最好的办法是:一个再小的需求改动也从master创建一个分支,因为多个小需求放在一个分支,一旦有冲突,解决冲突要看的东西就多得多了。所以一个小需求就new一个分支,分别merge到dev和master。如果是一个全新的模块,这个模块的内容只有自己会更改,那就只new一个分支。本地和测试环境没有问题后,一次性把当前分支的中规模代码量发布到master。

6、intelliJ IDEA使用卡顿,代码莫名爆红,项目启动莫名其妙失败,此时可以Invalidate一下Caches并restart。

7、从master new 一个branch之后,切换到新的branch,点击update会fail,虽然我是从master new出来的,但是我update是从新的branch的remote pull,第一次new时,该branch是没有remote的,得自己push。所以呢,这会导致什么问题,一旦新的branch不尽快merge到master,由于master是被孤立的,我update dev之后,在把新的branch merge到dev,此时会出现三列,左边那列是dev的remote,右边那列是branch里面新增的代码,此时要把左右两列的代码到添加到中间那一列去。总之把branch merge到dev或者master的时候,一定要把左边(别人往master push了新代码,branch是独立的,无法从master跟代码更新到自己创建的分支(其实可以的,切换到我自己的branch,然后把master merge过来))的和右边的(我自己添加的代码)都添加进去。总之,branch作为我new的一个分支,相对dev和master是独立的,要更新别人的代码到自己建立的branch,可以切换到我的branch,把dev或者master的最新代码merge过来,如果漏掉了merge,就会出现三列,这时候把左边和右边的都添加到中间就行了。merge a into b,把a中新增的内容添加到b、把a中修改的内容更新到b、使b的内容和a的内容保持一致。

8、对象:对象指存在内存具体位置的数据。对象的引用:对象成功创建后会有一个地址值,叫做对象的引用。如果想比较引用值,用==,如果想比较对象属性值,用equals。比如Integer的equals覆写了Object的equals,比较的是属性value与目标整数的值,而不是对象的引用。Integer有自己的缓存,整数在-128到127时,可以理解为没有创建对象,用==比较的是数值,就是比较基本数据类型,如果整数超出这个范围,就会创建对象,==便是比较的对象的引用了。除此外,对于Integer,Integer.value()和new Integer()这种装箱操作,都会创建对象,用==就是直接表示了要比较应用值,此时应该使用equals比较。注意,每个对象的引用值都是不同的,若引用值相同,那这两个引用指向的是内存的同一个位置,也就是这“两个对象”,明明就是同一个。

9、切面。使用@Around,jointPoint.proceed(args)+return R.fail。先执行业务接口,业务接口的响应会被切面的return覆盖掉,所以最终响应是切面的fail。环绕通知会在业务接口执行完之后,再执行一次切面代码。不清楚是@Around的原因还是joinPoint本身就可以在接口执行之后再执行joinPoint后续的代码。我认为是回调函数的特性。函数(业务接口)执行完就会回到调用处,所有函数调用都是这样哇。函数执行完就回到调用处,继续往下执行。业务:1、敏感词检测到了。2、将评论持久化,同时审核不通过,所以评论不可见。3、业务接口(持久化评论)执行完就执行R.fail提示存在敏感词。这样数据既持久化了(业务接口响应R.ok),又响应了R.fail("包含敏感词")。整体来看就是,无论什么评论都会正常持久化,只是将不合理的评论设置为不通过,故不显示。还有,敏感词检测的逻辑是从数据库获取所有敏感词,遍历敏感词与评论内容做包含匹配,若评论中包含敏感词,则设置审核不通过。

10、使用restTemplate发送一个post方式的request。包含的步骤:设置请求实体(实体包含json和headers)、设置headers、设置json、发送请求、从请求中获取result。所有的方法都是springframk-web下面的方法。

代码:

        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.set("X-Auth-Token", "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNzU3MDgxMjEwNCIsImlhdCI6MTcyMDU4MjkzMCwiZXhwIjoxNzIzMTc0OTMwfQ.WXS_UkTPwZJ8OF-aNA9S8LKMYdegLlTLCc0eOEWcTIn79mjvQvTa4xZAonVgwx7vcDjvZI0N_D-pg5wIi8rPHA");
        headers.set("X-Tycid", "01c77df03e5811efa2e59396716ee0c2");
        headers.set("Accept", "*/*");
        //导致报文被压缩,因此乱码,故注释
        headers.set("Accept-Encoding", "gzip, deflate, br");
        headers.set("Connection", "keep-alive");
        headers.set("Cookie", "CUID=f4f61f136ea22d8259279e735e944803; TYCID=b4142f203f2b11efa3a83d8c0a464494; HWWAFSESID=7a17dd9348d3458b79e; HWWAFSESTIME=1720744497457");
        headers.set("Content-Type", "application/json");
        headers.set("Connection", "keep-alive");
        //设置json
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("word", "$");
        jsonObject.put("sortType", "0");
        jsonObject.put("pageSize", "20");
        jsonObject.put("referer", "search");
        jsonObject.put("type", "tail");
        jsonObject.put("key", "");
        jsonObject.put("sessionNo", "1720681470.05539486");
        jsonObject.put("pageNum", "1");
        //创建请求实体
        HttpEntity<String> requestEntity = new HttpEntity<>(jsonObject.toString(), headers);
        //发送post请求并从response中获取接口响应数据
        String url = "url";
        ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
        String result = responseEntity.getBody();

其中,header中的参数不能缺漏,不能服务端会拒绝处理request

11、客户端和服务端都在远程服务器,远程服务器是有自己的ip地址的。客户访问远程服务器时,如何获取客户所在机器的ip地址?

12、数据防盗。设置pageSize的最大长度,根据用户的身份(要求vip)设置pageNum的最大值,若超过最大值提示用户充值。

13、有新模块,首先在dev分支对应的本地文件编辑,这时候有其它紧急模块功能,这个得先放下,就从master new 一个新分支,并切换过去,然后将代码commit上去。comit成功后,切换到dev,dev对应的本地文件不包含原先编辑的内容了。新内容到跑到feature分支去了。其实,一个模块的功能,最开始先建立一个分支,在这个分支开发比较好,开发完后再merge到dev上面去,再测试。

14、使用mp的list方法查询所有数据。服务器变卡,由此可见,数据全存在服务器内存中了,导致变卡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值