蛋卷的 2019 年度总结
2019 年对于蛋卷来说,是一个重要的人生转折点。在过去的这一年中,我开启了全新的生活方式。告别了父母的管束,可以和 Grace 一起支配属于我们自己的时间。由于有了时间支配上的自由,我在人生的不同方面都有了新的发展。
2019 年对于蛋卷来说,是一个重要的人生转折点。在过去的这一年中,我开启了全新的生活方式。告别了父母的管束,可以和 Grace 一起支配属于我们自己的时间。由于有了时间支配上的自由,我在人生的不同方面都有了新的发展。
- 原文地址:A bird’s eye view of Go
- 原文作者:Axel Wagner
- 译文出自:掘金翻译计划
- 本文永久链接:https://github.com/xitu/gold-miner/blob/master/TODO1/birdseye-go.md
- 译者:JackEggie
- 校对者:40m41h42t, JalanJiang
本文摘要:本文非常笼统地总结了 Go 语言的定义、生态系统和实现方式,也尽力给出了与不同的需求所对应的参考文档,详情参见本文末尾。
每当我们说起“Go 语言”的时候,可能会因为场景的不同聊到很多完全不同的东西。因此,我尝试着对 Go 语言和其生态系统做一个概述,并在各部分内容中都列出相关的文档(这可能有点像是大杂烩,其中还包含了我最近实际遇到的许多问题)。让我们开始吧:
可通过 Integer.MAX_VALUE 和 Integer.MIN_VALUE 查看 int 类型的最大和最小值,分别为 0x7fffffff(2^31-1) 和 0x80000000(2^31),其中 0 即为 0,正数的最高位为 0,负数的最高位为 1。
Java 中负数的表示方式为正数的补码(例:原码 00,反码 11,补码 00,补码的计算方式为反码加一,此处丢弃溢出位)。采用这种方式的原因是 0 的交叉(zero crossing)问题,即 0 和 -0 需要用同一种方式表示,见补码计算例子。如果采用反码表示负数的话,0 就会有两种表示:所有位全为 0、所有位全为 1。
因此 Java 中 0 的所有位全为 0,1 为 0000…0001,-1 的所有位全为 1,Integer.MAX_VALUE 为 0111…1111,Integer.MIN_VALUE 为 1000…0000。
在精彩的编程世界里,你可能听说过这种名为 Rust 的新语言。它是一种开源的系统级编程语言。它专注于性能、内存安全和并行性。你可以像 C/C++ 那样用它编写底层应用程序。
你可能已经在 Web Assembly 网站上见到过它了。Rust 能够编译 WASM 应用程序,你可以在 Web Assembly FAQ 上找到很多例子。它也被认为是 servo 的基石,servo 是一个在 Firefox 中实现的高性能浏览器引擎。
这可能会让你望而却步,但这不是我们要在这里讨论的内容。我们将介绍如何使用它构建命令行工具,而你可能会从中发现很多有意思的东西。
不知道从什么时候开始,双重锁检机制开始在 Java 程序员中流传开来,并被一些不成熟的程序员所称道。然而,双重锁检机制无论在 Java 的什么年代,都是一个不折不扣的代码陷阱。
1 | // double-checked-locking - don't do this! |
这段代码粗看上去使用了很“神奇”的 Java 多线程技巧,“巧妙”利用重复地两次检查对象是否为空来避免了大部分情况下 synchronized 关键字的性能消耗。