首頁>職場>

由於面試時間已經較為久遠,本文就不按照輪次劃分了,按照我自己梳理的順序劃分。

有的內容記不清楚了,可能有遺漏;有的內容可能沒有問到,但我覺得需要複習,也寫出來供大家參考。

所以實際上不算是面經了,算是個經驗總結

二、面試注意項

個人認為,下面幾點是很基本的要求,不算加分項,但做不到絕對是扣分項。

守時:別遲到,最好提前十到五分鐘進入面試房間(影片面),攝像頭耳麥等提前一天除錯好;耐心:如果面試官有事推遲,保持耐心,不要焦躁;禮貌:基本素養;誠實:簡歷要誠實,問答要誠實,不會的問題不要強答;保持微笑:即使身處險境,也要保持微笑;保持謙卑:切勿狂妄。三、主要分享下個人一面情況

由於每個人的情況不同,本人很菜,懂得有限,輕噴輕噴

1.請程式設計實現單例模式,懶漢和飽漢寫法

2.請程式設計實現Java的生產者-消費者模型

3.HashMap的內部結構? 內部原理?

4.請簡述Android事件傳遞機制, ACTION_CANCEL事件何時觸發?

5.Android的程序間通訊,Liunx作業系統的程序間通訊。

6.JVM虛擬機器記憶體結構,以及它們的作用。

這個問題也比較基礎,JVM的記憶體結構如下圖所示。

7.簡述Android的View繪製流程,Android的wrap_content是如何計算的。

8.有一個整形陣列,包含正數和負數,然後要求把陣列內的所有負數移至正數的左邊,且保證相對位置不變,要求時間複雜度為O(n), 空間複雜度為O(1)。例如,{10, -2, 5, 8, -4, 2, -3, 7, 12, -88, -23, 35}變化後是{-2, -4,-3, -88, -23,5, 8 ,10, 2, 7, 12, 35}。

9.陣列中存有1-3的三種數字,例如[1,2,3,1,2,2,1,3,3],將其排序為[1,1,1,2,2,2,3,3,3],要求時間複雜度,後續將內容變為一個物件,繼續排序

10.1~100盞燈,都是亮的,第一次將能被1整除的數的燈按下,變暗,第二次將能被2整除的數的等按下,變亮,第三次將能被3整除的數的等按下,變暗…第100次將能被100整除的數的燈按下,問,最後有多少盞燈是亮的?

整個面試過程,其他都還好,最後幾道題都沒答好,這也跟我平時刷題訓練太少,就掛在了演算法這類題目上。

看到這裡,我想這是許多人的疑問,是啊,為什麼大廠都要考演算法和資料結構呢?

實際上之所以有很多問題我們不明白不理解,是因為我們所處的角度的問題,在這裡如果你站在老闆的角度上思考問題一切就簡單了。

四、升職加薪

老闆開公司的目的是為了什麼?錢啊,資料結構與演算法有什麼用呢,能為老闆省錢啊,能為老闆省錢的技術你說重要不重要。同樣一個程式,你的執行起來需要10臺伺服器,另一個人的只需要2臺,如果你是老闆的話該為誰升職加薪呢?

資料結構與演算法就是這樣一種能為老闆多賺錢(能省錢也就是多賺錢)的技術

五、那站在程式設計師的角度呢?

很多初學者甚至有工作經驗的程式設計師避免學習資料結構與演算法,一方面因為其固有的複雜性;另一方面他們覺得資料結構和演算法在實際工作中根本就沒什麼用嘛,我們用一個最簡單的遊戲來開始本篇的討論。

有一個猜數的遊戲,玩家說出一個數字,主持人會告訴玩家這個數字是大了還是小了,看誰猜的次數最少,最好的辦法是什麼呢?很顯然:

假設丟擲的數字是100,主持人告訴你猜大了,那麼接下來應該猜50;如果主持人告訴你猜小了,那麼接下來應該是75;如果又猜大了,那麼接下來應該是62,如果又小了,那麼應該是56,Congratulations,恭喜你猜到了,實際上你在用二分查詢的策略。

這個簡單的示例應該能讓你意識到現實生活中演算法的重要性,如果你僅僅認為資料結構與演算法只在面試時才有用那就大錯特錯了。

因此,簡單總結一下資料結構與演算法的重要性

透過面試,找到心儀的offer,進入大廠

使用資料結構與演算法高效解決面臨的複雜問題,為老闆省錢從而升職加薪

六、進入頂尖大廠

許多人會問為什麼很多大廠面試第一關就是演算法而不是程式語言、框架等等。

現實中公司尤其是擁有大規模使用者群的的大廠會面臨很多複雜且有挑戰的問題,這些問題都是由像hash表、樹、圖以及各種演算法來解決的,比起其它方面,面試官其實更看中候選者是否能運用資料結構與演算法來高效解決給定問題。

來自Google、微軟、Facebook、Amazon等公司的程式設計師可以獲得更高的薪水,為什麼?在這些公司中編寫程式碼僅僅佔據了大概20%-30%的時間,那麼剩下的時間都在幹嘛呢?

剩下的時間是在尋找或設計更高效的演算法以節省公司的資源(主要是伺服器),為什麼這些人主要在做這件事呢?因為這些公司擁有全世界最多的使用者,Facebook、YouTube、Twitter、 Instagram、 GoogleMaps等其使用者都有數十億之多,這背後需要的計算資源可想而知,那麼這些資源可都是用錢堆出來的,你用高效的演算法為公司節省哪怕0.1%的計算資源,換算成錢的話可能都有數億美金了,這就是演算法的重要之處。

假設你在Facebook工作並且想出來一個很牛的演算法,使得計算速度由O(N2)提升到了O(NLogN),假設這裡的問題規模N為一億(考慮到Facebook的使用者規模這已經很保守了),那麼O(NLogN)大概為8億,而O(N2)是100000000億,那麼你的演算法從效率上提升了大概一千萬倍,想一想這種效率上的提升能為公司節約多少成本。

現在你應該知道為什麼世界上頂尖公司都喜歡僱傭那些聰明傢伙了吧,就是因為他們在程式碼效率的一點提升就能為公司節約極大的成本。

我們的現實世界充滿了各種富有挑戰的問題,有些問題甚至依然沒有高效的解法,深度理解這些問題,哪怕你的解法能提升一點點效率,有了這樣的能力想進大廠我想不會有哪個老闆會傻到拒絕你吧

七、最後

為了幫助大家更好的掌握資料結構與演算法,博主會持續更新LeetCode題解,演算法類的文章先比其它會略顯枯燥,為了幫助大家更好的理解博主會盡可能詳細進行講解,當然,一語勝千文,對於演算法來說更是如此。

音影片影象對於我們來說天生更加容易理解,因此這一系列影片的目的就在於用圖形化的方法來一步一步詳細講解LeetCode,每一份影片都會講解最終演算法是如何設計出來的、以及演算法是如何執行的,希望這個專案能幫助讓大家徹底理解並掌握演算法。

最後為了幫助大家深刻理解Android相關知識點的原理以及面試相關知識,在這裡我也分享一份乾貨,由大佬收錄整理的Android學習PDF+架構影片+原始碼筆記,還有高階架構技術進階腦圖、Android開發面試專題資料,高階進階架構資料幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習。

23
最新評論
  • 工作沒回報,還要繼續嗎?
  • 50歲的人了,工作還要拼搏麼?