HashCode 与 Equals 小坑
同事问了一句:「HashMap 的 hashCode 为什么是 0?」
我猜是空 map。果然,他用的就是一个空的 HashMap。于是顺带想到经典面试题 hashCode / equals,以及 Kotlin 的 data class 在这上面容易踩的坑,整理一下。
同事问了一句:「HashMap 的 hashCode 为什么是 0?」
我猜是空 map。果然,他用的就是一个空的 HashMap。于是顺带想到经典面试题 hashCode / equals,以及 Kotlin 的 data class 在这上面容易踩的坑,整理一下。
iOS 打包机升级到 Xcode 26 后,KMP(Kotlin Multiplatform)相关工程开始出现编译错误,例如头文件 not found、unresolved classifier 等。
记录一个简单的 Bump Pointer 分配器 实现。
作者在仓库里还带了一个回收算法:压缩清理 + 一定的大小限制,逻辑比较直观。
为了尽量加快分配,用了 slot 结构:取内存数据是 O(1),整体分配最坏是 O(MAX_SLOT),整体效率不错。
刚入职时在 KMP(Kotlin Multiplatform)上搞了半年多,LLVM、KSP、KCP、Kotlin IR/FIR、iOS Framework、为热修还学了点 OC,收获不少。
对朋友我一般是问什么说什么。
以前遇到过两个同事,风格很像:会问我一些敏感或技术核心的问题,我基本都说了;反过来我问他们,几乎得不到什么有用信息。从那以后我开始对别人有所保留(虽然也没保留多少),无关紧要的事倒无所谓。
最近在搞 KMP(Kotlin Multiplatform),框架思路不错,一码多端,但路漫漫:体验有点像用 Kotlin 写 C,提效工具和文档都偏少,得自己啃(国内大厂:研究 + 魔改 = 自研 = 世界领先)。
在做 KMP 工程化时,官方不支持 OHOS,对应的 Android Studio 插件也不会自动带 OHOS 目录(例如新建 module 时)。Kuikly 提供了 project 模板,但没有 New Module 模板,所以需要自己研究「在 AS 里增加一种 Module Type」的插件开发。
腾讯 Kuikly 开源了支持鸿蒙的 Kotlin 编译器,符号导出、字符串优化和鸿蒙 NDK 适配等很有参考价值。我们当时因 Kotlin 2.0.21 的 LLVM 限制用的是 OHOS 3.x SDK,native binding 基于 3.x 头文件生成,新版本能力用不上。借鉴 Kuikly 后想改用 Clang/LLVM 12,sysroot、链接目录等改用 OHOS 5.x SDK,以用到新能力。
本文记录如何在适配鸿蒙的 Kotlin/Native(基于 Kotlin 2.0.21)上开启 ASAN(Address Sanitizer)。
ASAN 是面向 C/C++ 的内存错误检测工具,运行时能发现例如:
Kotlin/Native 适配鸿蒙,除了改编译器,还有一块很重要:NAPI 桥接代码的自动生成。
Kotlin/Native 和 NAPI 的关系:
先看一个最简例子:K/N 里有个 hello_world(),要在 ArkTS 里调用,就要在 C++ 里注册 NAPI: