"備受爭議"的一家電商公司,發展很快,不過這不是我想說的重點,我想說的是,拼多多的兩位技術面試官很和善(固然hr同窗也很好了~),提出的問題很新穎,就拿Handler來講吧,大部分的公司都會直接問,說說你對消息機制Handler的理解,拼多多的提問大概意思是:程序員
1.讓你設計一個線程池,若是調用者在傳入的Runnable任務時,在run方法直接使用了Handler,會發生什麼? 2.1的問題還比較簡單,子線程不會默認給你一個looper,你須要調用prepar去建立,調用loop去開啓無限循環,這是一個正常的回答,問題又來了,面試官又問你,接下來又會發生什麼? 3.到這裏我相信會有一些同窗暫時會"蒙"一下,心想,應該不會發生什麼了吧?2中已經提到loop是無限循環取消息,若是到如今什麼都不作,這個線程會一直停留在run方法中,結束不了.到這裏還沒完。 4.知道IntentService嗎,它裏面也有一個Handler,它是如何結束執行呢,若是屢次start這個IntentService,它又如何判斷何時結束呢?面試
這系列問題都不難,但我想說的是答案並不重要,重要的是咱們在學習的時候不但要多問爲何,還要把各個知識點能夠串聯起來,這個很重要,若是各個知識點都略知一二,都串不起來,說明沒有正真的理解。也體會不到學習的樂趣。算法
爲了能夠更加深入的體會到"知識點串聯"的重要性,我這裏再舉一道題:小程序
1,相信你們都被問過activity啓動流程,也被問過activity生命週期,也被問過ui繪製流程,固然也被問過在activity的oncreate方法中,爲何獲取不到控件的寬高,如何才能夠獲取,爲何? 2,上面一口氣說了四道經典面試題,固然答案不重要,這裏我在追問一下:若是在onresume方法中能夠獲取控件寬高嗎?在追問一下:ui繪製流程和activity生命週期有什麼關係,或者ui開始繪製的時機到底在何時? 3,因此仔細想一想,這些知識點都是有關係的,咱們在複習的時候應該這樣去想,這樣才能夠更加有效率的去學習,才能夠更加快速的擺脫初級工程師的帽子。設計模式
這裏最後舉一道題,以結束拼多多面試給帶來的思考: 你們都知道子線程不能更新ui,我再追問一下,子線程真的不能更新ui嗎(答:是能夠的,也不會報錯,固然答案不重要)。數組
我心目中大廠中的大廠,正由於這樣也是我這麼屢次面試中惟一緊張的一次,還好結果還很滿意。兩位面試官也給我提了不少建議,很感謝,這裏仍是用一道現場面試題來表達個人思考吧。性能優化
你對網絡請求作過哪些優化呢~網絡
1, 對於我這種菜鳥來講,這道題真的很空洞,可是我不能就這樣簡單的回答,我不知道,我沒作過,網絡這塊我只用了現成的框架,這樣回答確定會掛的! 2, 我相信若是我是面試官,對面坐着一位工做經驗不足1年的同窗,我也不期待他能夠把這道題回答的很好,但我也不想聽到那麼簡單的我不知~ 3, 因此,對於這道題而言,我首先回答了下okhttp中連接池複用,又簡單講了下對HttpDNS,IP直連的理解,以及對Http2.0多路複用,長鏈接的理解等等,固然我理解的很是淺,也固然答案並不重要,重要的是你面對一道不會的題目時,不要簡單的去說no,傾其全部,把你的想法和思路都列舉出來,無論對錯,讓面試官看到,你在思考~數據結構
當我簡單說完這些思路後,面試官又給我深刻解釋了下,很是感謝接下來我也會查盡資料去深刻學習這塊知識,固然其餘知識模塊也都要慢慢去深刻,去總結~架構
在去面試的路上,感受小米總參好遠好偏僻,到了以後,環境還能夠,不過接下來的面試就不是那麼順利了,這多是我此次全部面試經歷中最糟糕的一次了…使人意外的是我竟然還經過了面試,幸運~
小米此次面試經歷可能對個人影響最大,由於此次經歷算是刷新了我一次認知(說是刷新認知,可能誇大了些,但我找不到其餘詞語來描述了,就這樣了),仍是用一道現場面試題來:
依然答案並不重要,我記得我回答這道題目的時候有理有據,面試出來後,我總感受哪不對,就又認真看了看源碼,寫了個demo去驗證,果真個人回答大錯特錯,如今回想面試官聽我回答的時候是什麼想法,感受好尷尬~
給個人啓示是,看源碼的時候,要帶着問題去看,可能這個誰都知道吧,我就不着重提醒了。另外對我這樣初級程序員來講,看源碼的時候不可避免的會去搜索現有的文章幫助理解,這無可厚非,重要的是不要百分百依賴這些文章,個人意思不是說這些文章寫的很差,我可能更多的想要強調一個自主獨立性,由於你看源碼時的思惟模式可能和文章做者的不一樣,這樣可能就形成你一直在跟着做者走,沒有了本身的思考方向,所以也可能去忽視或者誤解其中某些知識點,形成我此次的尷尬~
還有看完源碼後,若是能夠,動手寫一個demo去驗證你所學到的知識就更好了,另外更加深層次的要求是,若是能夠手動模仿寫一個大概的功能框架,相信會對其中實現的細節更加透徹,好比手寫Handler,手寫Retrofit等等。
對於網易,個人第一印象就是「豬廠」,本身養的豬必定很好吃,哈哈,惋惜沒有吃過網易的食堂,必定很好吃_
網易的兩輪面試中沒有提問一個具體的知識點,這點有的意外,因此印象很深入。 一面全程問的是個人項目經歷,重難點是什麼以及解決方案,在前面的「面試風格」那部分也提到過,感覺也在前面說了,總結一句話就是:平時工做中必定要多積累項目中的重難點。雖然一面的最後也問了道算法題,但很簡單,就不提了。
二面面試官我感受是一名技術總監,由於全程問的是開放性問題,其中一個問題是:你如何看待flutter,flutter可否真正的普及。差很少是這個意思把。
字節跳動是我一直很嚮往的一家公司,創新、活力、強大、潛力,是目前爲數很少能夠挑戰bat地位的獨角獸。
在頭條的面試過程當中,印象最深入的一個問題是對MVC、MVP、MVVM的理解,以及MVVM的實現方式有哪些。雖然不少博客也都介紹過三者的區別,以及MVVM的實現
我認爲這道題目很重要,由於經過這道題目的考察,能夠看出一名程序員是否在程序設計上有過本身的思考,而不是在工做中簡單的「搬磚」。
在Android架構設計中,大致上只有三種設計,組件化,插件化,再加上MVVM(或mvp、mvc),若是再可以熟練都應用各類設計模式,理解設計模式的六大原則,那麼你的代碼寫的必定很漂亮。
同時因爲頭條在面試中很是注重算法,這段時間我也狠狠的總結了一下算法相關的知識點。
數組類、鏈表類、樹類,位運算類,大數處理,簡單的動態規劃,特殊的數據結構,如map,set
若是對算法並非那麼感興趣,僅僅想要應付面試而言,算法其實並不可怕,你們都知道頭條多是面試算法最多的一家公司了吧,即便這樣,頭條算法面試中的題目也都不難,無非是上面中的分類,數組,鏈表,以及二叉樹的操做,最多加一些簡單的動態規劃題目~
例如中序遍歷二叉樹,使用非遞歸方式,就拿這道題而言,很是基本,也沒有難度,但願對算法面試畏懼的同窗提升信心,認真學習數據結構就能夠了(另外在補充一點,對於校招而言,由於有一個線上筆試環節,筆試中的算法平均難度稍微高於面試中的)
這裏我還想再囉嗦一點,由於對於算法的準備你們大都不知到如何去複習,只知道一味的刷題,尤爲是對於數據結構薄弱的夥伴來講,沒有目的的刷題並不能真正提升你的算法能力,更多的是你的自我安慰,心理告訴本身在學算法,然而並無效率。
首先必定先要認認真真學的數據結構,圖的那章若是不想看,對於算法面試而言能夠不去看,還過有精力的仍是去看看,畢竟樹與圖之間仍是有不少類似之處。 基礎很差的夥伴在刷題的時候必定要注意一下幾點:
開始時先按照類型去刷,諸現在天看數組類算法題,明天看鏈表類的等等 每刷一類題目時必定要去總結其中的知識點,將這類題目的特色,經常使用的方法,常考的方向必定要理解透徹,這樣纔有效率,纔會進步。 基本類型的題目都刷過一遍時,再回頭總結全部題目經常使用的思想 以上操做都應在數據結構學的比較牢固的基礎上進行才更有意義,所謂磨刀不誤砍柴功嘛
「職業規劃」可能這四個字說的可能大了點,本質其實就是一個目標,包括你的當前目標,短時間目標,長遠目標等等。一樣這也是面試中最常問到的一個問題,無論在技術面,仍是在hr面都是有可能被問到的,而且機率很大,幾乎每家公司都會問,因此對於這個問題,咱們必須有所思考和實際的規劃,不只僅是爲了應付面試,還關乎咱們的將來,有了適合本身的方向,才能更有效率、更有動力的前進,畢竟咱們都有夢想~
個人面試經驗分享可能不會去羅列太多的具體題目,由於我依然認爲面試經驗中最寶貴的不是那一個個具體的題目或者具體的答案,而是結束面試時,那一刻你的感覺以及多天以後你的回味~
想學習更多Android知識,或者獲取相關資料請加入Android開發交流羣:1018342383。 有面試資源系統整理分享,Java語言進階和Kotlin語言與Android相關技術內核,APP開發框架知識, 360°Android App全方位性能優化。Android前沿技術,高級UI、Gradle、RxJava、小程序、Hybrid、 移動架構師專題項目實戰環節、React Native、等技術教程!架構師課程、NDK模塊開發、 Flutter等全方面的 Android高級實踐技術講解。還有在線答疑