编程手记【2023-6-25-2023-6-30】

1、Call to ‘toArray()’ with pre-sized array argument ‘new Integer[list.size()]’

问题:

// 将List转为数组
List<Integer> list = Arrays.asList(1,2,3,4,5,6);
Integer[] array = list.toArray(new Integer[list.size()]);
System.out.println(Arrays.toString(array));

如果这样去将List转为Array,会发现在IDEA中toArray方法下有一条黄色的波浪线,提示:Call to ‘toArray()’ with pre-sized array argument ‘new Integer[list.size()]’

解决:
我们可以将toArray(new Integer[list.size()])变为toArray(new Integer[0]),这样这个黄色的波浪线就会消失。

原因:
大概原因就是因为使用预先确定大小的数组对于并发情况来说是不安全的。
详细参考此文:https://stackoverflow.com/questions/53284214/toarray-with-pre-sized-array

请求返回乱码(unicode码)

问题:
今天在解析json数据的时候得到了一堆这样的数据:{“errNum”:0,“errMsg”:“success”,“retData”:[{“title”:“\u6536\u5e9f\u54c1\u5927\u53d4\u521a\u4e0a\u53f0\uff0c\u5c31\u60e8\u906d\u8bc4\u59d4\u706d\u706f\uff0c\u4f46\u63a5\u4e0b\u6765\u5168\u573a\u90fd\u9707\u60ca\u4e86\uff01”,“url”:“http://toutiao.com/group/6263036756505920002/”,“abstract”:“\u8ba2\u9605\u6211\u83b7\u53d6\u66f4\u591a\u7cbe\u5f69\u5185\u5bb9\uff01”,“image_url”:“http://p1.pstatp.com/list/2f90009a31a7ee8bb15”}]}

解决:
1、直接使用JSONObject.parseObject(str)解析就变为正常字符,然后操作JSONObject对象

JSONObject jsonObject = JSONObject.parseObject(str);

在这里插入图片描述
2、使用JSONObject.parseObject(str).toJSONString()转为String即可,这个String数据为正常数据

String resultCur = JSONObject.parseObject(str).toJSONString();

在这里插入图片描述

原因:
这是因为,为了更好的传输,json进行了Unicode编码。

总结SpringBoot请求参数校验注解

参考此文:https://blog.csdn.net/sinat_36645384/article/details/123672082

去除字符串空格,校验身份证和手机号方法

hutool
校验身份证号:IdcardUtil类
校验手机号:PhoneUtil类

apache.commons
去除字符串前中后空格:StringUtils.deleteWhitespace()

在开发过程中一定要将捕获的异常再抛出去,不能只记录日志,不然会产生意想不到的问题

public class Demo {
    public static void main(String[] args) {
        A a = new A();
        a.a();
        System.out.println("执行a结束");
    }
}

public class A {

    public void a() {
        System.out.println("执行a方法开始");
        try {
            B b = new B();
            b.b();
        } catch (Exception e) {
            System.out.println("报错了");
        }
        System.out.println("执行a方法结束");
    }
}

public class B {
    public void b() {
        System.out.println("执行b方法");
        int a = 10/0;
    }
}

在这里插入图片描述

上面的代码我们在B.b方法中抛出了异常,但是调用B.b方法的A.a方法捕获了异常且没有抛出,Demo类中的方法全部运行了,不要在代码中去抑制这些错误,业务报错一定要尽可能的抛出。

分布式事务

如果项目没有引入分布式事务,那一定要将得不到事务控制的方法放在最后执行。这样前面代码的报错我们是可控的,报错了程序就会中断,不会执行最后的方法,这样可以尽可能的保证数据一致性。

SQL中判断两个时间段是否有交集

条件时间:condition.start和condition.end
数据库字段:db.start和condition.end

下面是伪代码:

if (condition.start != null && condition.end != null) {
	(condition.start <= db.start and condition.end >= db.start)
	or
	(conditon.start >= db.start and condition.end <= db.end)
	or
	(conditon.start <= db.end and conditon.end >= db.end)
} else if (conditon.start != null && condion.end == null) {
	condition.start <= db.end
} else if (conditon.start == null && condion.end != null) {
	conditon.end >= db.start
} else {
	all数据
}

不同基本数据类型进行比较,一定要注意!!!

1、不同基本数据类型比较,总是返回true
2、不同引用包装基本类型比较,总是返回false
3、一个包装一个基本,使用==比较返回true,使用equals返回false

多数据源使用事务会导致多数据源失效

多数据源使用SpringBoot注解@Transactional来保证事务是不行的,只能保证一个数据库的事务。

MySQL使用同一个地址,不同的username看到的库是不同的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值