一道非常規面試題以後的聯想

一道非常規面試題以後的聯想

來自專欄寒食帖

我的朋友月半,在電話面試一個後端實習崗時被問到了這樣一個技術/非技術問題:

假如兩個人之間沒有任何其他的聯繫方式(微信/QQ/共享文檔等),只能通過電話,A如何將代碼展示給B?

這個問題很有意思,當時我和他的第一反應都以為面試官在問關於Github相關。後來面試官解釋了一下,將其也排除在外,條件是只能通過電話這個媒介。由於姿勢水平有限和思維不夠活躍,這個問題陷入了尷尬。

電面結束後,我和他也一直在想這個問題,似乎始終都沒有一個令自己滿意的答案。後來他將這個問題發到了V2EX上,昨天我在瀏覽這個站點時,發現這個問題竟然上了熱門,裡面的想法也是千奇百怪,各有千秋,其中有幾個我覺得很有價值,所以特地寫一篇文章來分享一下。

回復大致分為四類。

第一類是吐槽流,覺得這個問題沒有答案,純屬面試官在刁難,需要提高面試水平云云。

第二類依然在尋求通過中間平台來傳達,雖然也有道理,但是和題目的本意相去甚遠。

第三類認為這是個非技術問題,主要在於考察語言表述能力和表達邏輯,以及面對未知問題時的思維。我覺得這還是頗有幾分道理的。

第四類我認為是最核心的,回答者關注的是問題本身,其中幾個解決思路很巧妙,以下也重點談談這一類。

1. 通過測試用例的方式來間接呈現代碼

大家都知道,一些OJ(online judge)系統來判斷代碼的方式就是通過多組測試用例來進行計算結果和運算時間,以此判斷代碼的正確性。面試官想要「看見」你的代碼,或許他關注的只是代碼的正確性而不是你具體是如何實現,如果是出於這個目的的考察,那大可讓面試官口頭報幾組測試數據,然後我再將運行結果和運行時間反饋過去,這整個過程,確實只用到電話來交流,符合題意。

但是這種方式只局限於演算法,若是考察工程方面的代碼,或者面試官的目的就是考察你的代碼本身邏輯是否合理,命名是否規範,手法是否優雅等等,那麼這種方法就失效了。

雖然這種方法只能解決一小部分問題,但我覺得這是一種很好的思路。

2. 將撥號音的模擬信號進行取樣、量化、編碼轉換為數字信號,數字信號進入交換網路進行交換,最後又轉回模擬信號送到電話那一頭。

這種方式比較硬核,對一個初級軟體開發者來說比較有難度,我也是查了一些資料,可能表達的還是有問題,歡迎指正。使用聲波來傳輸數據已經是一種較常見的技術,2012年已經實現了手機之間通過話筒和喇叭傳輸文件,近年的支付寶「咻咻咻」支付也是這種技術的一種表現方式。

3. 將代碼轉化為ASCii碼,通過電話撥號音傳輸,因為每個撥號音的頻率不同,選取兩個代表0和1,對方在另一端將整個過程錄製下來,再根據頻率不同區分出01,最後轉換成代碼。

這個方式我覺得本質和在電話中讀代碼,對方聽著記下來是一樣的。語言本身是一種複雜的編碼方式,兩個人充當了「編碼器」和「解碼器」的角色。

這個方式下,110已經不是110了(皮

當然,有人要說,這不是瞎胡鬧嗎,浪費時間。這裡只是就題目本身而言,拓展一下思路,並不一定需要實際操作。

基本上以上三種是我覺得比較好的解決思路,假如你有好的想法,可以留言討論交流。

下面是我讀到的一篇文章《芬蘭電台節目造就 Geek 人群》,一則使用收音機來傳輸代碼的趣聞,文末一句話我非常感慨。

「我們的目標不是教人們如何編程,而是傳播關於計算機的理解,以及讓許多對計算機心懷恐懼的人放下戒心。我們努力展示計算機是有趣的。」

世界複雜且美,需要我們不斷去探索體味。


《芬蘭電台節目造就 Geek 人群》

有人說芬蘭是 Geek 的國度。「Linux 之父」 Linus Torvalds 是芬蘭人,在赫爾辛基大學讀書期間開發了最初的 Linux 內核;網路安全傳輸協議「SSH」的發明者 Tatu Yl?nen 是芬蘭人,畢業於赫爾辛基理工大學;「IRC 之父」Jarkko Oikarinen 也是芬蘭人。

把時間刻度拉到最近幾年,來自芬蘭的遊戲廠商 Rovio 是一家讓人驚奇的公司,他們開發出的《憤怒的小鳥》風靡全世界,讓模擬物理類型的遊戲變得流行,形成了一種 cult 文化,有的人甚至會孜孜不倦,算出小鳥飛行軌跡背後的物理公式,連英國首相卡梅倫也是其忠實玩家。

芬蘭,一個人口不如一個北京市的國家,Geek 文化卻如此深厚。也許「好奇」與「探索」這兩個因子已經深深根植於這個民族的基因裡面。

根據 Ars Technica 的報道,上世紀 80 年代,芬蘭廣播公司(YLE)的教育家 Kai R. Lehtonen 為了讓自己製作的關於電腦教學的廣播節目更富有趣味性,開始了一場實驗。

當時個人計算機仍屬奢侈品,網路處於蒙昧期,Lehtonen 打算利用收音機和無線電,將一段又一段的代碼傳播到不同的電腦中。通過這種方式,聽眾可以將自己的代碼貢獻給節目組,然後廣播給其他聽眾,獲得反饋。這能激發聽眾參與的興趣。

多虧當初荷蘭人發現一種利用盒式磁帶傳遞資料的方法,Lehtonen 增加用戶粘性的手段才變得有效——荷蘭人將電腦上的 BASIC 代碼儲存到普通的盒式磁帶中,然後將這盒磁帶放進錄音機播放,其他人可以將聲音錄進另外一盒磁帶中,然後將磁帶放進另外一台錄音機中與電腦連接起來,通過解碼器,電腦就能夠得到原來 BASIC 代碼。

通過這個方法,電腦與電腦之間傳輸數據的問題就得以解決。當時電腦尚未普及,但收音機成為家庭里的標配。在經過幾次嘗試之後,Lehtonen 和他的團隊決定正式在廣播節目中播出 BASIC 代碼。在芬蘭廣播公司的 Radio Rex 節目中,他們播放了時長 33 秒的「謎之聲」,然後緊張的詢問聽眾,到底是否得到了正確的代碼。

代碼是正確的。回想起當時的情景,至今 Lehtonen 還是感到激動不已。「布丁好壞,一吃便知。至於我們,代碼部分沒有做任何特別的改動。它只不過是一段類似於演講或是音樂的聲音……結果符合期望,我們從芬蘭各地受到大量正面的反饋,最遠的來自 Keminmaa,赫爾辛基往北差不多 600 千米的地方。」

後來 Lehtonen 決定提高難度,比如在接受觀眾的代碼時,特意設置一個程序,將類似「2 月 30」之類的輸入都擋在門外。但這不妨礙聽眾的熱情,很快他們開始自己編寫代碼。當時大學剛畢業的 Eero Tunkelo 擁有 Commodore VIC-20,他曾經為節目貢獻了一段為自己姐姐所寫的代碼。由於節目人氣逐漸升高,Lehtonen 決定將節目變為每兩周播放一次的節目「Silikoni」。回憶當年對這個節目的痴迷,Tunkelo 說,「我開始覺得自己從屬於某種事物的一部分。」

Silikoni 每周一傍晚 6 點 30 分準時開播。它成為芬蘭 Geek 文化的溫床,上面不但分享來自聽眾所設計的代碼,還對一些嚴肅的話題展開討論,比如說「誰知道最棒的有關電腦的笑話?」,或者「如何管理一個計算機夏令營?」,或者「第一次購買電腦要考慮的問題」,或者「如何通過電腦來運營一所學校」等等。

Silikoni 非常受歡迎,一期可以吸引聽眾 12000 人,相比芬蘭 500 萬的人口,這個聽眾數量相當可觀。一個 70 歲的老奶奶甚至寫信給節目組,稱她僅僅是喜歡聽到不同電腦所製造出來的聲音。可惜,在芬蘭廣播公司人員改組,變更公司戰略目標之後,節目也就無疾而終了。

不過,對於 Lehtonen 而言,他的目的已經達到:

我們的目標不是教人們如何編程,而是傳播關於計算機的理解,以及讓許多對計算機心懷恐懼的人放下戒心。我們努力展示計算機是有趣的。


推薦閱讀:

對於香港大學2017年多元卓越計劃面試的一點感悟
面試時你需要注意的9個著裝細節
「面試達人」面試官問「你的缺點是什麼?」來看最優解法!
如何利用系統思維準備面試?
14天DIY進麥肯錫之一:面試準備

TAG:面試 | 面試問題 |