ruby問題總結(jié)

  1. ruby 的命名規(guī)則
    局部變量:以英文字母或者_(dá)開頭,如:

    name = "this is a local variable"
    

    全局變量:以 $ 開頭烈菌,如:

    $name = "this is a global variable"
    

    實例變量:以@開頭阵幸,如:

    @name = 'lily'
    

    類變量:以@@開頭,如:

    @@name = 'lily'
    

    常量:全大寫字母芽世,如:

    NAME
    

    類名和模塊名:以首字母大寫挚赊,駝峰命名法。如:

    HelloWorld
    

    方法名:小寫用_隔開济瓢,如:

    sort_by_name
    
  2. ruby 中 singleton class 和 singleton method 分別是什么

    Singleton method

    A method which belongs to a single object rather than to an entire class and other objects.
    一個方法只屬于一個對象荠割,而不是整個類和其他實例化對象。

    firstObj = ClassMethods.new
    secondObj = ClassMethods.new
    
    def firstObj.singletonMethod
      "Hi am a singlton method available only for firstObj"
    end
    
    firstObj.singletonMethod # "Hi am a singlton method available only for firstObj"
    
    secondObj.singletonMethod #undefined method `singletonMethod' for #<ClassMethods:0x32754d8> (NoMethodError)
    

    So this “singletonMethod” belongs only to the firstObj object and won’t be available for other objects of this class.
    If you try to make the secondObj.singletonMethod Ruby will inform you that singletonMethod is an undefined method.

    所以旺矾,singletonMethod 只屬于 firstObj,不能被這個類的其他實例化對象所調(diào)用蔑鹦。如果你想用 secondObj.singletonMethod 調(diào)用這個單例方法,ruby 會告訴你 singletonMethod 沒有定義

    If you like to find all the singleton methods for a specific object, you can say objectname.singleton_methods
    In our case
    如果你想找到一個特定對象的所有單例方法箕宙,你可以用 objectname.singleton_methods 嚎朽。在我們的例子里面就是:

    firstObj.singleton_methods => ["singletonMethod"]
    secondObj.singleton_methods => []
    

    To avoid throwing undefined method error when you try to access a singleton method with some other object

    避免調(diào)用單例方法****拋出方法未定義的異常:

    if secondObj.singleton_methods.include?("singletonMethod")
      secondObj.singletonMethod
    end
    
    # 或
    
    if secondObj.singleton_methods.include?( :singletonMethod )
      secondObj.singletonMethod
    end
    

    Singleton classes
    單例類

    A singleton class is a class which defines a single object.
    單例類就是只有一個實例對象的類。

    In our above example we have two objects firstObj and secondObj.
    We can create a separate class for the secondObj instance and that is called as a singleton class.
    So as per the definition we created a class for a single object.

    在我們上面的例子里面柬帕,我們有兩個對象哟忍,firstObj 和 secondObj。我們給 secondObj 實例 創(chuàng)建一個單獨的類陷寝,這就叫做單例類锅很。
    所以按照定義為一個單獨的對象我們創(chuàng)建了一個類。

    class << secondObj
      def method4
        p "Hi am a singlton method available only for secondObj"
      end
    end
    

    When you see a class definition with the class keyword followed by two less than symbols that is a Singleton class opened for the object.
    In our ClassMethods class we had something like class << self which is also a singleton class. In Ruby a class itself is an instance of the Ruby class Let's try something like this

    當(dāng)你看到定義一個類后面跟著 << 的時候凤跑,這就是打開這個對象的單例類爆安。
    在我們的 ClassMethods 這個類中,我們有 class << self 仔引,所以這也是一個單例類鹏控。在 ruby 里,一個類本身也是一個 ruby 的類肤寝。讓我們試試

    ClassMethods.class # Class
    
  3. 怎么寫一個 module当辐,可以讓包含這個 module 的 class 既能使用這個 module 的類方法又能使用這個 module 的實例方法
    參考 http://motion-express.com/blog/include-instance-&-class-methods-from-a-module

    module Foo
     def self.included(m)
       def m.show1
         p "hi"
       end
     end
    
     def show2
       p "hello"
     end
    end
    
    class Bar
     include Foo
    end
    
    Bar.new.show2 #=> "hello"
    Bar.show1 #=> "hi"
    
    Bar.show2 #=> NoMethodError: undefined method `show2' for Bar:Class
    Bar.new.show1 #=> NoMethodError: undefined method `show1' for #<Bar:0x007fa1fb8c2ce8>
    

    module A
      def b
        puts "method b from module A"
      end
    
      def c
        puts "method c from module A"
      end
    end
    
    class B
      include A
      extend A
    end
    
    B.new.b # => "method b from module A"
    B.b     # => "method b from module A"
    B.new.c # => "method c from module A"
    B.c     # => "method c from module A"
    
  4. require load auto_load 以及 require_dependency 的區(qū)別
    require,load用于文件鲤看,如.rb等等結(jié)尾的文件缘揪。
    include則用于包含一個文件(.rb等結(jié)尾的文件)中的模塊。
    require一般情況下用于加載庫文件,而load則用于加載配置文件找筝。
    require加載一次蹈垢,load可加載多次。

    詳細(xì)參考: 淺談Ruby中的類加載機制

    Require/load/autoload的區(qū)別和用法

    ActiveSupport::Autoload 學(xué)習(xí)

    Here are the differences between Require, Load, Include and

  1. 描述 object, class, module 的關(guān)系是什么袖裕,并畫圖表示曹抬。
    從繼承關(guān)系來說,是Class --> Module --> Object急鳄,即Object是繼承樹的頂層谤民,緊接著是Module,然后是Class疾宏。
    Modules, Classes, and Objects

  2. 為什么在 model 中可以調(diào)用 validates张足,自己怎么實現(xiàn) model 中的 validates,試著實現(xiàn)一下坎藐?

    validations

  3. ruby 中 ? 或者 ! 作為后綴的方法有什么不同为牍?
    It's "just sugarcoating" for readability, but they do have common meanings:

    Methods ending in ! perform some permanent or potentially dangerous change; for example:
    Enumerable#sort returns a sorted version of the object while Enumerable#sort! sorts it in place.
    In Rails, ActiveRecord::Base#save returns false if saving failed, while ActiveRecord::Base#save! raises an exception.
    Kernel::exit causes a script to exit, while Kernel::exit! does so immediately, bypassing any exit handlers.
    Methods ending in ? return a boolean, which makes the code flow even more intuitively like a sentence — if number.zero? reads like "if the number is zero", but if number.zero just looks weird.

    在Ruby中,以問號(?)結(jié)尾岩馍,被用于標(biāo)示謂詞碉咆,即返回Boolean值的方法,如Array.empty?(判斷數(shù)組中元素是否為空)蛀恩。
    而通常情況下吟逝,不帶感嘆號的方法返調(diào)用該方法的一個拷貝,帶感嘆號的方法則是一個可變方法赦肋,該方法會修改原來的對象,如Array類中的sort和sort!

  4. rails 源碼

  5. rails 本身是由什么組成的励稳?
    Rails組成和項目結(jié)構(gòu)
    10.《ruby 元編程》

  6. 工作中遇到過哪些挑戰(zhàn)和困難佃乘,怎么解決的?

  7. 不使用 ActiveJob驹尼,sidekiq 單獨使用可以不趣避?
    Active Job 和 Sidekiq 簡介
    Active Job
    Rails: 使用Active Job來處理異步任務(wù)

  8. bundler 和 gem 的關(guān)系?bundler 是 gem 么新翎?
    bundler
    Rvm 與 Bundler 的愛恨情仇
    RVM,RubyGems和Bundler的日常使用

  9. passenger, nginx, 還有一個是什么程帕,忘記了,這三個各自干什么的地啰,怎么結(jié)合起來一起工作愁拭,缺一可以不
    Ruby 服務(wù)器對比

  10. each 和 map 的區(qū)別
    each: 順序返回各個元素
    collect: 把原數(shù)組的各個元素順序返回,并組裝新的數(shù)組
    map: 與 collect一樣亏吝,會創(chuàng)建一個新的數(shù)組
    select: 與collect一樣岭埠,會創(chuàng)建一個新的數(shù)組

    Ruby: 聊一聊關(guān)于集合遍歷的各種方法
    Pluck vs. map and select

    $ a = [1,2,3,4]
     => [1, 2, 3, 4]
    $ a.each {|n| n*2}
     => [1, 2, 3, 4]
    $ a
     => [1, 2, 3, 4]
    $ a.map {|n| n*2}
     => [2, 4, 6, 8]
    $ a
     => [1, 2, 3, 4]
    $ a.collect {|n| n*2}
     => [2, 4, 6, 8]
    $ a
     => [1, 2, 3, 4]
    
  11. find 和 find_by 的區(qū)別
    rails中find/find_by/where的區(qū)別

  12. 解決 N+1 Query 的方法有哪些
    淺談 ActiveRecord 的 N + 1 查詢問題
    Rails使用include和join避免N+1 queries

  13. 單表繼承
    Rails 之單表繼承 (Single Table Inheritance)
    Inheritance 單表繼承
    ActiveRecord-連接多張表之單表繼承

  14. rack 是什么
    Rails on Rack

  15. 安全問題。怎么破 XSS 和 CSRF攻擊
    解法:
    對于XSS:首先說說什么是XSS(Cross-site scripting),跨站腳本攻擊惜论,攻擊者在客戶端注入可執(zhí)行代碼许赃。
    對策:
    過濾惡意輸入非常重要,但是轉(zhuǎn)義 Web 應(yīng)用的輸出同樣也很重要馆类。
    過濾惡意輸入白名單比黑名單要有效混聊,特別是在需要顯示未經(jīng)過濾的用戶輸入時(例如前面提到的的搜索表單的例子)。使用 escapeHTML() 方法(或其別名 h() 方法)乾巧,把 HTML 中的字符 &句喜、"、< 和 > 替換為對應(yīng)的轉(zhuǎn)義字符 &卧抗、"藤滥、< 和 >。

    對于CSRF:Cross Site Request Forgery社裆,跨站請求偽造拙绊。通俗理解:攻擊者盜用當(dāng)前用戶身份,發(fā)請當(dāng)前用戶的惡意請求:如郵件泳秀,銀行轉(zhuǎn)賬等标沪。

    對策:首先,根據(jù) W3C 的要求嗜傅,應(yīng)該適當(dāng)?shù)厥褂?GET 和 POST HTTP 方法金句。其次,在非 GET 請求中使用安全令牌(security token)可以防止應(yīng)用受到 CSRF 攻擊吕嘀。

  16. ActiveSupport::Concern 的工作原理
    參考 ActiveSupport::Concern
    ActiveSupport::Concern 的工作原理

  17. Rails: pluck與select的區(qū)別

  18. 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
    
  19. scope 的實現(xiàn)原理
    核心是延遲計算,將where偶房、order趁曼、limit子句變?yōu)镽elation對象,然后在最終調(diào)用each/to_a時組裝sql

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棕洋,一起剝皮案震驚了整個濱河市挡闰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掰盘,老刑警劉巖摄悯,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異愧捕,居然都是意外死亡奢驯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門次绘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叨橱,“玉大人典蜕,你說我怎么就攤上這事÷尴矗” “怎么了愉舔?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伙菜。 經(jīng)常有香客問我轩缤,道長,這世上最難降的妖魔是什么贩绕? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任火的,我火速辦了婚禮,結(jié)果婚禮上淑倾,老公的妹妹穿的比我還像新娘馏鹤。我一直安慰自己,他們只是感情好娇哆,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布湃累。 她就那樣靜靜地躺著,像睡著了一般碍讨。 火紅的嫁衣襯著肌膚如雪治力。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天勃黍,我揣著相機與錄音宵统,去河邊找鬼。 笑死覆获,一個胖子當(dāng)著我的面吹牛马澈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弄息,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼痊班,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疑枯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蛔六,失蹤者是張志新(化名)和其女友劉穎荆永,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體国章,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡具钥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了液兽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骂删。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡掌动,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宁玫,到底是詐尸還是另有隱情粗恢,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布欧瘪,位于F島的核電站眷射,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏佛掖。R本人自食惡果不足惜妖碉,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芥被。 院中可真熱鬧欧宜,春花似錦、人聲如沸拴魄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羹铅。三九已至蚀狰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間职员,已是汗流浹背麻蹋。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焊切,地道東北人扮授。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像专肪,于是被迫代替她去往敵國和親刹勃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容