• JRuby?

  • 拼写检查的四种实现 at March 07, 2019

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

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

  • 拼写检查的四种实现 at March 06, 2019

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

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

  • 拼写检查的四种实现 at March 06, 2019

    不理解不恰当的地方, 这个是对拼写检查这个问题,提出了四种解决方案,然后并做比较,在实际应用中,也会在 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 January 21, 2019
  • Rails 6.0.0 beta1 发布 at January 19, 2019

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

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

  • Clojure 是这种

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

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

    Erlang 的话是,

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

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

  • 从上帝视角看微服务 at January 02, 2019

    👍

  • 从上帝视角看微服务 at December 29, 2018

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

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

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

  • 从上帝视角看微服务 at December 25, 2018

    感谢回复 👍 👏

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

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

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

  • 从上帝视角看微服务 at December 25, 2018

    感谢回复 👍 👏

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

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

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

  • 拼写检查的四种实现 at December 25, 2018

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

    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 December 24, 2018

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

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

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

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

  • 拼写检查的四种实现 at December 24, 2018

    被发现了…

  • 拼写检查的四种实现 at December 23, 2018

    我看错人了…不好意思…

  • 拼写检查的四种实现 at December 23, 2018

    嗯,都是类似的问题。bloom filter 还有一个经典的应用是过滤弱密码。bloom filter 可以把很多的数据都“存”在内心里,查起来快,redis 就 bloom filter 的插件。

  • 拼写检查的四种实现 at December 23, 2018

    不是问 B+ 树是什么,问是问怎么做拼写检查。

  • 拼写检查的四种实现 at December 23, 2018

    B+ 树要怎么用?

  • 从上帝视角看微服务 at December 22, 2018

    可不可以这么理解?减熵是目的,微服务是手段?

  • 拼写检查的四种实现 at December 22, 2018

    Trie

  • Ruby 2.6.0-rc1 已发布 at December 20, 2018

    看这个 slides Guild Prototype - RubyKaigi 2018,Guild 的性能似乎没有想象中好。。。感觉到 prod ready 还要一段时间。。。

  • 从上帝视角看微服务 at December 20, 2018

    最重要的还是 清晰划分各个模块的职责,划分不好,一样是一团粥。 比如会有这种注释出现,由于 A 系统做了 xxx,所以在 B 系统,我要这么 xxx。。。

    如果微服务做的不完善的话(有的公司没有那么多人力来做),同样会有 A 服务拖垮了 B 服务的情况。。。

  • 这个是怎么测试的?Stack Overflow 没看到相应的信息啊。

  • actioncale 有服务器发起的 ping,把这个调小了应该就可以了。