双杯取水问题解析
引言
今天面试,面试官问了一道经典的问题:
一个5L的杯子和一个3L的杯子,水无限,如何得到4L水?
这个问题非常经典,经典到我下意识就能回忆起解法:
- 将5L杯子装满水,然后倒满3L的杯子,此时5L杯子里有2L水
- 将3L杯子清空
- 将5L被子里剩余的2L水导倒入3L杯子中
- 5L杯子取水,倒入3L杯,此时5L杯中就有4L水了
今天面试,面试官问了一道经典的问题:
一个5L的杯子和一个3L的杯子,水无限,如何得到4L水?
这个问题非常经典,经典到我下意识就能回忆起解法:
cglib 是 Spring 框架默认使用的动态代理库,其主要工作原理是使用 ASM 技术在运行现场制造出被代理对象的子类,并以子类的对象替换被代理对象。其与 Java 的动态的主要不同是其不受代理接口的限制,但是无法代理 final 类。
bennyhuo 在新一集视频中谈到了 Kotlin 与 Java 的可见性修饰问题,这个问题不仅影响程序设计,有些细节也会影响反射最终落地的实现。我曾经参与过一个 Minecraft 模组 LightLand 的开发工作,其中用到了一个使用 ASM 技术实现高性能反射的库 reflectasm。
ts-socket 是我在大三时期做的一个研究向的产品,它的主要功能是利用Kotlin的协程技术与Java的NIO技术,为用户提供写法类似传统 Socket 的同步语法的异步读写。
本文源码可查看 https://github.com/tursom/GoCollections/tree/master/lang/atomic
GO 在1.18终于添加了泛型。有了泛型,我们对一些泛用接口就有了更好的约束手段,合理使用泛型可以更好的复用代码。而本文则是在泛型技术的基础上对GO的原子操作简化的尝试。