ARTS-WEEK-017
Algorithm:
200: Number of Islands
547: Friend Circles
都可以使用 Flood Fill 算法,其中 DFS 最为直观,注意其中 visited 可以用布尔数组提高性能,此外 BFS 和 UnionFind 也可以,尤其是第二题使用 UnionFind 非常简洁,路径压缩优化很有效。第一题中还有二维坐标转化为一维坐标、使用方向数组简化方向操作(八向时更有意义)的细节。
Review:
Building Airbnb’s Internationalization Platform
来自 Airbnb 技术博客的一篇文章,分享了国际化(I18n)平台的架构和系统设计。在架构层面清晰地分离出内容管理系统、翻译流水线、翻译交付三个大的阶段,具体包括 CMS 系统、内容存储、翻译供应商、回调服务、Event Bus、翻译管理服务、快照存储、I18n Agent、I18n Client等部分。亮点包括翻译单元设计支持快照,并基于时间点位在客户端本地缓存翻译结果,客户端独立 Agent 以生产消费模型的方式再次进行解耦,最终使客户端最高以最高性能获得翻译结果(缓存命中),并且对服务端更加友好。
Tip:
为什么64位JVM最好不要超过32G堆空间?
答案是因为性能考虑,大于32G反而会造成性能衰减,除非有大于50G堆内存需求。具体是因为64位虚拟机比32位虚拟机指针(ordinary object pointer)大了一倍,达到64位,这会带来内存占用与GC开销、影响CPU缓存命中率等问题,因此从 JDK6u23 开始默认开启了指针压缩技术 - CompressedOops,还是使用 32位长度存储指针,但是以8字节为最小单位间隔寻址,即原指针 0、1、2 在寻址时会左移3位变成 0、8、16,等同于 35位 32G 空间。
Share:
T61 倾听你内心的蜥蜴 - The Progmatic Programmer
本能和直觉让人感觉到并采取行动,但容易缺少思考,在下次出现时请注意它们,停止正在做的事,给自己一些时间和空间,比如把问题外化,画到纸上或向别人解释和讨论(橡皮鸭也行),如果还是没有解脱,可以开始以原型的方式进行下去,像游戏一样进行随便尝试并告诉自己这是可以放弃原型而已,反复这个过程一定可以找到顺利发展的感觉。这不仅适用于开始新的项目、模块等编码过程,也适用于阅读别人代码(把疑问和感觉记下来)、面对任何新的挑战等情况。