zoukankan      html  css  js  c++  java
  • 小技巧与阅读感悟

    位运算符的技巧使用

    • 来源于一段20行的贪吃蛇代码,使用 ~~去除了小数部分,~是取反,两次 ~~ 就是取回原来,但是~的前提是只对整数有效果,所以利用这个特性去除掉了小数
    • 来源于leetcode中singleNumber , 在一堆 偶数 数字中找到奇数次数的数字 两次 ^^ 异或操作就可以达到效果 原因是 A^A = 0 所以所有偶数个数的元素都被消去了,最后剩下的数字就是奇数次数的数字
    • 来源于阅读,在进行奇偶数判断的时候,使用与运算判断最后一位即可判断奇偶数,例如 a & 1 == 0 ,判断是否是偶数,同样 a & 1 ==1,判断是否是奇数。
    • 来源于java HashMap的hash计算源码,进行(2^n)的数的取模运算时,例如 a % b ,其中(b = 2^n),此时可以使用 a & (b - 1),同样对于(2^n)的乘法或者除法运算,使用<<>>移位进行操作
    • 承接上一条,注意在java中 % 代表取余 , 想要使用模运算,可以调用Math.floorMod 方法,直译是地板取余,意思就是一直往下取,也就是说商是偏向于负无穷的。
    • 承接上一条,对于取余和取模的区别,取余数的商在近似的时候是偏向于0的,例如 9 / -4 =商为 -2.25,取余的话会把商往0这个方向舍,因此是-2,那么余数就是 9 - (-4)*(-2) = 1,对于取模来说,会将商往无穷小的方向舍,因此是-3,那么余数就是9 - (-4)*(-3) = 3
    • 使用取反运算符拿到相反数, ~x + 1 即可
    • 使用异或运算进行swap操作,无需使用中间变量,仅限数值型
    void swap(int a,int b){
    a ^= b; // a = a ^ b
    b ^= a; // b = b ^ a ^ b = a
    a ^= b; // a = a ^ b ^ a = b
    }
    
    
    • 位运算用于乘法和除法效果十分明显,所以不要涉及到加减的时候不要一味的使用,得不偿失,并且使用位运算的时候最好加上一行注释,免得浪费他人时间

    关于重构

    • 来源于忘记了在哪看见的了,不要瞎鸡儿重构,要先分析代码影响性能的比例,如果一段10%的代码影响了90%的系统性能,那你花再长时间去优化那剩下的90% 的代码都是浪费时间
    • 来源于上一条 , 合理的使用枚举类去代替那些状态值的判断,比如返回给前端的状态码,用枚举就很适合
    public enum HttpResponseCodes {  
        OK(200),  
        FORBIDDEN(403),  
        NOT_FOUND(404);  
        private final int code;   
        HttpResponseCodes(int code) {  
            this.code = code;  
        }  
        public int getCode() {  
            return code;  
        }  
        public boolean isSuccess() {  
            return code >= 200 && code < 300;  
        }  
    }  
    if (getHttpResponse().getStatusCode().isSuccess()) {  
        // Do something if the response code is a success code   
    }  
    
  • 相关阅读:
    redis远程连接超时
    GNU LIBC源代码学习之strcmp
    计算最小生成树
    域名和空间的绑定问题
    Spring MVC 基于Method的映射规则(注解版)
    Spring MVC 基于URL的映射规则(注解版)
    手把手教你编写Logstash插件
    Ruby中如何识别13位的时间戳
    [logstash-input-http] 插件使用详解
    Java直接(堆外)内存使用详解
  • 原文地址:https://www.cnblogs.com/invoker-/p/7607598.html
Copyright © 2011-2022 走看看