- develop86
- computer_base86
- java72
- algorithm56
- mysql36
- spring36
- note28
- vue28
- redis23
- bigdata19
- python12
- 小程序12
- uni-app12
- school11
- mq8
- temp1
- 美食1
Java8 Stream排序空字段排在前面或后面
直接粗暴sorted会NPE,这种写法可以避免
list.stream().sorted(Comparator.comparing(l -> l.getCreateTime(), Comparator.nullsFirst(Date::compareTo))).collect(toList());
toOrderList.stream().sorted(Comparator.comparing(l -> l.getContractCode(), Comparator.nullsFirst(String::compareTo))).collect(toList());
在 Java Web 应用中,想要在接口中获取到发送请求的客户端 IP 地址,需要依赖请求对象 —— HttpServletRequest。
那么,首先就是要先获取到请求的对象。
在 Spring Boot 中,只需在接口方法上加上 HttpServletRequest 或 HttpServletResponse 参数,Spring Boot 就会自动绑定这两个对象,然后可以直接使用。如果你的方法有其他参数,只需把这两个加到后面即可。例如:
@GetMapping("/getSomething")
public String getSomething(..., HttpServletRequest request, HttpServletResponse response) {
//...
}
// 或者
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
众所周知,JAVA 为了实现跨平台,增加了一层 JVM,不同平台的 JVM 负责解释执行字节码文件。虽然有一层解释会影响效率,但好处是跨平台,字节码文件是平台无关的。
在 JAVA 1.2 之后,增加了即时编译(Just-in-Time Compilation,简称 JIT) 的机制,在运行时可以将执行次数较多的热点代码编译为机器码,这样就不需要 JVM 再解释一遍了,可以直接执行,增加运行效率。
这里有个大佬: RednaxelaFX,大家称为 R大 ,行走的 JVM Wiki!资料合集 RednaxelaFX写的文章/回答的导航帖(work in progress)
https://www.zhihu.com/question/39458585/answer/81521474
JAVA中常用的单元测试工具
JUnit/JUnit5
junit是老牌测试框架了,也是目前引用最广泛的一个框架。当前已经更新到Junit5,功能更强大。
class StandardTests {
@BeforeAll
static void initAll() {
}
@BeforeEach
void init() {
}
@Test
void succeedingTest() {
}
@Test
void failingTest() {
fail("a failing test");
}
@Test
@Disabled("for demonstration purposes")
void skippedTest() {
// not executed
}
@Test
void abortedTest() {
assumeTrue("abc".contains("Z"));
fail("test should have been aborted");
}
@AfterEach
void tearDown() {
}
@AfterAll
static void tearDownAll() {
}
}
这是哥们遇到的一个问题,如下是他的心得笔记
文章大部分篇幅粘体自[这可能是最清晰易懂的 G1 GC 资料]
G1 (Garbage-First) 于JDK 6u14版本发布,JDK 7u4版本发行时被正式推出,在JDK9时已经成了默认的垃圾回收器,算是CMS回收器的替代 方案(CMS在JDK9以后已经废弃)
G1是一款分代的 (generational),增量的 (incremental),并行的 (parallel),移动式(evacuating)的,软实时的垃圾回收器。其最大特点是暂停时间可配置,我们可以配置一个最大暂停时间,G1就会尽可能的在回收的同时保证程序的暂停时间在允许范围内,而且在大内存环境下表现更好。
文章作用概述
使用 itext 操作 pdf 进行模版替换。模版存放在 oss 上,需要将 oss 文件下载到服务器本地的临时文件,操作完文档将操作后的文档重新上传的 oss 上,将临时文件删除。
包含文档字符串替换和图片替换。这里图片章仅供学习替换图片使用,实际需要与 CFCA 或其他专业签章平台对接。
模版与替换效果展示
CountDownLatch countDownLatch = new CountDownLatch(list.size());
for (String item : list) {
threadPool.execute(() -> {
try {
// 处理业务
// doItem(item);
} catch (Exception e) {
log.error("处理业务失败", e);
} finally {
countDownLatch.countDown();
}
});
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
log.error("业务失败", e);
throw new ServiceException("业务失败");
}