list通过Stream排序时,默认是从小到大,若需由大到小需要reversed※
List<ApiRank> res = list.stream().sorted(Comparator.comparing(ApiRank::getCount).reversed()).collect(Collectors.toList());Paths类※
String url = "https://pdf-container.oss-cn-beijing.aliyuncs.com/2024/07/28/flink.pdf";
String fileName = Paths.get(url).getFileName().toString();上述代码在Unix-Like系统中可以正常执行,并输出flink.pdf,而在Windows中却会报错,报错信息为index=5<:>非法的字符。这是因为Paths类会根据系统环境,自动选择文件路径分隔符,Windows的路径分隔符为\\,而Unix-Like系统是/,因此在Windows中,Paths类无法正确分隔URL,导致提示:为非法字符。
该代码设计是不严谨的,不仅仅是跨系统的问题,更是因为Paths类是不能解析Url的,Paths类应当解析的是文件资源路径,而非一个url。
String fileName = new URL(url).getPath();
fileName = fileName.substring(fileName.lastIndexOf('/') + 1);用这个方法会更合适。
Mybatis※
在xml文件中,--或/**/注释的sql里不能有#{},否则mybatis会注入参数,导致错误。
可用<!-- -->进行注释,使用这种注释方式有如下好处
- 绝对可靠
- 跨不同库,不需要区分是什么类型的数据库
- 注释内容不会在sql中出现 (Debug打印的日志)
Jar※
我们经常会遇到要修改jar包中文件的场景,例如修改某个配置文件,若只是如此小的改动就重新打jar包,重新上传,未免就太浪费时间了。
解决方案1
通过vim来解决。
vim restless-doppler-1.0-SNAPSHOT-jar-with-dependencies.jar通过vim的搜索或手动找到要修改的文件,光标选中后按回车

- 进入配置文件,按i修改,修改后输入:wq进行保存
文件修改保存后,会退出到jar包里。此时若输入:wq,可能会出现报错:
E382: Cannot write, 'buftype' option is set

不过无需担心,修改的内容我们已经保存了,只要在这里输入:q退出就可以生效了。
出现这个问题的原因:
Vim 发现你打开的是一个 .jar 文件,它会识别出这是一个特殊的“缓冲类型 (buftype)”。对于 JAR 文件,Vim 通常会将其 'buftype' 属性设置为:
nowrite: 表示这个缓冲区是不可写入的。nofile: 表示这个缓冲区不对应硬盘上的一个实际文件(或者说,它是一个虚拟的视图,而不是原始文件的直接映射)。
简单来说,Vim 把 JAR 文件当作一个压缩包(类似 ZIP 文件),而不是一个普通文本文件。你不能直接用文本编辑器去“修改”一个压缩包的内部结构,因为那样会破坏它的完整性。Vim 这样做是出于保护文件完整性的考虑。
解决方案2
对比方案1,方案2无疑是操作更多更复杂的,但是方案2是最安全保守的。
我们需要 解压 -→ 编辑文件 -→ 打包 这三步。
解压:
可以通过jar或者unzip来解压:
使用jar命令
jar xvf YourApplication.jar这条命令会把jar包的内容全部解压到当前目录下
使用unzip命令
unzip YourApplication.jar -d extracted
这条命令会把jar包的内容全部解压到extracted下
修改文件:
找到文件,进行修改
打包:
jar cvf YourNewApplication.jar -C extracted/ .