工作之经验之谈4
1. 对于一些类型或者步骤,一般使用整数类型作为值。为了防止新增类型或步骤,一般可以可定义不连续值。例如:0 10 20 30 等,如果有新增类型或者步骤,可以定义值为2,3,4等。
2. 自动化代码生成工具
3. 如果定义字段类型为int,在使用Integer转换的时候,会默认调用方法将Integer转换为int,如果Integer为null,会报空指针异常。需要判断是否为null。
4. 使用spring MVC传递参数时,如果报400错误,可能是类型转换错误,请确认传递的参数类型是否一致。
5. 详细的注释:每个参数什么意思;有哪些情况需要处理;如果有Map,map的key和value值有哪些;使用<br>换行
6. static静态方法或静态代码块,进行数据初始化
7. service引用别的service,尽量不要引用别的mapper
8. git的使用
9. map中key值为字符串时,按int型排序:
Map<String,Integer> sortMap = new TreeMap<>(new Comparator<String>() {
public int compare(String o1, String o2) {
return Integer.parseInt(o1)-Integer.parseInt(o2);
};
});
10. token认证,拦截器。使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
1). 客户端使用用户名跟密码请求登录
2). 服务端收到请求,去验证用户名与密码
3). 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
4). 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
5). 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
6). 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
token:加密 ; 请求时携带 ; 缓存起来
11. 模拟post请求:amber 和 postman
12. 使用guava中的工具类
13. 使用泛型,简化代码
14. 使用lombok中的@Data减少setter和getter方法
15. 实体类继承
16. 自动构建工具,jenkins
17. 相同的代码提取成复用方法
18. 缓存不变的内容,例如:区域、城市
19. 数据库插入或者更新,时间自动生成
20. 分页封装,将设计分页的内容提取出来,例如:放到intercept和ThreadLocal中
21. 员工/岗位:查询员工使用员工,查询上下级关系使用岗位。岗位保存历史信息,同一个员工的每个时间段只有一个处于激活状态。
22. 封装返回对象
23. mybatis:
HashMap:<select id="getDealerVisitRecordCount" resultType="int" parameterType="java.util.Map" >
in语句判断,判断是否为空以及长度是否大于0:
<if test="positionIdList!=null and positionIdList.size!=0">
a.position_id in
<foreach collection="positionIdList" item="id" index="index" open="(" close=")" separator=",">
#{id}
</foreach>
</if>
大于和小于:
<if test="startDate!=null">
AND a.visit_time > #{startDate}
</if>
24. 一个项目,如果一切正常,可能是访问路径错了。包括:IP,项目名,类路径,方法路径。更新maven项目可能导致项目路径由/变为项目名。
25. 在eclipse中新建simple Maven project项目后,pom.xml报错:
web.xml is missing and <failOnMissingWebXml> is set to true
解决方法:
在Java EE窗口下,打开项目,单击Deployment Descriptor,右键单击:Generate Deployment Descriptor Stub
注意,只有新建简单项目,打war包的时候,才会出现上面的操作。
26. 直接使用:PrepareStatement
Class.forName(db_driver);
conn = DriverManager.getConnection(url, "root", "123123");
ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery(sql);
27. List、Set、 数组等转字符串:
list转字符串:str = StringUtils.join(list.toArray(), ",");
符串数组转为字符串:str = StringUtils.join(strArray, "-");
set转换为字符串:str = StringUtils.join(set.toArray(), ";");
28. 自己的项目,一个方法,各种情况,各种测试
29. guava处理字符串与List之间,字符串与map之间的转换:
List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom");
String result = Joiner.on(",").join(names);
参考:http://blog.csdn.net/sunhuwh/article/details/41291515
30. 自动分页:https://github.com/pagehelper/Mybatis-PageHelper
31. 使用jenkins部署项目时,打包等都没问题,只有部署有问题。可以通过tomcat下的日志查看错误。
32. 通过抛出自定义异常来获取返回信息给前端
33. 一直查看后台日志,来判断是否有错误
34. 写SQL语句来查询一些常用东西否,方便查看
35. 设计一个表时,要知道这个表都会显示显示哪些内容。需要保存哪些信息,以后用。(例如:记录人员等)
36. 在插入数据时,如果有字段限制唯一。为防止数据重复插入导致异常。可以使用下面三种方法:
1). 使用redis,redis操作为单线程。标记已有线程在处理这件事。例如:手机号
2). 使用ON DUPLICATE KEY UPDATE
3). 捕获重复字段异常
37. 当超链接不表示真正访问路径时,可以按F12,通过点击超链接,查看网络请求来确认真正的访问路径。
38. 记录操作日志,一些关键信息记录到数据库中,方便以后查询。但对于错误信息,一般记录到文件。如果错误日志也记录到数据库,可能会在非法攻击的时候导致数据库崩溃。
39. 一些专业的羊毛党,非常强大。可以通过程序辨别短信验证码等,刷注册等。一般只能通过业务解决,如:让对方投资才给优惠,或者直接下线活动。
40. xshell上的链接有明确的名字,不要全用IP地址作为名字
41. 保存常用SQL。数据库用户名和密码
42. 保存常用访问地址
43. 定时回收旧文件
44. 如果报错找不到类,jar又确实有,可以反编译jar包看看jar包里面有没有相关类。
45. restTemplate请求资源时 设置请求头:
1)HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("key1", "values");
requestHeaders.add("key2", "ddd");
2)HttpEntity<String> requestEntity = new HttpEntity<String>(null, requestHeaders);
ResponseEntity<String> response = template.exchange(url, HttpMethod.GET, requestEntity, String.class, params);
String sttr = response.getBody();
参见:https://blog.csdn.net/u010139801/article/details/72770123
46. 提交的代码不生效怎么办?
1)确认git上已有最新代码
2)反编译服务器上代码
3)本地分支验证
4)监控日志,不行的话新增日志。新增日志包括是否执行,执行的中间结果是什么
47. 一定要有异常监控,不然的话很尴尬
48. 前端页面空白,可以debug模式,看看哪些文件没有加载成功