• 小技巧与阅读感悟


    位运算符的技巧使用

    • 来源于一段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   
    }  
    
  • 相关阅读:
    利用同步辅助类CountDownLatch计算多线程的运行时间
    i++的原子性问题
    Volatile关键字以及线程的内存可见性问题
    创建线程的第三种方式以及简单使用
    java8新特性-lambda表达式和stream API的简单使用
    springboot整合activemq
    springboot整合redis单机及集群
    JAVA-基础(一)
    CentOS-文件操作
    理解AngularJS的作用域Scope
  • 原文地址:https://www.cnblogs.com/invoker-/p/7607598.html
Copyright © 2020-2023  润新知