公告栏
JUC并发编程
吐槽学不完的技术🤮
CompletableFutureFutureFuture接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消任务的执行、判断任务是否被取消、判断任务执行是否完毕等。比如主线程让一个子线程去执行任务,子线程可能比较耗时,启动子线程开始执行任务后,主线程就去做其他事情了,忙其他事情或者先执行完,过了一会才去获取子任务的执行结果或变更的任务状态
Future是Java5新加的一个接口,它提供了一种异步并行计算的功能。如果主线程需要执行一个很耗时的计算任务,我们就可以通过future把这个任务放到异步线程中执行。主线程继续处理其他任务或者先行结束,再通过Future获取计算结果。主要是为了异步多线程任务执行且返回有结果。三个特点:多线程/有返回/异步任务
Future优缺点
优点: future + 线程池异步多线程任务配合,能显著提高程序的执行效率缺点: get()阻塞。一旦调用get()方法求结果,如果计算没有完成容易导致阻塞。isDone()轮询。轮询的方法会耗费无谓的CPU资源,而且也不见得能及时地得到计算结果。想要 ...
Mybatis or 用法
Mybatis or关键字用法
这里有一个BUG,if test typeIds != null 后面不能跟and,Mybatis if 标签会自动帮我们添加and,需要注意一下
阿里云OSS跨域配置
来源的话一般是用自己的域名,我这里图省事就配置*了,允许任何来源,可以根据自己的需求配置
JRebel and XRebel
前沿我在用IDEA的时候会用一些IDEA自带的插件,这样可以帮助我快速开发,JRebel and XRebel就是一款很不错的插件,缺点就是要收费不过你也可以自己破解,这里博主还是要呼吁大家如果有能力的话还是要支持一下正版。JRebel主要是一款很不错的热部署插件,尤其在编写项目中有时候重起项目是一款很麻烦的一件事情,JRebel就做到了可以帮我们自动重新加载修改过的类,不管是前端还是后端都非常好用
正文对于大部分来说应该是不想花钱的,要破解的也非常简单,首先去在线生成UUIDS网站生成一个UUIDS,一般不会重复,如果重复可以多试几遍。然后再去IDEA下载JRebel插件配置JRebel插件
选择Team URL第一行填写https://jrebel.qekang.com/{UUIDS},邮件的话随便填就行,这样就可以顺利破解成功了!不过这个方法到目前为止,也就是这篇文章发表的日期,只能破解到2022.4.1, 我的IDEA版本是2022.2.2前版本的JRebel已经更新到了2022.4.2,如果是用破解方法的小伙伴千万不要更新,2022.4.2JRebel可能是更改了激活方式 ...
Bootstrape弹出层父页面获取子页面的数据
碎碎念Bootstrape + Thymeleaf实现跳转页面传值的时候真的是非常麻烦,GET请求还好利用@PathVariable注解可以在路径上获取,但是POST的话就比较麻烦了况且如何要获取对象的话也不可能把所有字段都列在路径上
解决办法
我们可以在$.modal.open绑定一个回调方法,这个open是自己封装的底层就是layer.open
找到弹出层的iframe,然后获取弹出层的返回值,当然这个看你自己的代码,我的方法叫changeChecked
1window["layui-layer-iframe" + index].changeChecked();
Property referenced in indexed property path 't1[]' is neither an array nor a List nor a Map; returned value was []]
碎碎念Bootstrape + Thymeleaf真的是太太太太太麻烦了,对于用惯了Vue的我来说,真的是嫌弃的一批,这不,今天又遇到了一个BUG,今天在编写前台的时候我本身打算的是传一个数组对象到后台,可想而至后台报错了🤮。For Input String “” 大致意思就是说我的类型不对呗,只好改了类型,后台改成了String接收,但是又报错了,这次该诉我既不是list也不是map所以不可以😷
解决办法上网搜了一下,发现这是ajax发送请求的问题,加上traditional: true即可解决问题
Mybatis分页插件BUG
前沿今天遇到了一个Mybatis分页插件pageHelper的BUG,简单来说就是我的查询总数和我的pageSize总是一样,这让我很苦恼
解决办法上网查了很多资料,终于找到了解决办法。功夫不负有心人呐,首先我想的是自己手写一个分页方法,但是这个方法被我后面给否决了,原因就是太麻烦了,程序员真的是能偷懒就偷懒,哈哈哈哈哈哈哈,后面我就想到自己收到给它set一个total进去类似于下面的这种
但是后来我发现这种办法真是太蠢了,这样只是看上去做到了分页,把我想要的数据查出来然后再set进来,理论上是没问题,但是当数据量很大的时候,几十万几百万的情况下查询真的是太慢了!!!
后面我查看了一下pageHelper的源码发现startPage开启分页方法只对后面的sql查询起作用,所以我们只需要把查询出来的list记录下来,然后再跟最终的list比较替换一下就好,具体的方法如下
大功告成,不仅实现了分页,而且查询速度效率也很快
Mybatis中association中子查询BUG
吐槽上古时期的项目今天又开始修改,真不知道老板在想啥🤮
正文今天在想代码的时候碰到一个很有意思的BUG,简单来说就是我在Mybatis中的ResultMap中添加了一个association,而在association中的查询我又使用了子查询,这就导致我传过来的参数在子查询中接收不到,在where条件中却可以
类似与上面的查询虽然都是一个值,但是子查询中却接收不到值,简直是恶心🤢,上网参考了一下也没有找到相应的答案,这里先记录一下后面解决
For input string "0.565"
碎碎念今天在写代码的时候碰到一个这个BUG🤮
解决办法这个问题是String类型的小数转换成Long类型会出问题,所以我们要转换一下思路
1new Double(Double.parseDouble(a)).longValue();
当然你也可以在SQL层面解决,这里就看个人习惯了,我是比较喜欢在Java层面解决
Mac配置SSH
碎碎念今天在阿里拉去代码的时候,因为换了新版云效所以要重新配置一遍SSH,因为我已经生成过所以查看一下就可以了。这里主要是针对第一次配置SSH的小伙伴,记录一下查看和配置Git SSH的过程
查看配置1cd ~/.ssh
如何可以有这个文件夹并且可以进去看到下面这两个文件说明生成过,可以直接使用
重新生成设置账号12git config --global user.name "your name" git config --global user.email "your email"
生成密钥1ssh -keygen -t rsa -C "your email"
下面就一直按回车就可以了,直到生成下面图案
查看密钥1open -e id_rsa.pub
全选复制到阿里就可以配置成功,接下来拉取代码就可以了