北美一有關房地產開發和服務的初創公司面經。
因爲新冠疫情的原因,很多面試都已經放到網絡上了。在北美進行面試之前,還是建議所有打算從事 IT 的童鞋對基礎概念都要熟悉一點點。
如果你是學習 Java 或者面向對象的話,通常使用的一些框架,雲平臺(主要是 AWS)都需要有一些瞭解纔好。
針對 Java 來說,有關面向對象的概念,包括有什麼是依賴注入,什麼是反轉,什麼是組件,繼承關係,接口,實現等等,都需要有一些基本的瞭解。
在面試的時候大部分情況都會問到上面的概念。
在搞清楚上面的概念後,就會有一些實際的算法了,其實這些實際的算法算不上難。正常人突擊下基本上都可以掌握,唯一比較麻煩點的地方就是使用各種在線平臺手動直接寫。
其實這也能夠看出來面試公司是否人性化的
hashtable 是如何實現的
這個題目還是有點意思的。
很多人都知道 HashTable, 都知道 HashTable 或者 HashMap 是用來存儲 K-V 的。但是至於 HashTable 是如何實現的,可能有很多人不知道。或者就算知道可能也不是非常容易的表述清楚。
這個題目的目的就是要求你設計一個 HashTable。在這個題目中,需要搞清楚幾個知識點,K 是怎麼存儲的,V 又是怎麼存儲的,其中有一個非常重要的概念就是 K 的哈希(Hash)。
有關什麼是 Hash 和 Java 中的哈希函數,請參考文章 Java hashCode() 方法 中的內容。
準確的來說進行 Hash 就是對對象進行或者數據進行散列。當你拿到散列的整形數據後,你將會考慮如何將這一個整形數據存儲到一個數組中,這個就是你需要的 Hash 表。通常的算法可能就是去模了。
當然假設你有 10 個數據,但是數組正好也是 10 個,那麼最好的算法就是每一個數據存儲在一個空間中。
當然實際情況可能就不是這樣的了,假設你有 11 個數據,但是存儲空間直郵 10 個,那麼就肯定有 2 個數據存儲在同一個位置。這個時候你就可以使用鏈表來將存儲在同一個空間的數據鏈下去。
如上圖顯示的就是一個典型的 HashTable 的結構。
對一般的面試來說,掌握這麼多的內容基本上能夠考察你對基本數據結構的瞭解,以及對 HashTable 的瞭解。
如果還需要了解更多的,有關 HashTable 的負載因子,擴容等等的研究的話,其實已經超出了面試本身的範疇了。
正常人如果不是認真複習過,或者沒事刷一下的話一般比較難答出來。
相信很多人都是使用 HashTable 或者 HashMap,其實很少去了解裏面具體的算法和結構,說心裏話也真心沒有太大必要去了解。
在這個時候如果面試官揪着這堆東西不放,或者非要你說明白裏面的很多配置。那基本上可以說明給你面試的人有病或者是有點孔乙己的意思了。
當然,還是建議在面試的時候複習下 HashTable 和 Hashmap 的關係,如果你真想啃一下的話,不妨去看看源代碼。
100 以內素數編程,在線寫
題目要求非常簡單,就是將 100 以內的素數打印出來就可以了。
這個題目的難度並不大。但是如果你沒有遇到過或者沒有刷過這個題目的話,可能就會被搞懵逼了。
這個題目有幾個關鍵點,首先 1 是一個特殊的素數,因此你的循環需要從 2 開始。這個很多時候和我們使用的循環從 0 開始有不同。
這個題目能夠快速解答的關鍵就是需要使用定義的函數來做,儘量不要在循環裏面嵌套循環,因爲這樣你會很難跳出這個循環,並且循環的起止判斷不好判斷。
瞭解了這 2 個點以後就可以比較容易的解決這個問題了。
有關素數的算法中間和代碼,請參考:Prime numbers from 1 to 100 (打印 100 以內的素數) 中的內容。
面試總結
這次面試時今年開始打算換工作以來的第一次面試,因此本身就是當成練手的性質了。
很多工作過比較長時間的人都會知道,在找工作之前,需要進行突擊的算法,數據結構,基礎概念的鞏固。因爲在實際工作中,這些東西沒有人會用到,也沒有人會無聊到去刷這些東西。
但是找工作的時候確不得不進行了解了。
總結這次面試來說就是準備不充分,基本上沒有刷題就上去寫了,而且有一段時間沒有在記事本上寫代碼了,因此基本上是被他們搞懵逼了。
一上來就弄 HashTable 的算法,這個其實還是有點難度的,如果沒有認真複習過一些常用的數據結構的話,肯定是做不出來的。
因爲不是非常理想的狀態來進行面試的,那麼這個結果就可想而知了。
當然這 2 個題目用於鞏固下基礎還是非常不錯的。