感悟
這個世界有一個“二八原則”在好多地方都發揮著作用,在Android開發上我認為也一樣有用。做一個Android開發,你也許只會用到Android開發知識中的20%,有80%其實你學了也不一定會用。
而面試官也一樣,他也可能只掌握了20%的知識,而且一個面試也不會有足夠多的時間給你展示你全部的知識,而往往只會注意開發中最常遇到的20%。這時候,你對這些問題理解的深度就顯得尤為重要。回答了10個問題,而每個問題都只是淺顯分析,還沒有你將一個問題講得透徹、全面更能讓面試官加分。
第二層
面試官對我的偷雞取巧并不滿意啊,他需要我提速,這個速度不行啊。
What??是有時間復雜度更低的嗎?不不不,這是一道核心竟然是一道多線程的題目。
- 將10億的數據分片,通過分治的思維對數據進行第一次處理。
- 開啟多線程然后對其進行這些分片的數據進行優先級隊列操作。
- 然后每個子線程篩選出其中最大的k個數
- 當所有線程執行完畢之后合并數據
我猜測的第三層
- 是不是考慮下多少個數據一分片,然后如何把效能提升到最高的問題?
- 構建多少個線程讀取效率是最高的?
這個都是我沒想到的,各位大佬有想法的可以聊一下啊。
題二:一篇文章內的單詞數量
這題乍一看臥槽貌似不難,foreach循環碰到一個空格或者標點的情況下sum++,是不是就可以解決這個問題。
然而事情并沒有想想的這么簡單。面試被問到這種問題最難的是什么,可能是對于這題目真實的邊界問題的思考。
- 如果這篇文章內容很大怎么辦,會不會把內存吃光?
- 如何給單詞去除重復?
是不是可以考慮逐行讀取呢?
將其轉化成IO流,逐行讀取流,之后對這個輸入內容進行一次計數操作,是不是就可以解決這個問題呢。
單詞重復的問題
臥槽,這個真簡單HashSet啊!!!!那么如果海量數據我是不是又炸了?
臥槽,死亡螺旋嗎。或許我們可以考慮下用hash的方式來解決,只保留單詞的hashcode,是不是可能可以解決呢。
同樣的這個也可以使用多線程分片去優化
方式的話基本也和上面是完全一樣的,只要把數據分片,之后多線程調度,然后合并結果就可以了。
尾聲
以薪資待遇為基礎,以發展為最終目標,要在高薪資的地方,謀求最好的發展!
下面是有幾位Android行業大佬對應上方技術點整理的一些進階資料。有**Android架構視頻+BATJ面試專題PDF+核心筆記等資料。希望能夠幫助到大家提升技術。如果大家想要獲取的話,可以免費獲取哦**
以免費獲取哦
[外鏈圖片轉存中…(img-1gOWqfoZ-1621435640346)]