2022年12月
基于数组的链表实现
前言
链表是一种由“节点”组成的数据结构,每个节点都储存着指向下一个节点的指针。通常来讲,指针都是存储的物理地址,因此在无法获取物理地址的语言里无法实现(比如BASIC);不过,其实也有别的方法在这些语言里实现指针的功能——即使用数组,以对象在数组内的索引作为指针的值。
双杯取水问题解析
引言
今天面试,面试官问了一道经典的问题:
一个5L的杯子和一个3L的杯子,水无限,如何得到4L水?
这个问题非常经典,经典到我下意识就能回忆起解法:
- 将5L杯子装满水,然后倒满3L的杯子,此时5L杯子里有2L水
- 将3L杯子清空
- 将5L被子里剩余的2L水导倒入3L杯子中
- 5L杯子取水,倒入3L杯,此时5L杯中就有4L水了
关于 cglib 实现的研究
cglib 是 Spring 框架默认使用的动态代理库,其主要工作原理是使用 ASM 技术在运行现场制造出被代理对象的子类,并以子类的对象替换被代理对象。其与 Java 的动态的主要不同是其不受代理接口的限制,但是无法代理 final 类。
关于 Kotlin 可见性修饰的一些研究
bennyhuo 在新一集视频中谈到了 Kotlin 与 Java 的可见性修饰问题,这个问题不仅影响程序设计,有些细节也会影响反射最终落地的实现。我曾经参与过一个 Minecraft 模组 LightLand 的开发工作,其中用到了一个使用 ASM 技术实现高性能反射的库 reflectasm。