四月面臨了人生第一次比較重大的變化:如今的公司由於融資不利,收回了個人正式offer。這一波很傷... 因此在得知消息以後,接下來差很少一個月的時間裏,本身開始了的頻繁的面試之旅。其中有導師/朋友給內推的,也有自投的....java
這篇文章最初是在簡書上發的,後來愈來愈以爲掘金好用,因此會逐步把文章轉到掘金上發佈。個人簡書git
沒想到關注的同道中人們這麼多,因此準備逐步把我對這些題目的理解寫出來,還望各位大佬們能夠評論區指正,互相學習。github
首先,我是一個雙非本科的大四狗,一直在搞安卓,自學一年多的時間,而後有半年多的實習經歷...安卓真好玩,就是肚子有點餓~ 接下來,按時間的順序的記一記我這一個月以來所經歷的面試。 (如今已經畢業參加工做了,目前就任人人車,作客戶端開發。)算法
一、四種啓動模式,結合具體狀況分析。數據庫
答案更新:這個就很少說,如今沒人想聽概念性的答案,通常都會結合實際場景,去考察對singleTask,singleTop,singeInstance的理解設計模式
二、onNewIntent被回調,Intent內容是最新的麼?那其餘回調裏的Intent是最新的麼?數組
答案更新:在onNewIntent方法中的Intent是最新,可是其餘回調裏不是。若是想讓其餘回調也是最新的intent,須要在onNewIntent裏,setIntent(),對最新的intent進行賦值。緩存
三、Service的start和bind的區別?屢次start和bind的生命週期狀況?start和bind都調用了會怎麼樣?安全
答案更新:區別就很少說了。首次啓動調用onCreate(),再次啓動只會重複調用onStartCommand;bind方式不會調用onStartCommand,而且onBind()也只會調用一次。重複bind和unbind,並不會重複出發onBind和onUnBind,可是onServiceConnect和onDis...會重複調用。 start和bind都被調用,必須unbind和stop都調用纔會完全kill掉。
四、常見的內存泄漏/內存溢出?怎麼解決?
答案更新:可使用LeakCanary或者Androidstudio自帶的工具進行分析。這類文章比較多。 常見的內存泄漏,套路性也是比較常見的:一、內部匿名類Handler作耗時操做。由於會持有外部引用,尤爲是Activity,若是耗時操做沒有結束,而Activity銷燬,那麼此時Activity是沒辦法被gc回收掉的。二、一些Listener沒有其實的remove掉,其實和Handler的緣由很歷史。三、還有一些須要unRegister沒有unRegister。等等
五、多進程application會初始化幾回?怎樣進行跨進程通信?SP屬於文件,爲何不能跨進程?聊一下對Binder機制的瞭解?
答案更新:每個進程都會初始化一個Application。跨進程可使用AIDL,或者廣播,數據庫,第三方的文件等操做。SP雖然是存在xml文件裏,可是系統對SP進行了緩存操做,所以更新不及時,因此多進程並不安全。 Binder機制...比較複雜,各位看官能夠搜一搜對應的文章。
六、可否在子線程更新UI?那爲何onCreate中能夠更新UI?簡單聊一下View的繪製過程?
答案更新:子線程檢查方法checkThread()在ViewRootImpl中被調用,而ViewRootImpl在handleResumeActivity時被添加,也就是對應的是onResume()。因此也就是說在onCreate時根本不會執行checkThread()方法。
七、聊一下Handler機制?爲何loop是死循環不會阻塞主線程?postDelayed怎麼作到延時的?
答案更新:關於這個問題,能夠看這個答案:https://www.zhihu.com/question/34652589
八、手寫一個鏈表翻轉吧。
答案更新:思路有不少,若是不要求空間複雜度,可使用棧,將鏈表一個個push到棧中,而後逐個pop,就把鏈表翻轉了。
寫完鏈表翻轉,一面就結束了。總體來看難度適中吧。面試官沒有特別狠的追問。
二面剛開始沒怎麼聊技術,問一問我是一個應屆生怎麼參與社招了。我如實回答了一下,又扯了扯其餘的。而後大部分時間是在聽我說。
一、聊一下你看過的源碼吧?EventBus、OkHttp、屬性動畫。
二、你說你擅長自定義UI,聊一聊吧?
三、有沒有作過的什麼效果?看過一些後問怎麼實現的?
二面沒怎麼發問,就到了三面....
三面就問了一下TCP和UDP的區別,線程和進程的區別。
而後就很直白的說,前倆輪面試對你評價還能夠。可是你沒有正式的工做經驗,社招確定是不行,校招又已通過去了,我只能給你實習offer。可是我還得去問一下HR那邊....
不得不認可,此次面試的結果給的挺快。離開百度科技園以後,還沒到家。HR那邊就打來電話.....總結下來就是連實習offer也不能發...手動攤手.png
由於崗位是實習,因此總體感受難度通常。
面試官應該是主要作UI的,因此問的問題大多數和UI相關
一、onMeasure() / onLayout() / onDraw() 區別?Measure的三種模式?Canvas有沒有邊界,View的邊界怎麼肯定?
二、事件分發的過程?onTouch和onClick的前後順序?onTouch和onTouchEvent返回true是什麼狀況?若是在onTouch中的DOWN返回了true,MOVE返回false會接到後續的事件麼?
三、瞭解什麼設計模式?平常開發用到過麼?
四、手寫倆條鏈表合併
二面並無追問我什麼,大部分時間再根據個人簡歷,讓我本身說...
大疆的效率仍是比較高的。我中午吃飯的時候,HR給了我反饋說能夠過來實習,可是咱們目前並無校招的hc,因此不能給你正式的身份...因此我並無選擇過去實習。
筆試沒啥特別的東西,都是一些java基礎,安卓基礎,幾道中規中矩的算法。
一、四種啓動模式?寫了幾個狀況,讓我說back鍵的狀況?
二、LayoutManager和MeasureSpec之間的關係?
三、堆排的思想?快排的時間複雜度?手寫一下快排?
四、Handler機制?
五、Service即start又bind,怎麼才能完全中止?IntentService怎麼實現的?
六、Aidl中Stub和Proxy的區別?聊一聊對Binder的理解?
七、手寫一個有序數組的合併?
二面總體就是根據個人簡歷,問了問。讓我聊一聊看過的OkHttp的源碼。 手寫了倆個算法:
一、用最小的時間複雜度判斷單鏈表是否有交點。
二、手寫二叉樹的按層級進行遍歷。
談人生談理想...
樂視的效率不算高...一週後給了答覆,能夠給offer...不過鑑於樂視最近的狀況...再考慮吧
知乎算是一次體驗比較差的體驗...一面就讓我走了,並且我都不知道啥緣由。手動攤手.png
一、聊一聊ArrayList源碼?何時初始化數組?怎麼擴容?擴容時使用什麼樣的方式增大數組?
二、聊一聊HashMap源碼?怎麼擴容?源碼的hash是怎麼保證平均散列的?hash衝突後,使用什麼方式解決?插入的時候在頭結點,仍是尾結點?key爲空的處理?
三、java中的序列化和安卓中的序列化
四、聊一聊安卓中特有的集合
五、線程安全的Map有什麼?使用什麼樣的方式保證線程安全?分段鎖和重入鎖的區別?
六、synchronized和Lock的區別?
七、Measure的三種狀況?
八、切圓角有幾種方式?(必須吐槽這個題...)
九、Handler機制?postDelayed怎麼處理的?
十、算法:翻轉一個int型的大數
一面結束....就沒有而後了...
不得不認可4月份校招真的很差找....並且由其對我這種雙非,體驗真的是不好....唉,難啊....
本菜開源的一個本身寫的Demo,這個項目拆解並組合了不少業務。目的在於遇到相似業務,能夠快速的ctrl+c/v。但願能給Androider們有所幫助,水平有限,見諒見諒… github.com/zhiaixinyan…
由於身邊的同窗從事互聯網相關職業的比較多,而且你們閒時聊天時總會吐槽找工做有不少坑,因此打算把身邊同窗找工做的經驗,通通收集起來。提供給想從事這方面同窗,但願圈內好友能夠共同進步,共同少踩坑。