将Java程序注册为Windows系统服务
现实环境是有些甲方的物理服务器是Widnwos系统,还不能切换Linux,就必须在 Windows 运行 Java 程序,cmd 的控制台窗口很容易被误关闭,需要把 Java 程序注册为 Windows 随机启动。
现实环境是有些甲方的物理服务器是Widnwos系统,还不能切换Linux,就必须在 Windows 运行 Java 程序,cmd 的控制台窗口很容易被误关闭,需要把 Java 程序注册为 Windows 随机启动。
UTF-8编译的 Java 应用程序,在 Windows 运行,指定了文件编码为 UTF-8 ,控制台显示的中文仍乱码。
右键 cmd 控制台 > 属性,可以看到当前代码页为:936 (简体中文 GBK),该代码只能显示 GBK 编码的中文。
或直接在控制台输入 chcp 命令,会输出当前:【活动的代码页:936】
需要通过 chcp 命令修改代码页,chcp 65001。(65001为UTF-8的代码页)
Windows 中 运行 Java 程序脚本新建一个 startup.bat
文件,内容如下。
1 | title xxx-server |
远程调试生产环境(或远程环境)的 Java 应用,以便快速定位某些在本地环境难以重现的问题。
远程部署的可能是个 Jar 包 或 Tomcat、Jetty 应用,若定位生产问题是通过反复修改 log 发包,效率就太低下了。
Java 提供了 JPDA 远程调试将本地源码与部署服务器连接,可以在本地控制断点的运行。
JDK 8 的新特性中包含了一个新的 Stream API,可以写出高效、干净、简洁的代码。
Stream 操作将要处理的集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理, 比如筛选, 排序,归集等。
Stream 不是数据结构,并不保存数据,它的主要目的在于计算。
Lambda 和 Stream 存在的最大最大缺点是不好调试。不过 IDEA 2019 已集成了 Stream 的调试插件 Java Stream Debugger。
汇总 Java 的各种随机数生成方式,而不仅只有 java.util.Random 。
函数式接口 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口(default 修饰),这又关联了 Java 8 的另一个新特性,允许在接口中定义默认方法(default 修饰)。
函数式接口是行为的抽象,是数据转换。其最直接表现是将函数(行为)作为数据传递进方式中。
函数式编程的一大好处,是可以用更精练的代码来表达常用数据处理。函数接口能够轻易地实现模板方法模式,只要将不确定的业务逻辑抽象成函数接口,然后传入不同的 Lambda 表达式即可。
HashMap 是 Java 中非常重要的集合类型,其具有快速存储,快速查找(时间复杂度非常低,非效非常高),自动扩容等特点,在实际开发中经常用到。
关于 HashMap 特性,底层原理也是面试中被问到概率极高的问题,因为 HashMap 涉及到好几个基本数据结构及相关算法知识,如组数,链表,二叉树及变种,Hash算法等。所以有必要对其深入理解。
项目开发中经常需要将 List 转 Map 的操作,可以使用 for
循环,或 JDK 1.8 提供的 Stream 流,或 Google 的 Guava 集合库来实现。
开发中数据处理常用到遍历,Java 为遍历提供了 for 和 foreach,lambda 表达式 foreach,stream 流 foreach,今天对这几种使用做个简单测试。
测试 Array ,ArrayList,LinkedList 三种数据结构。
Java 8 Stream API 性能测试,这篇文章中的测试更合理全面。
因为 Date 实在不方便,特别是在日期计算时难用,并且格式化是非线程安全的。
JDK 8 提供 LocalDate, LocalTime, LocalDateTime 可以更方便操作日期时间,是线程安全的。
在 JDK 8 出来之前,大多会使用第三方库 Joda 来操作日期时间,GitHub joda-time。
国内工具类 Hutool 也提供了日期时间工具类,可以方便操作。