Johnson Lee
https://johnsonlee.io/icon.png
Get into trouble, make mistakes, fight, love, live
2024-01-27T23:00:00.000Z
https://johnsonlee.io/
Johnson Lee
Hexo
洞察构建性能:选择正确的 Metrics
https://johnsonlee.io/2024/01/27/use-better-metrics-for-build-performance-measurement/
2024-01-27T23:00:00.000Z
2024-01-27T23:00:00.000Z
<p>最近因为做架构重构,频繁大规模改代码,发现 Android 工程的构建速度简直到了无法忍受的地步,记得以前用 Intel 芯片的 Mac Book Pro 的时候,全量构建一次大概要 40 分钟,一番 deep dive
一封写给老板的邮件
https://johnsonlee.io/2024/01/07/an-email-to-my-boss/
2024-01-07T07:00:00.000Z
2024-01-07T07:00:00.000Z
<p>最近在整理旧日的备忘录时,偶然间翻到了多年前写给老板的一封邮件。随着每一个字句的流淌,思绪也随之穿梭回到往昔,当年那个意气风发,满怀热情,勇敢直言,无惧无畏的少年已然跃然于纸上。</p>
<blockquote>
<p>Dear Xxx,</p>
<p>Few
心之所向,道之所在
https://johnsonlee.io/2024/01/01/where-the-heart-leads-the-truth-follows/
2024-01-01T16:00:00.000Z
2024-01-01T16:00:00.000Z
<p>几个月前,偶然发现了一本新书《Why Greatness Cannot Be Planned》,中文名《为什么伟大不能被计划》,作者竟是来自 OpenAI 的科学家。那时,OpenAI 的 ChatGPT
在 JVM 上运行 Android ?!
https://johnsonlee.io/2023/10/08/running-android-code-on-jvm/
2023-10-08T15:00:00.000Z
2023-10-08T15:00:00.000Z
<p>没看错,就是在 JVM 上运行 Android 代码,而且,还不需要模拟器或者虚拟化技术,各位是不是很好奇,究竟如何做到把 Android 的代码跑在 JVM 上?别着急,咱们 step by step。</p>
<h2
中国人文化不自信的根源
https://johnsonlee.io/2023/09/24/the-root-cause-of-chinese-peoples-cultural-unconfidence/
2023-09-24T17:00:00.000Z
2023-09-24T17:00:00.000Z
<p>周末实在无聊,带孩子一起去了趟景福宫(경복궁),来之前也没有做攻略,进了广场就看到对面有一群人在排队购票,我也带着娃去看票价,仔细研究了一番,发现有一个免票规则——「身着韩国传统服饰者可以免费参观」,顿时终于理解为啥那么多外国人也身着韩国传统服饰了,正是这个免票规则,让我陷
Booster 4.16.3 版本发布
https://johnsonlee.io/2023/09/04/booster-v4-16-3-released/
2023-09-04T00:00:00.000Z
2023-09-04T00:00:00.000Z
<p>Booster v4.16.3 主要的变更如下:</p>
<ul>
<li>支持 AGP 7.4</li>
<li>修复 <a href="https://github.com/didi/booster/pull/422">#422</a>: end-of-stream
Booster 如何适配 AGP 8.0?
https://johnsonlee.io/2023/05/29/how-booster-supports-agp-8/
2023-05-29T00:00:00.000Z
2023-05-29T00:00:00.000Z
<p>自 AGP 8.0 正式版本发布以来已经一个多月了,Booster 适配 AGP 8.0 还在持续进行中,主要是 AGP 8.0 删除了很多之前只是 deprecated 的 API,包括部分 <a
Booster 4.16.2 版本发布
https://johnsonlee.io/2023/05/28/booster-v4-16-2-released/
2023-05-28T00:00:00.000Z
2023-05-28T00:00:00.000Z
<p>Booster v4.16.2 与 v4.15.0 相比,主要的变更如下:</p>
<ul>
<li><p>修复 <a href="https://github.com/didi/booster/issues/406">#406</a> : 增量编译时对 Jar
关于战略架构框架的思考
https://johnsonlee.io/2023/05/13/thoughts-on-strategic-architecture-framework/
2023-05-13T20:00:00.000Z
2023-05-13T20:00:00.000Z
<p>在做架构设计的过程中,我们经常会提到一个概念——“标准化”。标准化,通过设定最佳实践和创建统一的标准,确保企业在所有业务领域中实现一致的性能。然而,当我们完成了标准化之后,我们应该怎么做呢?下一步又是什么?是否存在一个通用的框架,能够指导架构师和技术负责人进一步优化和发展?
[译] Stevey's Google Platforms Rant
https://johnsonlee.io/2023/04/15/steveys-google-platforms-rant/
2023-04-15T00:00:00.000Z
2023-04-15T00:00:00.000Z
<p>I was at Amazon for about six and a half years, and now I’ve been at Google for that long. One thing that struck me immediately about
Design System: 移动应用开发新视角
https://johnsonlee.io/2023/03/31/design-system-mobile-engineering-perspective/
2023-03-31T09:00:00.000Z
2023-03-31T09:00:00.000Z
<p>随着移动互联网的普及,移动应用逐渐成为人们生活中不可或缺的一部分。为了满足用户对于高品质应用的需求,移动工程师们在不断探索如何提高开发效率、降低开发成本的同时,实现更好的用户体验。本文将从移动应用开发的角度,从 UX
Kotlin 填坑记之 Compatibility
https://johnsonlee.io/2022/12/07/do-you-really-know-kotlin-compatibility/
2022-12-07T00:00:00.000Z
2022-12-07T00:00:00.000Z
<p>在前一篇 <a href="/2022/12/03/do-you-really-know-kotlin-function/">Kotlin 填坑记之 FunctionReference</a> 中有提到关于如何解决 Kotlin 从 1.3 升级到 1.5 时由 <a
Kotlin 填坑记之 FunctionReference
https://johnsonlee.io/2022/12/03/do-you-really-know-kotlin-function/
2022-12-03T14:00:00.000Z
2022-12-03T14:00:00.000Z
<p>在 Booster 4.15.0 之前,一直使用的是 Kotlin 1.3,之所一直用比较低的 Kotlin 版本,主要的原因还是考虑到 Kotlin 版本的兼容性问题,但要支持 AGP 7.3 就不得不升级 Kotlin 版本,因为 AGP 7.3 就依赖了
Booster 4.15.0 版本发布
https://johnsonlee.io/2022/12/02/booster-v4-15-0-released/
2022-12-02T23:00:00.000Z
2022-12-02T23:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.15.0,本次更新内容如下:</p>
<ul>
<li>修复 <a href="https://github.com/didi/booster/issues/387">#387</a> by <a
培养独立思考的教育
https://johnsonlee.io/2022/11/28/education-for-independent-thought/
2022-11-28T00:00:00.000Z
2022-11-28T00:00:00.000Z
<p>有幸看过已故华人科学家张首晟的一次讲座 —— <a href="https://www.youtube.com/watch?v=kLs4bf9g1aw&t=2711s">从沙粒中看世界</a>,在讲座 <a
如何成为优秀的 PPT 工程师
https://johnsonlee.io/2022/11/13/how-to-be-an-excellent-ppt-engineer/
2022-11-13T00:00:00.000Z
2022-11-13T00:00:00.000Z
<p>最近看了很多工程师写的文档,发现工程师们普通存在的问题,要么通篇都是文字一个图也没有,要么技术规划全是一堆的 task,根本看不清楚这些 task 跟整体的目标是什么关系,等等,即便是高级工程师,有类似问题的也大有人在。</p>
<h2 id="专业的态度"><a
推荐阅读(经济篇)
https://johnsonlee.io/2022/11/12/recommended-reading-economics/
2022-11-12T07:00:00.000Z
2022-11-12T07:00:00.000Z
<p>最近有同学问我:“森哥,有什么值得一读的好书推荐吗?”,我抬头扫了一眼书架,还别说,值得一读的书还真不少,还是先从经济学开始吧,为什么会先推荐经济学相关的书呢?相信很多人都听过「天下熙熙皆为利来,天下攘攘皆为利往」,可以说人类的所有一切活动都可以用经济学的原理去解释,搞清楚
Booster 4.13.0 版本发布
https://johnsonlee.io/2022/08/25/booster-v4-13-0-released/
2022-08-25T23:00:00.000Z
2022-08-25T23:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.13.0,本次更新内容如下:</p>
<ul>
<li>修复 <code>ShadowScheduledThreadPoolExecutor</code> 在 Android 5.1.1
Booster 4.12.0 版本发布
https://johnsonlee.io/2022/07/09/booster-v4-12-0-released/
2022-07-09T12:00:00.000Z
2022-07-09T12:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.12.0,本次更新内容如下:</p>
<ul>
<li>优化 CHA 支持 ClassSet 缓存,降低多工程大规模静态分析的内存占用</li>
<li>支持 <a
Booster 4.11.0 版本发布
https://johnsonlee.io/2022/07/02/booster-v4-11-0-released/
2022-07-02T12:00:00.000Z
2022-07-02T12:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.11.0,本次更新内容如下:</p>
<ul>
<li>修复 transform 的耗时计时问题</li>
<li>新增 <a
Booster 4.10.0 版本发布
https://johnsonlee.io/2022/06/13/booster-v4-10-0-released/
2022-06-13T09:00:00.000Z
2022-06-13T09:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.10.0,本次更新内容如下:</p>
<ul>
<li>完善 <a
类引用分析?Booster 轻松搞定!
https://johnsonlee.io/2022/06/08/class-reference-analysis/
2022-06-08T01:00:00.000Z
2022-06-08T01:00:00.000Z
<p>在 App 架构演进的过程中,基础模块下沉是每个 App
Booster 4.9.0 版本发布
https://johnsonlee.io/2022/05/21/booster-v4-9-0-released/
2022-05-21T00:00:00.000Z
2022-05-21T00:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.9.0,本次更新内容如下:</p>
<ul>
<li>修复漏洞 <a
iMac 升级 SSD
https://johnsonlee.io/2022/05/06/upgrade-imac-with-ssd/
2022-05-06T00:00:00.000Z
2022-05-06T00:00:00.000Z
<p>前段时间,我的 7 年高龄的 Mac Book Pro (Late 2013) 老是出现磁盘空间不足的情况,256G 的 SSD 实在是有点捉襟见肘了,于是打算换个 M1 ,上官网看一下价格,一个顶配算下来得 3 万多 RMB,太特么贵了,想当年,我这个 Mac Book
Booster 4.8.0 版本发布
https://johnsonlee.io/2022/05/05/booster-v4-8-0-released/
2022-05-05T00:00:00.000Z
2022-05-05T00:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.8.0,本次更新内容如下:</p>
<ol>
<li>修复 <a href="https://github.com/didi/booster/issues/311">#311</a></li>
<li>新增 API <a
Booster 4.7.0 版本发布
https://johnsonlee.io/2022/04/26/booster-v4-7-0-released/
2022-04-26T23:00:00.000Z
2022-04-26T23:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.7.0,本次更新内容如下:</p>
<ol>
<li>Fix issue <a href="https://github.com/didi/booster/issues/304">#304</a>:
关于数据的(不)可变性问题
https://johnsonlee.io/2022/04/11/the-data-mutability-problem/
2022-04-11T00:00:00.000Z
2022-04-11T00:00:00.000Z
<p>关于数据的可变性或者不可变性,是指数据在被创建后,到底支不支持可变(修改),尽管我们知道 <em>Java</em> 中的 <em>String</em>
是时候放弃 JavaPoet/KotlinPoet 了
https://johnsonlee.io/2022/04/10/its-time-to-abandon-javapoet-kotlinpoet/
2022-04-10T00:00:00.000Z
2022-04-10T00:00:00.000Z
<p>相信大家对于 <a href="https://github.com/square/javapoet">JavaPoet</a> 和 <a href="https://github.com/square/kotlinpoet">KotlinPoet</a>
Booster 4.6.0 版本发布
https://johnsonlee.io/2022/04/05/booster-v4-6-0-released/
2022-04-05T23:00:00.000Z
2022-04-05T23:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.6.0,本次更新内容如下:</p>
<ol>
<li>Add extension property <code>BaseVariant.mergedNativeLibs:
Booster 4.5.3 版本发布
https://johnsonlee.io/2022/03/06/booster-v4-5-3-released/
2022-03-06T23:00:00.000Z
2022-03-06T23:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.5.3,本次更新内容如下:</p>
<ol>
<li>Fix issue <a href="https://github.com/didi/booster/issues/284">#284</a> -
Booster 4.5.1 版本发布
https://johnsonlee.io/2022/03/06/booster-v4-5-1-released/
2022-03-06T15:00:00.000Z
2022-03-06T15:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.5.1,本次更新内容如下:</p>
<ol>
<li>Fix issue <a href="https://github.com/didi/booster/issues/280">#280</a> - thread
Booster Collector API
https://johnsonlee.io/2022/01/16/booster-collector-api/
2022-01-16T23:00:00.000Z
2022-01-16T23:00:00.000Z
<p>Booster 之所以保持着高性能,除了并行 I/O 以外,还有一个很重要的方面 —— 单次 I/O。可能有人会问,什么叫单次 I/O?所谓单次 I/O 是指,在 Transform 的过程中,对于每一个输入
Booster 4.4.0 版本发布
https://johnsonlee.io/2022/01/16/booster-v4-4-0-released/
2022-01-16T20:00:00.000Z
2022-01-16T20:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.4.0,本次更新内容如下:</p>
<ol>
<li>支持对增量编译的 transform 输入进行强制更新</li>
</ol>
<blockquote>
<p>参见:<a
Zero to One - Importance of Mobile App Monitoring
https://johnsonlee.io/2021/12/31/importance-of-mobile-app-monitoring/
2021-12-31T00:00:00.000Z
2021-12-31T00:00:00.000Z
<p>Stability is one of the three most important metrics for Coupang apps in providing a Wow customer experience. The mobile app monitoring
Booster 4.3.0 版本发布
https://johnsonlee.io/2021/12/21/booster-v4-3-0-released/
2021-12-21T00:00:00.000Z
2021-12-21T00:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.3.0,本次更新内容如下:</p>
<ol>
<li>支持在本地单元测试环境中运行 <code>Transformer</code>,并同时支持 <em>ASM</em> 和
第一个 UI 控件
https://johnsonlee.io/2021/12/19/my-first-ui-widget/
2021-12-19T00:00:00.000Z
2021-12-19T00:00:00.000Z
<p>尽管我使用 <em>Java</em> 编程已有十年有余,但其实 <em>JavaScript</em> 才是我最早掌握的一门编程语言,虽然 <em>C</em> 语言是大学生的必修课,但我真不敢说在当时我已经掌握了它,在 <em>Web 2.0</em>
可测试应用架构设计(二)
https://johnsonlee.io/2021/12/18/testable-app-architecture-design-2/
2021-12-18T00:00:00.000Z
2021-12-18T00:00:00.000Z
<p>在<a href="/2021/11/23/testable-app-architecture-design-1/">可测试应用架构设计(一)</a>中有介绍过 <em>Booster</em> 是如何解决 <code>Transformer</code>
Booster 4.2.0 版本发布
https://johnsonlee.io/2021/12/14/booster-v4-2-0-released/
2021-12-14T01:00:00.000Z
2021-12-14T01:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.2.0,本次更新内容如下:</p>
<ol>
<li>增加对运行时字节码注入的支持,开发者可以使用 <strong>Booster</strong> 提供的
可测试应用架构设计(一)
https://johnsonlee.io/2021/11/23/testable-app-architecture-design-1/
2021-11-23T00:00:00.000Z
2021-11-23T00:00:00.000Z
<p>自从字节码操作技术在移动端普及之后,各种 <em>app</em> 的架构中都采用了这一技术,最典型的例子便是采用 <em>Service Locator</em> 模式实现的 <em>IoC</em>
Booster 4.1.0 版本发布
https://johnsonlee.io/2021/11/12/booster-v4-1-0-released/
2021-11-12T01:00:00.000Z
2021-11-12T01:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.1.0,本次更新内容如下:</p>
<ul>
<li>Fix issue <a href="https://github.com/didi/booster/issues/258">#258</a></li>
<li>Fix
两种哲学,两个世界
https://johnsonlee.io/2021/10/31/two-philosophies-two-worlds/
2021-10-31T23:00:00.000Z
2021-10-31T23:00:00.000Z
<p>很早就想写一篇关于两种不同的做事哲学的文章,一直有些纠结标题是「两个世界,两种哲学」还是「两种哲学,两个世界」,前者在于从结果的角度出发,后者则是从原因的角度出发,以佛教的观点一看,因即是果,果即是因,其实都是一样,但其实我们从解决问题的角度来说,一般还是由果及因,找到了根
Kotlin 填坑记之 Metadata
https://johnsonlee.io/2021/10/29/do-you-really-know-kotlin-1/
2021-10-29T23:00:00.000Z
2021-10-29T23:00:00.000Z
<p>最近用 <strong>KAPT</strong> 来生成 <strong>Kotlin</strong> 代码,遇到了一个头疼的问题,生成的 <strong>Kotlin</strong> 代码需要调用源 <strong>Kotlin</strong> 代码中被
你真的会 Java 吗?(二)
https://johnsonlee.io/2021/10/17/do-you-really-know-java-2/
2021-10-17T15:00:00.000Z
2021-10-17T15:00:00.000Z
<p>是个 <strong>Java/Android</strong> 工程师都知道,用 <code>==</code> 比较其实是比较的两个对象是否是同一个实例,比较实例其实就是比较内存地址是否相等,当我们在打印一个 <code>Object</code>
一行搞定开源库发布到 Maven Central
https://johnsonlee.io/2021/10/07/sonatype-publish-plugin/
2021-10-07T10:00:00.000Z
2021-10-07T10:00:00.000Z
<p>发布过开源库的同学肯定深有感触,想要将一个开源库发布到 <strong>Maven Central</strong> 对于开发者来说并不简单,尤其是通过 <a href="https://oss.sonatype.org/">Sonatype</a>
如何让 Gradle Plugin 与 Library 共存
https://johnsonlee.io/2021/10/06/integrate-gradle-plugin-and-library-into-one-project/
2021-10-06T23:00:00.000Z
2021-10-06T23:00:00.000Z
<p>当开发一个 <strong>Android Library</strong> 时,如果还同时还要提供相应的 __Gradle Plugin__,对于 <strong>Gradle</strong> 新手来说,要在一个 <strong>Gradle</strong>
GUI 应用的烦恼
https://johnsonlee.io/2021/10/01/problems-of-gui-app/
2021-10-01T23:00:00.000Z
2021-10-01T23:00:00.000Z
<p>在移动互联网蓬勃发展的时代,出现了很多现代化的编程语言,<em>Write Once and Run Anywhere</em> 早已不再是 Java 所独有的特性,然而在 <em>Android</em> 系统推出之前,想要在嵌入式 <em>Linux</em>
你真的会 Java 吗?(一)
https://johnsonlee.io/2021/09/21/do-you-really-know-java-1/
2021-09-21T13:00:00.000Z
2021-09-21T13:00:00.000Z
<p>正在开车呢,收到一条微信:“森哥,这段代码为啥输出是
度日如年与度日如年
https://johnsonlee.io/2021/09/20/days-are-like-years/
2021-09-20T02:00:00.000Z
2021-09-20T02:00:00.000Z
<p>正静坐思考人生,突然意识到加入 Coupang 已经一年了,从头到尾捋了一遍,脑海里冒出来一个词 —— 度日如年,此「度日如年」并非彼「度日如年」,一切都是相对的,这儿正好相反。在 Coupang
Booster 4.0.0 版本发布
https://johnsonlee.io/2021/08/22/booster-v4-0-0-released/
2021-08-22T20:00:00.000Z
2021-08-22T20:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v4.0.0,本次更新内容如下:</p>
<ol>
<li>支持 <em>AGP 7.0</em></li>
<li>开放 <a
Booster 3.5.0 正式发布
https://johnsonlee.io/2021/08/17/booster-v3-5-0-released/
2021-08-17T23:00:00.000Z
2021-08-17T23:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v3.5.0,本次更新内容如下:</p>
<ol>
<li>增加 <em>booster-transform-service-loader</em> 模块,支持 <code>ServiceLoader</code>
Booster 3.4.0 正式发布
https://johnsonlee.io/2021/08/12/booster-v3-4-0-released/
2021-08-12T22:00:00.000Z
2021-08-12T22:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v3.4.0,本次更新内容如下:</p>
<ol>
<li>重构了 <em>booster-cha (Class Hierarchy Analysis)</em> 模块,支持字节码框架无关的通用
翩翩少年
https://johnsonlee.io/2021/08/09/lost-youth/
2021-08-09T00:00:00.000Z
2021-08-09T00:00:00.000Z
<p>整理磁盘空间的时候,发现了多年前自己录的歌,重温了一曲,思绪停留在了 2013 年的那个夜晚,暮色渐浓,在房间里支起了熨衣板,整理完衬衫,兴致盎然,拿过竖在墙角的电吉他,手机打开 Voice
AGP Transform API 被废弃意味着什么?
https://johnsonlee.io/2021/08/02/the-deprecation-of-agp-transform-api/
2021-08-02T00:00:00.000Z
2021-08-02T00:00:00.000Z
<p>前几天 AGP 7.0 正式发布,细心的同学可能已经发现 从 AGP 1.3 一直存在的 Transform API 被标记为废弃了,但从注释中并没有说明应该用哪个 API 来替代,发现了这个问题,有同学就不淡定了,连 AGP 中最稳定的 Transform API
真相与现实
https://johnsonlee.io/2021/06/10/truth-and-reality/
2021-06-10T00:00:00.000Z
2021-06-10T00:00:00.000Z
<p>人类社会活动之复杂,导致绝大多数人都完全搞不清楚我们生活的这个空间是如何进行运转的,就拿「经济」这一话题来说,这个领域恐怕很多人都是一知百解,因为搞不清这个社会运行的底层逻辑,所以,绝大多数人只能随波逐流,人云亦云。</p>
<h2 id="房子"><a
你不可能成为大牛
https://johnsonlee.io/2021/05/26/you-wont-be-a-master/
2021-05-26T12:00:00.000Z
2021-05-26T12:00:00.000Z
<p>你没看错,你 <em>不可能</em>
Booster 3.3.1 正式发布
https://johnsonlee.io/2021/05/11/booster-v3-3-1-released/
2021-05-11T22:00:00.000Z
2021-05-11T22:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v3.3.1,本次更新内容如下:</p>
<ol>
<li>Fix issue <a href="https://github.com/didi/booster/issues/222">#222</a> :
Booster 3.3.0 正式发布
https://johnsonlee.io/2021/05/10/booster-v3-3-0-released/
2021-05-10T20:00:00.000Z
2021-05-10T20:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v3.3.0,本次更新内容如下:</p>
<ol>
<li>Fix <code>constraintlayout</code> 导致的 <em>R</em> 内联的问题 <a
Java 11 新特性
https://johnsonlee.io/2021/05/07/java-11-new-features/
2021-05-07T11:00:00.000Z
2021-05-07T11:00:00.000Z
<p>Java 11 于 2018 年 9 月 25 日发布,该版本目前已开放以进行错误修复。它提供 LTS 或长期支持,这也是为什么新版本的 <em>IntelliJ IDEA</em> 及 <em>Android Studio</em> 都将内置的 JDK 版本升级到了
Java 10 新特性
https://johnsonlee.io/2021/05/07/java-10-new-features/
2021-05-07T10:00:00.000Z
2021-05-07T10:00:00.000Z
<p>Java 10 根据 <em>JSR 383</em> 所开发,于 2018 年 3 月 20 日正式发布。Oracle 提供 GPL 下可用于生产的二进制文件,此次发布包含了十二项新特性。</p>
<h2
Java 9 新特性
https://johnsonlee.io/2021/05/07/java-9-new-features/
2021-05-07T09:00:00.000Z
2021-05-07T09:00:00.000Z
<p>在 2011 年的 <em>JavaOne</em> 中,Oracle 讨论了一些他们希望在 2016 年于 Java 9 中发布的功能。<em>Java 9</em> 应当对千兆级堆拥有更好的支持,同时能够更好地集成本机代码,且拥有新的垃圾收集器 <em>G1</em>
Java 8 新特性
https://johnsonlee.io/2021/05/07/java-8-new-features/
2021-05-07T08:00:00.000Z
2021-05-07T08:00:00.000Z
<p>Java 8 于 2014 年 3 月 18 日发布,包含了一些原本计划在 Java 7 中发布但后来却推迟的功能。Java 8 不再支持 <em>Windows XP</em> ,但 <em>JDK 8</em> 第 25 版更新仍然可以在 <em>Windows
Java 7 新特性
https://johnsonlee.io/2021/05/07/java-7-new-features/
2021-05-07T07:00:00.000Z
2021-05-07T07:00:00.000Z
<p>Java 7 代号 <em>Dolphin</em> 是一个重大的更新,于 2011 年 7 月 7 日亮相,并在 2011 年7 月 28 日开放给开发者使用。开发周期被分类成十三个重要阶段,最后一个阶段在 2011 年 6 月 6 日完成。平均来看,每个里程碑各有 8
Java 6 新特性
https://johnsonlee.io/2021/05/07/java-6-new-features/
2021-05-07T06:00:00.000Z
2021-05-07T06:00:00.000Z
<p>Java 6 代号为 <em>Mustang</em> 。版本发布于 2006 年 12 月 11 日,<em>Sun</em> 把原本的名称 <em>“J2SE”</em> 改为 <em>“Java SE”</em> ,然后再从版本号中去掉 <em>“.0”</em>
Java 5 新特性
https://johnsonlee.io/2021/05/07/java-5-new-features/
2021-05-07T05:00:00.000Z
2021-05-07T05:00:00.000Z
<p>J2SE 5.0 代号为 <em>Tiger</em> 。这个在 2004 年 9 月 30 日发布的版本原本以 1.5 编号,也就是仍然使用内部版本编号。这个数字辈改变是为了“更好地反映成熟度、稳定性、可扩展性和 J2SE
Java 各版本的新特性
https://johnsonlee.io/2021/05/07/java-new-features/
2021-05-07T00:00:00.000Z
2021-05-07T00:00:00.000Z
<ul>
<li><a href="../java-11-new-features/">Java 11 新特性</a></li>
<li><a href="../java-10-new-features/">Java 10 新特性</a></li>
<li><a
如何编写优雅的代码
https://johnsonlee.io/2021/05/06/how-to-write-elegant-code/
2021-05-06T00:00:00.000Z
2021-05-06T00:00:00.000Z
<p>最近 review
Booster 3.2.0 正式发布
https://johnsonlee.io/2021/05/05/booster-v3-2-0-released/
2021-05-05T22:00:00.000Z
2021-05-05T22:00:00.000Z
<p>等了小半年,终于等到了 <em>AGP</em> <code>4.2</code> 稳定版本发布,<em>Android Studio</em> <code>4.2</code> 也同步发布,详情请戳:<a
感恩有你
https://johnsonlee.io/2021/04/20/grateful-to-you/
2021-04-20T02:00:00.000Z
2021-04-20T02:00:00.000Z
<p>都说每个成功的男人背后都有一个伟大的女人,虽然我算不上什么成功,但勉强还算得上勤奋,在我人生的旅途,因为有她们的鼓励和启发,让我从一个不经世事的男孩成长为一个沉着、自信、有担当的男人,每每忆起过往,总感觉自己是这个世界上最幸运的人,因为她们的存在,让我的生命变得如此绚烂而有
架构师训练营
https://johnsonlee.io/2021/03/30/architecture-training/
2021-03-30T00:00:00.000Z
2021-03-30T00:00:00.000Z
<p>昨天发了一个招聘贴 <a href="https://johnsonlee.io/2021/03/27/build-an-app-monitoring-platform-from-0-to-1/">从 0 到 1 构建移动端监控平台</a>
从 0 到 1 构建移动端监控平台
https://johnsonlee.io/2021/03/27/build-an-app-monitoring-platform-from-0-to-1/
2021-03-27T00:00:00.000Z
2021-03-27T00:00:00.000Z
<p>对于移动端来说,监控平台属于 App
短视频预加载技术(二)
https://johnsonlee.io/2021/03/24/short-video-preloading-2/
2021-03-24T07:00:00.000Z
2021-03-24T07:00:00.000Z
<p> 最近有朋友问道:“森哥,你在面试中是如何考察候选人的架构设计能力的?”,这个问题不太方便回答,在 <a href="/2021/02/10/short-video-preloading-1/">短视频预加载技术(一)</a>
第一桶金
https://johnsonlee.io/2021/03/04/the-first-pot-of-gold/
2021-03-04T00:00:00.000Z
2021-03-04T00:00:00.000Z
<p>以前读着那些名人的成长历程,发现很多商业大佬在上学的时候就赚得了人生的第一桶金,然后一路开挂,走向人生巅峰,但在社会中历练了这么多年,发现赚钱其实并不是一件容易的事情,尤其是像那些大佬,动辙百万、甚至千万,对于像我这样出身平凡的人来说,简直是遥不可及。尽管如此,但我从小就想
重温《故人故事》
https://johnsonlee.io/2021/02/14/old-friends-and-stories/
2021-02-14T00:00:00.000Z
2021-02-14T00:00:00.000Z
<p>翻开旧日的日记,无意间发现了多年前写的一篇文章 —— 《故人故事》,现在读起来仍然朗朗上口、意境尤在,只是早已忘了当年的我是为何写下此篇:</p>
<blockquote>
<p>故人故事</p>
<p>2012-12-11
短视频预加载技术(一)
https://johnsonlee.io/2021/02/10/short-video-preloading-1/
2021-02-10T03:00:00.000Z
2021-02-10T03:00:00.000Z
<p>在用户体验为王的时代,对于短视频 App 来说,视频的「观看次数」(Video View) 是衡量用户体验质量的重要指标之一,从用户体感上,播放越流畅,视频质量越好,推荐越精准,相应的,另一个指标 ——
回顾 2020 年
https://johnsonlee.io/2021/02/06/my-2020-review/
2021-02-06T00:00:00.000Z
2021-02-06T00:00:00.000Z
<p>日子就这样在日复一日的不知不觉中逝去,一转眼,马上就到 2021 年的春节了,回想过去的一年,又给我了原本丰富多彩的人生增添了一笔炫彩。</p>
<p>之前在网上发现了一种可以记多年的日记本,分 3/5/10
玩转家庭私有云
https://johnsonlee.io/2021/01/16/private-cloud-at-home/
2021-01-16T20:30:00.000Z
2021-01-16T20:30:00.000Z
<p>为了不影响孩子的学习,家里的电视基本上只有逢年过节才打开看看,偶尔老婆想追个剧啥的,就只能躲着孩子在电脑上看,可毕竟坐在电脑前追剧不如躺在沙发上看电视,正好元旦假期在家休息,一时心血来潮,捣鼓着在电视上看奈飞,研究了小半天,发现乐视上还真玩不转,于是,只能另寻他法——弄个电
Booster 3.2.0 alpha 发布
https://johnsonlee.io/2020/12/29/booster-v3-2-0-alpha-released/
2020-12-29T21:00:00.000Z
2020-12-29T21:00:00.000Z
<p><em>Booster</em> <code>3.2.0</code> <em>alpha</em> 版本更新内容如下:</p>
<ol>
<li>适配 <em>AGP</em> <code>4.2.0-beta02</code></li>
<li>修复
Booster 3.1.0 正式发布
https://johnsonlee.io/2020/12/16/booster-v3-1-0-released/
2020-12-16T00:00:00.000Z
2020-12-16T00:00:00.000Z
<p><em>Booster</em> <code>3.1.0</code> 版本更新内容如下:</p>
<ol>
<li><a
如何在Fragment之间共享数据?
https://johnsonlee.io/2020/12/05/sharing-data-between-fragments/
2020-12-05T21:00:00.000Z
2020-12-05T21:00:00.000Z
<p>在日常的需求迭代中,我们经常会遇到 <code>Fragment</code> 之间共享数据的需求,比如 <code>Fragment A</code> 的数据需要给 <code>Fragment B</code> ,有什么样的方案可以实现呢?</p>
<h2
移动 APP 的未来
https://johnsonlee.io/2020/12/04/the-future-of-mobile-app/
2020-12-04T00:00:00.000Z
2020-12-04T00:00:00.000Z
<p>前段时间体验了一把在浏览器中使用 <em>Android Studio</em> 开发 <em>Android</em> 应用,感觉到了前所未有的激动,我之所以激动并不是因为 <em>IntelliJ</em>
是什么阻碍了人类的进化
https://johnsonlee.io/2020/12/01/what-blocks-human-evolution/
2020-12-01T20:00:00.000Z
2020-12-01T20:00:00.000Z
<p>这两天,生物学术界炸锅了,困扰了分子(结构)生物学 50 多年的问题被 <em>Google DeepMind</em> 团队在短短数年间给解决了。</p>
<p>自 <em>CASP</em> 成立 20 多年以来,蛋白质结构预测的准确率一直没有超过
Android 应用构建优化指南
https://johnsonlee.io/2020/11/25/android-app-build-optimization-guide/
2020-11-25T00:00:00.000Z
2020-11-25T00:00:00.000Z
<p>大家吐槽 Android 构建慢已经不是一天两天了,尽管都已经换成了最新款的 MBP,打个包依然要等一根烟的时间,不是 RD 小哥偷懒不干活儿,本地打包的时候机器卡得一批,实在是啥也干不了呀。</p>
<h2
Android Studio 在云端
https://johnsonlee.io/2020/11/20/running-android-studio-on-cloud/
2020-11-20T20:00:00.000Z
2020-11-20T20:00:00.000Z
<p>早在 7 年前,云计算刚刚起步,那时候 <em>Docker</em> 还没有流行起来,我们 <em>SAMSUNG</em> 一帮人就开始在捣鼓 <em>Cloud IDE</em> ,当时业界做得最好的是 <a
Booster 3.0 正式发布,支持 AGP 4.1
https://johnsonlee.io/2020/11/09/booster-v3-0-released/
2020-11-09T00:08:00.000Z
2020-11-09T00:08:00.000Z
<p>在 <em>Booster</em> <code>3.0.0</code> 版本中,所有模块和特性已完全支持 <em>Android Gradle Plugin</em> <code>4.1.0</code>,本次更新内容如下:</p>
<ol>
<li><p>支持
这就是 Gradle 所谓的并行构建?
https://johnsonlee.io/2020/11/01/gradle-parallel-build/
2020-11-01T02:00:00.000Z
2020-11-01T02:00:00.000Z
<p>两周前,我就向 <a href="https://github.com/didi/booster">Booster</a> 用户承诺 10 月底会发布 <code>3.0.0</code> ,集成测试在 10 月中旬其实就已经完成了,后来把集成测试框架 <a
坚决反对 DSL
https://johnsonlee.io/2020/10/28/against-dsl/
2020-10-28T23:30:00.000Z
2020-10-28T23:30:00.000Z
<p>最近在撸一个测试 <em>Gradle Plugin</em> 的 <em>Plugin</em> – <a
Gradle OOM 问题
https://johnsonlee.io/2020/10/27/gradle-oom-metaspace/
2020-10-27T00:00:00.000Z
2020-10-27T00:00:00.000Z
<p>最近在准备 <a href="https://github.com/didi/booster">Booster</a> 的 <code>v3.0.0</code> 发布前的测试,为了保证 <a
谁说世界上没有捷径
https://johnsonlee.io/2020/10/13/the-fastest-route-is-not-always-straight/
2020-10-13T00:00:00.000Z
2020-10-13T00:00:00.000Z
<p>“两点之间最快的路径是 ________?”</p>
<ol>
<li>直线</li>
<li>曲线</li>
</ol>
<p>相信很多人看到这个题,凭直觉会选 <em>1. 直线</em> ,因为“两点之间直线最短”,事实果真如此吗?</p>
<h2
兴趣不是最好的老师
https://johnsonlee.io/2020/10/07/interest-is-not-the-best-teacher/
2020-10-07T00:00:00.000Z
2020-10-07T00:00:00.000Z
<p>每当我跟 <em>IT</em> 圈内的朋友说我是生物专业的时候,对方都会大吃一惊,身边的朋友都说我是一个被代码耽误的厨师 😂
Kotlin 编译器架构剖析
https://johnsonlee.io/2020/09/26/kotlin-compiler-architecture-inside/
2020-09-26T00:00:00.000Z
2020-09-26T00:00:00.000Z
<p>周末在家正刷着 <em>GitHub</em> 呢,微信收到一条消息:“森哥,像 <em>ksp</em> , <em>allopen</em> 这些 <em>Kotlin</em> 的编译器插件,它们是怎么 <em>run</em>
如何识别 Kotlin 的 data class
https://johnsonlee.io/2020/09/22/how-to-recognize-kotlin-data-class-in-bytecode/
2020-09-22T00:00:00.000Z
2020-09-22T00:00:00.000Z
<p>最近做字节码相关的朋友求救:“森哥,ASM 怎么才能识别 kotlin 的 data class?”,我想,这是啥需求还要区分 <em>data class</em> 和非 <em>data class</em> ,后来一问,原来是要把工程中所有实现了
架构 Team 往事
https://johnsonlee.io/2020/09/20/memory-of-arch-team/
2020-09-20T02:00:00.000Z
2020-09-20T02:00:00.000Z
<p>昨天晚上正在刷朋友圈,突然就被拉到一个群里,仔细一看,都是以前滴滴的同事,“啥情况?”我问道,扫了一眼成员,除了涛哥,都已经离职了,心想:“不会是涛哥拿了个大 offer
工程师如何成长
https://johnsonlee.io/2020/08/09/engineer-growth/
2020-08-09T02:00:00.000Z
2020-08-09T02:00:00.000Z
<p>以前总有人问我:“森哥,我怎么才能成为像你一样的大牛?”,我一般就一句话“多折腾”搪塞过去,主要是懒得大费口舌,后来想想,这样也不太好,毕竟有些人还是很有诚意,真的渴望自己能够快速成长的,从我个人的经历来看,「多折腾」其实是包含了很多方面:</p>
<ol>
<li>经历不
Booster 2.3.0 正式发布
https://johnsonlee.io/2020/07/20/booster-v2-2-0-released/
2020-07-20T00:00:00.000Z
2020-07-20T00:00:00.000Z
<p>Booster 最近的两个版本主要是以修 bug 为主,所以,未发布正式的 <em>Release Note</em> ,本次发布的 <code>2.3.0</code>
Booster 2.0 正式发布,支持 AGP 4.0
https://johnsonlee.io/2020/06/13/booster-v2-0-0-released/
2020-06-13T00:09:00.000Z
2020-06-13T00:09:00.000Z
<p><em>Andriod Gradle Plugin</em> 从 <code>3.5</code> 开始进行了一系列的重构,一些原来在 <code>3.5</code> 中的实验方案,在 <code>3.6</code>
即将推出 Booster 2.0
https://johnsonlee.io/2020/06/07/booster-v2-0-comming-soon/
2020-06-07T00:00:00.000Z
2020-06-07T00:00:00.000Z
<p>前不久 <em>Android</em> 官方终于正式发布了 <em>Android Gradle Plugin</em> <code>v4.0</code>,在体验了一把 <em>Android Studio 4.0</em>
Booster v1.7.0 发布
https://johnsonlee.io/2020/06/02/booster-v1-7-0-released/
2020-06-02T00:00:00.000Z
2020-06-02T00:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v1.7.0,本次更新内容如下:</p>
<ol>
<li>修复 <a href="https://github.com/didi/booster/tree/master/booster-cha">booster-cha</a>
Java 类型系统的 BUG
https://johnsonlee.io/2020/05/12/a-bug-of-java-type-system/
2020-05-12T00:00:00.000Z
2020-05-12T00:00:00.000Z
<p>最近看到一道比较有意思的 <em>Java</em> 面试题,在这里给大家分享一下,题目如下:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span
Booster v1.6.0 发布
https://johnsonlee.io/2020/04/18/booster-v1-6-0-released/
2020-04-18T00:00:00.000Z
2020-04-18T00:00:00.000Z
<p>Booster 又双叒叕发布了新的版本—— v1.6.0,本次更新内容如下:</p>
<ol>
<li>修复 <em>ScheduledThreadPoolExecutor</em> 的优化问题 <a
Java 8 Lambda 之殇
https://johnsonlee.io/2020/04/15/the-pain-of-java-8-lambda/
2020-04-15T01:00:00.000Z
2020-04-15T01:00:00.000Z
<p>前段时间为 <a href="https://github.com/didi/booster/blob/master/booster-task-analyser">booster-task-analyser</a> 做性能优化,不禁开始怀念 <em>Java</em>