/images/avatar.jpg

雨临Lewis的博客

SQL - where条件里的!=会过滤值为null的数据

on和where的区别

on和where后都表示查询条件,它们的区别如下:

1、on只能用于连接查询(内连接、外连接、交叉连接),在其他情况下使用on会报错,比如:

1
select* from test on id = 1; -- 报错,不能在普通查询里使用on,需要使用where

2、连接查询会产生一张中间表(临时表),on是在生成中间表时使用的条件;而where是在中间表生成后对中间表进行过滤使用的条件。比如:

由Java正则表达式的灾难性回溯引发的高CPU异常:java.util.regex.Pattern$Loop.match

问题与分析

某天领导report了一个问题:线上的CPU自从上一个版本迭代后就一直处于居高不下的状况,领导看着这段时间的曲线图判断是有两条线程在不停的死循环。

接到任务后去查看了AWS的CloudWatch,发现线上CPU确实一直居高不下,使用率基本是之前的两倍;另外发现线程使用率以比之前频繁很多。后来公司的大佬拿到dump后经过分析发现,是由正则表达式造成的CPU持续高使用率的问题。

Jetty - Unable to compile class for JSP

问题与分析

在启动公司项目时发现报错如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
    [jetty] 2019-10-07 10:28:28.760:WARN:org.apache.jasper.compiler.Compiler:Error compiling file: D:\lewis.liu\CBX_KME\Program\jetty-temp\main\jsp\org\apache\jsp\invalidatePrevSession_jsp.javanull
    [jetty] 2019-10-07 10:28:28.763:WARN::/main/invalidatePrevSession.jsp
    [jetty] org.apache.jasper.JasperException: PWC6033: Unable to compile class for JSP||PWC6199: Generated servlet error:|The import com.core.cbx.ui.zk.cul.grid.renderer.FileLinkCellRenderer cannot be resolved||
    [jetty]     at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:123)
    [jetty]     at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:296)
    [jetty]     at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:376)
    [jetty]     at org.apache.jasper.compiler.Compiler.compile(Compiler.java:437)
    [jetty]     at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:608)
    [jetty]     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:360)
    [jetty]     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486)
    [jetty]     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380)
    [jetty]     at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)

ELK系列(3) - Logstash问题汇总

启动参数

启动Logstash时可以指定一些参数:

1
2
3
4
5
-w # 指定线程,默认是cpu核数 
-f # 指定配置文件
-r # 启用热加载,可以在运行期间修改配置文件并生效
-t # 测试配置文件是否正常
-b # 执行filter模块之前最大能积累的日志,数值越大性能越好,同时越占内存

ELK系列(2) - Kibana问题汇总

修改日期格式Date format

Kibana在创建Index Patterns的时候,可以选择某个date类型的field作为排序字段。之后在Discover里打开对应的index,会发现这个date类型的field的格式显示如下:

1
April 10th 2019, 17:40:32.359

这是Kibana默认的日期格式,有两种修改的方式。

ELK系列(1) - Elasticsearch + Logstash + Kibana + Log4j2快速入门与搭建用例

前言

最近公司分了个ELK相关的任务给我,在一边学习一边工作之余,总结下这些天来的学习历程和踩坑记录。

首先介绍下使用ELK的项目背景:在项目的数据库里有个表用来存储消息队列的消费日志,这些日志用于开发者日后的维护。每当客户端生产一条消息并发送到消息队列后,就会插入一条对应的记录到数据库里。当这条消息被消费之后,又会更新数据库里对应的记录的几个column的值,比如status、updated_on这些常用的column。

由于客户每天生产消费的消息很多,导致数据库里的这个表里的数据很多,长年累月下来,会达到数以亿计。领导决定不再把这些消费日志保存到数据库,而是改为通过Log4j2 + ELK架构把这些日志保存到Elasticsearch里。

ELK简介

ELk是Elasticsearch + Logstash + Kibana的缩写,ELK一般用来收集分布式架构下各个节点的日志,并进行统一地管理。

Java - 一道关于Arrays.asList的题目

题目

有这样一道有趣的题目:

1
2
3
4
5
6
7
8
final int[] test = new int[]{1,2,3,4};
final Integer[] test2 = new Integer[]{1,2,3,4};
final List list1 = Arrays.asList(test);
final List list2 = Arrays.asList(test2);
final List list3 = Arrays.asList(1,2,3,4);
System.out.println(list1.size());
System.out.println(list2.size());
System.out.println(list3.size());

StringUtils.split()和string.split()的区别

场景

出于业务考虑,将多个字符串拼接起来时,使用的分隔符是;,;。如果要将这样一个拼接来的字符串分割成原本的多个字符串时,就需要使用到jdk自带的split()方法。不过因为公司的编程规范,改为使用了Apache工具类的StringUtils.split()。

之后就发现,当被拼接的字符串里含有;,时,就会出现分割不正确的问题。