https://cdn.jsdelivr.net/gh/lewky/lewky.github.io@master/images/avatar.jpg

雨临Lewis的博客

Eclipse - 快捷键篇

常用的快捷键

ctrl + shift + r 查找工作空间内的文件,不包括Jar包内的文件

ctrl + shift + t 查找工作空间内的文件,包括Jar包内的文件

ctrl + o 查看当前类的所有方法

ctrl + e 快速切换编辑器,在打开了非常多的文件时会很便利

ctrl + / 单行注释或多行注释或取消注释

ctrl + t 查找一个类的继承关系树

ctrl + d 删除光标所在行

ctrl + space 代码提示,和输入法快捷键冲突时也可以用alt + /

ctrl + shift + f 格式化代码

ctrl + k 快速跳转到下一个相同的被选中字符,在查找相同的字符串时会很方便

ctrl + shift + k 快速跳转到上一个相同的被选中字符

shift + enter 在光标所在行的下一行创建一行空白行

ctrl + shift + enter 在光标所在行的上一行创建一行空白行

alt + ← 跳转到上一步操作

alt + → 跳转到下一步操作

alt + ↑ 将光标所在的那一行向上挪动一行

alt + ↓ 将光标所在的那一行向下挪动一行

JDK自带的那些好用的工具

将中文转换为ASCII码的工具 在jdk的安装目录下,有一个bin文件夹,这里隐藏了一个将中文转换为ASCII码的工具:native2ascii.exe。双击运行该程序,输入要转换的中文,按下Enter,就可以得到相应的ASCII码了。 接下来要如何将该ASCII码复制到文本上? 右键cmd窗口,选择编辑菜单里的标记,选定了要复制的内容后按下Enter就自动复制到

PostgreSQL - 如何杀死被锁死的进程

前言

在一次系统迭代后用户投诉说无法成功登陆系统,经过测试重现和日志定位,最后发现是由于用户在ui上进行了某些操作后,触发了堆栈溢出异常,导致数据库里的用户登陆信息表的数据被锁住,无法释放。这个表里存放的是用户的session信息。

虽然后来解决了问题,但是数据库里这个用户登录信息表里被lock住的数据始终无法释放,这导致用户永远无法登陆成功,需要手动跑SQL把锁去掉才行。

由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)

Spring异常 - SpelEvaluationException: EL1030E

问题与分析

在本地开发项目时发现报错如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
org.springframework.expression.spel.SpelEvaluationException: EL1030E: The operator 'ADD' is not supported between objects of type 'java.lang.String' and 'null'
	at org.springframework.expression.spel.ExpressionState.operate(ExpressionState.java:240)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:80)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:85)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:83)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:83)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:83)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:83)
	at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:109)
	at org.springframework.expression.spel.standard.SpelExpression.getValue
....
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

SmartGit - 选择秘钥时不支持OPENSSH格式

问题与解决方法

某天发现用Git Bash生成的SSH key无法被SmartGit识别,提示需要PEM格式,不支持OPENSSH格式。奇怪的是之前也用同样的方法生成的key是可以被识别的,猜测要么是SmartGit版本不同导致无法支持OPENSSH格式,要么是Git Bash版本不同导致默认生成的key格式发生了变化。