• 工作之经验之谈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 &gt; #{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模式,看看哪些文件没有加载成功

  • 相关阅读:
    内存页面的各种属性(就是Read, Write, Execute的组合)
    分配粒度和内存页面大小(x86处理器平台的分配粒度是64K,内存页是4K,所以section都是0x1000对齐,硬盘扇区大小是512字节,所以PE文件默认文件对齐是0x200)
    NULL指针区域(NULL定义为0-65535之间的任何数都可以)
    Tiny Mapper是一个.net平台开源的对象映射组件
    表达式树动态拼接lambda
    VSC调试.NET Core 应用程序
    领域驱动设计之单元测试最佳实践
    web框架python
    无需安装Mono的Jexus
    分布式发布订阅消息系统Kafka
  • 原文地址:https://www.cnblogs.com/Jtianlin/p/5456494.html
Copyright © 2020-2023  润新知