不是怎么喜歡寫開發(fā)類的文章,始終認(rèn)為這些東西不應(yīng)該由程序員來寫谢鹊,更加傾向于寫一些感受以及想法可是慢慢的發(fā)現(xiàn)有些東西算吩,你不寫是不行的,好吧佃扼,那我就跟隨大局也來談?wù)勎业拿嬖嚱?jīng)驗(yàn)以及各方面的看法吧偎巢。
以下的面試經(jīng)驗(yàn)主要針對(duì)于3年~5年左右android開發(fā)經(jīng)驗(yàn)中所遇到的問題,這些是我自身面試中的經(jīng)驗(yàn)以及所遇到的坑兼耀,可能下面的內(nèi)容不適合于所有人压昼,不過還是希望能給正在面試中的你有所啟發(fā)吧。
背景介紹:
今年可能是互聯(lián)網(wǎng)情形最差的一年(明年更加不好說)瘤运,往年都有個(gè)習(xí)慣窍霞,每到年底都要出去試試,于是就跟往年一樣出去試試拯坟,可惜結(jié)果并沒有想象中的那么理想但金,告誡下所有從業(yè)者,如果是迫于無奈郁季,一定要騎驢找馬冷溃,現(xiàn)在對(duì)于崗位的技能要求是越來越高钱磅,同樣的能力薪資方面卻給的的越來越低,公司更傾向于招一個(gè)更頂尖的人才似枕。
正文內(nèi)容:
好啦盖淡,開始講正文了,大致描述下近期三段面試經(jīng)歷菠净,一個(gè)是某度禁舷,一個(gè)是某醫(yī)療公司,一個(gè)是某 上市公司毅往。
某度牵咙,去了以后才發(fā)現(xiàn)是做基于各類SDK的開發(fā),用于行業(yè)國(guó)際化攀唯,后期拓展到整個(gè)產(chǎn)品線上的洁桌;能力方面:是想找一個(gè)架構(gòu)能力非常強(qiáng),或者源碼分析能力非常強(qiáng)侯嘀,或者coding能力非常強(qiáng)的一個(gè)工程師另凌,第二家公司是想找一個(gè)資深架構(gòu)師或者是項(xiàng)目leader;第三家戒幔,朋友所在的公司吠谢,同樣也是想找個(gè)資深程序員......
某度面試知識(shí)點(diǎn)整理,(以下只是整理個(gè)大致方向诗茎,具體內(nèi)容請(qǐng)自己自行查找):
1工坊、主要是對(duì)象創(chuàng)建,堆內(nèi)存敢订、棧內(nèi)存王污,數(shù)據(jù)引用地址是否發(fā)生變化等問題。
2楚午、以及Gc Root的相關(guān)概念昭齐,以及回收機(jī)制內(nèi)存泄露的檢測(cè),考察了內(nèi)存泄露的所有相關(guān)原理矾柜,里面包括阱驾,單例、內(nèi)部類怪蔑、匿名內(nèi)部類啊易,靜態(tài)內(nèi)部類,造成內(nèi)存泄露的原因和解決方案饮睬;內(nèi)存泄露的檢測(cè)方案租谈,主要是MAT,以及查看等,另外像圖片割去、網(wǎng)絡(luò)優(yōu)化處理方面的優(yōu)化問題等等窟却;
3、同時(shí)還考察了有線程池的ThreadPoolExecutor呻逆,底層實(shí)現(xiàn)機(jī)制夸赫,以及在引用線程池,如何實(shí)現(xiàn)線程之間的調(diào)度機(jī)制咖城。
4茬腿、java方面考察的比較多的還有hashmap,比如hash碰撞宜雀,產(chǎn)生碰撞的原因切平,如何避免hash碰撞;數(shù)組和鏈表之間的關(guān)系辐董,如何實(shí)現(xiàn)存儲(chǔ)等操作悴品。
5、同時(shí)還考察的有Handler實(shí)現(xiàn)機(jī)制简烘,不是簡(jiǎn)單的那些被市面問爛的輪詢方面內(nèi)容苔严,包含貫穿整個(gè)生命周期的啟動(dòng)機(jī)制,至于復(fù)雜的內(nèi)容孤澎,自行查找届氢;
6、常用的設(shè)計(jì)模式覆旭,以及設(shè)計(jì)模式在實(shí)戰(zhàn)中的應(yīng)用也是少不了的退子。
7、另外還有動(dòng)畫的相關(guān)內(nèi)容姐扮,主要是view動(dòng)畫以及屬性動(dòng)畫的比較絮供,以及動(dòng)畫所引起的泄露問題衣吠;還有事件分發(fā)機(jī)制在實(shí)際中的問題等茶敏;
8、多線程問題缚俏,線程同步問題惊搏,以及多線程直接的調(diào)度問題;進(jìn)程直接的通訊方式忧换。
9恬惯、項(xiàng)目的架構(gòu)思路,以及分析解決機(jī)制亚茬。
10酪耳、另外還有常用的三方庫(kù),以及三方庫(kù)的實(shí)現(xiàn)機(jī)制以及原理。
11碗暗、應(yīng)用的啟動(dòng)機(jī)制颈将,activitythread等...
第一家公司
因?yàn)閭€(gè)人時(shí)間緊急,申請(qǐng)不進(jìn)行筆試答題言疗,但是手寫代碼晴圾、思路等都是必不可少的,某度前前后后差不多面了兩個(gè)半小時(shí)噪奄,除了ThreadPoolExecutor底層實(shí)現(xiàn)機(jī)制實(shí)在是想不起來其他都答出來了死姚,整體來講沒有毛病,不過最后再攀談的時(shí)候勤篮,如之前所說的那樣都毒,想要一個(gè)非常非常突出的人,而不是一個(gè)什么都懂叙谨,又什么都不精通的人温鸽,所以深度是非常的重要,畢竟是面一個(gè)高級(jí)研發(fā)做SDK方面的手负;一般的能力還是不符合涤垫,在面試過程中面試官反復(fù)問我你有什么非常擅長(zhǎng)的領(lǐng)域沒有,也足以看出是想多給我些機(jī)會(huì)竟终,可惜自己沒有把握住蝠猬,而且這些只是一面,二輪面試是基于sdk架構(gòu)層面的统捶,更多的是牽涉到架構(gòu)思路榆芦,整個(gè)項(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)存泄露忽略了;而且最后犯了一個(gè)比較重大的嚴(yán)重問題闺鲸,算法一般的我竟然夸大航钐郑口說,算法就是找到規(guī)律摸恍、找出原理然后用代碼表現(xiàn)出來悉罕,面試管當(dāng)場(chǎng)出了一個(gè)算法,思考半天立镶,給了一個(gè)解答思路壁袄,但是效果一般;而且還提問了一些關(guān)于gc回收的調(diào)度算法媚媒,沒接觸過只能作罷嗜逻;最后感覺自身能力有限,后面要求再去面試缭召,感覺自身駕馭不了栈顷,最后也就不了了之了。
第三家公司
哎嵌巷,工作這么久萄凤,這是最被動(dòng)的一次;怎么說呢搪哪,問的知識(shí)很多都是java基礎(chǔ)靡努,可能一直沉浸于android的世界,反而把一些基礎(chǔ)性知識(shí)給忽略了噩死,只知道有這個(gè)東西颤难,具體原理都忘記了神年,而且在面試的時(shí)候還發(fā)現(xiàn)一個(gè)問題已维,就是一定一定要把你寫的知識(shí)點(diǎn)一定要講明白了,我們公司的消息部分是自己做的已日,但是這部分代碼我并沒有仔細(xì)看過垛耳,于是面試管問了消息部分的某個(gè)細(xì)節(jié)問題,當(dāng)時(shí)猛然沒有想出來,結(jié)果可想而知堂鲜;還有就是你實(shí)現(xiàn)的功能栈雳,你單純會(huì)做是不行的,一定要把原理性的內(nèi)容說出來缔莲;
面試官有時(shí)候問的一些問題如果跟你的思路不太一樣的話哥纫,一定要據(jù)理力爭(zhēng),不過前提是你要把功能和原理想明白了痴奏,保證能夠?qū)崿F(xiàn)的了才可以蛀骇,不然最后坑爹的肯定是你自己。其中還問的有surfaceview實(shí)現(xiàn)機(jī)制读拆,因?yàn)閷戇^的代碼間隔好久了擅憔,突然被問起來,竟然大腦短路了...面完后已經(jīng)知道不行了檐晕,基本功不能丟暑诸,原理性的東西一定要勤于總結(jié)...
綜述
上面所說的內(nèi)容都只是一面,某度面了兩個(gè)半小時(shí)辟灰,第二家一個(gè)半小時(shí)个榕,第三家一個(gè)多小時(shí);總的來說芥喇,某度的面試官技術(shù)實(shí)力確實(shí)最給力笛洛;現(xiàn)在的面試內(nèi)容確實(shí)是比之前要難了好多,無論是架構(gòu)能力乃坤,還是底層實(shí)現(xiàn)能力苛让,甚至是基本能力,現(xiàn)在面試單純知道原理是不太行的湿诊,一定要答得非常有深度狱杰,非常了解才行;而且基本功這東西可能在日常開發(fā)中感覺不出來厅须,不過這些都是潛移默化影響著你仿畸,忘記的話一定要補(bǔ)習(xí)上來的,就像最后一個(gè)面試官問我朗和,一些最常用的基礎(chǔ)性的東西怎么可能忘記呢错沽;事實(shí)證明當(dāng)你在面的級(jí)別越高時(shí),越是這種最最基本的東西要熟爛于心眶拉,與此同時(shí)一定要提升自己的深度以及廣度千埃,幾次面試都是在沒有怎么準(zhǔn)備的情況進(jìn)行的,其實(shí)忆植,機(jī)會(huì)就那么多次放可,你不珍惜谒臼,只能怪你自己,要珍惜自己的每一次機(jī)會(huì)耀里,不能太大意了蜈缤,這年頭你單純會(huì)敲代碼是不行的,需要你把原理性的東西冯挎,揉碎了底哥,記在自己的腦海里才行。
有人可能會(huì)說房官,我要是面試管叠艳,我也能把對(duì)方問倒,確實(shí)是這樣易阳,不過現(xiàn)在你是一個(gè)普通的面試者附较,就不要想太多了。
小建議
最后幾個(gè)建議潦俺,JNI/NDK拒课,這個(gè)有興趣的好好學(xué)習(xí)學(xué)習(xí),好多公司已經(jīng)開始重視這個(gè)事示,跳槽不要太頻繁早像,通過好多獵頭的了解,13年以后畢業(yè)的研發(fā)工程師肖爵,跳槽的頻率不是一般的高卢鹦,而且技術(shù)實(shí)力跟11年之前的相比,差了不是一兩個(gè)數(shù)量級(jí)劝堪,還有一個(gè)是關(guān)于現(xiàn)在的React native冀自,或者是react這只是一個(gè)小的方向,不會(huì)影響安卓原生大的趨勢(shì)秒啦,就如同一個(gè)小語種一樣熬粗,需要學(xué)會(huì),不過不建議投入太大的精力余境;深度和廣度兩個(gè)都不能丟棄驻呐,基礎(chǔ)更加是重中之重,設(shè)計(jì)模式芳来,算法含末,數(shù)據(jù)結(jié)構(gòu)也不能丟棄,android的路還很長(zhǎng)即舌,還需要好好努力.....
回來復(fù)習(xí)的時(shí)候佣盒,猛然發(fā)現(xiàn)一個(gè)網(wǎng)站,無論是最新的開源技術(shù)侥涵,還是數(shù)據(jù)結(jié)構(gòu)算法沼撕,已經(jīng)最新的市場(chǎng)行情分析,都感覺蠻不錯(cuò)的芜飘,同時(shí)也有很多開源項(xiàng)目务豺,對(duì)我后來的提升有很大幫助;好東西不敢私藏嗦明,在這里分享給大家笼沥。
HOHO,上面是廣告內(nèi)容娶牌,具體地址在下面奔浅,不過拍胸脯保證,內(nèi)容還是非常非常贊的诗良。
好東西一:Android Blog 周刊?
好東西二:開源項(xiàng)目