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

雨临Lewis的博客

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);
}

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)等。