MacOS Python获取系统版本不对

背景

今天遇到个奇怪的问题,在conda安装软件,不能自动获取最新的版本,查看了一下info,发现里面获取的系统版本不对,开始怀疑是这个版本的问题,但是在deactive conda之后,获取的版本是正确的

阅读更多

Json转Map的后出现ClassCastException

运行错误

测试代码

1
2
3
4
5
6
7
8
9
10
import com.google.gson.Gson
fun main() {
val map = HashMap<String, Int>()
map["key1"] = 111111
val jsonString = Gson().toJson(map)
println(map::class.java)
val hashMap = Gson().fromJson(jsonString, map::class.java)
val key1:Int? = hashMap["key1"]
println(key1)
}

运行的时候,会抛类型转换错误

阅读更多

JsonObject.optLong 导致的Bug

问题背景

业务场景存在一个JSB,FE同学传了个JSON到端上,端上测试的时候都是正确的,有天调试Server反馈说id值找不到,端上id值回传错了,开始排查代码。
发现Jsb传输过来的Json都是String to String的格式, 类似这样

阅读更多

快速点击StartActivity引发的误会

问题来源





在A 跳到 B ,再跳到C的过程中,一定条件下发送广播,需要把B关掉,达到的效果就是 C直接返回A。


但是现在出现一个Bug就是C返回的时候,还是B。当时没有打印onCreate的日志,只发现B在前面finish了,居然又在后面onResume了,这显然违反科学。当时想就算B启动了多个,B也都在onCreate的时候注册了广播,都应该可以收到广播的。后面怀疑是手滑不小心点击了2次,或是系统突然响应过慢,点击了多次,造成创建了多个实例,所以我直接通过for循环快速模拟这种情况。

阅读更多

从ContextClassLoader到JDBC和SPI

SystemClassLoader

可以jvm参数 java.system.class.loader 设置默认的系统加载器,默认是当前线程的ContextClassLoader。来自sun.misc.Launcher.getLauncher的getClassLoader, 而getLauncher的getClassLoader实际来自Launcher.AppClassLoader.getAppClassLoader。

阅读更多

记一次类加载引起的Bug

1.起因

程序莫名其妙出了
error:java.lang.NullPointerException: Null reference used for synchronization (monitor-enter)
就是在使用同步锁的时候,是锁的对象是空的。很是奇怪,看代码没觉得啊。打印一下,确实是空的,Why?

阅读更多

Ubuntu编译glibc库来验证Synchronized锁优化效果

0.前言


当然你可以说通过JOL查看对象的头信息,当然那个也是一种方法,但那个只能说明是这种状态,没有过程,本次主要结合来验证,Synchronized 关键字锁的状态:无锁、偏向锁、轻量级锁、重量级锁

基于Ubuntu16测试成功。18测试失败,centos没有测试




主要是在Java调用系统函数的时候,打印log。但是在Java里面打印线程ID是JVM层面的。需要自己实现一个native方法,在java层面调用。最后对比对应的PID 和TID,发现查看当前线程调用了几次系统锁
Java 的重量级级锁都是通过glibc库的pthread_mutex_lock函数实现的,是在和操作系统级别的锁。

阅读更多