
Java
学编程的司马光
用最朴素的话语,解释最晦涩的术语
展开
-
docker容器中解决java使用ffmpeg解析视频文字内容报错java.lang.UnsatisfiedLinkError:libxcb.so.1
综合下来,推荐第三种,做一个私有加过包的镜像,虽然前面麻烦点,但一次搞定,也不影响后续的发布。之后,CTRL+P+Q退出容器,使用命令docker ps -a 找到刚才的容器ID,将dockerfile第一句的from改成from jdklibxcb就好了,这个方法每次重新发布,重新生成了新的容器后,就需要去容器中执行一次,比较麻烦。jdklibxcb.tar为包含已经有了libxcb1的镜像包文件,这种方法每次构造镜像的时候会久一点,因为多了一步安装libxcb。修改后dockerfile变成了。原创 2023-02-03 17:49:43 · 4095 阅读 · 3 评论 -
java 带横杠或下划线_的数据库字段变驼峰,比如ID_CARD_INFO_TITLE转换成idCardInfoTitle
有个需求需要将数据库字段转换成驼峰字段,在网上找了一会这方面的工具,有的各种引用工具类,有的是正则匹配来匹配去最后给出的结果还不对。于是手撸了一个java 带横杠或下划线_的数据库字段变驼峰的工具方法,完全没有任何外部引用,也没有正则之类容易出错的语法,原创 2022-11-25 11:10:32 · 1190 阅读 · 2 评论 -
java生成随机密码,包含大小写字母,数字,特殊字符等
java生成随机密码,包含大小写字母,数字,特殊字符等原创 2022-07-25 09:32:23 · 2859 阅读 · 0 评论 -
已解决:网易邮箱smtphz.qiye.163.com在阿里云环境发不出邮件的问题
这两天发现公司的网易企业邮箱,在本地和测试环境,都可以发送邮件,但是在生产的阿里云环境中,却发不出邮件,报错如下:org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtphz.qiye.163.com:25Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host,原创 2022-03-24 10:16:14 · 15447 阅读 · 0 评论 -
java将数据生成正态分布(高斯分布)的PDF图表
闲话少叙,直接上干货,生成的图表的数据是从数据库中查询出来的,有需要的朋友请自己调整一下package test;import com.lowagie.text.Document;import com.lowagie.text.DocumentException;import com.lowagie.text.Rectangle;import com.lowagie.text.pdf.*;import org.apache.commons.math3.distribution.Norm原创 2022-01-13 17:56:30 · 1318 阅读 · 1 评论 -
多线程-ReentrantLock的tryLock和tryLock(long time, TimeUnit unit)在获取失败后还会执行吗?是否会抛出异常
答案是:会,还会继续执行下面的代码。不会进入异常。因此实际业务中,需要按照tryLock的返回值,进行判断后执行后面的业务代码package test;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @author :sunshine * @date :Created原创 2021-11-03 17:49:46 · 1439 阅读 · 0 评论 -
多线程-偏向锁原理
原理:jdk做法是当一个线程第一的到这把锁,我们就认为这个锁偏向于它,实际的做法是把线程的放到了对象的对象头里。(偏向锁到轻量级只要由竞争就之间升级)当线程访问同步代码块并尝试获取锁,先比较当前线程ID,和偏向锁(是否偏向锁为1)的线程ID是否一致。一致,则说明还是线程在获取(重入),无须加锁解锁不一致,其他线程占有偏向锁,因为偏向锁不能主动释放,则查看占有偏向锁的线程是否存活 不存活:则直接重置到***无锁状态***,其他线程可以竞争将其设置为偏向锁 ...原创 2021-11-03 12:05:59 · 401 阅读 · 0 评论 -
synchronized锁对象不能是Integer、String、Long类型
Integer类型:i++实际上是i = new Integer(i+1),所以执行完i++后,i已经不是原来的对象了,锁的对象发生了改变,多个线程锁的对象各不相同,同步块自然就无效了。Long 类型:同上String类型:是因为String定义的变量会放在常量池中,如果多个线程定义的String变量的值相等,则锁无效,他们看起来锁的是不同对象,其实是同一个对象。这种很难发现...原创 2021-11-03 11:29:57 · 2316 阅读 · 3 评论 -
多线程-创建线程的几种方式
三种形式,其实就是两种拓展写法:原创 2021-11-03 11:19:58 · 108 阅读 · 0 评论 -
最全汉字正则校验:只允许汉字,允许带点,允许拓展汉字,生僻字,比如䶮之类的汉字
这里只讲中文名正则校验,若是需要更全面的校验,请看另一篇博客:全网最全js前端、后端通用校验中文姓名(可带点·)的方法还是一贯的风格,一贯的直接,不讲废话,开始:1:校验纯汉字(长度为2-6位):/^([\u4e00-\u9fa5]{2,6})$/gi.test('要校验的汉字')2:校验带点的汉字(需要处理各种点,请看文章开头的博客)点前后允许2-5位汉字/^[\u4E00-\u9FA5]{2,5}([\u25CF\u00B7][\u4E00-\u9FA5]{2原创 2021-09-27 17:47:12 · 15346 阅读 · 6 评论 -
全网最全的BigDecimal的newScale(保留小数位)和roundingMode(舍入模式),详细介绍roundingMode(重点)
一般我们要对一个BigDecimal的数字进行保留小数位和设置舍入模式的时候,都是这样使用的:对于加、减、乘得到的数字,直接使用BigDecimal对象.setScale,就像这样:或者除法,在做divide的时候,指定newScale和roundingMode对于scale,就是保留几位小数位,就不用做多解释了。下面重点聊聊roundingMode(舍入模式)舍入模式一共有8种,其值分别从0到7,如下:ROUND_UP:0; //远离零方向舍入ROUND...原创 2021-09-24 12:17:00 · 2880 阅读 · 0 评论 -
使用json实现:java对象转string时,指定只要某些属性(包含),或者不要某些属性(排除),可避免不需要的字段过多,或者特殊属性比如MultipartFile造成的转字符串出问题。
// 对json进行处理,空、undefined,// ‘’空字符串,都去掉对应的键,// 如果值左右存在多余的空格,则去掉多余空格export function clearJson(myObj) { Object.keys(myObj).forEach((key) => { const v = myObj[key]; if (v == null || !("" + v).trim().length) { delete myObj[key]; } els.原创 2021-09-24 11:42:39 · 1986 阅读 · 1 评论 -
java new一个对象的过程中发生了什么,各种变量,方法和块的执行顺序
未完待续原创 2021-09-24 11:09:50 · 753 阅读 · 0 评论 -
前段发送给后端的json数据,删除无效信息的方法:删除空、undefined,‘’空字符串等
对json进行处理,空、undefined,‘’空字符串,都去掉对应的键,如果值左右存在多余的空格,则去掉多余空格,废话少说,直接干货// 对json进行处理,空、undefined,// ‘’空字符串,都去掉对应的键,// 如果值左右存在多余的空格,则去掉多余空格export function clearJson(myObj) { Object.keys(myObj).forEach((key) => { const v = myObj[key]; if (v ==原创 2021-09-23 17:22:57 · 842 阅读 · 0 评论 -
全网最全js前端、后端通用校验中文姓名(可带点·)的方法
在网上找了好久校验汉字姓名的方法,全部不尽如人意,自己动手写了一个。测试下来,可包含所有可能的情况,后端语法稍微改一下,也是一样使用。废话不多说,直接上代码。可以使用的朋友请点个赞// 将传入的姓名中空格和全角空格都去掉,乱七八糟的·都换成半角的·export const checkChineseName = function(name) { let reg = /^[\u4e00-\u9fa5]{2,15}$/; // 保留点后,用来校验的姓名,也是最终校验通过原创 2021-09-03 17:55:52 · 4830 阅读 · 0 评论 -
一个ZIP包下载的问题,相同的配置,本地可以,测试不行
两边返回的都是同样的内容,但是本地的可以弹窗【身份证.zip】提示下载成功比较了一下responseHeader里面的内容,有些许的不一样暂时还没找到解决办法原创 2021-08-05 09:52:21 · 564 阅读 · 1 评论 -
实现A1B2交替打印(交替执行),彻底理解synchronized,wait,notify,volatile,ReentrantLock,Condition,Semaphore,SupportLock
今天研究了一下控制两个线程交替执行,一个输出1-26,一个输出A到Z.用了两种方法实现:1:package ef.thread;/** * @author :sunshine * @date :Created in 2021/7/20 16:13 * @description:AZ26 */public class AZ26 { public static void main(String[] args) { final Object lock = new Object()原创 2021-07-20 17:43:02 · 600 阅读 · 0 评论 -
惊天巨坑,Spring事务之【建表】影响事务的传递
这两天出现一个bug找了好久,一个添加了的事务的service方法中报错了,但是在报错之前提交的sql语句的执行,没有回滚原来,是建表导致事务受到了影响。因为我在业务中间,做了一个备份表的操作在备份前后,都有对数据库进行操作的业务。但是如果在建表后出现了异常,建表前对数据库进行的操作,是不会回滚的。特此记载,注意注意...原创 2021-07-02 14:55:33 · 306 阅读 · 0 评论 -
JAVA-指定入口和出口的迷宫代码
有个多年未见的老同学突然找我,我还以为是找我借钱,菊花一紧。还好是叫我帮他写个迷宫程序:说是什么语言都行,就用java实现了一版,比较粗糙,还有可以优化的地方。但是他也不懂,写的好不好的应该看不出来,保证能用就行了,代码如下:package test;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;/** * 迷宫问原创 2021-03-19 16:02:59 · 450 阅读 · 0 评论 -
电脑断电后 idea 突然不识别springboot项目
电脑断电后,idea会重新生成索引,需要很长很长时间,耐心等待索引更新完成,再等这个任务执行完成一切就又回来了。前提是这两个东西你得有:在File > Settings > Pluguns中:1:2:以上。...原创 2021-02-26 10:23:39 · 466 阅读 · 0 评论 -
史上最全BigDecimal的5种进位方式:ROUND_UP,ROUND_DOWN,ROUND_CEILING,ROUND_FLOOR,ROUND_HALF_UP,ROUND_HALF_DOWN的比较
先上关方文档 /** * Rounding mode to round away from zero. Always increments the * digit prior to a nonzero discarded fraction. Note that this rounding * mode never decreases the magnitude of the calculated value. */ public final s原创 2021-02-23 12:20:53 · 6759 阅读 · 0 评论 -
公众号和小程序获取openId不同点
公众号获取openId是在前端先调用一个腾讯的请求地址,传的是当前页面的URL,得到code,让把code给后端服务器,后端根据appId,appSecret和code,去腾讯换取openId。// 网页授权获取code//public final static String GetPageCode = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=URL&response_原创 2020-10-28 10:21:31 · 1454 阅读 · 0 评论 -
命令行方式上传jar包到nexus maven仓库
有的nexus版本不支持在管理平台的页面上,直接上传jar包,下面分享一下,怎么通过命令行手动上传jar包到maven仓库:很简单,一句话:将jar包放到pom.xml同级目录后,将pom.xml改成自己的jar包的pom.xml,执行:mvn deploypom文件内容:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i..原创 2020-10-26 15:34:17 · 3601 阅读 · 1 评论 -
webSocket java.io.EOFException: null 增加心跳机制解决
最近发现webSocket连接,经常自动断开,看了晚上的一些文章,很多说是Nginx的问题,但是不想改Nginx因为怕影响其他系统,而且不一定有效,因此决定给webSocket加一个心跳机制:1:先在服务端判断消息是不是心跳检测消息,是的话,原封不动将消息传给客户端即可: if("heartCheck".equals(jsonObject.getString("heartCheck"))){// 心跳检测的消息 sendMessage(message); retur原创 2020-10-14 09:30:08 · 12676 阅读 · 0 评论 -
springboot项目安装https证书
非常简单,一共两个小步骤:1:复制证书到resource文件夹下面:2:application.yml中增加以下信息: # port: 443 # ssl证书相关配置 ssl: key-store: classpath:证书名称 key-store-password: 密码 key-store-type: 证书类型...原创 2020-08-26 10:11:12 · 431 阅读 · 0 评论 -
数据库字段转Java驼峰命名转换工具
先看效果,从左边转换成了右边:INT_TERMS_TYPE intTermsType INT_TERMS_DEATIL intTermsDeatil INT_TOT_TERMS intTotTerms INT_TERM intTerm INT_DUE_DATE intDueDate INT_DUE_AMT intDueAmt 两个文件,一个转换工具类,一个txt中放要转换的字段工具类如下:package test;..原创 2020-06-18 11:56:20 · 2692 阅读 · 0 评论 -
用redis防止幂等操作,解决参数相同的请求,在第一次请求还没得到响应的情况下,又连续发起了请求
为了在后端,解决参数相同的请求,在第一次请求还没得到响应的情况下,又连续发起了请求,对于这种请求不进行逻辑处理,加了一个repeatKey,用redis进行判断:不完善,可能会有一定的风险,因为在后续请求加完repeatKey以后,刚加完,还没走到他的最终通知的时候,此时,如果第一个请求处理完了,会去删除repeatKey,所以采用这种方案,两个key的存活时间,不能放的太长,这里是设置的60s.关联链接:https://mp.youkuaiyun.com/console/editor/html/10.原创 2020-06-03 09:30:51 · 831 阅读 · 0 评论 -
前置通知抛出异常,会走最终通知吗?
众所周知,Spring AOP 5种通知的执行顺序是:现在我想测试如果在前置通知里面就抛出异常的情况下,是走最终通知,还是直接返回,测试发现是会走最终通知,不会直接跳过最终通知附:Spring AOP术语切面(Aspect):在Spring AOP中,切面可以使用通用类或者在普通类中以@Aspect 注解(@AspectJ风格)来实现连接点(Joinpoint):在Spring AOP中一个连接点代表一个方法的执行通知(Advice):在切面的某个特定的...原创 2020-06-02 15:19:48 · 2731 阅读 · 0 评论 -
一个lombok的坑,从1.16.10升级到1.18.1以后,Controller 的RequestBody对象中的属性全部为空
Controller中的代码如下:如下升级到1.18.12之后:打印信息为:httpRequestBean,method=HttpRequestBean(CM_ID=null, VER=null, TS=null, REQTYPE=null, PAYTYPE=null, ENCKEY=null, ENCDATA=null, RETCODE=null, RETMSG=null)回滚之后:打印信息为:httpRequestBean,method=HttpRequestB...原创 2020-05-19 13:55:15 · 1609 阅读 · 0 评论 -
设置Cookie时,当设置了域名时,后端就获取不到Cookie了,把设置Domain注释掉就好了
写了一个公共方法,设置Cookie发现,当设置了域名时,后端获取不到Cookie了,把设置Domain注释掉就好了并且,不设置PATH时,比如请求的URL为工程目录+"/login", cookie的 PATH为根目录:/新增cookie代码如下: /** * 设置Cookie的值,并使其在指定时间内生效 * * @param cooki...原创 2020-04-22 17:27:23 · 3331 阅读 · 0 评论 -
LocalDate或者LocalDateTime判断是否在本月之内
//判断时间是否在本月之内public static boolean isInThisMonth(LocalDateTime time) { LocalDate localDate = time.toLocalDate(); LocalDate now = LocalDate.now(); return localDate.isAfter(now.minusMonths...原创 2020-03-10 17:11:00 · 10266 阅读 · 0 评论 -
springBoot工程打包:报错:(请使用 -source 7 或更高版本以启用 diamond 运算符)
springBoot工程打包:报错:(请使用 -source 7 或更高版本以启用 diamond 运算符)[ERROR] COMPILATION ERROR : [INFO] -------------------------------------------------------------[ERROR] /D:/SVN/FszrAccSYS/src/main/java/com/...原创 2019-12-09 16:40:02 · 425 阅读 · 0 评论 -
对无顺序的map进行排序(升序)以及随机数
/** * @Title: sort @Description: 类型任务数量是否没有达到上限的适用用户,从小到大排序 @param @param * Map oldMap @param @return @return String * userId @throws */ public String sor原创 2017-05-09 22:41:47 · 617 阅读 · 0 评论 -
就一句话,Java里面参数传递都是按值传递
http://blog.youkuaiyun.com/zzp_403184692/article/details/8184751感谢博主分享重点:(1):“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。(2):在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是原创 2017-09-22 16:50:31 · 783 阅读 · 0 评论 -
系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间
文章来源网络转载 2017-05-09 22:37:04 · 13034 阅读 · 0 评论 -
SSH简介
文章来源网络转载 2017-05-09 22:33:24 · 312 阅读 · 0 评论 -
StringBuffer 的使用
StringBuffer sb = new StringBuffer("Hello "); sb.append("world"); //在sb尾部追加一个字符串, 此时变成 Hello world; sb.charAt(1) ; //返回下标为1的字符 此处是 e sb.insert(1,"d"); //在 1 处插入新的字符串 d 此时变为 Hedllo world;原创 2017-05-09 22:27:21 · 251 阅读 · 0 评论 -
迭代器循环数组和遍历Map的三种方式
迭代器循环数组 变量 Iterator> iter = countTaskOfUserMap.entrySet().iterator(); while(iter.hasNext()){ Map.Entry entry = (Map.Entry)iter.next(); UserE原创 2017-04-01 16:59:42 · 1222 阅读 · 0 评论 -
Map按照Key排序和Map按照Value排序
Map数组按照Value排序(升序) import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.Li原创 2017-04-01 17:03:01 · 354 阅读 · 0 评论 -
JDBC插入数据,更新数据,使用NamedParameterJdbcTemplate对象直接操作javaBean
原来如此简单: DButil:public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {if (nam == null) { synchronized(DBUtil.class){ if (nam==null) { //调用NamedPara...原创 2018-06-01 11:36:58 · 3880 阅读 · 0 评论