Java笔记

本文分享了Java编程中的多个最佳实践,包括使用基本数据类型作为局部变量、复用MyBatisPlus的QueryWrapper对象、避免主线程阻塞、减少循环内对象创建、避免返回NULL、智能判断字符串非空、正确处理账号锁定逻辑、初始化容器大小、安全的字符串比较以及去重方法。同时,提醒注意在处理账号锁定时避免无限延长锁定时间,并给出了修正方案。
摘要由CSDN通过智能技术生成

1、局部变量尽量使用基本数据类型。
2、MyBatisPlus的QueryWrapper对象因程序跨行使用,不用重复new对象,直接调用clear()方法清除之前的条件。
3、当程序中调用“尽量调用时”,重新开个线程,不要影响主线程的性能。

// 主线程。。。。
ThreadUtil.execute(() -> {
			
});
// 主线程。。。。

4、循环中避免定义对象的引用,比如

// 不推荐写法
for(int i=0;i<10;i++) {
	User user = new User();
}
// 推荐写法
User user;
for(int i = 0;i<10;i++) {
	user = new User();
}

5、避免给前端直接返回NULL。像String就算是空,是"",空字符串。List是[]。。。。。。
6、所有的String对象尽量判断是否为NULL,推荐

StringUtils.isNotBlank();

再去使用它。
7、看代码

if(user != null) {}

if(null != user) {}

向老程序员致敬,哈哈

8、账号锁定实现之一

Integer pwdOverFlagName = (Integer)redisStringUtil.get("pwdOverFlag" + name);
if(pwdOverFlagName == null) {
	redisStringUtil.set("pwdOverFlag" + name,0);
	pwdOverFlagName = 0;
}else {
	// 这有个坑,嘻嘻
	if(pwdOverFlagName > 3) {
		redisStringUtil.setEx("pwdOverFlag" + name,4,10,TimeUnit.MINUTES);
		throw new BusinessException(BusinessEnum.BUSINESS_1005);
	}
}

Integer charCode = (Integer) redisStringUtil.get(code.toString());
if(charCode == null) {
	throw new BusinessException(BusinessEnum.BUSINESS_1002);
}
// 业务代码...
if(密码正确条件){
		redisStringUtil.set("pwdOverFlag" + name,0);
	}else {
		redisStringUtil.setEx(code + "",code,1,TimeUnit.MILLISECONDS);
		pwdOverFlagName += 1;
		redisStringUtil.set("pwdOverFlag" + name,pwdOverFlagName);
		throw new BusinessException(BusinessEnum.BUSINESS_1004);
	}
}else {
	throw new BusinessException(BusinessEnum.BUSINESS_1003);
}

说一下那个坑。
场景是这样,虽然一个账号被锁了10分钟,但是有个不好的地方就是,用户点击一次该账号的解锁时间会被再次锁定10分钟,假如我的账号被锁了10分钟,我知道10分钟后会解锁,但是有些用户没等到10分钟就再次点了一次,虽然显示10分钟后再试,但是账号的解锁时间被重新设置为10分钟。
解决办法:

if(pwdOverFlagName > 3) {
	Long expire = redisTemplate.getExpire("pwdOverFlag" + userName);
    if(expire == -1) {
        redisStringUtil.setEx("pwdOverFlag" + userName,4,10, TimeUnit.MINUTES);
    }
	throw new BusinessException(BusinessEnum.BUSINESS_1005);
}

9、容器尽量指定初始大小。

List<String> list = new ArrayList<>(16);
// .......

10、字符串等于判断

String str;
// 不推荐,如果str为NULL呢??嘻嘻
if(str.equals("1")) {
    str= null;
}
// 推荐,避免空指针带来的异常
if("1".equals(str)) {
    str= null;
}

11、List去重

// strs去重
List<String> list = strs.stream().distinct().collect(Collectors.toList());

12、forEach不能进入DEBUG。哈哈哈
13、MyBatisPlus分页对象后,操作里面的对象。

Page<User> page = userMapper.page(new Page<>(current,size));
page.getRecords().stream().forEach(data ->{
	// 对data处理
	//.....
}

14、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞LOVE霞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值