• 怎么批量生产测试数据 at 2013年08月27日

    后一个问题是可以解决的,保存文件选择正确的编码方式即可

  • Great!

  • 我一般推荐 c++ 程序员学习 python

  • #17 楼 @hooopo 支持一下小王子,刚毕业的时候常看的两本书之一(另一本是《悟空传》)

  • 应该怎样学习 Ruby? at 2013年08月26日

    #7 楼 @coepy ruby 的很多“符号”都是衍生物,其实语法关键字就三十几个,和 python 相当(java 有 50 个)

  • 《明天的科学》——启蒙吧,儿时对科学的向往大概由此引发 《讲故事学作文》——懂得了言为心声,看过这本书以后可以有效的抵制各种“作文选” 其实还有很多,上述对童年影响很大......

  • #32 楼 @mobiwolf 云计算需要高投入,在公司就看上层的支持力度,所以关键是支持这件事的人有多高 level

  • 楼主是百度的?我觉得做一个 PAAS 很不错。

    另外,我和 #12 楼 @blacktulip 类似,也对百度有很多个人的抵触情绪,不过,这几年也接触了一些来自百度的技术人,倒是感觉到百度至少在技术这个领域还是很不错的。

  • #12 楼 @ruohanc 呵呵,这个例子算不算“手里一把锤子,看哪都像钉子”?

  • #26 楼 @zw963 恩,看了大家的说法,我现在还是尽量用访问器来操作,避免用@变量,like this

    self.x = blablabla
    dosomething x
    
  • #6 楼 @kgen 这个非常同意,通用的、全局的前进后退困住了大家的手脚

  • #72 楼 @robbin node 社区在处理回调那种编程结构方面积累了很多模式和框架,有一次 ruby tuesday 上就说了这个话题,建议了解一下,虽然不敢说 nodejs 一定能成功,但是起码这块比我之前想象的要好很多的

  • 哈哈,今年应该会有很多干货,期待

  • 一份 Ruby 面试题 at 2013年08月19日

    #78 楼 @blacktulip #79 楼 @neverlandxy_naix 这类问题不需要在图上详述,适合在面试时不断深入沟通

  • 一份 Ruby 面试题 at 2013年08月18日

    嘿嘿,涉及 alias 与 alias_method 的知识点上,我现眼了......

  • 一份 Ruby 面试题 at 2013年08月18日

    #72 楼 @fsword 自己检查了一下,果然很多错误啊,比如这个:

    Object.new.class = Class
    Class.superclass = Object
    

    前一句写错了,应该是 Object.class == Class 后一句也写错了,改正以后也是句废话

  • Ruby 中的谓词 at 2013年08月15日

    很好的普及帖,对我有帮助

  • 一份 Ruby 面试题 at 2013年08月15日

    面试题好不好,社区的同学们各自做一做(不借助任何参考资料)就知道了,如果大家都不会的可能就是不重要的。 先占位,有空写我的答案

    占位以后忘了写答案了,刚好这会有空,补一下作业

    Ruby 基础相关

    1. each 和 map 的区别

    map是将block施加与array的每一个成员之上,并将计算结果组织为新的array,each只有前半部分,不会组织成新的array

    1. proc, lambda, 和 Proc 的区别

    proc记得不太清楚了,好像是内部能够支持return到外层,lambda比较简单,就是普通的lambda闭包(return不能跨越作用域),它们创建的对象,其class都是Proc

    1. alias 的用法,alias 与 alias_method 的区别

    alias是ruby语言关键字,对当前类的method定义别名,alias_method是库增强(好像是active support),参数是symbol

    1. 用过那些 gem, 简单的说一说各自的用途

    rails中的active support等gem,基本都是辅助增强

    ActiveRecord是支持延迟计算的ORM库,mongoid不用解释了

    http client: faraday/mechanize,前一个轻一些,后一个使用cookie比较方便

    以前用过activescaffold,还有个gem记不清名字了,好像是hpriot,以前用来抓网页,作者应该是_why大神

    inheritance_resources/inheritance_resource_views 用来简化开发

    statemachine 简化模型类的逻辑代码

    railroady,用来生成模型图比较方便

    redis_search,华顺写的,用它可以晚一些引入搜索引擎

    还有god、pry、各种http app server、各种测试/mock框架

    1. 画个图,体现一下 Ruby 的对象体系
    Object -> Module -> Class -> MyClass
    另外:
    Object.new.class = Class
    Class.superclass = Object
    

    Ruby 与 Rails 进阶相关

    1. yield self 的用法,写个例子
    class Builder
      def initialize arguments
         # do somthing by init arguments
      end
    
      # you can use Builder's method in block
      def build
        yield self if block_given?
      end
    end
    
    1. scope 的实现原理

    核心是延迟计算,将where、order、limit子句变为Relation对象,然后在最终调用each/to_a时组装sql

    1. ActiveSupport::Concern 模块的用法及源码解读

    用来简化module编写,普通的module方法是include所在类的实例方法,Concern可以借助一个ClassMethod的内部module,提供类方法增强

    1. alias_method_chain 的用法及源码解读

    详细不记得了,大致是对一个method提供arround类型的aop增强,实现方法应该还是借助了alias机制,将目标method改名,然后用旧名称创建一个新的method,新method调用了改名后的method,并在调用前(or 调用后?)执行chain上的其它方法

  • #5 楼 @zj0713001

    又完整看了一下 slides,确实感觉还有很多不足,可以有这么几个对比角度——

    • 一切皆对象:java 的 class 体系和 object 体系是两张皮,这样导致很多东西是不自然的,比如类方法不可继承,而相对来说,ruby 的 class 就是 object,于是有很多便利,比如 case 的时候可以 when 一个 class 等等
    • 单继承问题:单继承和多重继承各有优劣,module 如何解决
    • ruby 不支持 overload:这里可以回答一下 overload 的场景在 ruby 中要如何处理
    • block 的价值:我之前举的例子就可以说明,另外由于有了 open class 设计,允许针对一个点做增强,可以减少不必要的工具封装层次

    写了一些以后觉得我把问题谈复杂了,楼主时间有限,真要让 java 程序员认识到 ruby 的好处可能需要很多次交流,不妨先用一个 ppt 先演示一下 ruby 的基本语法和概念,比如 saito 以前写的这个 http://saito.im/slide/ruby-new.html

  • 我给 java 的同学讲 ruby 的时候,感觉这个例子比较有价值——http://fsword.github.io/slide/ruby/index.html#slide-72 总的来说,该用对象的地方用对象,该用函数的地方用函数,供楼主参考

  • 问题已经解决了,不过 railsAutocomplete 的函数名还是没有搞明白,不知道是否和 jquery ujs 相关

  • #15 楼 @xds2000 恩,以后去北京出差还有机会的

  • #3 楼 @zj0713001 并不是每一个阿里人的 P6 都有这个能力的,主要门槛在这句——有大规模分布式系统开发经验,有系统伸缩性、容灾等方面的服务端开发经验,当然你要说工作和大规模分布式系统相关那就容易得多了

  • #4 楼 @xds2000 k,这个要是达标就可以到我们公司随便混饭吃了,果然面试问什么问题很重要啊

  • 我个人反感问星座,除了说明这人可能没有理性思维习惯外,还说明他缺乏"判断别人"的方法

  • #15 楼 @ery 我还讨厌,给我一段代码,让我计算出结果,我又不是计算机 这个不能一概而论,一个人的设计能力和"脑补"的深度正相关

  • 一小段代码重构 at 2013年08月11日

    #62 楼 @bhuztez 如果是这样,那么我不太明白 pass around word 是什么意思,如果指的是 words 这个引用,那么所有的判定代码显然都要被传入的,当然也许我是误解了最后一块板砖 :-D

    另外你说的也有道理,借助 typeof 里面的模式匹配,我们就可以从这个 pattern 的返回值中理解它的目的,这个和我用常量记录正则表达式的思路是一样的

    BTW:其实用正则在这里确实不是很好,最大的麻烦就是有时候会把简单的条件写复杂(刚才添了几个测试用例,马上就失败了),看到 #45 楼 @quakewang 的做法觉得还不错,也能避免阅读困难,稍微改动如下:

    class Bob
    
      Rules = [
        [lambda{|words| words.nil? || words.strip.empty?}, 'Fine. Be that way!'],
        [lambda{|words| words.upcase == words           }, 'Woah, chill out!'  ],
        [lambda{|words| words[-1] == "?"                }, 'Sure.'             ],
        [lambda{|words| true                            }, 'Whatever.'         ]
      ]
    
      def hey(words)
        Rules.each{|checker, resp| return resp if checker.call(words)}
      end
    end
    

    lambda 改成新表达方式可能会更简短些

    class Bob
    
      Rules = [
        [->w{w.nil? || w.strip.empty?}, 'Fine. Be that way!'],
        [->w{w.upcase == w           }, 'Woah, chill out!'  ],
        [->w{w[-1] == "?"            }, 'Sure.'             ],
        [->w{true                    }, 'Whatever.'         ]
      ]
    
      def hey(words)
        Rules.each{|checker, answer| return answer if checker.call(words)}
      end
    end
    

    后续如果有需求变化,只要不是太复杂,可以把 Rules 本身的维护和 Bob 类分离,最后的方向还是职责链 :-P

  • 一小段代码重构 at 2013年08月11日

    在机场,忍不住回一下——

    楼主第一版无疑是最直接的。在给定需求不变的情况下,值得改进的地方有两个:

    • if -> case 便于理解逻辑结构
    • 使用常量,便于理解判定条件 改后是这样: ```ruby class Bob

    ChillOut = /^[^a-z]+$/ Question = /\?$/ NoWord = /^$/

    def hey(words) case words when ChillOut "Woah, chill out!" when Question "Sure." when NoWord "Fine. Be that way!" else "Whatever." end end end

    这个做法有个前提,借助ruby的case when结构特点充分运用正则,所以后续可能难以实现新需求
    
    #1楼 @bhuztez 的说法可能是错误的,因为逻辑判定的部分代码在这个做法中只是转移到了typeof函数中而已,所以唯一的价值只是分离了“判断”和“输出响应”这两部分逻辑而已,而后续的需求变化还是未知,提前做这个分离可能会over design,最起码也是无功无过。
    
  • 用惯用法可以避免不必要的坑,比如字符串连接通常如下:

    body = "#{article.body}\n#{merge_with_article.body}"
    
    body =  "%s\n%s" % [article.body, merge_with_article.body]