/images/avatar.jpg

雨临Lewis的博客

Spring Data Redis问题汇总

前言

本文基于以下版本:

1
2
3
4
5
6
<!--  对应的是3.3.0版本的jedis(redis的java客户端) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.4.0</version>
</dependency>

Java数值问题汇总

double转成BigDecimal的精度损失问题

如果直接用构造方法将double数值转成BigDecimal,可能存在损失精度的问题:

1
2
3
4
5
6
final BigDecimal b1 = new BigDecimal(0.48);
final BigDecimal b2 = BigDecimal.valueOf(0.48);
// 0.479999999999999982236431605997495353221893310546875
System.out.println(b1);
// 0.48
System.out.println(b2);

lombok问题汇总

Eclipse安装lombok插件

方式一

使用lombok框架开发可以减少大量重复性的代码,大大提高开发效率,但是Eclipse本身并不支持lombok,会编译报错。除了项目要导入lombok依赖,还需要为Eclipse安装该lombok插件。

安装方法很简单,找到你导入的lombok的jar包,双击运行该jar包,会出现一个安装界面。或者右键jar包,选择打开方式,接着选择Java (TM) Platform SE binary,会出现安装界面。

在安装界面选择当前的Eclipse进程,或者点击左下角的Specify location...选择你要安装插件的Eclipse,接着点右下角的Install / Update,很快就安装完毕,点击Quit Installer

lombok的下载地址:https://projectlombok.org/downloads/lombok.jar

Jackson问题汇总

前言

常见的json框架有:Jackson,FasJson(阿里的,万年没更新,积累了大量issue),Gson(谷歌的)。其中Jackson效率最高,性能最好,最为常用。本文基于2.11.3版本的Jackson。

Jackson在1.x版本使用的包名是codehaus,后来升级到2.x版本时,为了和旧版本区分开来,采用了新的包名fasterxml。有这种类似操作的还有Log4j和Log4j2,在使用时需要注意引入的包名,避免混用版本或误用版本。

Jackson可以轻松的将Java对象转换成json对象和xml文档(即序列化),同样也可以将json、xml转换成Java对象(即反序列化)。

Java Servlet问题汇总

Cannot forward after response has been committe

之前在使用Servlet的时候,总是在 doGet()/doPost() 的最后一行才使用请求转发或者重定向。如果需要根据条件来判断进行不同的请求转发或者重定向,代码如下:

1
2
3
4
5
6
7
8
9
@Override
protected void doGet(final HttpServletRequest req, final HttpServletResponse resp)
        throws ServletException, IOException {

    if (req.getSession().getAttribute(AttrConsts.LOGIN_USER) == null) {
        req.getRequestDispatcher(PathConsts.PATH_PREFIX + PathConsts.LOGIN_PAGE).forward(req, resp);
    }
    req.getRequestDispatcher(PathConsts.PATH_PREFIX + PathConsts.MAIN_PAGE).forward(req, resp);
}

PostgreSQL - DML操作汇总

匿名函数

DO关键字

pl/pgsql即Procedural Language/ Postgres SQL(过程化sql语言),是Postgresql数据库对sql语句的扩展,可以在pl/pgsql代码块内定义多条sql语句,每条语句以分号结束,代码块由begin开始,end结束,代码块的最后一个end可以不加分号。

Git常用命令

git clone

克隆远程库到本地:

1
2
3
4
5
6
7
// 默认本地仓库名字与远程库一样
git clone https://github.com/jquery/jquery.git

// 指定本地库名字为test
git clone https://github.com/jquery/jquery.git test

// git clone的仓库地址支持多种协议,通常使用最多的是http(s)和ssh协议,比如从GitHub上克隆仓库。

计算机网络基础

IP地址

IP地址由网络号(包括子网号)和主机号组成,网络号(包括子网号)相同意味着在同一网段下。在IPv4中,IP地址是一个32位的整数,对应4个字节,通常用x.x.x.x的点式十进制方式来表示。

主机号为全0时,代表当前网络地址;主机号为全1时,代表当前网络的广播地址。 当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息。

Java正则表达式问题汇总

正则表达式的模式修饰符

在正则表达式前面可以加上(?i)(?s)(?m)这三种模式修饰符,用以改变正则表达式的匹配模式。

(?i)表示匹配时不区分大小写。

(?s)表示Singleline(单行模式),匹配时会改变.的含义,使其能与换行符(\r或者\n,如果是\r\n需要用两个.)匹配。

(?m)表示Multiline(多行模式),匹配时会改变^$的含义,使其分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。

这三种模式修饰符可以搭配使用,如:(?im)(?is)等。