后一个问题是可以解决的,保存文件选择正确的编码方式即可
Great!
我一般推荐 c++ 程序员学习 python
《明天的科学》——启蒙吧,儿时对科学的向往大概由此引发 《讲故事学作文》——懂得了言为心声,看过这本书以后可以有效的抵制各种“作文选” 其实还有很多,上述对童年影响很大......
楼主是百度的?我觉得做一个 PAAS 很不错。
另外,我和 #12 楼 @blacktulip 类似,也对百度有很多个人的抵触情绪,不过,这几年也接触了一些来自百度的技术人,倒是感觉到百度至少在技术这个领域还是很不错的。
哈哈,今年应该会有很多干货,期待
#78 楼 @blacktulip #79 楼 @neverlandxy_naix 这类问题不需要在图上详述,适合在面试时不断深入沟通
嘿嘿,涉及 alias 与 alias_method 的知识点上,我现眼了......
很好的普及帖,对我有帮助
面试题好不好,社区的同学们各自做一做(不借助任何参考资料)就知道了,如果大家都不会的可能就是不重要的。 先占位,有空写我的答案
占位以后忘了写答案了,刚好这会有空,补一下作业
Ruby 基础相关
map是将block施加与array的每一个成员之上,并将计算结果组织为新的array,each只有前半部分,不会组织成新的array
proc记得不太清楚了,好像是内部能够支持return到外层,lambda比较简单,就是普通的lambda闭包(return不能跨越作用域),它们创建的对象,其class都是Proc
alias是ruby语言关键字,对当前类的method定义别名,alias_method是库增强(好像是active support),参数是symbol
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框架
Object -> Module -> Class -> MyClass
另外:
Object.new.class = Class
Class.superclass = Object
Ruby 与 Rails 进阶相关
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
核心是延迟计算,将where、order、limit子句变为Relation对象,然后在最终调用each/to_a时组装sql
用来简化module编写,普通的module方法是include所在类的实例方法,Concern可以借助一个ClassMethod的内部module,提供类方法增强
详细不记得了,大致是对一个method提供arround类型的aop增强,实现方法应该还是借助了alias机制,将目标method改名,然后用旧名称创建一个新的method,新method调用了改名后的method,并在调用前(or 调用后?)执行chain上的其它方法
又完整看了一下 slides,确实感觉还有很多不足,可以有这么几个对比角度——
写了一些以后觉得我把问题谈复杂了,楼主时间有限,真要让 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 相关
#3 楼 @zj0713001 并不是每一个阿里人的 P6 都有这个能力的,主要门槛在这句——有大规模分布式系统开发经验,有系统伸缩性、容灾等方面的服务端开发经验
,当然你要说工作和大规模分布式系统相关那就容易得多了
我个人反感问星座,除了说明这人可能没有理性思维习惯外,还说明他缺乏"判断别人"的方法
#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
在机场,忍不住回一下——
楼主第一版无疑是最直接的。在给定需求不变的情况下,值得改进的地方有两个:
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]