概述
筆者是非計(jì)算機(jī)專業(yè)最好用的靜態(tài)ip地址,15年畢業(yè)一直在小公司最好用的靜態(tài)ip地址,覺得完全靠自學(xué)已經(jīng)到了自己的天花板,然后想進(jìn)大型互聯(lián)網(wǎng)公司發(fā)展,所以年前辭職,放棄了年終獎(jiǎng),年后就直接來的北京,面試的公司有穩(wěn)定的大公司,也有創(chuàng)業(yè)型公司,有些創(chuàng)業(yè)型的公司面試質(zhì)量也挺高的,不輸于一些大公司,下面會(huì)說到。
技術(shù)儲(chǔ)備 基礎(chǔ)
不管是Android基礎(chǔ)還是Java基礎(chǔ)以及常見的數(shù)據(jù)結(jié)構(gòu),這些是無原則地必須要熟練掌握的,尤其是非計(jì)算機(jī)專業(yè)的同學(xué),面試官一上來肯定是問你基礎(chǔ),要是基礎(chǔ)表現(xiàn)不好很容易被扣上基礎(chǔ)不扎實(shí)的帽子,常見的就那些,只要你平時(shí)認(rèn)真思考過基本上面試是沒太大問題的。
算法
基本上每家公司都會(huì)有算法題,最好用的靜態(tài)ip地址我當(dāng)時(shí)是看了左程云的《程序員代碼面試指南》,重點(diǎn)看了數(shù)組跟鏈表,二叉樹沒有去刷算法題,對(duì)于二叉樹的掌握在于三種基本的遍歷以及在排序算法中堆排序中用到的二叉堆,然后每道算法題都先自己去實(shí)現(xiàn),先寫思路,然后自己去實(shí)現(xiàn)一遍,然后再看看答案,記住答案的思路,第二天再重新按照答案的思路實(shí)現(xiàn)一遍,這種效果非常好,我沒有去刷很多題目,而是想通過這種方式去分析常見的算法題,所以我不大建議去刷算法題,首先作為客戶端開發(fā),涉及不到很多的算法,第二,面試的時(shí)候考的算法大部分都是很基本的數(shù)組組跟鏈表構(gòu)成的,最后算法這個(gè)東西是個(gè)無底洞,個(gè)人覺得沒必要去刷題,刷題可能對(duì)小公司有用,但是大公司更看重你解決問題的能力。
虛擬機(jī)
JVM
對(duì)于Java,加載的是Class文件,一般會(huì)問到Java運(yùn)行時(shí)的內(nèi)存分配,類加載機(jī)制以及GC,實(shí)際上后面兩個(gè)問地比較多,尤其是GC相關(guān),往往結(jié)合四種引用出題,最后會(huì)通過這個(gè)來引出內(nèi)存泄露相關(guān)的一些問題。
DVM&ART
Android的虛擬就DVM以及ART是對(duì)JVM做了一些優(yōu)化,加載的是dex文件,對(duì)Class字節(jié)碼做了一些優(yōu)化,這個(gè)里面其實(shí)挺復(fù)雜的,我只知道一些基本的概念。
ClassLoader
這個(gè)其實(shí)要是問起來其實(shí)是有很多東西的,如果是Java相關(guān)其實(shí)還好,會(huì)問你類加載機(jī)制,但是Android里面除了Java的類加載機(jī)制之外,還會(huì)引出插件化跟熱修復(fù)。
JNI
基本上稍微大點(diǎn)的公司都會(huì)問到,不過我的回答始終如一最好用的靜態(tài)ip地址:我只能看懂C的代碼,項(xiàng)目中沒有用過JNI,當(dāng)然這個(gè)屬于加分項(xiàng),因?yàn)槲耶?dāng)時(shí)的選擇是把我用過熟悉的東西研究地滾瓜爛熟,而不是在自己平時(shí)很少接觸到的東西上面搞個(gè)一知半解。
Binder
Binder系列,各種AMS,WMS,PWS,常問到的有APP的啟動(dòng)流程,然后兩個(gè)Activity相互跳轉(zhuǎn)的時(shí)候的生命周期,Activity的生命周期。
心態(tài)
不要想著什么都會(huì),那樣不現(xiàn)實(shí),比如說我對(duì)Binder機(jī)制以及熱修復(fù),插件化這塊兒確實(shí)了解地比較淺顯,也跟高德,愛奇藝等公司的面試官聊過這個(gè)話題,這些屬于加分項(xiàng),不會(huì)影響到最終的面試結(jié)果,還有就是算法,面試最多考一道或者兩道算法,所以沒必要在這方面花太多的時(shí)間,掌握好常見的數(shù)組跟鏈表,二叉樹/堆了解一下,基本就夠了,公司看重的是你解決問題的能力,你把原理掌握好,常見地基本上都沒什么問題。
當(dāng)你基礎(chǔ)知識(shí)OK,自己用過的東西的理解地有深度,解決問題的能力OK,如果面試官想要你,那么他會(huì)去找你的優(yōu)點(diǎn),反之他會(huì)去找你的缺點(diǎn)。所以如果你想進(jìn)某家公司,那么你就按照他們的要求去面,就算面不上那么也沒什么,只能說不合適,然后查漏補(bǔ)缺繼續(xù)面,不要因?yàn)槟骋淮位蛘邘状蔚牟豁樉头穸ㄗ约海行┕镜拿嬖嚬倬褪窍矚g裝,而且還是大公司的。
學(xué)歷很重要,我的學(xué)校只是個(gè)普通一本,相對(duì)一般,所以投了很多知名互聯(lián)網(wǎng)公司簡(jiǎn)歷都過不了,就連好大夫在邀請(qǐng)我面試的時(shí)候特意問了我是不是統(tǒng)招一本,任何行業(yè)都看重學(xué)歷,不僅僅是IT,那些說學(xué)歷不重要的基本上都是一些學(xué)歷比較好的或者是在Android比較火地那個(gè)階段開始搞地Android,他們這批人往往會(huì)覺得在03年跟18年加入的阿里的難度是一樣的,那些覺得學(xué)歷不重要的可以去看看張雪峰老在《演說家》中的演講,不要說什么3年以后公司就不看學(xué)歷了,學(xué)歷是一輩子的事情,那些高考能夠碾壓你的人,出了社會(huì)只要他們?cè)敢?,照樣能碾壓你,你努力,你拼命,別人也不會(huì)睡大覺等你。
科班很重要,如果你本科學(xué)地是非計(jì)算機(jī)專業(yè),任何一個(gè)面試官或者HR都會(huì)認(rèn)為你基礎(chǔ)不行,你需要花很多的時(shí)間去精力去補(bǔ)基礎(chǔ),然后再花時(shí)間跟精力在HR不Pass掉你簡(jiǎn)歷的情況下摘掉基礎(chǔ)不行這頂帽子。
工作背景很重要,如果你有大公司背景給你背書,相同的崗位,你進(jìn)入的門檻比有大公司背景的人要高地多,如果你有大公司背景,不管是面試官還是HR都會(huì)在你面試前給你打一個(gè)較高的基本分,這個(gè)是很有利于你通過面試的。
不過上面都是既定的事實(shí),你沒法改變,所以當(dāng)我意識(shí)到這些問題的時(shí)候,我只能去不斷地提升自己的能力,去花更多地代價(jià)去獲得一個(gè)面試機(jī)會(huì),去證明自己的能力進(jìn)而進(jìn)入到一個(gè)比較好的平臺(tái)。
面試公司 火幣網(wǎng)(Offer)
面試機(jī)會(huì)來自于V2EX
一面:
如何開啟多進(jìn)程?應(yīng)用是否可以開啟N個(gè)進(jìn)程?
Activity的啟動(dòng)模式、任務(wù)棧以及使用場(chǎng)景?
Volley能否進(jìn)行數(shù)據(jù)量很大的請(qǐng)求,比如說加載100M的圖片?
手寫快速排序
Volley的優(yōu)缺點(diǎn)
final修飾一個(gè)對(duì)象,能否調(diào)用對(duì)象修改屬性的方法
子線程中如何使用Handler
如何進(jìn)行單元測(cè)試,如何保證APP穩(wěn)定。
面試官是Android的負(fù)責(zé)人,比較有親和力,看起來比較幽默,,然后先從我的筆試題開始聊,聊地最多的是進(jìn)程,他問我應(yīng)用能不能一上來能不能開多個(gè)進(jìn)程?;睿瑢?duì)于這個(gè)問題我知道肯定是不能的,因?yàn)樽约浩綍r(shí)確實(shí)沒有在項(xiàng)目中開多個(gè)進(jìn)程,然后面試官態(tài)度很好地分析了下說,因?yàn)槎噙M(jìn)程首先會(huì)有多個(gè)Application,數(shù)據(jù)會(huì)被初始化多次,其次進(jìn)程間通信比較麻煩,還有一個(gè)就是每個(gè)進(jìn)程有單獨(dú)的虛擬機(jī),多個(gè)進(jìn)程就會(huì)比較占內(nèi)存,確實(shí)是這樣,這些我有些印象,但是平時(shí)確實(shí)沒有認(rèn)真思考過這些問題,然后問我有沒有用過Binder,我說只是寫過幾個(gè)Demo,然后面試官就說這個(gè)就不問了,就開始聊一些我簡(jiǎn)歷上以及我會(huì)的東西,比如說Volley的優(yōu)缺點(diǎn),然后提出了一個(gè)問題說Volley能否下載電影以及加載大圖片,我當(dāng)時(shí)根據(jù)我看的源碼說可以,因?yàn)閂olley本身是不支持下載的,需要自定義Request才能實(shí)現(xiàn)這個(gè)功能,然后如果是讀流到磁盤是沒問題的,他說不行因?yàn)閂olley是在內(nèi)存中進(jìn)行操作的,我當(dāng)時(shí)跟他爭(zhēng)了下,我說Volley原生不支持下載功能,只能自定義Request,包括上傳也是需要自定義的,然后他感覺我有些不快,說讀流確實(shí)是可以,但是ImageRequest去加載大圖片的時(shí)候,也是在內(nèi)存中讀取的,這個(gè)時(shí)候就會(huì)有問題。不過我想了下確實(shí)是這樣,這樣的話確實(shí)會(huì)出現(xiàn)OOM,接著面試官就問了一個(gè)基礎(chǔ)的問題,比如說final一般怎么用,final修飾對(duì)象的話能夠調(diào)用修改屬性方法等,最后讓我寫了個(gè)快排。
二面:
TabLayout如何設(shè)置指示器的寬度包裹內(nèi)容?
公差為1的等差數(shù)列求和,如何優(yōu)化
自己的優(yōu)勢(shì)在哪里
注解如何獲取,反射為何耗性能?
Java的GC機(jī)制,分代回收策略
Binder機(jī)制:ServiceManager什么時(shí)候注冊(cè)的?
int,long的取值范圍以及BigDecimal,數(shù)值越界了如何處理?
ConcurrentHashMap的原理,分的段數(shù)是多少?
APP是如何適配的?
Android中如何查看一個(gè)對(duì)象的回收情況?
最大一次線上Bug處理措施
面試官問的Java偏多一下,同時(shí)也問地很深很細(xì),關(guān)于Binder問到了一個(gè)問題就是SM是什么時(shí)候注冊(cè)的,這個(gè)完問題我完全是懵逼的,然后給我出了一個(gè)算法題,就是公差為1的等差數(shù)列求和,當(dāng)時(shí)我用了一個(gè)很笨的方法,就是用遞歸實(shí)現(xiàn)的,因?yàn)楫?dāng)時(shí)面試官不是直接說的等差數(shù)列,說的是如果輸入0,返回0,如果輸入1,返回1,如果大于1就依次累加,之前思維定勢(shì)了,沒有想到這是個(gè)等差數(shù)列,然后面試官問我能不能優(yōu)化,我當(dāng)時(shí)想到了高斯,然后把首尾相加,做了一步優(yōu)化,后來實(shí)在是感覺沒法優(yōu)化了,面試官給我寫出了那個(gè)等差數(shù)列的前n項(xiàng)和,不過當(dāng)時(shí)面試官給我出了這個(gè)題目,返回值是int,我當(dāng)時(shí)注意到int可能會(huì)越界,然后說應(yīng)該返回long,估計(jì)是這個(gè)細(xì)節(jié)可能打動(dòng)了面試官,然后我們就從int,long,到String,double以及BigDecimal,說了很多,因?yàn)橹霸陧?xiàng)目中計(jì)算價(jià)格的時(shí)候確實(shí)出現(xiàn)過精度丟失的情況,所以我對(duì)這塊很熟,所以也聊了很多,聊到屏幕適配,ConcurrentHashMap所分的段數(shù),最后問了我最大的一次線上Bug是如何解決的,還有在Android中如何查看一個(gè)對(duì)象的回收情況,那個(gè)確實(shí)不知道,后來想想應(yīng)該通過ReferenceQueue能觀察到,因?yàn)槠綍r(shí)沒有想過這個(gè)問題,所以被問到的時(shí)候很容易懵逼,不過整體表現(xiàn)還可以。
三面:
APK的大小如何壓縮
APP的崩潰率,多渠道包
自己做過的APP用戶量
能否接受加班
面試官是火幣的大前端負(fù)責(zé)人,問了我一些項(xiàng)目開發(fā)流程上的東西,類似APK的大小如何進(jìn)行壓縮,如何查看APP的崩潰率,以及多渠道包,然后聊了下薪資以及能否加班等,大部分都是一些非技術(shù)性的問題,第二天火幣網(wǎng)就給我Offer了,雖然后來我沒有去這家公司,還是挺感謝這家公司的,給我后續(xù)的面試增加了很多信心。
蛋殼公寓(Offer)
面試機(jī)會(huì)來自于拉勾網(wǎng)
一面:
MVP如何管理Presenter的生命周期,何時(shí)取消網(wǎng)絡(luò)請(qǐng)求
用過的框架及原理
天貓的Tangram布局,vLayout原理
我告訴他我在自己寫圖片加載框架的時(shí)候踩過的坑,然后面試官也說了他在使用MVP的過程中遇到的管理Presenter的生命周期過程中的探索,因?yàn)橹拔业囊粋€(gè)項(xiàng)目采用的是MVC,當(dāng)時(shí)是用的RxLifecycle進(jìn)行管理的生命周期,在MVP中我是在BaseActivity中統(tǒng)一把請(qǐng)求取消掉了,然后他說了他的解決方式,確實(shí)很有探索精神,我也學(xué)到了很多東西,最后簡(jiǎn)單說了天貓的七巧板布局,大部分還是在聊項(xiàng)目中的一些細(xì)節(jié)。
二面:
APP的啟動(dòng)流程
回形打印二維數(shù)組
Java為何引入泛型,泛型邊界
常見的Java數(shù)據(jù)結(jié)構(gòu)
ArrayMap跟SparseArray在HashMap上面的改進(jìn)
Java的四種引用及使用場(chǎng)景
Webview性能優(yōu)化
面試官是移動(dòng)端負(fù)責(zé)人,然后問了我APP的啟動(dòng)流程,這個(gè)我說我沒怎么深入研究過,面試官也沒說啥,然后繼續(xù)問了一些Java基礎(chǔ),Java引入泛型的原因,泛型邊界,集合框架,最后問到了SparseArray以及ArrayMap。最后說到了內(nèi)存回收,然后帶出了GC以及四種引用,由于他們的項(xiàng)目中很多地方用到了WebView,所以他問了一些WebView的跟JS進(jìn)行交互的問題,最后還聊到了WebView的性能優(yōu)化,感覺面試官確實(shí)對(duì)WebView比較了解,不過我也覺得沒什么,畢竟這塊不是我擅長(zhǎng)的地方,面試官也表示理解,然后最后出了一道算法題就是回形打印二維數(shù)組,整體來講他們其實(shí)還是側(cè)重于項(xiàng)目,也考察了基礎(chǔ),整體感覺他們的技術(shù)還是很好的。
GrowingIO(Over)
面試機(jī)會(huì)來自于Android Weekly
一面
Binder機(jī)制
ClassLoader的理解
Arouter的原理
組件化原理,組件化中路由的實(shí)現(xiàn)
熱修復(fù)跟插件化的原理
線程池的幾個(gè)參數(shù)的理解,四種線程池的使用場(chǎng)景
常用的設(shè)計(jì)模式,手寫DCL單例模式
進(jìn)程間為什么不能直接進(jìn)行通信
應(yīng)用跟系統(tǒng)之間通信什么時(shí)候用Socket什么時(shí)候用Binder
面試官問地都是Android底層的東西,有些還涉及到了Android的Hook插樁技術(shù),面試完,我覺得自己跟只傻狗一樣,什么都不會(huì),問了有10來個(gè)問題,唯一的兩個(gè)應(yīng)用層的問題由于緊張也沒有答好,一個(gè)是線程池原理,一個(gè)是DCL單例少寫了個(gè)非空判斷,其余的問題真的是答地很水,因?yàn)榍懊娴牡讓又R(shí)了回答地很不好,所以對(duì)自己應(yīng)用層的發(fā)揮確實(shí)是有影響的,所以希望大家在面試的時(shí)候心態(tài)一定要平和,切記不要緊張。由于他們項(xiàng)目在底層采用了很多關(guān)于IPC之間的東西,所以基本上需要對(duì)底層很了解的工程師,我自己也感覺確實(shí)回答地力不從心,而且我是給他們CTO直接發(fā)的簡(jiǎn)歷,突然間覺得不好意思,回答地挺垃圾的。
二面
面試官是做IOS的,基本上是處于聊天的狀態(tài),反正聊地很開心的,然后對(duì)我評(píng)價(jià)很好,他說他不懂Android,但是能感受到我的技術(shù)好奇心,聽了還是很開心的,反正基本上沒怎么聊具體的技術(shù),主要是聊了聊IOS的Hook以及熱修復(fù)相關(guān)的技術(shù),問他們是怎么實(shí)現(xiàn)的,因?yàn)槲抑繧OS在這個(gè)上面比Android要復(fù)雜一些,反正整體就是很放松。
三面
三面是產(chǎn)品總監(jiān),基本上就是談古論今了,讓我說說對(duì)Android以及IOS的看法,我說谷歌未來肯定會(huì)在人工智能上干掉IOS,然后他說為什么,我說因?yàn)楣雀枵莆樟怂阉鞯拇髷?shù)據(jù),Android產(chǎn)品接入的成本低等等,然后我跟他說我希望產(chǎn)品在設(shè)計(jì)原型的時(shí)候需要考慮一下Android跟IOS兩個(gè)平臺(tái)的差異,不能一刀切,他說是應(yīng)該這樣,但是有很多時(shí)候需要保持平臺(tái)一致性就需要做一些妥協(xié)之類,最后其實(shí)還聊到了錘子,聊了聊對(duì)老羅以及錘子的看法,產(chǎn)品總監(jiān)說錘子的發(fā)布會(huì)每場(chǎng)他都會(huì)看,然后他還給他家人買了一部堅(jiān)果Pro,反正想著肯定會(huì)掛掉,索性就不那么拘束了,就是一種很放松的狀態(tài)。
四面
四面是CTO面,當(dāng)時(shí)有點(diǎn)緊張,CTO很有紳士風(fēng)度,一上來主動(dòng)跟我握手,當(dāng)時(shí)我有些緊張,手心都出汗了,他說我是不是很熱,我說是的。然后說自己從網(wǎng)易出來之后就開始創(chuàng)業(yè)了,一直是在做提高企業(yè)生產(chǎn)效率相關(guān)的產(chǎn)品,現(xiàn)在做的GrowingIO也是的,然后問了我很多問題,主要是我在上一份工作中的成長(zhǎng)跟收貨,未來的規(guī)劃等等,以及在項(xiàng)目中遇到問題是如何進(jìn)行團(tuán)隊(duì)協(xié)作的,問地很細(xì),可以看地出來公司對(duì)這款產(chǎn)品非常重視,像滴滴企業(yè)版,陌陌等都是他們的客戶,感覺這家公司會(huì)發(fā)展很不錯(cuò),最后我也問他為什么會(huì)嘗試做那么多產(chǎn)品而不是專注于某一款產(chǎn)品等等,然后他也給了詳細(xì)的解答。
沒有給我Offer的原因在于我的薪資可能開地過高,一面基本上是處于被淘汰的局面,但是我跟后面的面試官都聊地很好,晚上還在那兒吃了頓飯,最后CTO還跟我聊了很久,我覺得他們應(yīng)該是覺得我可以培養(yǎng),但是薪資要低偏高,所以就最終放棄了我,因?yàn)閷?duì)于創(chuàng)業(yè)公司,我的薪資都開地高一些,不管結(jié)果怎么樣,還是挺感謝這家公司的,希望他們發(fā)展地越來越好。
昆侖智啟(Offer)
面試機(jī)會(huì)來自于拉勾網(wǎng)
一面:
Debug跟Release的APK的區(qū)別
軟引用跟弱引用的區(qū)別
ConcurrentHashmap的原理
Listview跟Recyclerview的區(qū)別(刷新,緩存,各自的使用場(chǎng)景)
對(duì)谷歌新推出的Room架構(gòu)
動(dòng)畫的兩種實(shí)現(xiàn):setX跟setTranslationX區(qū)別
事件分發(fā):Activity跟window依次到viewgroup
Volley源碼,優(yōu)缺點(diǎn)
Picasso傳入的Activity跟Application的context的區(qū)別
一面還是只要從簡(jiǎn)歷上入手,然后問地相對(duì)來說比較簡(jiǎn)單,面試官應(yīng)該跟我年限差不多,更多地在于很多東西怎么去使用,比較側(cè)重于一些細(xì)節(jié),不過整體來說表現(xiàn)地自我感覺比較滿意,因?yàn)榛旧隙际菃栁視?huì)哪些東西,然后從我會(huì)的角度出發(fā),一步一步來進(jìn)行深入交流。
二面
數(shù)據(jù)庫的升級(jí),表結(jié)構(gòu)的修改
常見的排序算法,手寫二分查找,二分查找的復(fù)雜度分析
點(diǎn)擊APP圖標(biāo)啟動(dòng)APP的大致流程
SplashActivity中進(jìn)行初始化MainActivity的參數(shù),Splash沒有初始化,AMS直接啟動(dòng)了MainActivity怎么辦
設(shè)計(jì)一個(gè)多線程,可以同時(shí)讀,讀的時(shí)候不能寫,寫的時(shí)候不能讀(讀寫鎖)
設(shè)計(jì)斷點(diǎn)續(xù)傳,如何判斷服務(wù)端是否支持?jǐn)帱c(diǎn)續(xù)傳
Binder機(jī)制:Binder內(nèi)核所在的進(jìn)程是如何找到到Server跟Client進(jìn)行通信的
對(duì)JNI是否了解
組件化的原理,組件間通信
面試官看起來經(jīng)驗(yàn)比較豐富,偏向于Java這一塊,應(yīng)該是從Java轉(zhuǎn)的Android,看上面的問題其實(shí)就能夠看出來,問到的Android很有深度,一上來就搞了個(gè)APP的啟動(dòng)流程以及AMS,那個(gè)讀寫鎖確實(shí)不會(huì),之前沒聽過,當(dāng)時(shí)是要我實(shí)現(xiàn)這個(gè)功能,我用了很多種方法去嘗試,但是最終沒有達(dá)到預(yù)期的效果,然后面試官就問我知不知道讀寫鎖,我不知道,然后他就沒有再深究了,雖然這是一家小公司,但是我能感受到對(duì)一個(gè)非科班出身的程序員的尊重,再次表示感謝。
京東
面試機(jī)會(huì)來自于Boss直聘
京東到家(電面)
GitHub上面的開源項(xiàng)目
一個(gè)線程能否創(chuàng)建多個(gè)Handler,Handler跟Looper之間的對(duì)應(yīng)關(guān)系
ArrayList跟HashMap是夠線程安全,如何保證線程安全
Volley返回?cái)?shù)據(jù)量比較大的請(qǐng)求時(shí)怎么辦
ListView跟RecyclerView刷新數(shù)據(jù)原理,使用到的設(shè)計(jì)模式
適配如何做,有沒有適配過全面屏
Fragment跟Activity的通信方式,你知道幾種?
電話面試之后就掛掉了,第2個(gè)問題回答地不是很好,由于沒試過一個(gè)線程能創(chuàng)建幾個(gè)Handler,所以不太確定,最后還是對(duì)Handler機(jī)制了解地不夠深刻,別的基本上答地還可以,全面屏沒適配過,最后就沒聯(lián)系我了。
京東商城(電面)
內(nèi)存泄露的種類
ActivityA啟動(dòng)ActivityB時(shí)生命周期的變化
AMS是如何管理Activity的
JVM中的GC回收機(jī)制
常見的跨進(jìn)程通信方式,AIDL的實(shí)現(xiàn)原理
APP以及Activity的啟動(dòng)流程
Hook以及插樁技術(shù)
聯(lián)系我的是京東上海的部門,然后說他們主要是做底層的,所以問了一些底層的東西,第2個(gè)問題,我就之前沒遇到過,然后Hook插樁這些,很顯然不會(huì),然后就涼涼了。
京東金融(Offer)
一面:
從長(zhǎng)度為m的int數(shù)組中隨機(jī)取出n個(gè)元素,每次取的元素都是之前未取過的,如何優(yōu)化
https是如何保證安全的,證書如何校驗(yàn)
Android的簽名機(jī)制,APK包含哪些東西
是否遇到過OOM,如何解決
是否做過逆向
對(duì)JNI了解多少
手寫單例(DCL)
是否寫過so文件
熱修復(fù)原理,如何進(jìn)行dex替換的
看面試題其實(shí)就可以發(fā)現(xiàn),京東金融是偏向于安全這個(gè)領(lǐng)域的,最后面試官也跟我說,我進(jìn)去之后會(huì)往移動(dòng)安全工程師方向發(fā)展,最開始的那個(gè)算法,沒答好,當(dāng)時(shí)我的思路實(shí)際上是打算取一個(gè)數(shù)組就把數(shù)組中的元素給置空,但是由于是int數(shù)組,所以沒法置空,當(dāng)時(shí)就在這兒想了一會(huì)兒,然后面試官給出的答案是直接刪掉這個(gè)元素就可以了,但是性能較差,如果考慮性能則可以直接跟尾部元素進(jìn)行交換,然后下次隨機(jī)的范圍減1就可以了。剩余的問題答地其實(shí)還可以。
二面:
簡(jiǎn)單說下項(xiàng)目
內(nèi)存泄露,如何檢測(cè)以及檢測(cè)的原理
逆序一個(gè)字符串,不能調(diào)用String的reverse方法(考察編碼風(fēng)格)
組件化原理,模塊化機(jī)制
沒有給權(quán)限如何定位,特定機(jī)型定位失敗,如何解決
同步跟異步機(jī)制(是業(yè)務(wù)上的,不知道他想問什么)
線程池中核心線程數(shù)跟最大線程數(shù)如何定義
二面的話問的問題比較常規(guī),基本上跟之前的公司重合度較高,沒有難度,主要比較注重應(yīng)聘者解決問題的能力,特別是像那個(gè)權(quán)限適配,我之前做過權(quán)限適配,所以那個(gè)問題回答地他挺滿意的。
完美世界(Over)
面試機(jī)會(huì)來自于拉勾
一面:
StringBuffer跟StringBuilder之間的區(qū)別
并發(fā)相關(guān),各種鎖
View的繪制流程,事件分發(fā)
Hashmap,Arraymap,SparseArray
四種引用
MVP跟MVC的區(qū)別
LV跟RV之間的區(qū)別
Service相關(guān),startService以及bindService
Fragment不同于Activity的生命周期
生產(chǎn)者消費(fèi)者問題:一對(duì)多,多對(duì)多情況
常見的設(shè)計(jì)模式,并選擇一種描述一下
Scroller的使用
看過面試題能夠知道,一面比較重基礎(chǔ),也是一些重復(fù)性很高的問題,不過完美的面試官可能比較注重細(xì)節(jié),很多問題你只要平時(shí)思考過了基本上是OK的。
二面:
Gradle生命周期
Java&Android關(guān)于Classloader源碼解析
Python的class文件
DCL中Volatile的作用,如何防止反射實(shí)例化單例對(duì)象
抽象類能否實(shí)例化,理論依據(jù)是什么?
如何通過Gradle配置差異較大(20%差異)的多渠道包
class文件如何轉(zhuǎn)化成dex
Service先start再bind如何關(guān)閉service,為什么bindService可以跟Activity生命周期聯(lián)動(dòng)?
JVM相關(guān),DVM以及ART是如何進(jìn)行優(yōu)化的,具體步驟
長(zhǎng)連接常見的庫,短鏈接
靜態(tài)同步鎖與普通同步鎖的區(qū)別
直接在Activity中創(chuàng)建一個(gè)thread跟在service中創(chuàng)建一個(gè)thread之間恩區(qū)別
二面的面試官是北大畢業(yè)的,問的問題都比較深入,涉及到了很多Java跟Android的細(xì)節(jié),后來才知道,他知道我基礎(chǔ)還可以,之所以問到后面的那些問題是因?yàn)橄虢o我定級(jí),當(dāng)我說我了解Gradle的時(shí)候,面試官問我是否了解Gradle的生命周期,當(dāng)讓我寫一個(gè)DCL的時(shí)候,問我Volatile的作用是什么,如何防止單例被反射實(shí)例化,DVM&ART是如何對(duì)JVM進(jìn)行優(yōu)化的,Class文件如何轉(zhuǎn)換成Dex文件,反正就是你會(huì)的肯定會(huì)讓你表達(dá)出來,你不會(huì)的你也沒法裝下去。
高德—汽車事業(yè)部(Over)
面試機(jī)會(huì)來自于Boss
一面:
View的生命周期
View的繪制流程跟事件分發(fā)
Activity跟Window之間的關(guān)系
對(duì)C跟JNI是否熟悉
熱修復(fù)原理,插件化是如何進(jìn)行加載插件的
Java中的鎖,各種同步方式之間的區(qū)別
ANR在四大組件中的時(shí)間,場(chǎng)景
OOM,如何避免
內(nèi)存泄露原理,如何避免
MVC跟MVP之間的區(qū)別
ListView針對(duì)多種item的緩存是如何實(shí)現(xiàn)的
Android繪制二維跟三維的View的區(qū)別
是否了解硬件加速
ListView是如何實(shí)現(xiàn)對(duì)不同type的item的管理的
面試官問了很多底層的實(shí)現(xiàn)場(chǎng)景,有深度也有廣度,在跟他交流的時(shí)候,能夠很明顯地感覺到自己在很多問題上沒有做過太深入的嘗試,不過整體感覺還可以,基本上自己的能力是完全發(fā)揮出來了,很多問題他問地特別細(xì),比如說ANR問題,問到了在四大組件中ANR的時(shí)間是多少,還有ListView的緩存對(duì)于多種Type是如何實(shí)現(xiàn)的,很多問題你只知道概念是沒有什么用的,都需要自己的理解,不過像硬件加速這種問題,確實(shí)沒有細(xì)想過,我也不會(huì)去細(xì)想,以為之前在傳統(tǒng)公司是不可能有時(shí)間跟精力了解這些東西的,只能說北京自己來晚了,但是來對(duì)了,當(dāng)面試官知道我是第一次來北京的時(shí)候,還跟我開玩笑說會(huì)不會(huì)干幾個(gè)月又跑了,最后一面面完之后還讓我留了他的電話,說北京租房子挺貴的,要是有什么問題的話可以給他打電話,感動(dòng)ing。
二面:
Android中IPC方式,各種方式優(yōu)缺點(diǎn),為什么選擇用Binder
主流的熱修復(fù)框架流派,原理,是否研究過classloader源碼
Android為什么要設(shè)計(jì)兩種classloader,為什么不用一種,通過type來區(qū)分
Bundle傳遞數(shù)據(jù)為什么需要序列化
手寫一個(gè)快排,分析原理
廣播傳輸?shù)臄?shù)據(jù)是否有限制,是多少,為什么要限制?
Activity啟動(dòng)時(shí)生命周期是如何回調(diào)的?
MVP.MVC.MVVM之間對(duì)比分析
組件化通訊:有幾種通信方式,Arouter原理
插件化加載流程,原理
關(guān)于反射混淆,耗性能的解決方式
天貓七巧板布局原理
熱修復(fù)流派,原理
面試官的問題基本上是沒有離開過Binder,熱修復(fù)以及插件化,不過我確實(shí),由于緊張,快排寫地也出了點(diǎn)問題,心中千萬頭羊駝呼嘯而過,尷尬地一比,當(dāng)聊到組件化的時(shí)候,我覺得這個(gè)是我的優(yōu)勢(shì),然后說了一大堆自己通過反射的實(shí)現(xiàn),然后他說反射會(huì)在混淆的時(shí)候出問題,還有就是性能上的問題,自己研究了那么久的東西,在他這里沒有看到絲毫的價(jià)值,確實(shí)也比較失落,不過他們是做車機(jī)的,確實(shí)需要對(duì)底層掌握地比較熟練,想著十有八九是涼涼了。
高德—地圖事業(yè)部(Over):
面試機(jī)會(huì)來自于Trinea內(nèi)推
一面:
RecyclerView的itemdecoration如何處理點(diǎn)擊事件
單例模式如何修改數(shù)據(jù)
android事件傳遞,非常細(xì)
多線程
一面面試官可能比較忙,沒有問太多的問題,主要聊了聊我GitHub上面的開源項(xiàng)目,當(dāng)時(shí)這個(gè)聊了很久,然后說了他們項(xiàng)目中也采用了ItemDecoration的列表聯(lián)動(dòng),然后就問了我如何處理ItemDecoration的多個(gè)點(diǎn)擊,最后聊到了事件分發(fā)機(jī)制,主要是在ListView里面嵌套一個(gè)Button以及在ListView里面嵌套一個(gè)ScrollerView讓我說一下事件在dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent中的傳遞過程,面試官先讓我說,我只是說了大體流程,然后面試官又給詳細(xì)地分析了一遍,分析地非常詳細(xì),確實(shí)讓我受益匪淺,自己對(duì)事件分發(fā)的理解又更加進(jìn)了一步。
二面:
JVM內(nèi)存分布,Classloader
靜態(tài)代理跟動(dòng)態(tài)代理
線程的生命周期
是否用過DataBinding
是否接觸過JNI
對(duì)熱修復(fù)跟插件化了解多少
對(duì)RN了解多少
二分查找
說下多態(tài)
編譯期注解跟運(yùn)行時(shí)注解
線程跟進(jìn)程間通信
Android中的IPC
java中的傳遞
equals跟==
Picasso的存儲(chǔ)
項(xiàng)目中的難點(diǎn)
項(xiàng)目中用到了哪些第三方
MVC,MVVM,Clean架構(gòu)
抽象類跟接口的區(qū)別,接口的默認(rèn)修飾符
二面面試官問了很多基礎(chǔ)方面的東西,問地特別細(xì),主要是考察Java基礎(chǔ),感覺面試官是想跟我探討一下比較新的技術(shù)框架 的,但是像DataBinding以及Glide這些我都沒有用過,所以就問了我很多基礎(chǔ)的知識(shí),整體感覺還可以,確實(shí)有些基礎(chǔ)沒有掌握好,深度也有些欠缺
掌閱科技(Over)
面試機(jī)會(huì)來自于Boss
一面
Canvas.save()跟Canvas.restore()的調(diào)用時(shí)機(jī)
程序A能否接收到程序B的廣播?接入微信支付的時(shí)候,微信是如何跟當(dāng)前程序進(jìn)行通信?
對(duì)Java.nio了解多少
ConcurrentHashMap是如何實(shí)現(xiàn)分段鎖?
現(xiàn)在需要遍歷SD卡下所有的文件打印出后綴名為.txt文件名稱,如何提高時(shí)間效率?
為什么復(fù)寫equals方法的同時(shí)需要復(fù)寫hashcode方法,前者相同后者是否相同,反過來呢?為什么?
Android4.0~8.0之間大的變化,如何處理?
說一下Measurespec這個(gè)類
ViewHolder有什么用?
Gradle的Flavor能否配置sourceset?
線程池核心線程數(shù)一般定義多少,為什么?
Intentservice有什么用
弱引用什么時(shí)候被回收
Android中提供了哪些類來幫忙處理線程
http的狀態(tài)碼,常見的請(qǐng)求頭,http緩存協(xié)議https如何加密
多進(jìn)程的優(yōu)缺點(diǎn),多線程的優(yōu)缺點(diǎn)
熱修復(fù)如何修復(fù)資源文件?
有沒有遇到64k問題,為什么,如何解決?
httpUrlconnection跟httpClient有什么區(qū)別
掌閱整體的面試質(zhì)量比較高,但是面試官給我的感覺有點(diǎn)過于自信,就像第5道算法題,我當(dāng)時(shí)確實(shí)沒有想到除了遍歷之外該如何優(yōu)化,然后面試官說可以開多個(gè)線程,我當(dāng)時(shí)聽了就覺得很無語,但是他給出的理由是O(n)的算法不能優(yōu)化,只能開多線程,我說即使不能優(yōu)化,也是可以在O(n)的基礎(chǔ)上進(jìn)行加快的,比如說用遍歷完一遍,做個(gè)緩存,做個(gè)標(biāo)記,如果該目錄下沒有發(fā)生變化下次可以直接讀緩存之類的,開多線程這種操作我個(gè)人認(rèn)為確實(shí)算不上優(yōu)化,最后這個(gè)問題不了了之。而后還有一個(gè)問題就是他說在復(fù)寫equals方法的時(shí)候要復(fù)寫hashcode方法,但是當(dāng)時(shí)我說沒必要,如果是自己定義的一個(gè)類,只需要比對(duì)對(duì)象的唯一屬性,比如說定義一個(gè)學(xué)生對(duì)象,我只需要判斷學(xué)生的ID是否相等就行了,也就是只需要復(fù)寫equals方法,沒必要復(fù)寫hashcode方法然后場(chǎng)面又很尷尬,我后來想了下可能他想表達(dá)的是在集合類中存儲(chǔ)的對(duì)象必須要同時(shí)復(fù)寫equals跟hashcode方法感應(yīng)該是說地過去的,但是當(dāng)時(shí)沒有這個(gè)前提,我覺得在復(fù)寫equals方法的時(shí)候不一定要復(fù)寫hashcode方法,加上前面的那個(gè)算法題,可能自己當(dāng)時(shí)情緒也不是很好,所以溝通上確實(shí)出現(xiàn)了一些問題。
我記得掌閱是在Boss上面進(jìn)行投遞的,當(dāng)時(shí)是跟掌閱科技的移動(dòng)端負(fù)責(zé)人黃劍進(jìn)行溝通的,其實(shí)最開始知道黃劍是在跟包建強(qiáng)老師一起做一個(gè)自定義的ListView的時(shí)候,那個(gè)時(shí)候在性能優(yōu)化的時(shí)候在還在同一個(gè)微信群里面請(qǐng)教過他問題,所以對(duì)掌閱的印象其實(shí)挺好的,但是這次面試確實(shí)體驗(yàn)不是很好。
馬蜂窩(Over)
面試機(jī)會(huì)來自于Boss
一面:
兩個(gè)非基本數(shù)據(jù)類型數(shù)組: array1=[x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,×11] array2=[x6,x3,x10,x5] 計(jì)算結(jié)果:[x6,x7,x8,x9,x1,x2,x3,x4,x10,x11,x5],寫出你的算法
類的初始化過程
點(diǎn)擊事件穿透原則
線程池使用的是哪一種,使用原則
LeakedCanary原理
LinerLayout跟RelativeLayout的繪制原理
Android新版本的一些新特性6.0,7.0,8.0
類的初始化順序依次是(靜態(tài)變量、靜態(tài)代碼塊)>(變量、代碼塊)>構(gòu)造方法
一面面試官問地都是基礎(chǔ),但是有些有難度,比如說那個(gè)LinearLayout跟RelativeLayout相對(duì)布局,我當(dāng)時(shí)只回答了LinearLayout需要測(cè)量一次,而RelativeLayout需要測(cè)量2次,然后如果只嵌套一層首選LinearLayout,如果多層需要使用RelativeLayout,但是當(dāng)具體問到RelativeLayout兩次都測(cè)量什么的時(shí)候我沒答上來。還有那個(gè)算法題。最后實(shí)現(xiàn)了,用數(shù)組實(shí)現(xiàn)的,但是我感覺應(yīng)該是樹,但是對(duì)樹不熟悉,所以用的就是數(shù)組。
二面:
看了看項(xiàng)目提了問題如何進(jìn)行優(yōu)化
如何實(shí)現(xiàn)馬蜂窩中的一個(gè)動(dòng)畫效果
軟鍵盤頂起布局
組件化通信方案
二面感覺有點(diǎn)沒怎么發(fā)揮好,因?yàn)槊嬖嚬偈紫葐柫藛栁褿itHub上的開源項(xiàng)目,但是他找了幾個(gè)問題,問我怎么優(yōu)化,然后又在我項(xiàng)目里面發(fā)現(xiàn)了幾個(gè)問題,問我怎么優(yōu)化,很明顯那些問題都是他是比較熟練的,而且都是自定義View相關(guān)以及性能優(yōu)化方面的,最后又拿了馬蜂窩APP里面的一個(gè)滑動(dòng)動(dòng)畫問我如何實(shí)現(xiàn),基本上都是在問自定義View,基本上二面就是問了這幾個(gè)問題,每個(gè)問題都擴(kuò)展了很多,但是都是View相關(guān)的,沒有涉及到其他的知識(shí)點(diǎn),可能他們的對(duì)于自定義View這塊要求比較高,同時(shí)也要兼顧到性能調(diào)優(yōu),整體來說,自定義View確實(shí)不是我的強(qiáng)項(xiàng),最后還聊到組件化,他們現(xiàn)在也在做組件化,我說了我的方案,貌似他不是很滿意,最后也能感覺到發(fā)揮地不行,所以被Pass掉了。
還有一個(gè)細(xì)節(jié)就是,一面面完,當(dāng)時(shí)二面面試官不在,是第二天過來復(fù)試的,第二天來了簽到之后又等了將分鐘,然后他們說簽到機(jī)壞了,當(dāng)時(shí)感覺挺不好的,不過當(dāng)我二面的時(shí)候在那里等面試官的時(shí)候,馬蜂窩的一個(gè)員工,年紀(jì)挺大了,然后看到我的訪客牌,單獨(dú)給我倒了一杯水,確實(shí)挺感動(dòng)的,這個(gè)員工不是他們的接待人員,讓我肅然起敬,然后他就繼續(xù)上班了,整體發(fā)揮很一般,不過那兒的環(huán)境確實(shí)特別好,很有風(fēng)格。
愛奇藝(Offer)
面試機(jī)會(huì)來自于拉勾
一面:
聊聊RecyclerView,動(dòng)畫,緩存,數(shù)據(jù)綁定底層是如何實(shí)現(xiàn)的。
聊了聊我的開源項(xiàng)目實(shí)現(xiàn)原理
View在屏幕中的移動(dòng)底層是如何實(shí)現(xiàn)的
Binder跟Socket之間的區(qū)別,什么時(shí)候用哪一個(gè),Binder的底層實(shí)現(xiàn)
Activity,Window跟View之間的關(guān)系
setContentView都干了啥
Activity的啟動(dòng)模式
MVC跟MVP之間的區(qū)別
算法:將一個(gè)有序數(shù)組去重得到一個(gè)新數(shù)組(空間復(fù)雜度為O(N))
愛奇藝確實(shí)要求比較高,面試題目難度特別大,讓我說RV的時(shí)候,我說了很多,但是面試官感覺都不太滿意,然后問地特別細(xì),涉及到了AMS跟WMS,這些問題我回答地一般,除此之外,都答地還可以,最后面試官說可以看出我有些東西研究地比較深,但是沒有抓住關(guān)鍵點(diǎn)。
二面:
LruCache底層實(shí)現(xiàn)
Hashmap的hash算法
Bitmap在decode的時(shí)候申請(qǐng)的內(nèi)存如何復(fù)用,釋放時(shí)機(jī)
注解如何實(shí)現(xiàn)一個(gè)findViewById
Android是如何學(xué)習(xí)的
sycronized關(guān)鍵字的類鎖對(duì)象鎖,如何保證線程安全?
重入鎖跟sycronized關(guān)鍵字之間的區(qū)別
除了notify還有什么別的方式可以喚醒線程
說說你對(duì)Context的理解
二面感覺比一面要簡(jiǎn)單一些,但是也有幾個(gè)問題我沒答上來,當(dāng)面試官說如何在Bitmap解碼的時(shí)候復(fù)用申請(qǐng)的內(nèi)存,我也是第一次知道原來這里可以復(fù)用,然后我提出了自己的疑問,說如果復(fù)用的話,那么什么時(shí)候回收,他說fresco有自己的回收機(jī)制。最后還有Context的理解,我只是看過郭霖的博客,有點(diǎn)影響,確實(shí)想不起來了,也是有些尷尬,包括那個(gè)用注解實(shí)現(xiàn)一個(gè)findviewbyid,也是有看過,但是沒有完整的思路,最后支支吾吾地回答了一點(diǎn),除此之外,別的還好。
三面:
Listview的adapter是什么adapter,如何復(fù)用。
RV是如何布局的
算法:如何從1T的無序數(shù)組(長(zhǎng)度為n)里面找出前k大的數(shù)據(jù),復(fù)雜度要求為O(logN)
由A啟動(dòng)BActivity,A為棧內(nèi)復(fù)用模式,B為標(biāo)準(zhǔn)模式,然后再次啟動(dòng)A或者殺死B,說說A,B的生命周期變化,為什么
三面面試官應(yīng)該是技術(shù)總監(jiān),第一個(gè)問題就把我難到了,我憑感覺說是BaseAdapter,但是轉(zhuǎn)念一想,不對(duì),ListView還支持ArrayAdapter,然后面試官笑著說讓我回去看看源碼,接著問了RecyclerView如何繪制的,我當(dāng)時(shí)說了比較多,但是都沒說到點(diǎn)子上去,面試官最后給我耐心地分析了下。給我印象最深的是那個(gè)算法題,面試官開始問我有沒有搞過ACM我說沒有,然后他就說看你不是非科班的,就出個(gè)簡(jiǎn)單點(diǎn)的,然后出了兩道算法題,一題是實(shí)現(xiàn)一個(gè)鏈表,另外一個(gè)是寫一個(gè)快排,但是我感覺面試官對(duì)非科班的有些偏見,然后我就說這個(gè)太簡(jiǎn)單了,我說你就把我當(dāng)做科班的,然后說我希望能夠跟科班的做一樣的題目(后來想想自己有點(diǎn)飄),然后面試官就出了上面那道算法題, 我一看到O(lgn),感覺涼涼了,想著快排最多也是O(nlgn) ,所以當(dāng)時(shí)想了很久,也沒實(shí)現(xiàn),然后面試官給了我提示,說知道快排原理么,然后我在腦子里面過了一遍快排,突然想到了解決思路,然后跟面試官說了我的想法,就是用改良的快排,他微笑著表示認(rèn)可,然后最后說如何去找到標(biāo)定元素,我說用隨機(jī)數(shù),他說隨機(jī)數(shù)不太好,然后問了我數(shù)學(xué)怎么樣,我說還行,他說可以采用正太分布,找到線性分布的那個(gè)中間點(diǎn),確實(shí)是可以這樣,因?yàn)闆]有規(guī)律的數(shù)據(jù)是可以看做正態(tài)分布的,也就是符合線性回歸的。
美團(tuán)(Over)
面試機(jī)會(huì)來自于內(nèi)推
1.APP啟動(dòng)流程
2.Webview內(nèi)存泄露
3.組件間通信,如何傳遞對(duì)象
4.Arouter原理
5.如何取消一個(gè)網(wǎng)絡(luò)請(qǐng)求
6.兩個(gè)activity之間來回切換的生命周期變化
7.進(jìn)程間如何通信,Binder機(jī)制
8.內(nèi)存泄露及優(yōu)化
9.自定義view以及事件沖突
10.線程池參數(shù)及定義,多線程是否一定會(huì)高效
11.電量?jī)?yōu)化
美團(tuán)實(shí)際上面了三面,但是面試題跟前面的面試官很多重復(fù)的,所以就只寫了上面幾道題目,整體面試感覺都答上來了,但是問的有些問題確實(shí)沒接觸過,比如說Webview的性能優(yōu)化,電量?jī)?yōu)化等,最后HR反饋的情況是基礎(chǔ)很好,項(xiàng)目經(jīng)驗(yàn)不足。
獵豹移動(dòng)(Offer)
面試機(jī)會(huì)來自于Boss
筆試
請(qǐng)例舉Android中常用布局類型,并簡(jiǎn)述其用法以及排版效率
區(qū)別Animation和Animator的用法,概述其原理
Thread,Looper,MessageQueue,Handler,Message每個(gè)類的功能以及這些類之間的關(guān)系
如何加載NDK庫?如何在jni中注冊(cè)native函數(shù),有幾種注冊(cè)方法?
操作系統(tǒng)中進(jìn)程和線程有什么聯(lián)系和區(qū)別?系統(tǒng)會(huì)在什么情況下會(huì)在用戶態(tài)好內(nèi)核態(tài)中切換。
如果一個(gè)APP里面有多進(jìn)程存在,請(qǐng)列舉你所知道的全部IPC方法
請(qǐng)畫出MVC、MVP模式的差異
對(duì)于Android APP閃退,可能的原因有哪些?請(qǐng)針對(duì)每種情況簡(jiǎn)述分析過程。
筆試題,我答地感覺一般,因?yàn)槲颐嬖嚨氖谦C豹移動(dòng)的Clean Master,所以偏底層一些,不過整體還好,而且筆試題在面試過程中基本上不怎么問,只是做一個(gè)參考。
一面:
listview跟recyclerview之間的區(qū)別,然后上拉加載的時(shí)候分別應(yīng)該如何處理
項(xiàng)目中用過哪些技術(shù)
同步普通方法跟static方法之間的區(qū)別
不用鎖如何保證int自增安全
內(nèi)存為什么會(huì)發(fā)生泄露
做過的性能優(yōu)化,原理
DVK跟JVM之間的區(qū)別
有沒有diss過產(chǎn)品經(jīng)理
平時(shí)看什么書
為什么學(xué)python
項(xiàng)目中用到過哪些技術(shù)
期望在項(xiàng)目中扮演什么樣的角色
一面面試官主要是從宏觀的角度上看待業(yè)務(wù),產(chǎn)品,因?yàn)榭赡芸戳宋业牟┛透鶪itHub,對(duì)我的技術(shù)有一個(gè)大致的了解,然后問了一些基礎(chǔ)的東西,就進(jìn)入了二面。
二面:
Sycronized原理
ReentrantLock原理
靜態(tài)內(nèi)部類為什么能保證單例,JVM是如何實(shí)現(xiàn)的
ART跟DVM做了哪些優(yōu)化
View是如何繪制到屏幕上的
寫一個(gè)快排,有時(shí)間限制
二面面試官問地特別深,一上來就是各種原理 問了很多原理的原理,比如說Sycronized原理,View如何繪制到屏幕上去,這些對(duì)于我來說確實(shí)比較難,然后還問到了AQS, CAS的底層實(shí)現(xiàn),答地一般般,我基本上對(duì)于JMM的了解就是類鎖對(duì)象鎖,指令重排序等
三面
GitHub上的開源項(xiàng)目是如何實(shí)現(xiàn)的
未來的職業(yè)規(guī)劃
遇到問題如何解決
為什么沒有自己搭建SS 三面是獵豹移動(dòng)的產(chǎn)品總監(jiān),沒有問技術(shù)上的問題,基本上如實(shí)回答就行了,沒有那么多的套路,真誠(chéng)即可。
摩拜(Offer)
面試機(jī)會(huì)來自于拉勾
筆試:
自己帶電腦,他們提供一個(gè)接口,實(shí)現(xiàn)一個(gè)瀑布流,需要考慮動(dòng)畫,內(nèi)存管理等,可以上網(wǎng)搜,限時(shí)90分鐘
當(dāng)時(shí)我去的時(shí)候出了個(gè)以外,HR給我的WiFi我沒法連GitHub,當(dāng)時(shí)想著用自己封裝的ImageLoader,沒想著直接用第三方,在使用RecyclerView的時(shí)候依賴也沒法添加,所以最開始時(shí)間都浪費(fèi)了,直到一面面試官下來,給我連接了他們的員工wifi,我才能添加依賴,尷尬的一比,不過到最后時(shí)間到了還是沒有實(shí)現(xiàn)預(yù)期的效果,面試官最后問我,我說了我的考慮,他說只是想看看我解決問題的能力,完全可以用第三方,沒必要自己實(shí)現(xiàn),不過對(duì)我的態(tài)度還是表示認(rèn)可的,然后開始一面。
一面:
深拷貝淺拷貝
輸出一個(gè)集合{A,B,C,D}的全部子集
自定義View及注意事項(xiàng)
如何自動(dòng)化部署打包發(fā)包流程
JNI是否了解過
內(nèi)存回收
classloader
對(duì)熱修復(fù)以及插件化了解多少
微信支付寶支付調(diào)用時(shí)上層是如何封裝AIDL的
如何給一個(gè)app瘦身
基本上在之前的面試都有涉及到,依然是問我會(huì)的東西,一點(diǎn)點(diǎn)深入,第9道面試題我記得在掌閱面試的時(shí)候那個(gè)面試官說微信用地是廣播,但是摩拜的面試官說微信用地是start ActivityForResult,這個(gè)我決定以后自己去深入研究下,看看他們到底是如何實(shí)現(xiàn)的,別的問題都是比較常見的。
二面:
如何實(shí)現(xiàn)一個(gè)推送,極光推送原理
說說Http協(xié)議,以及Tcp/Udp
常見的設(shè)計(jì)模式,如何實(shí)現(xiàn)一個(gè)觀察者模式,如果需要有序通知觀察者,該如何操作
實(shí)現(xiàn)一個(gè)圖片加載框架應(yīng)該考慮哪些
線程池有哪些參數(shù),應(yīng)該如何設(shè)計(jì)
性能優(yōu)化是如何做的
Java為什么要推出HashMap,它是如何解決hash沖突的
JVM內(nèi)存分配,編碼時(shí)如何注意內(nèi)存泄露
Binder機(jī)制原理
摩拜問地都是很常見的問題,我能感覺到面試官在問我問題的時(shí)候并不在乎我對(duì)這個(gè)問題掌握地有多好,而是更加關(guān)注我對(duì)待某個(gè)知識(shí)點(diǎn)的態(tài)度,更多地賦予面試題一個(gè)場(chǎng)景,而不是空談理論,是我比較喜歡的面試官。
三面:
為什么重復(fù)造輪子,自己去設(shè)計(jì)一些框架的原因
如何保證線上項(xiàng)目的穩(wěn)定性
自己之前做的項(xiàng)目的規(guī)模
聊了聊他們目前在做的項(xiàng)目
三面面試官跟我聊了聊一些新技術(shù),還有就是我自己為什么要重復(fù)造輪子,我說為了保證項(xiàng)目的穩(wěn)定性同時(shí)能夠更好地去定位問題,然后聊了聊他們目前在做的項(xiàng)目,整體感覺特別好。
面試之外
上面說地都是一些硬實(shí)力,下面簡(jiǎn)單說些自己在面試過程中總結(jié)的一些面試之外需要注意的東西
比較重要的面試安排在下午3點(diǎn)左右,因?yàn)楸本┻@邊的互聯(lián)網(wǎng)公司基本上都是10點(diǎn)左右上班,那么很有可能上午面不完,下午接著面,所以3點(diǎn)的話可以給你當(dāng)天的第二家留有更多的緩沖時(shí)間
大公司的面試盡量安排在前面,因?yàn)榇蠊镜牧鞒烫貏e多,Offer審批時(shí)間較長(zhǎng)
面試前一定要跟HR溝通好,當(dāng)天盡可能一次性面完,如果不能面完就改時(shí)間,盡可能不要分兩次面,除非情況特殊。
家中盡量放一些零食水果之類的,早上可以吃一點(diǎn)再去面試,因?yàn)槿绻嬖嚺诺貪M的話,上午面完之后就得急著趕往下一家,所以我有好幾天都是只在晚上吃了一頓飯,特別尷尬的時(shí)候有時(shí)候在面試的時(shí)候肚子在咕咕地叫。
后記
除了上面提到的公司之外,我還面試了人人車(Boss直聘),以及58同城(Boss直聘)**而且也都收到了他們的Offer,由于他們面試的順序排在后面,而且面試題跟之前的面試題有很多共同點(diǎn),所以就沒有放出來,此外還面試過快看漫畫,面了兩輪,然后CTO需要改天面,我心里其實(shí)比較反感這種公司的,因?yàn)樽鳛槊嬖囌吲芤惶吮旧砭秃苄量?,所以后來?fù)試我就沒去,還有一家是青橙科技也是需要我去復(fù)試,太遠(yuǎn)了,而且當(dāng)時(shí)手里已經(jīng)有了Offer就沒去,真心希望這些招人的公司能夠在一天內(nèi)把流程能走完,畢竟像一些大公司在跟我溝通面試的時(shí)候都會(huì)約定個(gè)時(shí)間能把所有的面試流程走完。另外還有一家是豆果美食,面試官?zèng)]怎么聊技術(shù),基本上都是在談人生,談理想,最后互相加了微信,然后當(dāng)時(shí)問我有沒有別的Offer,我也知道自己不會(huì)去那里,然后就說愛奇藝給我Offer了,可能他也知道我不會(huì)去了,后來就沒有通知復(fù)試什么的,不過感覺他比較自信,至少比我自信。
雖然自己這次沒有進(jìn)入到BAT等一線互聯(lián)網(wǎng)公司,頭條,滴滴還有陌陌的簡(jiǎn)歷都被刷了,跟那些大佬比起來確實(shí)慚愧很多,感覺沒啥必要寫這個(gè)面試經(jīng)歷,但是總覺得寫出了可以幫到一些人,因?yàn)樽约褐霸诩夹g(shù)的道路上也迷茫過,從最初的Android小白,當(dāng)時(shí)看郭霖,張鴻洋還有主席的博客學(xué)習(xí),然后在迷茫的時(shí)候看主席還有VB的知乎Live,也認(rèn)識(shí)了很多小伙伴,在技術(shù)上給了我很多幫助,讓我能夠堅(jiān)持走到今天,同時(shí)也感謝每一個(gè)給我面試機(jī)會(huì)的面試官,Android之路還會(huì)一如既往的走下去,希望這篇文章可以幫到一些人,就像當(dāng)初幫到我的那些文章一樣。
大家都在看
評(píng)論列表
還沒有評(píng)論,快來說點(diǎn)什么吧~