兴趣不是最好的老师

每当我跟 IT 圈内的朋友说我是生物专业的时候,对方都会大吃一惊,身边的朋友都说我是一个被代码耽误的厨师 😂 ,说心里话,我确实对烹饪挺感兴趣的,很多不喜欢做饭的朋友表示无法理解,一方面可能是基因遗传的缘故,另一方面可能是大量的实践(从我6岁开始,我妈就开始教我煮饭,在我13岁的时候便能独立待客了)。尽管煎炒煮炸难不倒我,但 20 多年的烹饪经历,我始终没能成为真正的大厨,充其量只能算朋友圈的大厨罢了,烹饪之于我,无论是中式还是西式,基本功都很熟练,为什么却一直止步于此呢?

阅读全文

Kotlin 编译器架构剖析

周末在家正刷着 GitHub 呢,微信收到一条消息:“森哥,像 ksp , allopen 这些 Kotlin 的编译器插件,它们是怎么 run 起来的,看了半天一头雾水”,我心想,不应该呀,十有八九是通过 SPI 来实现插件的加载的“,于是,我赶紧瞅了一眼 JetBrains/Kotlin 的代码,找到了 KotlinGradleSubplugin.kt,于是,假装很懂的样子,发了一个 KotlinGradleSubplugin.kt 的代码截图给他。

阅读全文

如何识别 Kotlin 的 data class

最近做字节码相关的朋友求救:“森哥,ASM 怎么才能识别 kotlin 的 data class?”,我想,这是啥需求还要区分 data class 和非 data class ,后来一问,原来是要把工程中所有实现了 Serializable 接口的 Java 类和 Kotlindata class 单独提取出来,将 Redis 中的 POJO 缓存进行可视化。

阅读全文

架构 Team 往事

昨天晚上正在刷朋友圈,突然就被拉到一个群里,仔细一看,都是以前滴滴的同事,“啥情况?”我问道,扫了一眼成员,除了涛哥,都已经离职了,心想:“不会是涛哥拿了个大 offer 请大家喝酒吧”,突然,画风不对了,群名被修改为“架构组散架群”,当时就一口茶喷到屏幕上,笑到肚子疼,看着聊天记录,一幕幕往事不禁浮现在脑海中。

阅读全文

工程师如何成长

以前总有人问我:“森哥,我怎么才能成为像你一样的大牛?”,我一般就一句话“多折腾”搪塞过去,主要是懒得大费口舌,后来想想,这样也不太好,毕竟有些人还是很有诚意,真的渴望自己能够快速成长的,从我个人的经历来看,「多折腾」其实是包含了很多方面:

阅读全文

Booster 2.3.0 正式发布

Booster 最近的两个版本主要是以修 bug 为主,所以,未发布正式的 Release Note ,本次发布的 2.3.0 版本可谓是一个重量级的版本,主要的更新内容如下:

阅读全文

Booster 2.0 正式发布,支持 AGP 4.0

Andriod Gradle Plugin3.5 开始进行了一系列的重构,一些原来在 3.5 中的实验方案,在 3.6 版本中开始默认启用,所以,3.6 对于大多数 Gradle 插件来说,简直就是噩梦一样的存在,Booster 的一些模块和特性也受到了影响,如:

阅读全文

即将推出 Booster 2.0

前不久 Android 官方终于正式发布了 Android Gradle Plugin v4.0,在体验了一把 Android Studio 4.0 的构建速度之快后,Booster 团队决定加速 Android Gradle Plugin 版本适配工作,一方面,为了解决现有的特性在 Android Gradle Plugin v4.0 上的问题,另一方面,推出自 Android Gradle Plugin v3.0 以来全版本适配方案,以解决开发者对 Android Gradle Plugin 的适配问题。

阅读全文

Booster v1.7.0 发布

Booster 又双叒叕发布了新的版本—— v1.7.0,本次更新内容如下:

  1. 修复 booster-cha 模块传递依赖问题

阅读全文

Java 类型系统的 BUG

最近看到一道比较有意思的 Java 面试题,在这里给大家分享一下,题目如下:

1
2
3
4
String[] a = new String[2];
Object[] b = a;
a[0] = "hello";
b[1] = Integer.valueOf(0);

阅读全文