解决Windows运行java -Dfile.encoding=utf-8 -jar乱码

UTF-8编译的 Java 应用程序,在 Windows 运行,指定了文件编码为 UTF-8 ,控制台显示的中文仍乱码。

右键 cmd 控制台 > 属性,可以看到当前代码页为:936 (简体中文 GBK),该代码只能显示 GBK 编码的中文。

或直接在控制台输入 chcp 命令,会输出当前:【活动的代码页:936】

需要通过 chcp 命令修改代码页,chcp 65001。(65001为UTF-8的代码页)

Windows 中 运行 Java 程序脚本新建一个 startup.bat 文件,内容如下。

1
2
3
title xxx-server
chcp 65001
java -Dfile.encoding=utf-8 -jar xxx.jar
阅读更多

Java 远程调试(Remote Debugging)

远程调试生产环境(或远程环境)的 Java 应用,以便快速定位某些在本地环境难以重现的问题。

远程部署的可能是个 Jar 包 或 Tomcat、Jetty 应用,若定位生产问题是通过反复修改 log 发包,效率就太低下了。

Java 提供了 JPDA 远程调试将本地源码与部署服务器连接,可以在本地控制断点的运行。

阅读更多

Java基础:JDK8 Stream 的方法应用

JDK 8 的新特性中包含了一个新的 Stream API,可以写出高效、干净、简洁的代码。

Stream 操作将要处理的集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理, 比如筛选, 排序,归集等。

Stream 不是数据结构,并不保存数据,它的主要目的在于计算。

Lambda 和 Stream 存在的最大最大缺点是不好调试。不过 IDEA 2019 已集成了 Stream 的调试插件 Java Stream Debugger。

阅读更多

Java基础:JDK8 四大核心函数式接口详解与应用

函数式接口 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口(default 修饰),这又关联了 Java 8 的另一个新特性,允许在接口中定义默认方法(default 修饰)

函数式接口是行为的抽象,是数据转换。其最直接表现是将函数(行为)作为数据传递进方式中。

函数式编程的一大好处,是可以用更精练的代码来表达常用数据处理。函数接口能够轻易地实现模板方法模式,只要将不确定的业务逻辑抽象成函数接口,然后传入不同的 Lambda 表达式即可。

阅读更多

Java基础:JDK8 HashMap源码及数据结构分析

HashMap 是 Java 中非常重要的集合类型,其具有快速存储,快速查找(时间复杂度非常低,非效非常高),自动扩容等特点,在实际开发中经常用到。

关于 HashMap 特性,底层原理也是面试中被问到概率极高的问题,因为 HashMap 涉及到好几个基本数据结构及相关算法知识,如组数,链表,二叉树及变种,Hash算法等。所以有必要对其深入理解。

阅读更多

Java基础:JDK 8 之 LocalDate,LocalTime,LocalDateTime 使用

因为 Date 实在不方便,特别是在日期计算时难用,并且格式化是非线程安全的。

JDK 8 提供 LocalDate, LocalTime, LocalDateTime 可以更方便操作日期时间,是线程安全的。

在 JDK 8 出来之前,大多会使用第三方库 Joda 来操作日期时间,GitHub joda-time

国内工具类 Hutool 也提供了日期时间工具类,可以方便操作。

阅读更多