1. Algorithm

颠倒二进制位(简单)

描述:

颠倒给定的 32 位无符号整数的二进制位。

示例:
输入: 00000010100101000001111010011100
输出: 00111001011110000010100101000000
解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
思路:
  • 逐位颠倒:从右向左遍历二进制串,用 n&1 取得最右一位,然后左移该值到对应位置,和结果值求和,退出条件是 n == 0。
class Sulution {
    // you need treat n as an unsigned value
    public int reverseBits(int n) {
        int ret = 0;
        for (int bitsSize = 31; n != 0; bitsSize--) {
            ret += (n & 1) << bitsSize;
            n = n >>> 1;
        }
        return ret;
    }
}
分析:
  • 时间复杂度:O(1)
  • 空间复杂度:O(1)

2. Review

The code I’m still ashamed of 至今令我惭愧的代码

作者回忆了刚开始工作时为医药公司做网站,先让用户做测验然后推荐药物,目标是年轻女性。在庆功聚会前,作者看到一条新闻,一名服用药物的女子自杀了,由药物的副作用导致。回家后发现自己的妹妹也在用这种药,作者马上就制止了她。不久后作者便离职了,自此每次写代码前都要三思代码带来的影响。

作为开发人员,我们通常是防范潜在危险和不道德行为的最后一道防线。

3. Tip

最近重构了部分项目代码,对此有些感悟。在重构的过程中,对业务会有更深的理解,编程就是把现实世界抽象成代码结构。同时看到以前代码的糟糕之处,毫不犹豫地删掉重写,目的就是提升可读性、可用性和可维护性。

《重构,改善既有代码的设计》这本书值得每位程序员阅读。任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类可以理解的代码,才是优秀的程序员。

4. Share

最近在看极客时间上《许式伟的架构课》,讲到操作系统很棒,特地分享出来。 操作系统进场

精华部分:

从客户需求来说,操作系统的核心价值在于:

  • 实现软件治理,让多个软件和谐共处;

  • 提供基础的编程接口,降低软件开发难度。

从商业价值来说,操作系统是刚性需求,核心的流量入口,兵家必争之地。所以,围绕它的核心能力,操作系统必然会不断演化出新的形态。早期预装软件是一种流量变现的方式。后来苹果引入了 “账号 - 支付 - 应用市场” 商业闭环的收税模式。