• ARTS第五周打卡


    1.Algorithm

      给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    示例 1:
        输入: 123
        输出: 321
    示例 2:
        输入: -123
        输出: -321
    示例 3:
        输入: 120
        输出: 21
    public int reverse(int x) {
            int rev = 0;
            while (x != 0) {
                int pop = x % 10;
                x /= 10;
                if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
                if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
                rev = rev * 10 + pop;
            }
            return rev;
        }
    
    

       重复“弹出” xx 的最后一位数字,并将它“推入”到 rev 的后面。最后,rev 将与 xx 相反

       在没有辅助堆栈 / 数组的帮助下 “弹出” 和 “推入” 数字,我们可以使用数学方法 

    //pop operation:
    pop = x % 10;
    x /= 10;
    
    //push operation:
    temp = rev * 10 + pop;
    rev = temp;
    

    这种方法很危险,因为当temp=rev10+pop 时会导致溢出。

    幸运的是,事先检查这个语句是否会导致溢出很容易。

    2.Review

      https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/

      主要介绍了重构和重写,重写代码有着不可预知的风险 ,重构老代码减少风险,老代码已经历经时间来磨合bug该出现的问题大部分出现,在重构老代码的同时能够提高自己对知识的学习。

    3.Tips

      ps + lsof 帮我找出 redis 的快照文件。 有一台服务器中运行着一个 redis 服务。我想找到其快照文件。 dump.rdb 来研究一下。 但是我并不知道其目录,搜索了对应操作系统的常规目录中并没有。因为发现 redis 是原来的系统管理员自己编译安装的。如果我尝试自己找到它。 1)查看 redis.conf 中 dump.rdb 的目录并没有特别配置,也就是在应用运行的当前目录。所以可以先找出对应进程的当前目录,然后查找 。 2)lsof 可以列出对应进程所打开的所有文件。所以有可能有 dump.rdb

      1.ps -A |grep redis 得到如下输出. > 45000 ? 10-09:36:27 redis-server > 其实其进程 ID 是 45000, 进程名是 redis-server

      2.lsof -p 45000 > rf.log 打开文件并没有找到 dump.rdb 的影子,不过有进程的当前目录的信息。

    COMMAND     PID USER   FD      TYPE     DEVICE  SIZE/OFF    NODE NAME
    redis-ser 45000 root  cwd       DIR      202,2      4096 1058338 /root/path/redis-3.0.4
    

    然后果然在 /root/path/redis-3.0.4 下找到了对应的 dump.rdb 文件 

      

    4.Share

      不可变对象

      https://www.cnblogs.com/dolphin0520/p/10693891.html  

      一.什么是不可变对象

        不可变对象(Immutable Object):对象一旦被创建后,对象所有的状态及属性在其生命周期内不会发生任何变化。

      二.深入理解不可变性

        再多线程操作的时候,可变对象会带来数据的安全性,用list set 存储可变对象时,会发生数据的不安全。

      三.如何创建不可变对象

        1)所有成员变量必须是private

        2)最好同时用final修饰(非必须)

        3)不提供能够修改原有对象状态的方法

          最常见的方式是不提供setter方法

          如果提供修改方法,需要新创建一个对象,并在新创建的对象上进行修改

        4)通过构造器初始化所有成员变量,引用类型的成员变量必须进行深拷贝(deep copy)

        5)getter方法不能对外泄露this引用以及成员变量的引用

        6)最好不允许类被继承(非必须)

      四.不可变对象真的"完全不可改变"吗?

        可以通过反射来进行改变

  • 相关阅读:
    从.Net到Java学习第十篇——Spring Boot文件上传和下载
    Access denied for user 'root'@'localhost' (using password:YES) Mysql5.7
    从.Net到Java学习第八篇——SpringBoot实现session共享和国际化
    从.Net到Java学习第九篇——SpringBoot下Thymeleaf
    从.Net到Java学习第七篇——SpringBoot Redis 缓存穿透
    从.Net到Java学习第六篇——SpringBoot+mongodb&Thymeleaf&模型验证
    从.Net到Java学习第五篇——Spring Boot &&Profile &&Swagger2
    从.Net到Java学习第四篇——spring boot+redis
    从.Net到Java学习第三篇——spring boot+mybatis+mysql
    从.Net到Java学习第一篇——开篇
  • 原文地址:https://www.cnblogs.com/panda777/p/10735375.html
Copyright © 2020-2023  润新知