erlang面試題

erlang常規(guī)面試題

  • 基礎
  • 消息發(fā)送

基礎相關

OTP相關

  • gen_server:cast和erlang:send()都可以向指定進程發(fā)消息,有什么區(qū)別?
    • gen_server:cast調(diào)用的就是erlang:send()函數(shù),消息為{'$gen_cast',Request},但是加上了no_connect.如果沒有連上,那么返回false
  • en_server遠程call一個節(jié)點方法的過程?
    • 回答者需要知道empd的概念及其相關過程。
  • gen_server:call({Name,Node},Request)可以call遠程節(jié)點的進程,和call(Node, Module, Function, Args)有什么區(qū)別?
    • rpc:call是調(diào)用遠程節(jié)點的rex進程來做事情,gen_server:call可以選中遠程節(jié)點的任意進程做事情
    • rpc:call的內(nèi)部實現(xiàn)就是gen_server:call({Name,Node},Request),只不過NAME為rex

時間函數(shù)相關

  • erlang:now()和os:timestamp()
    • erlang:now()獲取的是erlang虛擬機時鐘,os:timestamp()獲取的是操作系統(tǒng)時間。
  • 假設start_timer(1000), 這個時候跳快系統(tǒng)時間,會提前收到消息嗎?
    • 不會。start_timer/3用的是虛擬機內(nèi)部時間
  • erlang:send_after和erlang:start_timer的區(qū)別
    • 主要是TimerRef,超時消息進入郵箱,這個時候用TimerRef來匹配誰來發(fā)的,以便做處理。
  • 是否了解otp 18中新引入的時間函數(shù)

數(shù)據(jù)類型

  • ref()有是什么?什么用?
    • ref()就是一個erlang中的基礎數(shù)據(jù)類型,就是用來唯一表示(erlang只能保證基本100%)和比較的。
    • A發(fā)送消息的時候B,加一個ref,在receive中用這個ref來高效和指定匹配B返回的消息

ets表

  • write_concurrency和read_concurrency是用使得ets表支持讀和寫并發(fā)控制的嗎?
    • 不是。ets原生就支持并發(fā)控制,通過原子操作來實現(xiàn)。就是說,單個ets表的讀寫都是原子的。他們是用來提升讀寫性能的,代價是額外內(nèi)存

進程相關

  • 不使用io或者lager:info,如何確定進程受到的消息和發(fā)出的消息?
    • 回答者需要知道erlang:dbg模塊,trace相關的知識。如果知道火焰圖相關知識,更好
  • Pid的那3位數(shù)字<A,B,C>代表著什么
    • A, 對應是哪一個節(jié)點 (0 代表是本地節(jié)點 ,其它數(shù)字代表遠程節(jié)點)
    • B, 低15字節(jié)代表進程唯一記數(shù)(一個進程表的索引)
    • C, 16~18字節(jié)也是進程唯一記數(shù)(和B一樣)

消息發(fā)送

簡要說明消息兩個進程的傳遞過程

selective match相關

  • 什么是selective match
    只接受感興趣的消息,代碼顯式寫明
    <pre>
    receive
    {'tag',Tag} -> do_something();
    ...
    end
    </pre>
  • selective match潛在問題和erlang系統(tǒng)如何對此優(yōu)化
    • 潛在問題:需要遍歷郵箱,如果郵箱消息數(shù)目過多,可能會耗費時間
    • 優(yōu)化:發(fā)送make_ref(), 在遍歷消息的時候,erlang系統(tǒng)會自動跳過在這個ref創(chuàng)建之前接受的消息
      <pre>
      optimized(Pid) ->
      Ref = make_ref(),
      Pid ! {self(), Ref, hello},
      receive
      {Pid, Ref, Msg} ->
      io:format("pn", [Msg])
      end.
      </pre>

receive的理解

  • receive會檢查遍歷進程的郵箱一次(請注意是一次),根據(jù)guide做匹配;
  • 一旦匹配到一個消息,執(zhí)行對應的guide的代碼,去掉郵箱中對應的消息;之后掛起;也就是說,匹配到滿足條件的,就會立刻停止匹配過程,等待下一次匹配
  • 什么時候觸發(fā)下一次匹配?有新消息來的時候
  • 如果不加after,只有當匹配guide之后,才能往下走;否則,計算收到消息,也會阻塞在原地,等待下一次消息到來,再次啟動匹配。也就是說,下面
    <pre>
    init() ->
    Pid = spawn(fun() -> init_wait() end),
    register(test, Pid).
    init_wait() ->
    io:format("expected receive: foo"),
    receive //here1
    foo -> foo
    end,
    io:format("expected receive: bar"),
    receive
    bar -> bar
    end,
    io:format("init_wait: finish").
    </pre>

這里一直會阻塞在here1,除非進程受到'foo'這個消息;就算受到其它消息,也不會往下走

參考

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

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

  • 世界是并行的,Erlang程序反應了我們思考和交流的方式,人作為個體通過發(fā)送消息進行交流,如果有人死亡,其他人會注...
    abel_cao閱讀 2,778評論 1 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,785評論 18 139
  • 開篇 不容易啊,終于要開始介紹并發(fā)了,erlang也終于可以大顯神威了。在前面的幾篇文章中,著重介紹了使用erla...
    文卿閱讀 3,534評論 0 2
  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語閱讀 3,712評論 0 7
  • 一次db連接泄漏問題排查 預備知識 問題描述 問題定位 問題驗證 問題修復 其它 預備知識 recon庫的使用,詳...
    randyjia閱讀 1,152評論 2 1