如何不浪費又一年的求職黃金期,你可能需要這份Android大廠面試攻略&面試官篩人思路

馬上就又要到金三銀四求職的黃金期了,很多資深面試官都說其實他們每天都要面試考覈很多應聘者,但是通過的人卻寥寥無幾。他們有幾個面試觀點可能比較重要,對你的面試和職業規劃或許會很有幫助,在這分享給你:

現在的你,到底該不該換工作?

待遇薪資、公司平臺、團隊氛圍、老闆實力等等這些因素,綜合影響着你的工作和發展,如果沒考慮清楚這些就去換工作,你的沉沒成本就太大了,每次都重新開始,毫無積累。

應聘是需要準備的。

首先是簡歷,要用自己的經歷去聊,而不是用文字寫。並且不要打自己的臉,精通就是精通,熟悉就是熟悉,瞭解就是了解。還有,面試前要準備哪些技能知識?要不要準備算法題?以及如何表達你做過的項目?這些你都需要好好地準備一下。如果你沒有準備的話,那麼被pass掉的概率會非常大。

僅僅是做項目變現的公司,該去麼?

這樣的公司的核心競爭力主要是利用自己的人脈和關係拉項目,“做一票、賺一票”。他們並不創造新事物,只有創造新事物的公司才能稱得上是創業工作。如果你想加入創業公司,很多時候靠的是一股子衝勁兒,直接點說就是賭,你想清楚了嗎?

很多人沒有意識到“慢性死亡”的過程。

你當下可能身處一家不錯的公司,薪水也很高,工作也很舒心,好像沒必要折騰。但在老闆的角度看,這是個簡單的性價比問題。時間不斷流逝,如果你只是資歷更深了,但是能力沒有邁上新的臺階,那麼相比於一個更加年輕的程序員,哪個性價比更高?答案是顯而易見的。

這些問題是不是讓你恍然大悟,又心生惶恐。面試不等同於考試,搞定考覈範圍內的所有內容,考試也就八九不離十了。但面試是人與人的溝通,你也可以看成是一次博弈。面試流程是怎樣的?面試官在想什麼?更重要的是,面試更應該站在職業規劃的層面去看待,去長期規劃。

眼看年底到了,肯定很多人都躍躍欲試,準備跳槽到大廠,升職加薪。阿里巴巴、騰訊、字節跳動,這些大廠技術面試官的選人思路是怎樣的?廢話不多說,先看看這份《大廠面試攻略》大綱吧,可能正是你面試大廠需要的。

阿里巴巴

一面

  • 說一下你怎麼學習安卓的?
  • 項目中遇到哪些問題,如何解決的?
  • Android事件分發機制?
  • 三級緩存底層實現?
  • HashMap底層實現,hashCode如何對應bucket?
  • Java的垃圾回收機制,引用計數法兩個對象互相引用如何解決?
  • 用過的開源框架的源碼分析
  • Acticity的生命週期,Activity異常退出該如何處理?
  • tcp和udp的區別,tcp如何保證可靠的,丟包如何處理?

二面:

  • 標號1-n的n個人首尾相接,1到3報數,報到3的退出,求最後一個人的標號
  • 給定一個字符串,求第一個不重複的字符 abbcad -> c

美團

一面

  • 自我介紹
  • 面向對象三大特性
  • Java虛擬機,垃圾回收
  • GSON
  • RxJava+Retrofit
  • 圖片緩存,三級緩存
  • Android啓動模式
  • 四大組件
  • Fragment生命週期,嵌套
  • AsyncTask機制
  • Handler機制

二面

  • 面試官寫程序,看錯誤。
  • 面試官寫程序讓判斷GC引用計數法循環引用會發生什麼情況
  • Android進程間通信,Binder機制
  • Handler消息機制,postDelayed會造成線程阻塞嗎?對內存有什麼影響?
  • Debug和Release狀態的不同
  • 實現stack 的pop和push接口 要求:
    1.用基本的數組實現
    2.考慮範型
    3.考慮下同步問題
    4.考慮擴容問題

豌豆莢

豌豆莢一面

  • 介紹一下你的項目
  • 網絡框架的搭建
  • 圖片加載框架的實現
  • 寫個圖片瀏覽器,說出你的思路
  • 上網站寫代碼,如下: 有一個容器類 ArrayList,保存整數類型的元素,現在要求編寫一個幫助類,類內提供一個幫助函數,幫助函數的功能是刪除 容器中<10的元素。

豌豆莢二面

  • Activity的啓動模式
  • 事件分發機制
  • 寫代碼,LeetCode上股票利益最大化問題
  • 寫代碼,劍指offer上第一次只出現一次的字符

豌豆莢三面

  • 聊項目,聊大學做過的事
  • 寫代碼,反轉字符串
  • 寫代碼,字符串中出現最多的字符。

新浪微博

一面

  • 靜態內部類、內部類、匿名內部類,爲什麼內部類會持有外部類的引用?持有的引用是this?還是其它?

靜態內部類:使用static修飾的內部類
匿名內部類:使用new生成的內部類
因爲內部類的產生依賴於外部類,持有的引用是類名.this。

  • ArrayList和Vector的主要區別是什麼?

ArrayList在Java1.2引入,用於替換Vector

Vector:

線程同步
當Vector中的元素超過它的初始大小時,Vector會將它的容量翻倍

ArrayList:

線程不同步,但性能很好
當ArrayList中的元素超過它的初始大小時,ArrayList只增加50%的大小

先執行try中代碼發生異常執行catch中代碼,最後一定會執行finally中代碼

  • switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch支持使用byte類型,不支持long類型,String支持在java1.7引入

  • Activity和Fragment生命週期有哪些?

Activity——onCreate->onStart->onResume->onPause->onStop->onDestroy

Fragment——onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume->onPause->onStop->onDestroyView->onDestroy->onDetach

  • onInterceptTouchEvent()和onTouchEvent()的區別?

onInterceptTouchEvent()用於攔截觸摸事件
onTouchEvent()用於處理觸摸事件

  • RemoteView在哪些功能中使用

APPwidget和Notification中

  • SurfaceView和View的區別是什麼?

SurfaceView中採用了雙緩存技術,在單獨的線程中更新界面
View在UI線程中更新界面

  • 講一下android中進程的優先級?

前臺進程
可見進程
服務進程
後臺進程
空進程

tips:靜態類持有Activity引用會導致內存泄露

二面

  • service生命週期,可以執行耗時操作嗎?
  • JNI開發流程
  • Java線程池,線程同步
  • 自己設計一個圖片加載框架
  • 自定義View相關方法
  • http ResponseCode
  • 插件化,動態加載
  • 性能優化,MAT
  • AsyncTask原理
  • 65k限制
  • Serializable和Parcelable
  • 文件和數據庫哪個效率高
  • 斷點續傳
  • WebView和JS
  • 所使用的開源框架的實現原理,源碼

網易杭研

一面:

  • 自我介紹
  • Android中ClassLoader和java中有什麼關係和區別?
  • 熟不熟jvm,說一下Jvm的自動內存管理?
  • 語言基礎,String類可以被繼承嗎?爲什麼?
  • Final能修飾什麼?(當時我說class、field、method,他說還有嗎?然後又叫我不要在意,後來回想起,應該是問到我在參數裏面要不要用final,接下來是因爲匿名內部類)
  • Java中有內存泄露嗎?(先說本質,再結合handler+匿名內部類)當時如何分析的?
  • 描述下Aidl?覺得aidl有什麼缺陷(這裏在這個問題上回答有欠缺)
  • 評價一下我,如果順利進網易,需要往技術棧加什麼點儘快投入業務?

二面:

  • 用過什麼開源,舉一個例子?(volley)
  • Activity生命週期?情景:現在在一張act1點了新的act2,週期如何?
  • Act的launchMode,有沒有結合項目用過(自己的程序鎖和微信的PC端登陸對比,不過我現在又發現,應該大約估計可能是動態加載的一個缺陷,如果有找到相關信息,請務必跟我說。具體問題就是,當在PC端登錄時,Android終端的微信會跳出,即使wechat的task不是在fore,當按下確認,返回的是wechat,而不是自己先前的app)
  • View的繪製原理,有沒有用canvas自己畫過ui?
  • 以後想做Android什麼方向?(中間件+SDK)
  • 怎麼看待前端和後端?
  • 如果學前端會如何學?
  • 優缺點?興趣?
  • 想不想來杭州?
  • 評價一下我?往技術棧加什麼?

三面HR:

  • 爲什麼想來網易?
  • 有投其他公司嗎?
  • 網易最吸引你的是什麼?
  • 想來杭州嗎?
  • 評價一下我?

進大廠的訣竅

經過這幾年的“摸爬滾打”,我發現進大廠確實有一些訣竅,對於和我一樣背景一般的同學,只要你抓住了訣竅,進大廠不是夢。

1)一定要提前準備,至少準備個一個月,網上的面試題多看看,對於那些高頻題目,帶着理解去學習,實在不能理解的就背下來,大家高考的時候不都是背過來的。

2)大廠通常有很多部門,每個部門的hc數和招人標準都不一樣,即便是同個部門,如果hr不同,標準肯定也不一樣,重複投簡歷可以增大我們拿到面試機會的概率。同理,重複面試不同的部門,也可以增大我們進大廠的概率。

3)大廠經常會佈局新業務,新業務需要快速啓動入場,hc通常會有很多,因此招人的標準會稍微降低,這個時候是個絕佳的機會。我當時進的就是個新的業務部門。

面試系統複習路線

有時候,選擇比努力更加重要,機遇比奮鬥更加重要。但是,機會只留給有準備的人。我們只有時刻準備着,才能在機會到來的時候,去抓住它。

這裏給大家分享一下我的面試複習路線,有需要的朋友可以參考一下:

1、看視頻進行系統學習

前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因爲Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以通過視頻來學習,效果更好,也更全面。關於視頻學習,個人可以推薦去B站進行學習,B站上有很多學習視頻,唯一的缺點就是免費的容易過時。

2、進行系統梳理知識,提升儲備

客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。

系統學習方向:

  • 架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO

  • Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化

  • 360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化

  • 解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack

  • NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發

  • 微信小程序:小程序介紹+UI開發+API操作+微信對接

  • Hybrid 開發與Flutter:Html5項目實戰+Flutter進階

知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。

3、讀源碼,看實戰筆記,學習大神思路

“編程語言是程序員的表達的方式,而架構是程序員對世界的認知”。所以,程序員要想快速認知並學習架構,讀源碼是必不可少的。閱讀源碼,是解決問題 + 理解事物,更重要的:看到源碼背後的想法;程序員說:讀萬行源碼,行萬種實踐。

4、面試前夕,刷題衝刺

面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。

關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:

以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者關注主頁掃描加 微信 獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章