大家好,我是 ssh,前兩天大名鼎鼎的 React 核心開發者 Dan Abramov 接受了油管 up 主 Ben Awad 的一場面試,而且是正兒八經做題的那種,不是之前國內那場戲稱的面試。我們趕快一起來看看。
剛開場,Dan 首先來了段自我介紹:
這繞口令呢?I work on React i did not create react but i work on it on React team...
大意就是,他是 React 和 Redux 的聯合開發者,他不是 React 創始人(估計是他對外發聲太多,有誤解的小白不少),今天他想透過 Ben 的面試,祝他好運!
接下來寒暄幾句,Ben 就正式開啟了面試環節:
let vs const
上來就是國內也很經典的一道面試題,讓 Dan 回答 let 和 const 的區別。
Dan 回答說他認為這不重要,於是面試官讓他滾回家等通知了(誤
開個玩笑,Dan 還是穩穩的回答出了區別,const 可以防止變數重新分配,並且指出 const 建立的物件 object 依然可以用 object.xxx 來修改物件屬性的值。
之後主持人問他平時的使用習慣,Dan 說他是個很混亂的人,看心情使用,然後詢問主持人是不是要解僱他(哈哈哈)
Redux
主持人非常俏皮的問:“有一個可愛的庫,經常和 React 一起使用,你可能知道叫 Redux”
Dan 也很俏皮的回了句:“聽說過”。
接下來主持人發出了靈魂拷問:“什麼時候我該考慮在專案中使用 Redux?”
Dan 略加思索,從以下幾點來回答了這個問題:
- 專案中已經使用了它。
- 團隊對它比較熟悉。
- 服務端資料 -> 可能需要被快取。
- 跨元件共享某些資料。
最後 Dan 說,如果現在新建一個專案,他可能不會選擇 Redux 了,主持人蛤蛤大笑,問他會選擇什麼,Dan 說這取決於實際情況,如果是一些需要快取的服務端資料,他可能會選擇 react-query, relay, apollo 等一些現代的 react 請求狀態庫。
主持人接著追問,如果是需要提升到頂部的狀態,你喜歡用 Context 嗎?Dan 給出了肯定的答覆。
dangerouslySetInnerHTML
接下來,主持人對 dangerouslySetInnerHTML 這個 API 的使用時機提出了疑問。
Dan 回答說,這個 API 是在你可能從資料庫或者什麼地方拿到一串 HTML 想要展示到頁面上時,在確保它是安全的 HTML 文字的前提下,可以使用。你可以提前對這串 HTML 消毒(santize),確保沒有未經過消毒的使用者輸入。
居中
一個很常規的 CSS 問題,讓這段文字在頁面上水平垂直居中。
Dan 慌慌張張的開始用 display: flex 起手,然後來了個 width: 100% 想讓容器撐滿,他顯然已經忘了這是預設的塊佈局的行為了 XD。
翻譯大誤
Dan 寫到這一步,開始迷茫了,為什麼沒生效!
經過了大約整整 5 分鐘的苦思冥想的除錯,Dan 終於試出來了問題,因為 HTML 元素預設不是 100% 的高度,大師原來也會遺忘這些基礎,哈哈。
我得意的笑
國際友人埃文尤也對此事發表了親切的慰問。
演算法:反轉二叉樹
主持人:Dan 我要給你出個經典的演算法題,你在 Facebook 工作,現在我要看看你能不能在 Google 工作。
沒錯,接下來他祭出了 homebrew 作者聞風喪膽的反轉二叉樹 !
如圖所示,把二叉樹的節點左右反轉。
Dan 很快給出了答案,看來常年維護 React,對樹方面的操作必須是手到擒來了,主持人打趣說 Dan 破了他保持的最快反轉二叉樹的記錄。
獎金問題:找兔子
主持人神秘的拿出了他的額外獎金問題,找兔子。
這個問題大意是,一條直線上有 100 個洞,兔子藏在其中的一個洞裡。
你一次只能檢視一個洞,並且每次你檢視洞的時候,兔子都會跳到它當前所在位置的相鄰的洞裡去。
舉例來說,現在有 _ X _ _ 這四個洞,X 代表兔子的位置在第二個洞,如果你查看了第三個洞,那麼兔子就可能會跳到它左邊的第一個或右邊第三個洞中去。
要求寫出找到兔子的演算法,並且給出複雜度。
這是一個比較開放性的問題,具體 Dan 除錯和解答的過程可以直接去油管看原影片,佔據了整整二十多分鐘時間。這題是真的有難度了,不過 Dan 會把他思考的過程轉化成程式碼或者文字寫在 IDE 裡,幫助自己找到更多線索,並且不斷的和麵試官進行溝通來確認細節,我覺得這是非常值得學習的。
最後,主持人說他決定僱傭 Dan 了,當他在回答 let vs const、redux、dangerouslySetInnerHTML 的問題時,展現出的思考過程就已經足夠打動他了。
主持人說,谷歌也會僱傭 Dan,因為他解決了反轉二叉樹問題(笑),而且在遇到困難的兔子問題時,他能夠一步步的寫下自己的思考,和麵試官不斷進行互動獲得更多提示,這是非常關鍵的。
這也可以給我們自己一些啟發。當你在面試中遇到難題的時候,不要悶著頭一聲不吭的寫,最好把你的思考過程轉化成文字寫下來,多和麵試官進行一些提問和細節的確認。不然面試官也不知道你在想什麼,該如何提示你。從我個人的感覺來說,沒有面試官會喜歡沉默寡言的面試者,畢竟面試招進來的人是要在日後的工作中緊密合作的,確定你的思考過程很清晰,確定你在溝通交流方面友好和耐心也是面試官考察的重要因素,大家共勉。
文章來源:https://jishuin.proginn.com/p/763bfbd6e0b2