不是怎么喜歡寫開發(fā)類的文章,始終認(rèn)為這些東西不應(yīng)該由程序員來寫,更加傾向于寫一些感受以及想法可是慢慢的發(fā)現(xiàn)有些東西,你不寫是不行的,好吧,那我就跟隨大局也來談?wù)勎业拿嬖嚱?jīng)驗(yàn)以及各方面的看法吧。
以下的面試經(jīng)驗(yàn)主要針對于3年~5年左右android開發(fā)經(jīng)驗(yàn)中所遇到的問題,這些是我自身面試中的經(jīng)驗(yàn)以及所遇到的坑,可能下面的內(nèi)容不適合于所有人,不過還是希望能給正在面試中的你有所啟發(fā)吧。
背景介紹:
今年可能是互聯(lián)網(wǎng)情形最差的一年(明年更加不好說),往年都有個習(xí)慣,每到年底都要出去試試,于是就跟往年一樣出去試試,可惜結(jié)果并沒有想象中的那么理想,告誡下所有從業(yè)者,如果是迫于無奈,一定要騎驢找馬,現(xiàn)在對于崗位的技能要求是越來越高,同樣的能力薪資方面卻給的的越來越低,公司更傾向于招一個更頂尖的人才。
正文內(nèi)容:
好啦,開始講正文了,大致描述下近期三段面試經(jīng)歷,一個是某度,一個是某醫(yī)療公司,一個是某 上市公司。
某度,去了以后才發(fā)現(xiàn)是做基于各類SDK的開發(fā),用于行業(yè)國際化,后期拓展到整個產(chǎn)品線上的;能力方面:是想找一個架構(gòu)能力非常強(qiáng),或者源碼分析能力非常強(qiáng),或者coding能力非常強(qiáng)的一個工程師,第二家公司是想找一個資深架構(gòu)師或者是項(xiàng)目leader;第三家,朋友所在的公司,同樣也是想找個資深程序員......
某度面試知識點(diǎn)整理,(以下只是整理個大致方向,具體內(nèi)容請自己自行查找):
1、主要是對象創(chuàng)建,堆內(nèi)存、棧內(nèi)存,數(shù)據(jù)引用地址是否發(fā)生變化等問題。
2、以及Gc Root的相關(guān)概念,以及回收機(jī)制內(nèi)存泄露的檢測,考察了內(nèi)存泄露的所有相關(guān)原理,里面包括,單例、內(nèi)部類、匿名內(nèi)部類,靜態(tài)內(nèi)部類,造成內(nèi)存泄露的原因和解決方案;內(nèi)存泄露的檢測方案,主要是MAT,以及查看等,另外像圖片、網(wǎng)絡(luò)優(yōu)化處理方面的優(yōu)化問題等等;
3、同時還考察了有線程池的ThreadPoolExecutor,底層實(shí)現(xiàn)機(jī)制,以及在引用線程池,如何實(shí)現(xiàn)線程之間的調(diào)度機(jī)制。
4、java方面考察的比較多的還有hashmap,比如hash碰撞,產(chǎn)生碰撞的原因,如何避免hash碰撞;數(shù)組和鏈表之間的關(guān)系,如何實(shí)現(xiàn)存儲等操作。
5、同時還考察的有Handler實(shí)現(xiàn)機(jī)制,不是簡單的那些被市面問爛的輪詢方面內(nèi)容,包含貫穿整個生命周期的啟動機(jī)制,至于復(fù)雜的內(nèi)容,自行查找;
6、常用的設(shè)計(jì)模式,以及設(shè)計(jì)模式在實(shí)戰(zhàn)中的應(yīng)用也是少不了的。
7、另外還有動畫的相關(guān)內(nèi)容,主要是view動畫以及屬性動畫的比較,以及動畫所引起的泄露問題;還有事件分發(fā)機(jī)制在實(shí)際中的問題等;
8、多線程問題,線程同步問題,以及多線程直接的調(diào)度問題;進(jìn)程直接的通訊方式。
9、項(xiàng)目的架構(gòu)思路,以及分析解決機(jī)制。
10、另外還有常用的三方庫,以及三方庫的實(shí)現(xiàn)機(jī)制以及原理。
11、應(yīng)用的啟動機(jī)制,activitythread等...
第一家公司
因?yàn)閭€人時間緊急,申請不進(jìn)行筆試答題,但是手寫代碼、思路等都是必不可少的,某度前前后后差不多面了兩個半小時,除了ThreadPoolExecutor底層實(shí)現(xiàn)機(jī)制實(shí)在是想不起來其他都答出來了,整體來講沒有毛病,不過最后再攀談的時候,如之前所說的那樣,想要一個非常非常突出的人,而不是一個什么都懂,又什么都不精通的人,所以深度是非常的重要,畢竟是面一個高級研發(fā)做SDK方面的;一般的能力還是不符合,在面試過程中面試官反復(fù)問我你有什么非常擅長的領(lǐng)域沒有,也足以看出是想多給我些機(jī)會,可惜自己沒有把握住,而且這些只是一面,二輪面試是基于sdk架構(gòu)層面的,更多的是牽涉到架構(gòu)思路,整個項(xiàng)目的搭建思路、以及各類設(shè)計(jì)模式的運(yùn)用方面了,這里就不再訴說了,有興趣的自行研究下。
第二家公司,回答的內(nèi)容就比較有趣了,
基本上可以這么說,我把我所能說的都說了,比如我用的最新的Rxjava,retrofit,okhttp,以及現(xiàn)在比較火的,Reactnative,databinding,性能優(yōu)化,開源架構(gòu)思路,以及各類開發(fā)的模式,mvp,mvc,mvvm等,比較實(shí)現(xiàn)等思路,而且自認(rèn)為深度廣度還好,只是在問道內(nèi)存泄露問題上,關(guān)于內(nèi)部類,靜態(tài)內(nèi)部類,匿名內(nèi)部類造成的內(nèi)存泄露忽略了;而且最后犯了一個比較重大的嚴(yán)重問題,算法一般的我竟然夸大海口說,算法就是找到規(guī)律、找出原理然后用代碼表現(xiàn)出來,面試管當(dāng)場出了一個算法,思考半天,給了一個解答思路,但是效果一般;而且還提問了一些關(guān)于gc回收的調(diào)度算法,沒接觸過只能作罷;最后感覺自身能力有限,后面要求再去面試,感覺自身駕馭不了,最后也就不了了之了。
第三家公司
哎,工作這么久,這是最被動的一次;怎么說呢,問的知識很多都是java基礎(chǔ),可能一直沉浸于android的世界,反而把一些基礎(chǔ)性知識給忽略了,只知道有這個東西,具體原理都忘記了,而且在面試的時候還發(fā)現(xiàn)一個問題,就是一定一定要把你寫的知識點(diǎn)一定要講明白了,我們公司的消息部分是自己做的,但是這部分代碼我并沒有仔細(xì)看過,于是面試管問了消息部分的某個細(xì)節(jié)問題,當(dāng)時猛然沒有想出來,結(jié)果可想而知;還有就是你實(shí)現(xiàn)的功能,你單純會做是不行的,一定要把原理性的內(nèi)容說出來;
面試官有時候問的一些問題如果跟你的思路不太一樣的話,一定要據(jù)理力爭,不過前提是你要把功能和原理想明白了,保證能夠?qū)崿F(xiàn)的了才可以,不然最后坑爹的肯定是你自己。其中還問的有surfaceview實(shí)現(xiàn)機(jī)制,因?yàn)閷戇^的代碼間隔好久了,突然被問起來,竟然大腦短路了...面完后已經(jīng)知道不行了,基本功不能丟,原理性的東西一定要勤于總結(jié)...
綜述
上面所說的內(nèi)容都只是一面,某度面了兩個半小時,第二家一個半小時,第三家一個多小時;總的來說,某度的面試官技術(shù)實(shí)力確實(shí)最給力;現(xiàn)在的面試內(nèi)容確實(shí)是比之前要難了好多,無論是架構(gòu)能力,還是底層實(shí)現(xiàn)能力,甚至是基本能力,現(xiàn)在面試單純知道原理是不太行的,一定要答得非常有深度,非常了解才行;而且基本功這東西可能在日常開發(fā)中感覺不出來,不過這些都是潛移默化影響著你,忘記的話一定要補(bǔ)習(xí)上來的,就像最后一個面試官問我,一些最常用的基礎(chǔ)性的東西怎么可能忘記呢;事實(shí)證明當(dāng)你在面的級別越高時,越是這種最最基本的東西要熟爛于心,與此同時一定要提升自己的深度以及廣度,幾次面試都是在沒有怎么準(zhǔn)備的情況進(jìn)行的,其實(shí),機(jī)會就那么多次,你不珍惜,只能怪你自己,要珍惜自己的每一次機(jī)會,不能太大意了,這年頭你單純會敲代碼是不行的,需要你把原理性的東西,揉碎了,記在自己的腦海里才行。
有人可能會說,我要是面試管,我也能把對方問倒,確實(shí)是這樣,不過現(xiàn)在你是一個普通的面試者,就不要想太多了。
小建議
最后幾個建議,JNI/NDK,這個有興趣的好好學(xué)習(xí)學(xué)習(xí),好多公司已經(jīng)開始重視這個,跳槽不要太頻繁,通過好多獵頭的了解,13年以后畢業(yè)的研發(fā)工程師,跳槽的頻率不是一般的高,而且技術(shù)實(shí)力跟11年之前的相比,差了不是一兩個數(shù)量級,還有一個是關(guān)于現(xiàn)在的React native,或者是react這只是一個小的方向,不會影響安卓原生大的趨勢,就如同一個小語種一樣,需要學(xué)會,不過不建議投入太大的精力;深度和廣度兩個都不能丟棄,基礎(chǔ)更加是重中之重,設(shè)計(jì)模式,算法,數(shù)據(jù)結(jié)構(gòu)也不能丟棄,android的路還很長,還需要好好努力.....
回來復(fù)習(xí)的時候,猛然發(fā)現(xiàn)一個網(wǎng)站,無論是最新的開源技術(shù),還是數(shù)據(jù)結(jié)構(gòu)算法,已經(jīng)最新的市場行情分析,都感覺蠻不錯的,同時也有很多開源項(xiàng)目,對我后來的提升有很大幫助;好東西不敢私藏,在這里分享給大家。
HOHO,上面是廣告內(nèi)容,具體地址在下面,不過拍胸脯保證,內(nèi)容還是非常非常贊的。
好東西一:Android Blog 周刊?
好東西二:開源項(xiàng)目