/images/avatar.jpg

雨临Lewis的博客

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

MySQL问题汇总

指定字符集编码

需要在数据库连接中指定两个参数:useUnicode=true&characterEncoding=UTF-8,只有当设置了useUnicode=true时,后续指定的字符集编码才有效。

MySQL 5.6别名默认不生效问题

在数据库连接中指定参数:useOldAliasMetadataBehavior=true

Spring Data MongoDB问题汇总

前言

Spring Data除了常用的JPA(Hibernate)关系型数据库的模块外,还有其他用于非关系型数据库的数据交互模块:比如Redis、MongoDB、Elasticsearch等。

用法和JPA模块类似,都需要定义对应的POJO、Repository,同时也提供了对应的数据库工具模板类:如RedisTemplate、MongoTemplate等。

本文基于以下版本:

1
2
3
4
5
6
<!--  对应的是4.1.1版本的MongoDB -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    <version>2.4.0</version>
</dependency>

这是MongoDB官网用户手册的翻译文档仓库:MongoDB-4.2-Manual

日志框架与门面模式

日志框架

目前的日志框架可以分为两种:一种是jdk自带的,一种是第三方实现的。

第三方的日志框架除了提供具体的日志实现外,也有的会提供自身框架的接口。此外,有些日志框架仅仅提供了一套统一的接口,不包含具体的日志实现,可以通过一些桥接包来调用其他的日志框架。(即日志的门面模式)