1. 程式人生 > >你問我答,準備面試需要做哪些技術儲備,面試官更加關心什麽方面的技術點?

你問我答,準備面試需要做哪些技術儲備,面試官更加關心什麽方面的技術點?

練習 標題 activit 準備 分頁 三方 體系 很多 微信

這個系列整理了關於如何進入大廠的一些問題,包含了技術儲備,面試官更加關心什麽方面的技術點等等
一 第一個問題:
準備面試,工作 3 年了想面個大廠,現在那面試官會更註重問哪方面呢?是算法還是那些框架原理?還是 Android 源碼?還是看你做過的項目經驗?我知道肯定都會問到,那麽問的那一方面偏多呢?因為精力有限,想在一方面深入了解一下,突出自己的一技之長。
回答1;
簡單說幾個方面:

  • GitHub 上獲得別人認可(Star)的開源框架(開源方向)
  • 對 React-Native 或者 Weex 或者熱修復框架有比較深入研究的(動態化方面)
  • 技術上有個人見解,並影響到其他同學的(影響力)
  • 在國內或者國外技術網站上發表過文章(個人能力)
    這幾點,如果能有一點做的比較出色,筆者認為即是一技之長。
    回答2;
    在我看來對技術的熱愛永遠是第一位的,這是因為有這種熱情無論解決什麽技術問題,都是時間問題,所以如果有自己的博客、開源項目會加很多分。

如果我作為面試官,具體面試的東西還是會根據面試者的情況制定的,現在一線大廠社招基本也得在資深以上了,我會先問 Java( 線程安全、JVM 原理),然後會問寫 Android(基本的性能優化、架構思想及 Android Framework ),涉及到算法的應該不多,但是不排除有一些想炫技的面試官。大廠對知識的廣度和深度都會考察,但是對某一領域的深度會更打動面試官。
二 第二個問題:筆試成績高對面試有影響麽?


“想準備明年春招,請問筆試成績高對面試有影響麽,會比較容易嗎?”
回答;
我覺得筆試成績高低對面試是有影響的,個人覺得比較好的面試流程是先筆試,然後後面的面試官都拿著你的面試結果來有針對性地考查你,如果大部分題目都答對了,那麽面試官就會感覺到你可能水平不錯,也就會問些稍微難點的題目挑戰你,不會上來就問”你說下 Activity 的生命周期(或者啟動模式)“這種爛大街的題目了。如果你某道題目做錯了,他也許就會問你為啥選了那個錯誤的答案?一方面看你是如何思考的,到底是哪個知識點存在漏洞,另一方面,如果你知道你做錯了,你是否回去研究了到底為啥做錯了,這點挺重要的。我曾經經歷的阿裏實習生面試時,每次下一個面試官都會問我上次面試官問過的我答錯了的題,他就是想知道我後來回去有沒有把知識點補起來。筆試成績不能決定是否能拿到 offer,但是或多或少都會影響後面的面試的。
三 第三個問題:如何讓自己保持一個隨時可面試可跳槽的狀態呢?
第一個是如何讓自己保持一個隨時可面試可跳槽的狀態呢?是在項目中不斷總結沈澱呢?還是要不停的去鉆研一些面試題或者算法題呢?(感覺很多面試題在實際項目中用到的不多)另一個問題是,Android 開發(或者說客戶端開發)天花板是不是很低呢?如果是的話,如何進行突破呢?
回答1;
①第一問:為何要隨時保持一個可以跳槽的狀態呢?既然到了一個公司就應該盡力去適應這個公司的發展,要不然自己走過的路都被自己否定了。到公司後,可以針對項目中不太好的地方進行優化和調整,對於新開的業務或者功能,可以考慮使用最新的技術去解決相關問題,這樣就可以不斷的自我擴充。必要的時候需要去看一看算法,我平時會去 leetcode 練習一下算法,因為算法真的很重要,很多公司都會很註重算法的。面試題很多來自於敲代碼和思考的一些過程,應該在我們工作中去尋找一些解決方法,同時可以看一看別人總結的經驗,對我們來說還是很有幫助的。
②第二問天花板這個詞用的很妙,很含蓄,一開始真沒反應過來哈。其實 Android 的技術瓶頸並不是很低,有很多的東西都需要你去了解和掌握。首先是基礎的東西,其次是各自的原理(handler, animation),然後是一些主流的開源框架(okhttp, fresco),最後如果還想想深造一步的話,可以去看看 Android 系統的源碼,Android 源碼的設計模式等。當你感覺有能力的時候,可以嘗試跟一撥人一起完成一個功能,提升自我價值,開源相關項目,汲取更多智慧,至少我目前是這樣做的。我本人其實並不打算一直往技術底層走,但是該了解的還是會先去了解。我想擴展認知範圍,不僅會 Android,也要會相關的東西,畢竟一輩子時間那麽的長,也應該擴展一下自己的見識面吧。
回答2;
第一個問題談到“如何保持一個隨時可面試可跳槽的狀態”,其實這不僅是一個很難維持的狀態,而且還是一個很不好的狀態。為什麽呢?因為如果總是不滿足當前的工作內容或者薪資待遇一心想著跳出去的話,那麽就總是需要去鉆研面試題或者算法題,這樣會浪費很多原本可以用來提高自己的知識儲備和實戰技能的寶貴時間。舉個例子為例,A第一份工作是在魅族,待遇一切都好,可是發現不怎麽喜歡做 framework 層開發,更喜歡做應用層開發,是的,就是這麽膚淺(逃)。部門老大很好,安排到其他組幫忙做了段時間的應用開發。後來,思來想去,還是想找個做應用開發的工作,於是花費了幾個周末的時間去圖書館看書復習那些面試中問來問去的東西,此外,由於不是校招生,工作經驗還不到半年,所以簡歷關基本上都過不了。最後整個跳槽過程耗時數月,陰錯陽差來到鵝廠,不能說這期間沒有收獲,但是這些時間原本是可以更好的利用的。所以,我個人建議把時間發在當前的工作崗位上,做出成績來,得到大家的認可更好些。平時的確是需要不斷總結沈澱的,我每個階段的任務我都會總結一下,比如相機模塊的開發、RN 模塊的開發、耗電量統計以及應用瘦身等等,知識沈澱了,經驗增長了,心裏會很開心的。

第二個問題是關於“客戶端開發的天花板”的問題,個人認為觸碰到客戶端開發的天花板還是比較難的,能完成平時的業務開發只是“地板“,要是真能熟練掌握 Android 應用開發方方面面的知識,在知識廣度和深度上都有所造詣應該不簡單吧。再來就是基於客戶端我們還能做什麽?音視頻?圖像處理?機器學習?AR/VR?這麽多有意思的領域等著我們去探索,想想都很有勁不是嗎?我個人比較喜歡移動端的圖像處理和機器學習的領域,知識儲備主要還是研究生階段課程的內容,在移動端的實踐較少,所以平時也就是關註下而已,沒有機會實踐。如果想要突破的話,可能真得下番苦功夫,潛心鉆研,實踐出真知。總之,我覺得客戶端開發的天花板並不低,倒是起點低了很多,湧進來的浮躁的人也就多了。一位牛人曾經說過,“當我學到更多的知識時,我感覺自己更加無知了”,與君共勉之。
回答3;
“隨時可跳槽”這個想法不錯,但不建議讀者老想著跳槽。
在項目中沈澱知識和經驗,這是必須的。知識是全球通用的,每個人都可以獲取;但經驗,是你在項目中遇到問題、思考、解決後,才能積累,別人拿不走。舉個簡單例子,“會用 okhttp、retrofit 是知識”,“會用 okhttp、retrofit 請求我司後端接口,並用 interceptor 添加各種 header,並對返回的‘奇葩數據’做特殊處理”是經驗。
“隨時可跳槽”意味著你有核心競爭力,你能勝任大多數公司的工作。當你做得足夠多的業務,遇到足夠多的苦難,你隨便拿個 app 出來玩,知道如何實現那些功能,這就判斷自己是否“能勝任大多數工作”。學習知識當然少不了,看看《 Android 技術圖譜》是否掌握了大半?還有對技術的直覺,看到某大牛寫的技術文章,是不是看了標題和導語,大概就知道下文說什麽?

還有,當你在微信技術群能輕松回答各種網友提問,或者反駁別人的技術觀點,跟大牛談笑風生,你就“隨時可以跳槽”了。
鉆研面試題、算法題,純粹浪費時間,在面試前突擊一下就好。
四 第四個問題:面試中對於優秀第三方庫的掌握在面試裏面的重要性占比是怎麽樣的?
在面試中對於優秀第三方庫的掌握在面試裏面的重要性占比是怎麽樣的?有時候一些庫之前僅限調用 api 而已,無法深入到源碼級別,有時候去看源碼又是似懂非懂的狀態,這時候肯定不敢說掌握。所以應該怎麽表達自己對於第三方庫的或者說優秀源碼的理解。
回答1;
第三方庫是很重要的面試點,足夠看出一個人對日常使用的框架的研究程度、學習能力和態度。
“僅限調用 api ”,那等於不會這個庫,面試時就不要提起這個庫了。“只會調用 API ”是面試大忌,就算你用這個 API 做一萬個項目,都不如一句對原理闡述來的好;
“怎樣表達對於優秀源碼的理解”,不要關心“怎樣表達”,面試時直接說關鍵原理,說出來算贏,否則就算講的天花亂墜也沒用,面試官不傻。
回答2;
對於程序員這一個行業來說,看源碼的確很重要,但是看源碼之前要明白自己為什麽要去看,如果僅僅是為了應付面試而去看源碼個人覺得是純粹的浪費時間行為,因為這種方式看源碼第一不知道自己要看什麽,很容易被繞暈,第二看完之後沒有太大的收獲,只能了解到一個大致的流程,而這些流程為什麽要這樣設計,或者說這樣設計的優缺點基本上很難弄明白。只能理解到表皮,而表皮這些東西隨便搜一下“XX 源碼解析”,看幾篇文章就能說出個大概,但是再往深處就很難答出來了。
我自己並不會特地的去看源碼,而是有需要的時候去看看。

第一種:對比查看,設計了一套邏輯和某某框架中的有點類似,所以我把這套框架拿出來分析一下,看看它的設計思路,然後對比一下我們兩個的設計異同,分析一下各自的優缺點,這樣我在具體寫代碼的時候就可以有意識的規避掉這些缺點,使其變的更加完善。
例如:設計 PagerLayoutManager 的時候參考了 HorizontalPage 但規避了後者內存占用過高,添加大量數據時UI卡頓的問題,並且使用了另一種更簡便的方式實現了分頁輔助工具。
第二種:分析 Bug,我用了某一套開源庫,發現在某種特殊情況下會出現 Bug,於是把它拿出來看一下,為什麽會出現這個 Bug,是這個庫實現的問題,還是我使用的問題,以及如何才能規避這個 Bug。
例如:項目中有使用二維碼,但是二維碼顯示區域較小,使用了一個第三方庫生成的二維碼,看起來像一堆密密麻麻的小點,手機經常掃描失敗,後來發現是容錯級別太高了,於是復制一下過來調整了容錯級別,顯示才算正常。
第三種:添加新功能,我項目中某一個模塊需要一系列的功能,我去網上找到一個開源庫能滿足大部分的功能,但又不完全滿足,需要對其中部分進行調整,此時需要把它的源代碼拿過來進行分析,進而修改調整,最終滿足項目的需求。
例如:音視頻開發,需要對左右聲道音量分別控制,但是 ExoPlayer 並沒有提供這個方法,於是研究 ExoPlayer 源碼為其添加了這個方法。
其實公司招聘問開源庫相關的東西,考察的並非是對這些庫有多深的了解,而是自學能力和解決實際問題的能力,當面試官在問這些問題的時候,重點是要結合自身的實際工作經歷,最後談一下自己的看法,不需要一味的去陳述某一個庫的設計。
五 第五題:關於阿裏巴巴的面試問題
11 年畢業,做 Android 5 年以上,計劃隨時去杭州發展,目標阿裏。由於現在工作不是很忙,計劃用一兩個月時間來復習和學習。我想知道如果我現在嘗試給阿裏投簡歷,電話面試失敗了,最短多長時間還有機會再投一遍好有機會電話面試?我是應該現在就嘗試下好查漏補缺還是等準備充分了再投簡歷以免浪費面試機會呢?
回答1;

  • 先去小點的公司面試,積累面試經驗,補全知識體系;
  • 阿裏內部有很多 BU,就算一個沒中還可以投其他的,不用擔心被凍結。當然,把你最心儀的BU面試留到你最自信的時候。
  • 準備的時間裏,不要一味看書,適度參加一些面試更能知道要學什麽
    回答2;
    問題1:阿裏多久可以再次面試?
    理論上講的話,如果你的面試流程結束的話,是可以馬上接著再投簡歷進行面試的,但是如果你的面試流程還在進行中,其他部門是沒法同時面試的。需要再等一等,通常來說,面試結果都會在一到二周左右出來,比較著急的話,可以找下內推的同學幫你查下進度或者電話面試快結束的時候,詢問下面試官。
    問題2:是否應該準備充足再面試?
    答案是 YES,每一次面試機會都應該全力把握,尤其是阿裏這種需要四輪、五輪面試的,浪費一次機會等於是重頭再來。所以最好要準備充足,保持好狀態,如果你不知道自己到底有沒有準備好,建議可以先找一些其他的互聯網公司刷下面試感覺。畢竟,多個選擇多條路嘛!
    技術分享圖片
    想學習更多Android知識,或者獲取相關資料請加入Android技術開發交流2群:862625886。本群可免費獲取Gradle、RxJava、小程序、Hybrid、移動架構、NDK、React Native、性能優化等技術教程!想學習更多Android知識,或者獲取相關資料請加入Android技術開發交流2群:862625886。本群可免費獲取Gradle、RxJava、小程序、Hybrid、移動架構、NDK、React Native、性能優化等技術教程

你問我答,準備面試需要做哪些技術儲備,面試官更加關心什麽方面的技術點?