跳至主要内容

博文

目前显示的是 二月, 2020的博文

Java IO 文件拷贝速度测试

测试文件:
mp3文件——5mape文件——28mmsi文件——170mzip文件——671m
测试结果:除了noBuffer bio慢的离谱,其他三种方式速度差异不大,并且随着文件体积的增大,NIO的优势变大。可得出初步结论:
noBuffer BIO << Buffer BIO ≈ Buffer NIO ≈ Transfer NIO
测试代码用例: import java.io.*; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; // 面向接口编程 interface FileCopyRunner { void copyFile(File source, File target); } /** * 对常见IO流进行文件拷贝速度测试 */ public class FileCopyDemo { // 关闭流 private static void close(Closeable closeable) { if (closeable != null) { try { closeable.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { // noBuffer BIO FileCopyRunner noBufferStreamCopy = new FileCopyRunner() { @Override public void copyFile(File source, File target) { InputStream fin = null; OutputStream fout = null; try { …

从JVM分析常见异常——JVM参数入门(一)

今天天气不错,拿起以前的笔记重新梳理一下。怎么对JVM发生的异常进行分析,这个在《深入理解JAVA虚拟机(第二版)》中提到了不少,可是一直没弄的很明白。
写完发现排版很难看,还是分多篇发吧。



导读:
怎么使用JVM参数常见JVM参数介绍 JVM参数JVM参数是必须了解的,不管是对JVM的认识还是后文的异常分析都会使用到。 

1. 使用参数
分别使用IDEA和命令行演示设置JVM启动时设置初始堆大小为11M(JVM启动参数-Xmx的默认值是多少?),其实IDEA也是调用Java内置命令的,本质上没什么区别。 IDEA

命令行

2. 参数介绍
JVM参数顾名思义就是用来自定义JVM运行时设置的。比如指定启动模式(可输入Java -version查看当前模式,我安装的64位OPEN JDK(8/11/13)默认均为server,且无法切换到client(可参见官网),bin目录中只有server目录)、指定垃圾收集器、指定运行时堆大小等。 JVM参数主要分三类:

2.1 标准参数(-)
      JVM规范强制实现,并且向后兼容。

2.2 非标准参数(-X)
      默认JVM实现了这些参数,我们直接下载的基本都是HotSpot,不保证向后兼容,堆、栈大小设置都是通过这个参数配置,如: 参数 作用 -Xms11m JVM 启动时设置初始堆大小为11M -Xmx11m

AOSP ROM 解包

迫于小米的铃声太辣耳朵,还是选择Google的铃声吧。
先上提取出来的铃声:戳我下载,密码 ufan0

为了拿到铃声,就得下载一个AOSP项目进行解包了。下载后发现和以往的不同,以前的直接可以解压,现在的需要特定工具,查了一下,说是换了压缩算法。

卡刷包一般是zip格式,直接打开就能发现资源文件基本都被压缩到了其中的system.new.dat.br文件,如下图:
这个文件无法直接打开,需要使用Google提供的工具将其转换为.dat格式,如果正在使用Linux的话,很方便,直接使用命令即可:
解压之后得到system.new.dat,这还没完,最后一步在这儿了——传送门,其中提到的system.transfer.list文件就在zip包,别没注意到。

服务器被墙怎么取回数据?

那还用说,当然是找跳板了!

话不多说,我又去买了一台服务器🤣,搭建好V2,配置好本地代理,然后在XFTP中设置本地代理便能成功连接。


MySQL8 保留字

MyBatis查询出现错误:Unknown column 'role' in 'where clause'
起初猜想是使用了保留字,查了一下发现不是,就是这么一查导致我掉坑了。不该懒啊,瞎查保留字,网络又不好,导致我花了一个小时去找其他的原因.......其实原因就是因为role是保留字。
我在使用的MySQL版本是8,其自带了保留字列表,在INFORMATION_SCHEMA.KEYWORDS,查询发现role确实是保留字......

MyBatis使用保留字字段作为条件查询的时候需要使用别名进行查询。

Redmi K20 安卓9跨版本刷第三方ROM [安卓10]

万恶的墙,把我用了两年的梯子给封了,架设在服务器上面的服务全都GG,我真的太难了。
得有5年没有接触过刷机了,再次接触发现不少都变了。
目标 MIUI 11(安卓9) -> PixelExperience(类原生 / 安卓 10)
环境 Redmi K20 系统版本 MIUI 11 V11.0.3.0.PFJCNXM (安卓9)win10 64位物料准备 TWRPPixelExperience packagesMIUI 11 安卓10官方卡刷包(不稳定,不建议日常使用)MIUI11 官方最新线刷包(救机或者回刷)步骤 为手机刷入【TWRP】;注意事项:⭐刷入的TWRP版本对应当前系统安卓版本,譬如我手机当前为安卓9的版本就刷入安卓9的【TWRP】;⭐刷入后不可重启到系统,否则会被官方REC覆盖。将【MIUI 11 安卓10官方卡刷包(不稳定,不建议日常使用)】复制到手机存储中,然后使用【TWRP】卡刷,目的是为了使手机的内存空间同步于安卓10;刷入后,完成新系统初始化,进入桌面后,继续刷入安卓10版本的【TWRP】。重启到【TWRP】,使用【TWRP】格式化DATA分区,从电脑复制【PixelExperience packages】到手机存储,卡刷即可。重启到系统,Enjoy it.参考 https://forum.xda-developers.com/mi-9t/development/rom-havocos-v2-9-t3987147 (对我帮助很大)

从G1到Shenandoah和ZGC:并发垃圾收集器新时代的Java

本地环境JDK13,查看默认垃圾收集器发现是G1,
高版本JDK还内置了 Shenandoha 和 ZGC 黑科技,找到一视频分享一下。

Properties 转 Yaml

使用Spring Boot开发时,常常会遇见Properties格式配置文件,可读性不佳。庆幸的是Spring Boot同样支持Yaml格式配置文件。

在线转换工具试了好些,并不能实现完美转换,我最终找到了一款IDEA插件,能非常地方便将Properties文件转Yaml文件,推荐一下:
YAML File Generator