• 那个 gem 还真没了解过 😅

  • 进程调度问题

    给每个用户 100 个额度,用完了再分配。

    第一个和第二个问题 假设 A 算 1000 个单位,就先让他算 100 个,算完了再分给他 100。这个时候,B 进来了,B 插入 100 个任务,B 就会先算完。

    第三个问题 加优先级就可以,爸爸们都放到爸爸队列里,爸爸们有任务,就先算爸爸的。还可以,如果是爸爸,就分配 200 个单位。

    还可以从需求上解决,比如算完 1 个就给反馈什么的。

  • 但说身体这一条,我有一个朋友在大学当老师,一周几节课,身体也不好。。。因为管不住吃、喝,还不运动。

    如果仅仅是身体的话,早睡加上运动,会好很多(不过做到这些也挺难的)。

  • 配置文件有可能热更新么 at 2019年03月16日

    ror 应该是把配置读到某个对象里(ruby 几乎啥都是对象),更新配置,在 reload 这个对象应该就可以了。

    如果有很多服务,有需要有统一的配置,比如 reids、mysql,就用配置中心。觉得配置中心麻烦,可以放到 reids 里。

    关键是内存里的要 refresh,还不如重新部署一次…

  • JRuby?

  • 拼写检查的四种实现 at 2019年03月07日

    你是想说,纯粹从算法比较的角度来讲,这两个算法有本质的区别,所以不能直接比较?

    这篇文章是从具体问题出发,提出解决方案,并做比较。算法是为解决实际问题而存在的。

  • 拼写检查的四种实现 at 2019年03月06日

    我想了一下,还是说出我的想法吧。

    数据结构是靠约束来定义的,如果约束不满足,就不能叫这个数据结构了。就好比偶数,能被 2 整除的数,是偶数。如果不能被 2 整除,就不是偶数。

  • 拼写检查的四种实现 at 2019年03月06日

    不理解不恰当的地方, 这个是对拼写检查这个问题,提出了四种解决方案,然后并做比较,在实际应用中,也会在 bit map 和 bloom filter 之间做选择。 bloom filter 在拼写检查中,如果出现 false positive,结果就是一个错误(没在字典里)的拼写,认为是正确的,这个在拼写检查里,一般是可以接受的。

  • 就想 #9 说的那样,用一个 job 轮询查有哪些商品到期了,这样有一个 job 做检查就可以了。时间间隔看需求来定。可能要看下对列怎么处理 repeat job 的,假设时间间隔是 200 毫秒。第一个 200 毫秒到了,处理时间,但花了 200 毫秒,还没处理完,那这个时候,是同时做处理,还是说等第一个处理完,然后再做第二个。如果是处理完第一个,再处理第二个,假设第一个花了 405 毫秒,那是马上做第二个处理,还是说,要等第 600 毫秒才处理(这样的话就有延迟,js repeat 是这么处理的)。

    应该有两类 job,一类 job 做检查到期,一类 job 做后续操作,至少要用两个独立的 job queue,两者不能相互影响(第二类 job 跑满 cpu 的时候,第一类 job 要能正常工作),优先级应该能解决,但最好还是测一下。

  • midori 性能会提升不少吧?

  • 有,不多。广州游戏公司用的比较多。有些 im 也是用 erlang,比如去哪的 im,比如我们。

  • 关于使用 Postgres 的疑问 at 2019年01月21日
  • Rails 6.0.0 beta1 发布 at 2019年01月19日

    刚好有个项目要连多个数据库。

  • 然后 lisp 粉各种瞧不起大 JavaScript

  • Clojure 是这种

    m = {}
    m = (assoc m {:a => 1})
    

    写起来容易,状态变化不那么清晰。

    Erlang 的话是,

    M = {}
    M2 = maps:update(a, 1, M)
    

    写起来麻烦,但状态辩护会更清晰。

  • 从上帝视角看微服务 at 2019年01月02日

    👍

  • 从上帝视角看微服务 at 2018年12月29日

    我们有一段时间要搞 grpc,然后 grpc 死活搭不起来。我跟同事说,为什么非要等到 grpc?为什么不先切分服务?调用用什么不可以?grpc 好了,换一下就可以了。但就是说不通。

    我一直觉得一个模块,对外提供服务、屏蔽实现细节,就可以了。至于是否是微服务只是表现形式罢了。

  • 电子版据说要等一段时间。

  • 从上帝视角看微服务 at 2018年12月25日

    感谢回复 👍 👏

    还好很多厂子喜欢重复造轮子 😄 ,而且同样的东西,大家理解程度不一样,结果也会不一样。

    我明白微服务是很好的东西,解决了很多问题。但实践起来又有很多无奈。。。

    我们最近刚好有个市场运营需求,用消息队列解了耦。但由于部署环境网络不连通,只好用 http 再把消息传出去。。。然后 rpc 又没时间搭。。。不过消息队列还是有必要的,市场想法多,如果让他们的需求一直入侵主代码,会越来越难维护。而且市场的需求挂掉话也不应该影响主项目。

  • 从上帝视角看微服务 at 2018年12月25日

    感谢回复 👍 👏

    还好很多场子都喜欢重复造轮子 😄 ,而且同样的东西,大家理解程度不一样,结果也会不一样。

    我明白微服务是很好的东西,解决了很多问题。但实践起来又有很多无奈。。。

    我们最近刚好有个市场运营需求,用消息队列解了耦。但由于部署环境网络不连通,只好用 http 再把消息传出去。。。然后 rpc 又没时间搭。。。不过消息队列还是有必要的,市场想法多,如果让他们的需求一直入侵主代码,会越来越难维护。而且市场的需求挂掉话也不应该影响主项目。

  • 拼写检查的四种实现 at 2018年12月25日

    这篇文章写的不怎么样(好吧,我偷懒了,没有再改改。。。

    Hash 是准确的,准确的代价就是需要更多的存储空间。存储空间的代价有两个,一个是存储空间本身,一个是要分几次才能拿到内存里。

    BloomFilter 是一个不准的 hash table。

    比如输入一个 key,经过 hash function,得到一个 index,将 arr 的 index 设置为 1,既 arr[index] = 1

    查找的时候,将输入通过 hash function 转化为数组的 index,如果 arr[indexe] 存在,就认为这个值插过了。

    hash function 有一定的冲突的概率,比如 "abc" 和 "ccc" 通过 hash function 的到的 index 可能是一样的,就会误判。

    伟大的计算机先哲,尼古拉斯赵四曾经说过,如果一次 hash 解决不了,就 hash 两次,所以 BloomFilter 一般会用多个 hash function。

  • 拼写检查的四种实现 at 2018年12月24日

    我没想到 B 树要怎么做拼写检查。。。

    B 树和 Trie 不一样的地方是,Trie 没有深度约束,B 树有。用 B 树的话,就要把 com(组件对象模型),cool,computer 都存到叶子上。。。

    B 树还有一个 order 的约束,在单词上,order 只能为 26,那就是 13 到 26,空间也会有大量的浪费。

    像 com(组件对象模型),computer 这种,在 B 树似乎要村两次?

  • 拼写检查的四种实现 at 2018年12月24日

    被发现了…