
java个人小计
进阶的小橙子
年薪15万和年薪50万码农,你知道有什么区别吗?
展开
-
守护线程和非守护线程区别
守护线程和非守护线程区别原创 2022-09-05 17:37:28 · 485 阅读 · 0 评论 -
从海量手机号中匹配某一个手机号
从海量手机号中匹配某一个手机号原创 2022-06-17 18:13:56 · 1083 阅读 · 3 评论 -
declares multiple JSON fields named XXXX
原因:子类和父类中,包含相同的字段,可以去除掉子类中的,用父类中的举例:A类 extend B类,A类中包含1,2,3字段,B类中包含3,4字段,此时如果用A类来作为入参接收参数,此时必定会报错解决办法:将A类中的3字段去除即可,统一使用父类中的3...原创 2022-05-06 13:42:29 · 1634 阅读 · 0 评论 -
记录生产环境项目部署故障
背景:线上A服务,是双节点,node1和node2问题描述:node1能正常部署起来,node2一直部署失败,进程无法启动,造成结果:由于SLB上给这2个节点,配置的流量都是50%,此时打到node2上面的请求全部返回404服务异常,而且请求还特别多,外部请求纷纷报错,都来找我们初步判断不是代码问题,因为项目已经构建成功,只是部署失败,考虑到此项目流量特别大,通过日志无法快速定位原因,5分钟后,绝对先启用临时方案临时解决办法:将SLB上,node1节点流量配置100%,将所有流量指向node原创 2022-04-01 19:01:57 · 289 阅读 · 1 评论 -
开发平台的对外几种加密算法对比
信息加密与密钥管理 单向散列加密--MD5和SHA 对称加密--DES算法 非对称加密--RSA算法 单向散列加密MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,非可逆,相同的明文产生相同的密文。SHA(Secure Hash Algorithm):可以对任意长度的数据运算生成一个160位的数值对称加密秘钥:加密解密使用同一个密钥、数据的机密性双向保证、加密效率高、适合加密于大数据大文件、加密强原创 2022-02-17 23:51:14 · 2942 阅读 · 0 评论 -
Autowired注解为null的问题
当new一个类的时候,在某一个类中使用Autowired注解,会发现注解进来的对象为null,使用时会报NPE异常报错原因:new了之后,实际上就新产生了对象实体,并不能从spring容器中拿取,所以会报错解决办法:1、使用一个类实现ApplicationContextAware接口,代码如下@Servicepublic class ApplicationContextHolder implements ApplicationContextAware { private static原创 2021-09-02 20:26:33 · 893 阅读 · 0 评论 -
idea设置对象文件serialVersionUID提醒
如图原创 2021-06-17 21:00:59 · 188 阅读 · 3 评论 -
mysql两张表字符集不同关联查询导致超时的bug
今天线上用户反馈偶尔系统会有菊花现象,排查发现是由于两张表字符集不一致导致无法使用索引故而超时(utf8和utf8mb4)需求背景:最近有个需求要支持存储emoji表情,所以修改了A表的字符集从utf8到utf8mb4问题原因:业务操作是A表关联B表进行查询操作,A和B表均有相同的索引assess_his_id,A表字符集为utf8mb4,B表字符集为utf8,因为字符集不一致,故而导致索引失效,查询速度明细变慢,如下图所示先用mysql解析一下语句EXPLAIN SELECT * from原创 2021-02-07 17:01:35 · 885 阅读 · 0 评论 -
incrementAndGet和getAndIncrement的区别
在原子类AtomicInteger中,有两个方法incrementAndGet和getAndIncrement实际使用中我们可以看到AtomicInteger i=new AtomicInteger(0);System.out.println(i.incrementAndGet());System.out.println(i.getAndIncrement());这两种方式输入的值都是1,那他们就没有区别了吗?我们可以看看源码public final int increm原创 2021-01-15 01:10:40 · 12054 阅读 · 0 评论 -
数据库tinyint(1)返回成布尔类型
如果数据库的字段设置为tinyint(1),这个时候查询结果如果是0、1,则会返回true、false解决办法,1- sql中查询这个字段*1,如:select a*1 from table_A2- 将tinyint(1)改成tinyint(4)原创 2020-12-01 18:19:17 · 1653 阅读 · 0 评论 -
Illegal mix of collations (utf8_danish_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation ‘=‘
这个报错是因为两个表之间排序规则不一致导致的,如果在创建数据库的时候,不选择排序规则,那么会默认为utf8_danish_ci,此时如果这个表和排序规则为utf8_general_ci的表进行关联,就会报错,建议将表排序规则默认为utf8_general_ci,速度更快*(另,注:utf8_general_ci和utf8_unicode_ci的区别,前者校对速度快,但准确度稍差;后者准确度高,但校对速度稍慢。)*...原创 2020-12-01 18:16:08 · 360 阅读 · 0 评论 -
DDL隐式提交造成的bug
背景:生产环境突然报错,医院无法使用某公众号,急。。。现象:生产环境某几个表中的关键数据突然消失操作:据说是某高权限账号操作导致,解释说后台编辑了一下数据,报错了,导致其关联数据消失了。。。排查原因:经过反复确认,是一个事务当中,包含了数据的先删除,后添加的操作,最后提交事务,一旦中途catch到异常,会finally中数据rollback确认原因:在数据添加之后,还有一步操作是alter表结构操作,这个致命的操作,导致了当前事务的隐式提交,而最要命的是其中alter操作还引起报错,导致最后原创 2020-10-29 17:01:21 · 413 阅读 · 0 评论 -
CountDownLatch.countDown()的用法
解释:CountDownLatch.countDown()是用来线程计数器-1的,也就是新增线程运行完之后,都调用此方法将计数器变成0,最后调用await()方法,主线程就会被唤醒,继续执行其它代码应用场景:启动一个服务时,主线程需要等待多个组件加载完毕,之后再继续执行。用法:1-先初始化会运行的线程数nprivate static CountDownLatch countDown = new CountDownLatch(n);2-然后每个线程开启并运行完成之后计数器都减去1,可以在f原创 2020-10-21 16:32:12 · 10935 阅读 · 0 评论 -
记录一次生产环境cpu负载高问题
背景:由于疫情,本人负责的项目使用者激增,dau从几百到几万的变化,服务器扩容过,jvm也调试过,xmx从1G到1.5G,xss从128k到256,但是也只能维持一周左右,项目的负载一直特别高,4核的cpu,load average一度达到13。。。影响:由于项目微服务部署,而且服务器上还部署了其它服务,导致io请求特别慢,且其它服务也因为我的项目而请求超时,崩溃中条件有限,只能找出负载高的原因了。。。。从服务器dump下来文件,改名为base.hprof,然后用MemoryAnalyzer.e原创 2020-09-25 10:38:20 · 551 阅读 · 0 评论 -
Lists.newArrayListWithExpectedSize(10)和Lists.newArrayListWithCapacity(10)区别
这两种都会创建一个初始化容量大小的list集合,都是为了节约内存空间区别在于是否确定要装数据的多少1、确定你的list装多少个元素,不会改变,使用newArrayListWithCapacity(),如果容器超过定义size,它会自动扩容,不用担心容量不够。扩容后,会将原来的数组复制到新的数组中,但扩容会带来一定的性能影响:包括开辟新空间,copy数据,耗时,耗性能2、不确定你的list装多少个元素,但差别不会太大,使用newArrayListWithExpectedSize(),会直接创建一个原创 2020-09-17 16:26:09 · 10028 阅读 · 0 评论 -
Mysql中的字符串转换成数字类型
在MySQL中,可以使用一些函数进行类型转换,比如说将varchar类型的转换成数字进行排序比较等SELECT * from action_log order by CAST(costMilliSeconds AS UNSIGNED) descSELECT * from action_log order by CONVERT(costMilliSeconds,signed) descCAST和CONVERT都有转换的意思,但是有一些区别CAST:强制转换,在其它数据库中比较通用,当小数转化为.原创 2020-08-31 10:49:11 · 2605 阅读 · 0 评论 -
数据库报错:Lock wait timeout exceeded; try restarting transaction
正式数据库最近抛出Lock wait timeout exceeded; try restarting transaction异常,而且一段时间内的db连接数飙升到200+,很多访问都很慢,超时8s以上,无法定位原因,只能从日志入手,最后分析到可能存在的原因1-最近加了个需求,A模块通过http请求访问B模块,B模块再访问C模块,然后再返回结果,可能由于没有设置http超时时间导致服务超时等待2-A模块会频繁的更新某一个表和写入这个表数据,想到数据库默认的事务隔离级别是可重复读,若没有索引的情况下,原创 2020-07-09 10:16:52 · 1285 阅读 · 0 评论 -
javax.net.ssl.SSLException: Received fatal alert: protocol_version
这个报错是客户端调目标端的时候,两端的TSL协议不一致导致,两边要一致才能用,在阿里云上面可以设置。一般来说,jdk1.8的版本默认支持1.2原创 2020-02-27 17:56:22 · 1996 阅读 · 1 评论 -
线上缓存导致的一些难以捕捉的bug
问题场景:打开app首页或者微信首页,都会报系统繁忙,获取端信息失败,导致系统流程阻断问题症状:调用一个公共方法获取当前端设备信息时候,时好时坏,无法确定问题的所在,但是重启项目之后会好,一会儿之后又会重新出现。接口报错信息为类转换异常,没有具体体现在哪一行,框架底层方法逻辑较深,排查难度大,排查目标不清晰问题原因:近期在做模块拆分,越来越多的模块开始细分起来,相互关联较多,有一个实体类同...原创 2020-01-18 14:47:44 · 444 阅读 · 0 评论 -
实际应用场景策略模式使用总结
背景:在给第三方推送表单数据时候,需要分多种方式进行传送,比如区分传送协议,传送参数,传送token等等,此时为了避免代码的重复和冗余,以及后期的扩展性和维护性,合理的利用策略模式可以很好的解决这个问题协议包括:HTTP,HESSIAN,WEBSERVICE参数:部分地址需要token进行验证身份,部分需要header参数,部分需要定制化的参数传输方式:json对象,object对象...原创 2020-01-14 17:05:08 · 657 阅读 · 0 评论 -
记录一次环信会话并发问题
实际场景:当一个患者关注了某一个团队,该团队下面的医生都会收到系统消息,此时点开系统消息,会打开患者主页,然后可以点击会话开始创建或加入会话实际问题:当两个团队下的医生都点击进入该团队会话,也就是入参都是团队id,患者id,此时会出现某一个创建失败或加入失败的问题加入会话逻辑:当前加入会话是先判断有无会话,有则直接返回,无则去调用环信api进行创建会话问题原因:并发,由于入参完全一致,...原创 2020-01-13 15:37:09 · 171 阅读 · 0 评论 -
pom文件中有一些jar引入失败问题解决
有时候会碰到pom文件中某个依赖会突然报错,可以有如下解决办法1-ReImport刷新一下maven2-将那个报错的依赖在本地的maven仓库中删除文件夹,然后重复第一步。(原因可能是本地有一个不完整的jar包,idea检测到这个目录一就不会去加载导致的)3-如果是Stringboot项目,可以检查一下parent是否正确(版本号等等) <parent> ...原创 2019-08-24 10:35:25 · 1342 阅读 · 0 评论 -
java的lamada表达式常用例子
最近学习了lamada的常见使用方法,发现其实lamada表达式的确是匿名内部类一种简便的使用,话不多说,如下举例Student studentww=new Student("wangwu",99,"code");Student studentclr=new Student("clr",100,"qianduan");findFirst().get();过滤:要返回list中单个对象的...原创 2019-08-13 14:48:21 · 391 阅读 · 0 评论 -
Arrays.asList()和List.crear()或removeI()一起使用产生的坑
使用Arrays.asList()将数组转换成集合时,如果后面要使用crear()或removeI()或add()方法,会报错UnsupportedOperationException这个错是在AbstractList的add方法报错的,如下 public void add(int index, E element) { throw new UnsupportedOper...原创 2019-06-04 19:07:08 · 216 阅读 · 0 评论 -
sql多表查询报主键找不到
sql语句多表联合查询一直报错,报另外一张表的主键列找不到,这是因为你的sql并没有查出另外一个表数据,但是你的Create sql语句的时候,AddEntity不应该添加另外一个表的实体类...原创 2019-05-22 09:59:10 · 492 阅读 · 0 评论 -
HQL语句中使用LIMIT会报错
在使用hibernate时候,如果直接在HQL语句中使用LIMIT,类似于 FROM T_BASE WHERE 1=1 LIMIT 1 ,此时会报错,因为HQL语句不支持,要么改成sql语句,要么在最外面DAO层设置参数@DAOParam(pageStart = true) int start,@DAOParam(pageLimit = true) int limit);...原创 2019-05-22 09:32:21 · 1993 阅读 · 0 评论 -
java自定义注解的简单使用
@Inherited@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.FIELD,ElementType.METHOD})public @interface ServicePackTest { String code() default "clr";}上面是一个简单的自定义注解Se...原创 2019-05-06 11:19:40 · 280 阅读 · 0 评论