上一篇我們說了大公司的任職資格描述可能很簡(jiǎn)單,但是有很多點(diǎn)需要注意。下面我們說說中高級(jí)安卓開發(fā)工程師崗位在大公司應(yīng)聘中的復(fù)習(xí)方向:
安卓已經(jīng)火了這么多年了。現(xiàn)在如果還從事安卓開發(fā),基本上都是中高級(jí)安卓開發(fā)工程師。
那么用人單位在對(duì)中高級(jí)安卓開發(fā)工程師方面的要求要達(dá)到什么程度呢?
在回答這個(gè)問題之前,我先說一下中高級(jí)安卓開發(fā)工程師的薪資水平吧。至于為什么,先說這個(gè)。因?yàn)槲遗陆酉聛砟銢]有動(dòng)力去看,去學(xué)習(xí),去提高。所以先給你一點(diǎn)動(dòng)力。
貝殼,汽車之家,這些中高級(jí)安卓開發(fā)工程師的薪資范圍是30K-50K,并且有可能達(dá)到14薪(因?yàn)楸槐龅逆溂议T事件,具體參考http://www.sohu.com/a/248709552_100079542,
https://mp.weixin.qq.com/s/GapQX15P-4Jg92-8TyVaUA?,所有租房類公司,博主也拒絕了面試邀請(qǐng))。美團(tuán),百度,京東,滴滴(現(xiàn)在正值全民抵制滴滴的時(shí)候,博主也拿到了滴滴的offer,因?yàn)榈蔚雾橈L(fēng)車造成多起治安事件,引起全國(guó)人民的憤怒,所以,博主本人決定不去滴滴履任,以后也拒絕再投或給滴滴推薦簡(jiǎn)歷。除非滴滴做到如下所有滴滴注冊(cè)司機(jī)必須按照出租車司機(jī)標(biāo)準(zhǔn)審核,并且滴滴內(nèi)置一鍵報(bào)警功能,同時(shí)滴滴客服業(yè)務(wù)自己經(jīng)營(yíng)管理。)的薪資范圍是 18K-35K,可以拿到16薪,并且有年終獎(jiǎng)。如果分到比較好的項(xiàng)目組,年終或者季度分紅的獎(jiǎng)勵(lì)買房買車也是有的(比如華為榮耀,騰訊王者榮耀和吃雞手游,季度分紅達(dá)到100薪以上。各位吃瓜群眾還是要有夢(mèng)想的)。
回到之前的那個(gè)問題,用人單位在對(duì)中高級(jí)安卓開發(fā)工程師方面的要求要達(dá)到什么程度呢?
舉例說明:百度,汽車之家有筆試。筆試大多都比較簡(jiǎn)單,會(huì)有幾個(gè)不好回答的。不過筆試其實(shí)真的沒有多大關(guān)系,主要還是面試
面試官一般會(huì)從最簡(jiǎn)單的入手(博主本人因?yàn)槭亲詫W(xué)的,4個(gè)月就自學(xué)完了Java。所以基礎(chǔ)很差,也最怕問這些。),比如會(huì)問object有哪些方法?我回答完后,面試官就會(huì)繼續(xù)問,那equals方法的比較原理是什么?hashCode的原理,跟equals的區(qū)別。隨即轉(zhuǎn)到Map中的hashMap的相關(guān)原理。
有問listview(recycleview)有哪些方法,然后每一個(gè)方法的作用(這里的方法會(huì)根據(jù)你前面回答的不斷的深問),參數(shù)的作用。問到這,還有公司會(huì)問,由于一個(gè)項(xiàng)目中需要用到的這2個(gè)控件太多了,每次都要寫,會(huì)很麻煩,并且要寫很多次,怎么解決這個(gè)問題。
這個(gè)問題的解答,各位可以百度一下。一般我的解決方式是自定義一個(gè)帶泛型和不指定參數(shù)個(gè)數(shù)的adapter。然后再定義一些方法,這樣就不需要再adapter里面做太多的操作。具體自定義封裝的會(huì)在后面的博文中詳細(xì)說明這里的自定義封裝方式和應(yīng)用方式。當(dāng)然鼓勵(lì)大家自己發(fā)掘,并且給我留言,我好補(bǔ)充完整這個(gè)問題。
第二種問題:你經(jīng)常用到的第三方庫有哪些?然后開始考你對(duì)第三方庫的源碼的熟悉程度,熟練使用能力,和擴(kuò)展能力。
比如博主遇到過面試官問我gson解析的多方面問題。因?yàn)椴┲黜?xiàng)目中有硬件交互,所以服務(wù)端接口返回的有對(duì)象,有不是對(duì)象的,有字段的,有連字段都沒有,直接返回的,有返回是字符串的,有直接返回是二進(jìn)制(或16進(jìn)制)的。所以在回答這方面問題的時(shí)候,對(duì)使用面試官很滿意。但是接下來的一個(gè)問題,讓我很難受。面試官是這么說的:假如后臺(tái)給你了一個(gè)錯(cuò)誤的數(shù)據(jù)類型,我們作為前端,怎么做一個(gè)容錯(cuò)處理來保證APP的正常使用(根據(jù)接口文檔,后臺(tái)就是給錯(cuò)了,前端也必須能做兼容這種錯(cuò)誤數(shù)據(jù)的解析。)。這道題也是很多大公司要面臨的問題,尤其是發(fā)展很快的創(chuàng)業(yè)公司。在創(chuàng)業(yè)中前端和后臺(tái)人事變化大,并且開發(fā)需求變化也比較大。后臺(tái)API和前端的版本沒有做到同步更新會(huì)導(dǎo)致這些問題。所以各位想跳槽的,心里有一個(gè)類似這種兼容,容錯(cuò)問題的準(zhǔn)備。(備注:這道題可以用泛型,反射。但是還是有一定的問題。一般問這種問題的,也是公司當(dāng)前面臨這個(gè)問題亟待需要解決的問題。通常問這種問題的面試官,會(huì)不僅僅只問一個(gè)這種問題,他會(huì)前后循序漸進(jìn)都這種類型的問題,圍繞這個(gè)主題問,所以面試時(shí)遇到這種沒有準(zhǔn)備的,又不知道怎么做的,可以前后思考一下面試官前后的幾個(gè)問題和引導(dǎo)方向,綜合這幾個(gè)問題,思考一下解決思路)。
第三種:算法。這個(gè)從各個(gè)大公司的招聘來看,都有這個(gè)方向的要求。并且博主在去面試的過程中,真的有問算法方面的問題。這個(gè)主要考察一個(gè)人的解決問題的能力,思路能力,是否開闊,活躍。
并且這種題有2種考法。第一種是用Java或者安卓代碼能實(shí)現(xiàn)的方法去解決。第二,可以不考慮具體用代碼怎么實(shí)現(xiàn),而是要看你的分析問題,解決問題的能力。當(dāng)然第二種的情況比較少。
舉個(gè)栗子:比如博主在去知乎的時(shí)候,面試官出了2個(gè)關(guān)于這方面的題。第一:比如一張圖片,有很多顏色,那么在打開這個(gè)圖片的時(shí)候,這個(gè)圖片下邊會(huì)有這張圖片上有顏色的色塊。(可參見蘋果手機(jī)系統(tǒng)的圖片編輯)。這個(gè)題用最原始的方法實(shí)現(xiàn)(不要說用python,不要說用現(xiàn)在有了一個(gè)這個(gè)類palette)。第二個(gè)題:一篇新聞,點(diǎn)贊(或評(píng)論),2個(gè)維度時(shí)間和點(diǎn)贊,用什么樣的函數(shù)來做到時(shí)間的新鮮度和點(diǎn)贊的數(shù)量來決定這篇新聞的排名。(面試官說現(xiàn)在只讓我考慮2個(gè)維度,時(shí)間和點(diǎn)贊數(shù)。從原則上來講,時(shí)間約大,點(diǎn)贊越多,排名越靠前。),然后面試官給我畫了一個(gè)函數(shù)圖線。我一看,像是對(duì)數(shù)函數(shù)的大致走勢(shì),然后就說用對(duì)數(shù)函數(shù)。但是由于很多年沒有在看數(shù)學(xué),真的忘了這些。線性函數(shù),對(duì)數(shù),指數(shù),凸優(yōu)化,統(tǒng)計(jì),微積分,真的忘了。不過靠這個(gè)的不多。因?yàn)榇蠊緯?huì)有專門的算法工程師。這里只是做一個(gè)強(qiáng)調(diào):大公司會(huì)很看著一個(gè)人的邏輯思維和解題能力。答案是否夠完美,不重要。
第四種:混合開發(fā)經(jīng)驗(yàn)。這個(gè)是目前很火的一種安卓開發(fā)工程師的需求。Hybrid開發(fā)經(jīng)驗(yàn)。由于本人是native和App的混合開發(fā)。所以今日頭條HR也給我打了面試要求電話。先說一下今日頭條技術(shù)很強(qiáng)大,原以為可以到今日頭條看看。然而去面試,才一把辛酸。本人面試的是今日頭條的【懂房帝】,新項(xiàng)目團(tuán)隊(duì),團(tuán)隊(duì)很小,辦公也不怎么的。跟今日頭條是分開辦公的。人員不多。我去面試的時(shí)候,可能對(duì)方的HR沒有跟技術(shù)人員溝通好,臨時(shí)2個(gè)一線開發(fā)人員面試。所以對(duì)方也很緊張,很匆忙。然后從最基礎(chǔ)的面試開始,沒有涉及有深度的問題。我很不舒服,發(fā)表了一句,你們面試都這么基礎(chǔ)嗎?對(duì)方回懟:那你認(rèn)為什么是高端問題?我回懟:不是說那個(gè)問題高端和low的問題。你們問的問題本身就很不明確,我不知道你想問的知識(shí)點(diǎn)是什么。對(duì)方說:我們一般由淺入深。我繼續(xù)回懟:那我回答后,為什么不繼續(xù)問,而是不停的跳轉(zhuǎn)其他基礎(chǔ)問題。對(duì)方在問問題的時(shí)候,也暴露出很多知識(shí)點(diǎn)的不確定和知識(shí)點(diǎn)的范圍不夠廣。舉個(gè)例子,問的最確定的一個(gè)問題是:說說安卓的4大組件。然后沒有深問其中任何一個(gè)組件。又問:activity的啟動(dòng)。就這幾個(gè)字。我很懵,這個(gè)要問我activity的啟動(dòng)模式,還是就是問activity怎么啟動(dòng)的。如果是后者,我還需要明確我是否需要回答啟動(dòng)的調(diào)用方法過程(這個(gè)過程20多步,我沒有全部記住,我只記得大概)。然后問二維碼你用的什么。我說這個(gè)用zxing。對(duì)方很懵。事件分發(fā),問的是:手勢(shì)沖突。就這幾個(gè)字。基本上,說著說著我也懶得說了。不知道為什么,我沒有繼續(xù)說下去的欲望了。最后他們說,我們需要的是hybrid開發(fā)經(jīng)驗(yàn)。我說簡(jiǎn)歷,我沒有投你們,是你們給我打的面試要求電話。簡(jiǎn)歷,你們的技術(shù)大佬肯定看過。你說的hybrid開發(fā)經(jīng)驗(yàn),你們偏web。而我偏native。關(guān)于網(wǎng)絡(luò)請(qǐng)求,你全程就問了我我的網(wǎng)絡(luò)請(qǐng)求用的什么。我說retorfit2+OKHTTP3。你也沒有再深問了。你沒有問過我web方面的,沒有問過我webkit。我也很委屈。然后他們的技術(shù)大佬不在,然后就沒有然后了。中午1點(diǎn)趕到面試的。竟然來了一個(gè)這。中間還有一個(gè)插曲是我說,activity的生命周期你別問嗎?對(duì)方也很尷尬。我說沒有一個(gè)深入,我該怎么回答這個(gè)問題呢?是回答6個(gè)生命周期,還是12個(gè)生命周期,還是更多?我回答6個(gè)沒什么意義,回答12個(gè)我不確定你們希望是否認(rèn)可,是否知道activity的其他生命周期及其作用。
扯了一會(huì)淡,回歸正題。目前互聯(lián)網(wǎng)大公司大多還是偏純應(yīng)用,偏web方面的,所以,hybrid開發(fā)經(jīng)驗(yàn)在目前還是比較好找工作的。沒有這個(gè)方面知識(shí)的,要開始狂補(bǔ)了。
總結(jié):目前想換一個(gè)18K以上,尤其是想拿到25K以上的;想從一個(gè)初級(jí)安卓開發(fā)工程師進(jìn)階到中高級(jí)安卓開發(fā)的。這幾個(gè)方面的知識(shí)點(diǎn)要開始狂補(bǔ)了:
第一:Java基礎(chǔ),要有深度,原理要知道。
第二:源碼是否經(jīng)常看,是否能自己封裝,擴(kuò)展一些第三方類庫。比如常用的listview,recycleview,gson,okhttp,圖片加載框架,內(nèi)存優(yōu)化,內(nèi)存溢出,傳感器(sensormanager),兼容性(分兩個(gè)方面,第一UI適配(今日頭條適配方案),第二性能適配(so文件))。
(備注:以上2個(gè)方面在下文中有具體方向說明)
第三:算法,邏輯思維能力。這個(gè)可以大公司都會(huì)問一些這方面的問題。多想想為什么。數(shù)據(jù)結(jié)構(gòu),幾個(gè)排序要會(huì)寫。還有就是多看看常用APP他們的有些算法是怎么做的,琢磨琢磨
第四:目前非常火的就是hybrid混合開發(fā)(偏前端),這個(gè)要開始寫一個(gè)項(xiàng)目了。簡(jiǎn)單的都行。從Github上下載一個(gè)項(xiàng)目,自己再敲一遍。
第五:很重要。就是據(jù)我所知,很多應(yīng)用都準(zhǔn)備加入小視頻的功能。很多大公司的APP也是。所以,視頻音頻,這個(gè)必須會(huì)。GitHub上很多這方面的源碼,可以下載自己看看,不說自己敲一遍,至少要知道用什么,怎么做。
基礎(chǔ)知識(shí)?–?四大組件(生命周期,使用場(chǎng)景,如何啟動(dòng))
java基礎(chǔ)?–?數(shù)據(jù)結(jié)構(gòu),線程,mvc/MVP/MVVM框架
通信?–?網(wǎng)絡(luò)連接(HttpClient,HttpUrlConnetion),Socket
數(shù)據(jù)持久化?– SQLite,SharedPreferences,ContentProvider
性能優(yōu)化?–?布局優(yōu)化,內(nèi)存優(yōu)化,電量?jī)?yōu)化
安全?–?數(shù)據(jù)加密,代碼混淆,WebView/Js調(diào)用,https
UI–?動(dòng)畫,view自定義,adapter的泛型和不指定參數(shù)數(shù)量的優(yōu)化,滑動(dòng)控件的深度優(yōu)化,圖表
其他?– JNI,AIDL,Handler,Intent等
開源框架?– OKHTTP,Gilde,RxJava,Gson等
說了這么多,那應(yīng)聘中高級(jí)安卓開發(fā)工程師,要做哪些面試準(zhǔn)備呢?
在這里,博主也準(zhǔn)備好了幾個(gè)方面的知識(shí)點(diǎn),不過會(huì)在后面的博客中,慢慢更新出來。
今天先給大家分享一個(gè)面試題準(zhǔn)備的:https://blog.csdn.net/huangqili1314/article/details/72792682
后面,博主會(huì)不斷一個(gè)知識(shí)點(diǎn)一個(gè)知識(shí)點(diǎn)的更新,希望能讓你進(jìn)階成一位中高級(jí)安卓開發(fā)工程師。
下一篇,博主會(huì)主要講一下:中高級(jí)安卓開發(fā)工程師面試之——如何寫一份讓HR主動(dòng)邀請(qǐng)你面試的簡(jiǎn)歷