• 可以用 bitset 来确保唯一,不过的足够稀疏才有效率😂

  • 理论上不存在 100% 不可破解的方法。但只要设计一个方法使其破解成本远远高于破解收益便可认为不会被破解。第三种方法就是正途,对请求数据进行签名,主要在加密方法和密钥上面下功夫增加破解难度。时间戳这个,叫重放攻击,减少时间间隔可以增加攻击难度,也可以使用序号防止重复请求。不过也不存在 100% 安全的情况。

  • 具体问题具体分析,主要考虑的因素是这样做让逻辑更清晰了吗?要抵抗减少代码量的诱惑。SOLID 的单一职责原则对方法的设计也是有参考意义的。

  • Linux、Ruby 不冷没天理! at 2018年02月02日

    这种帖子不应该有人回复,建议就此锁帖。

  • arch xfce 😹

  • 何出此问呢?看了下 trends,ruby emacsemacs 的热度都在缓慢下降😥

  • n = 1000
    n<5?0:(1..Math.log(n,5)).to_a.map{|i| n / 5 ** i}.inject(:+)
    
  • 以前在 Cygwin 上用 Ruby 做的很欢,后来某次升级后,nokogiri 编译 libxml2 和 libxslt 死活过不了,遂放弃。 用 Vagrant 跑个虚拟机还是不错的。

  • @pathbox 哈哈,写过 Java 的同学可能都上过这么一课:不要在循环中用+链接字符串,要在循环中链接字符串应该使用StringBuilderStringBuffer。 原因就是 String 是 immutable 对象,每次修改操作会创建一个 String 对象。

    在 Ruby 中试验了一下,发现 =#{} 这操作也是会创建新对象。

    csv = ''
    csv.object_id  # 12888796780
    3.times{csv = "#{csv} Hello"; puts csv.object_id}
    # 12888886920
    # 12888886840
    # 12888886780
    

    所以 OP 说

    csv 这个字符串变量太大了(达到 1M),再往 csv 的末尾追加内容会比较吃力

    只说对了一半,还有一个原因是循环到后面,每次循环都要创建一个 1M 多的字符串然后再往追加内容这样才慢(在 String 末尾追加应该是 O(1) )。如果这时看一下内存占用应该很可观,想必上 G 没问题。

    不过 Ruby 的 String 还有在原 String 对象上连接的方法,就是 << 。所以 OP 的代码还能这样写

    csv = ''
    @customers.each do |customer|
      csv << "#{customer.id},#{.......}\n"
    end
    return csv[0..-2]
    

    对 Ruby 不熟,这只是我想当然而已,别打脸。

iOS Android 双修初心魔法师