自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

进阶的小橙子

欢迎大家查看我的博客

  • 博客(76)
  • 收藏
  • 关注

原创 unable to read askpass response from C:\Users\..\..\intellij-git-askpass.bat could read name from

错误信息:Can't finish GitHub sharing process unable to read askpass response from 'C:\Users\username\.IntelliJIdea2016.3\system\tmp\intellij-git-askpass25.bat' failed to execute ...

2018-10-10 12:42:11 23350 9

原创 从开发者的角度解决app的push推送收不到问题

移动推送,push推送,push通知

2023-03-23 09:38:03 852

原创 守护线程和非守护线程区别

守护线程和非守护线程区别

2022-09-05 17:37:28 409

原创 Runtime.getRuntime().addShutdownHook

Runtime.getRuntime().addShutdownHook

2022-09-05 17:19:55 411

原创 从海量手机号中匹配某一个手机号

从海量手机号中匹配某一个手机号

2022-06-17 18:13:56 859 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 1336

原创 记录生产环境项目部署故障

背景:线上A服务,是双节点,node1和node2问题描述:node1能正常部署起来,node2一直部署失败,进程无法启动,造成结果:由于SLB上给这2个节点,配置的流量都是50%,此时打到node2上面的请求全部返回404服务异常,而且请求还特别多,外部请求纷纷报错,都来找我们初步判断不是代码问题,因为项目已经构建成功,只是部署失败,考虑到此项目流量特别大,通过日志无法快速定位原因,5分钟后,绝对先启用临时方案临时解决办法:将SLB上,node1节点流量配置100%,将所有流量指向node

2022-04-01 19:01:57 227 1

原创 开发平台的对外几种加密算法对比

信息加密与密钥管理 单向散列加密--MD5和SHA 对称加密--DES算法 非对称加密--RSA算法 单向散列加密MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,非可逆,相同的明文产生相同的密文。SHA(Secure Hash Algorithm):可以对任意长度的数据运算生成一个160位的数值对称加密秘钥:加密解密使用同一个密钥、数据的机密性双向保证、加密效率高、适合加密于大数据大文件、加密强

2022-02-17 23:51:14 2870

原创 Elasticsearch7.x学习路线

此图来自于铭毅天下大佬 ,向大佬学习

2021-12-02 13:59:10 1134

原创 奥卡姆剃刀原理

奥卡姆剃刀原理指如无必要,勿增实体。不要浪费更多的东西去做,你可以用更少的东西做同样的事情。1-简而言之,就是不给自己找事,也不多事,凡事讲究极简原则引申如下1-不要成为八面玲珑的人,这样繁琐的事情会堆积且消耗你宝贵的时间2-把百分之80的时间,用在那百分之20的重要的事情上面,结果自然就会变得事半功倍...

2021-12-01 13:47:12 136

原创 Autowired注解为null的问题

当new一个类的时候,在某一个类中使用Autowired注解,会发现注解进来的对象为null,使用时会报NPE异常报错原因:new了之后,实际上就新产生了对象实体,并不能从spring容器中拿取,所以会报错解决办法:1、使用一个类实现ApplicationContextAware接口,代码如下@Servicepublic class ApplicationContextHolder implements ApplicationContextAware { private static

2021-09-02 20:26:33 803

原创 idea设置对象文件serialVersionUID提醒

如图

2021-06-17 21:00:59 143 3

原创 getParameter和getAttribute简单区别

简单来说getParameter是直接获取客户端设置的数据,返回StringgetAttribute是获取服务器设置的数据,需要先setAttribute,再getAttribute,返回Object

2021-03-19 16:06:16 77 1

原创 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 776

原创 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 11871

原创 数据库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 1408

原创 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 309

原创 DDL隐式提交造成的bug

背景:生产环境突然报错,医院无法使用某公众号,急。。。现象:生产环境某几个表中的关键数据突然消失操作:据说是某高权限账号操作导致,解释说后台编辑了一下数据,报错了,导致其关联数据消失了。。。排查原因:经过反复确认,是一个事务当中,包含了数据的先删除,后添加的操作,最后提交事务,一旦中途catch到异常,会finally中数据rollback确认原因:在数据添加之后,还有一步操作是alter表结构操作,这个致命的操作,导致了当前事务的隐式提交,而最要命的是其中alter操作还引起报错,导致最后

2020-10-29 17:01:21 338

原创 CountDownLatch.countDown()的用法

解释:CountDownLatch.countDown()是用来线程计数器-1的,也就是新增线程运行完之后,都调用此方法将计数器变成0,最后调用await()方法,主线程就会被唤醒,继续执行其它代码应用场景:启动一个服务时,主线程需要等待多个组件加载完毕,之后再继续执行。用法:1-先初始化会运行的线程数nprivate static CountDownLatch countDown = new CountDownLatch(n);2-然后每个线程开启并运行完成之后计数器都减去1,可以在f

2020-10-21 16:32:12 10415

原创 记录一次生产环境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 476

原创 Lists.newArrayListWithExpectedSize(10)和Lists.newArrayListWithCapacity(10)区别

这两种都会创建一个初始化容量大小的list集合,都是为了节约内存空间区别在于是否确定要装数据的多少1、确定你的list装多少个元素,不会改变,使用newArrayListWithCapacity(),如果容器超过定义size,它会自动扩容,不用担心容量不够。扩容后,会将原来的数组复制到新的数组中,但扩容会带来一定的性能影响:包括开辟新空间,copy数据,耗时,耗性能2、不确定你的list装多少个元素,但差别不会太大,使用newArrayListWithExpectedSize(),会直接创建一个

2020-09-17 16:26:09 9514

原创 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 2439

原创 数据库报错: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 1183

原创 联合索引和单列索引

当使用联合(复合)索引时候,一定要遵循最左匹配原则:以最左边的为起点任何连续的索引都能匹配上,也就是当用到 A,AB,ABC才能使联合索引生效。AC只能用到A的单个索引1-:如果第一个字段是范围查询需要单独建一个索引2-:在创建联合索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。这样的话扩展性较好,比如 A经常需要作为查询条件,而 B 不常常用,则需要把 A 放在联合索...

2020-03-18 09:56:55 713

原创 JAVA的移位操作

当需要进行乘除法的时候,java支持移位操作,可以加快程序运行速度,减少jvm消耗乘法如 i=i*2 等同于 i=i<<1 ,向左移动1位效果等同于乘以2如 i=i*8等同于 i=i<<3,向左移动3位效果等同于乘以8除法如 i=i/2 等同于 i=i>>1 ,向右移动1位效果等同于除以2,取模如 i=i/8等同于 i=i>&g...

2020-02-28 15:40:26 122

原创 javax.net.ssl.SSLException: Received fatal alert: protocol_version

这个报错是客户端调目标端的时候,两端的TSL协议不一致导致,两边要一致才能用,在阿里云上面可以设置。一般来说,jdk1.8的版本默认支持1.2

2020-02-27 17:56:22 1336 1

原创 线上缓存导致的一些难以捕捉的bug

问题场景:打开app首页或者微信首页,都会报系统繁忙,获取端信息失败,导致系统流程阻断问题症状:调用一个公共方法获取当前端设备信息时候,时好时坏,无法确定问题的所在,但是重启项目之后会好,一会儿之后又会重新出现。接口报错信息为类转换异常,没有具体体现在哪一行,框架底层方法逻辑较深,排查难度大,排查目标不清晰问题原因:近期在做模块拆分,越来越多的模块开始细分起来,相互关联较多,有一个实体类同...

2020-01-18 14:47:44 367

原创 实际应用场景策略模式使用总结

背景:在给第三方推送表单数据时候,需要分多种方式进行传送,比如区分传送协议,传送参数,传送token等等,此时为了避免代码的重复和冗余,以及后期的扩展性和维护性,合理的利用策略模式可以很好的解决这个问题协议包括:HTTP,HESSIAN,WEBSERVICE参数:部分地址需要token进行验证身份,部分需要header参数,部分需要定制化的参数传输方式:json对象,object对象...

2020-01-14 17:05:08 597

原创 记录一次环信会话并发问题

实际场景:当一个患者关注了某一个团队,该团队下面的医生都会收到系统消息,此时点开系统消息,会打开患者主页,然后可以点击会话开始创建或加入会话实际问题:当两个团队下的医生都点击进入该团队会话,也就是入参都是团队id,患者id,此时会出现某一个创建失败或加入失败的问题加入会话逻辑:当前加入会话是先判断有无会话,有则直接返回,无则去调用环信api进行创建会话问题原因:并发,由于入参完全一致,...

2020-01-13 15:37:09 140

原创 当一个空的List作为参数时候需注意

当一个方法中,有一个参数为List时,一定要注意,如果此时List为空时,不可直接add元素,否则会报错(UnsupportedOperationException),因为emptyList不允许add元素,一定要判空之后再操作if(CollectionUtils.isEmpty(opRecordsList)){ opRecordsList= Lists.newArrayLis...

2020-01-07 10:40:12 1033

原创 pom文件中有一些jar引入失败问题解决

有时候会碰到pom文件中某个依赖会突然报错,可以有如下解决办法1-ReImport刷新一下maven2-将那个报错的依赖在本地的maven仓库中删除文件夹,然后重复第一步。(原因可能是本地有一个不完整的jar包,idea检测到这个目录一就不会去加载导致的)3-如果是Stringboot项目,可以检查一下parent是否正确(版本号等等) <parent> ...

2019-08-24 10:35:25 1173

原创 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 302

原创 switch一直报错 Constant expression required

switch 语句编译报错Constant expression required问题:case语句后面必须是常量,使用final修饰,但是我已经用了final修饰了啊,怎么还会编译不过???后来发现如下问题常量之前是public static final Integer QUESTIONNAIRE=2;改成public static final int QUESTIONN...

2019-07-02 15:16:19 9574

原创 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 155

原创 sql多表查询报主键找不到

sql语句多表联合查询一直报错,报另外一张表的主键列找不到,这是因为你的sql并没有查出另外一个表数据,但是你的Create sql语句的时候,AddEntity不应该添加另外一个表的实体类...

2019-05-22 09:59:10 428

原创 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 1753

原创 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 224

原创 Jackson的常用的对实体三种注解

在一些常用的设计到敏感信息的业务中,如果设计到某些字段不想被人看到,比如说银行卡密码,身份证号等,可以在实体类字段中加上Jackson的注解,如下@JsonIgnore 一般对密码进行脱敏@JsonFormat(pattern ="yyyy-MM-dd hh:mm:ss a",locale = "zh",timezone = "GMT+8") 对时间进行格式转换返回@JsonInc...

2019-02-28 09:33:58 834

翻译 泛型中的PECS原则?super T和? extends T的区别?

PECS请记住PECS原则:生产者(Producer)使用extends,消费者(Consumer)使用super。生产者使用extends如果你需要一个列表提供T类型的元素(即你想从列表中读取T类型的元素),你需要把这个列表声明成&lt;? extends T&gt;,比如List&lt;? extends Integer&gt;,因此你不能往该列表中添加任何元素。消费者使用sup...

2019-02-14 18:08:24 203

原创 HashMap的初始化容量问题

今天阿里提示我的map应该定义一个初始化容量值,如下图提示为默认值16即可,于是乎询问过度娘后得知1-HashMap底层以数组+链表+树来存储数据(java8)2-HashMap默认16个bucket数组3-如果new HashMap&lt;&gt;(19),bucket数组为32,也就是2的5次幂,因为19大于2的4次幂,小于2的5次幂,以大的值为自动扩容值,且容量一定是2的...

2019-01-29 15:33:32 4799

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除