做了三年Android開(kāi)發(fā),從被小公司婉拒到收割百度offer,總想寫(xiě)點(diǎn)什么...

前言

從畢業(yè)到現(xiàn)在面試也就那么幾家公司,單前幾次都比較順利,在面到第三家時(shí)都給到了我offer!前面兩次找工作,沒(méi)考慮到以后需要什么,自己的對(duì)未來(lái)的規(guī)劃是什么,只要有份工作,工資符合自己的要求就行!所以在智聯(lián)招聘上選好工資范圍,就一頓海投,做等面試電話!

做了兩年快三年的Android開(kāi)發(fā),工作的任務(wù)也就是一些界面的編寫(xiě),RecyclerView的簡(jiǎn)單使用,網(wǎng)絡(luò)框架也是別人封裝好的直接用,再就是集成些第三方的分享、支付什么的!技術(shù)上的提升可以說(shuō)根本沒(méi)有,和工作一年左右的人,比起來(lái)就多幾個(gè)項(xiàng)目?jī)?yōu)勢(shì)!所以這次出來(lái)找工作還期望15K,說(shuō)起來(lái)心里很慌!有哪些原因呢?

1、小公司要求不高,自己也抱著只要能做出功能的態(tài)度

2、對(duì)行業(yè)趨勢(shì)把握不準(zhǔn),沒(méi)有未來(lái)規(guī)劃(所謂混吃等死)

3、對(duì)自己的工作不感興趣,上班有空閑時(shí)間也不會(huì)去深入學(xué)習(xí)

再來(lái)說(shuō)說(shuō)這次找工作面試的一些經(jīng)歷和感想!這次面試大大小小面試了十多家!依我自己在簡(jiǎn)歷上寫(xiě)的幾個(gè)商城類APP的工作經(jīng)驗(yàn),在智聯(lián)和拉鉤上也只有小公司能叫我去面試?。ㄋ哉f(shuō)技術(shù)深度很重要)

前面兩次的由于面試沒(méi)怎么準(zhǔn)備,直接over肯定是沒(méi)問(wèn)題的!第一家一個(gè)小姐姐把我問(wèn)得n臉懵逼(一個(gè)屌絲程序猴和妹子聊天就緊張,心跳加速,口干舌燥,說(shuō)話結(jié)巴)!她首先讓我自我介紹一下,可腦袋一下像短路了一樣!就說(shuō):“你知道的程序員表達(dá)能力差,嗯。。。嗯。。。你看簡(jiǎn)歷吧!”她直接一臉無(wú)語(yǔ)!

新一輪面試的準(zhǔn)備

正是因?yàn)樯弦淮蚊嬖嚨谋瘧K經(jīng)歷,因?yàn)楦杏X(jué)自己突然啥都不會(huì)了,迅速鎮(zhèn)定下來(lái),去網(wǎng)上找了一下Android的面試題,但是發(fā)現(xiàn)都只有提問(wèn)了什么并沒(méi)有對(duì)所提問(wèn)題的解答,那只能自力更生,像做試卷一樣,一遍總結(jié)一遍溫顧。

其實(shí)大多都是平時(shí)開(kāi)發(fā)中用到的,只是我們沒(méi)有總結(jié)過(guò),被問(wèn)起來(lái)的時(shí)候回答的難免會(huì)有點(diǎn)捉襟見(jiàn)肘,不能回答的很全面.下面為我個(gè)人總(bai)結(jié)(du)的,希望對(duì)你能有所幫助,但畢竟能力有限,有寫(xiě)的不對(duì)的地方,還望輕噴.雖然噴我我也不會(huì)改的.

因?yàn)楸疚钠^長(zhǎng)建議收藏,在用到時(shí)候找出來(lái)看一眼.有一些知識(shí)點(diǎn)可能沒(méi)涉及到,以后會(huì)加以補(bǔ)足.因?yàn)槊嬖嚐o(wú)非是考察你對(duì)技術(shù)的理解和總結(jié),所以本篇的每個(gè)點(diǎn)總結(jié)的比較精簡(jiǎn),只是讓你大概的說(shuō)出來(lái),有的部分是需要能夠畫(huà)出原理圖并進(jìn)行解釋說(shuō)明,這個(gè)要在工作中多積累.

??贾R(shí)點(diǎn)

1、Java

  • 講下equals和hashcode,他們?yōu)楹伪仨氁黄鹬貙?xiě)?hashcode方法重寫(xiě)規(guī)則。
  • HashMap相關(guān)。

①HashMap添加元素的過(guò)程,hash方法細(xì)節(jié);擴(kuò)容的觸發(fā)條件、擴(kuò)容過(guò)程中是數(shù)據(jù)是整體復(fù)制么?鏈表轉(zhuǎn)紅黑樹(shù)的閾值為何是8,紅黑樹(shù)轉(zhuǎn)鏈表的閾值為何是6,為何不上同一個(gè)閾值?鏈表為何要轉(zhuǎn)紅黑樹(shù)?紅黑樹(shù)有何特性?hashmap為何如此設(shè)計(jì)?

②對(duì)應(yīng)的并發(fā)容器。HashTable以及ConcurrentHashMap實(shí)現(xiàn)細(xì)節(jié),優(yōu)劣勢(shì); 如何使現(xiàn)有的HashMap線程安全?(Collections#synchronizedMap)

  • 運(yùn)行時(shí)數(shù)據(jù)區(qū)域分區(qū),哪些線程私有,哪些線程共享。棧幀的數(shù)據(jù)結(jié)構(gòu)。方法區(qū)存放哪些數(shù)據(jù)。
  • 簡(jiǎn)單描述一下 Person person = new Person() 對(duì)象實(shí)例化過(guò)程。最好有類加載過(guò)程。
  • GCRoot的類型,舉例說(shuō)明。
Activity中的匿名Handler導(dǎo)致的內(nèi)存泄漏,最終的引用鏈root要分析到Thread#threadLocals上

  • LRU的實(shí)現(xiàn)。讓你自己實(shí)現(xiàn)一個(gè),你會(huì)怎么做。
  • 線程的幾種狀態(tài)。
  • 線程池。
①7個(gè)參數(shù)。
②線程池中的任務(wù)可以實(shí)現(xiàn)按照優(yōu)先級(jí)執(zhí)行么,如何實(shí)現(xiàn)?(優(yōu)先級(jí)隊(duì)列)
③線程池的設(shè)計(jì)用到了那種設(shè)計(jì)思想?(生產(chǎn)者消費(fèi)者模型)
④何為阻塞隊(duì)列?
⑤你是如何配置線程池的?核心線程數(shù)你一般是怎么配置的?

  • T1、T2、T3三個(gè)線程,如何保證它們順序執(zhí)行?也就是異步轉(zhuǎn)同步的方式。
①Thread#join
②等待多線程完成的CountDownLatch
③FutureTask
④Executors#newSingleThreadExecutor
⑤wait/notify

  • Java中 wait和sleep方法的不同?(wait釋放鎖,sleep不會(huì)釋放鎖)
  • 線程安全相關(guān)。
  • 鎖。synchronized、volatile、Lock。鎖的幾種狀態(tài)。CAS原理。
①為什么會(huì)有線程安全?
②Java中如何保證線程安全?
③synchronized和Lock的使用、區(qū)別及底層實(shí)現(xiàn);volatile的作用和使用方式;常見(jiàn)的原子類。
④synchronized中的類鎖和對(duì)象鎖互斥么?

  • 講下Java的雙親委派。
  • 泛型。
①泛型擦除的原因和效果,擦除的時(shí)機(jī)。
②為何會(huì)有協(xié)變和逆變
③通配符。
④PECS

  • 反射。
  • 注解。
①Source和Class、Runtime注解的區(qū)別
②注解如何使用

  • 方法內(nèi)部的匿名內(nèi)部類使用方法的局部變量時(shí),為何要使用final修飾?

2、Android

  • 啟動(dòng)模式,以及常見(jiàn)用法。
①舉例說(shuō)明
②taskAffinity,allowTaskReparting的用法。
③有沒(méi)有遇到哪些詭異的現(xiàn)象?如何解決的?

  • Activity生命周期。
①常見(jiàn)生命周期方法
②A啟動(dòng)B的,然后按back鍵,執(zhí)行了哪些方法?如果是A啟動(dòng)B的,然后按home鍵呢?
③onSaveInstance方法調(diào)用時(shí)機(jī)。

  • Bitmap內(nèi)存優(yōu)化。
①Bitmap內(nèi)存如何計(jì)算?如何在不改變圖片質(zhì)量的情況下優(yōu)化?Bitmap內(nèi)存復(fù)用(Options.inBitmap)
②超大圖加載(BitmapRegionDecoder)
③跨進(jìn)程傳遞大圖(Bundle#putBinder)

  • xhdpi的圖片分別顯示到hdpi和xxhdpi的手機(jī)上,顯示的大小和內(nèi)存是怎樣的?
  • 資源文件加載規(guī)則。比如說(shuō)圖片存放在drawable-hdpi和drawable-xxhdpi下,xhdpi的手機(jī)會(huì)加載哪張?如果刪除掉drawable-xxhdpi下的圖片呢?
  • Android的進(jìn)程間通信方式。
①Android為何要自己搞一個(gè)binder,使用linux原有的通信方式不行么?(安全、性能好,方便易用)
②binder通信的內(nèi)存大小限制。(1M和128k)
③binder的架構(gòu)(Application、ServiceManager、系統(tǒng)Service、binder驅(qū)動(dòng)),以獲取系統(tǒng)服務(wù)的過(guò)程舉例分析。
④Application#onCreate里面可以使用binder服務(wù)么(可以)?Application的binder機(jī)制是何時(shí)啟動(dòng)的(zygote在fork好應(yīng)用進(jìn)程后,會(huì)給應(yīng)用啟動(dòng)binder機(jī)制)?binder機(jī)制啟動(dòng)的幾個(gè)關(guān)鍵步驟。
⑤binder線程池默認(rèn)最大數(shù)量(15)?
⑥binder和AIDL。
⑦oneway。

  • 談?wù)勀銓?duì)Android中Context的理解?四大組件里面的Context都來(lái)源于哪里。
  • Application啟動(dòng)流程。
①AMS是如何確認(rèn)Application啟動(dòng)完成的?關(guān)鍵條件是什么(zygote返給AMS的pid;應(yīng)用的ActivityThread#main方法中會(huì)向AMS上報(bào)Application的binder對(duì)象)?
②Application#constructor、Application#onCreate、Application#attach他們的執(zhí)行順序(132)。Activity和Service呢?

  • startActivity的具體過(guò)程。
  • Activity#setContentView的具體過(guò)程。
①PhoneWindow是何時(shí)創(chuàng)建的,它的作用是什么?
②setContentView中傳遞的資源文件是如何變成View對(duì)象的?
③布局文件對(duì)應(yīng)的View對(duì)象是添加到哪里的?
④Activity的布局是何時(shí)顯示出來(lái)的?
⑤ViewRootImpl是何時(shí)初始化的?它的作用是什么?
⑥Choreography了解么?作用是什么?

  • Surface的作用是什么?它是何時(shí)初始化的?View繪制的數(shù)據(jù)是如何顯示到屏幕上的?
  • Handler機(jī)制:
①應(yīng)用層,消息的發(fā)送、接收、獲取和處理;消息是如何存儲(chǔ)的?延時(shí)消息一定準(zhǔn)時(shí)么?是如何保證延時(shí)時(shí)間的?Handler#dispatchMessage細(xì)節(jié),如何使用?
②Handler的Framework層。Looper#loop方法為何不會(huì)導(dǎo)致ANR?nativePollOnce細(xì)節(jié)。eventfd和epoll機(jī)制了解么?
③IdleHandler了解么?合適調(diào)用?如何使用?靠譜么?
④handler里面消息有幾種?普通消息、同步消息、消息屏障。如何使用?如何區(qū)分普通消息和異步消息?
⑤如何實(shí)現(xiàn)給Handler發(fā)送一個(gè)Runnable,又不通過(guò)Handler#post(Runnable run)這個(gè)API?(Message#obj屬性,或者通過(guò)反射設(shè)置Message#callback屬性)
⑥Message#obtain實(shí)現(xiàn)細(xì)節(jié)了解么?為何要池化?最大限制容量是多少?

  • ThreadLocalMap的實(shí)現(xiàn)。
  • View繪制流程
①onMeasure、onLayout、onDraw
②MeasureSpec為何如此設(shè)計(jì)?
③子View的LayoutParams來(lái)源。ViewGroup#addView(view)這種添加view的方式,沒(méi)有給子View設(shè)置LayoutParams,那么LayoutParams是誰(shuí)設(shè)置的?
④onMeasure和onLayout為何會(huì)執(zhí)行兩次或多次?
⑤View#draw方法細(xì)節(jié)。
⑥View繪制這一塊遇到過(guò)什么問(wèn)題么?如何解決的。

  • 自定義View有哪幾種方式?注意事項(xiàng)。你對(duì)自定義屬性如何理解?
  • 事件分發(fā)?;瑒?dòng)沖突如何解決,具體在哪個(gè)方法里面解決?如何判斷滑動(dòng)方向?
  • 動(dòng)畫(huà)
  • Apk打包流程。R文件最終會(huì)生成什么文件?aapt的作用是什么?
  • LocalBroadcastReceiver,為何比BroadCastReceiver速度快,LocalBroadcastReceiver的實(shí)現(xiàn)。
  • RecyclerView的緩存。RecyclerView的優(yōu)勢(shì)是哪些?都用它做過(guò)什么功能?
  • 講下leakCanary原理。為什么不用虛引用?引用隊(duì)列里面存的是什么??jī)?nèi)存數(shù)據(jù)是如何dump出來(lái)的?
  • 講下OkHttp的實(shí)現(xiàn)。攔截器的順序,網(wǎng)絡(luò)攔截器和普通攔截器有什么區(qū)別?它的線程池是怎樣的?如何管理的?
  • glide的三級(jí)緩存如何做的?
  • rxjava的原理。rxjava的線程切換如何實(shí)現(xiàn)的?map和flatmap操作符區(qū)別;zip和merge操作符區(qū)別。
  • ArrayMap和SparseArray的作用和實(shí)現(xiàn)細(xì)節(jié)。
  • 組件化和模塊化的區(qū)別。
  • mvp、mvvm。
  • jetpack組件。
  • gradle中task的生命周期。
  • 插件化原理。
  • 熱修復(fù)原理。

3、Android性能優(yōu)化

  • 啟動(dòng)速度優(yōu)化。冷啟動(dòng)、溫啟動(dòng)、熱啟動(dòng)了解么。
  • 內(nèi)存優(yōu)化
  • 卡頓優(yōu)化
  • 網(wǎng)絡(luò)優(yōu)化
  • 數(shù)據(jù)庫(kù)優(yōu)化
  • 內(nèi)存泄漏優(yōu)化
  • 包體積優(yōu)化

4、http相關(guān)

  • 描述一個(gè)完整的網(wǎng)絡(luò)請(qǐng)求流程。
  • TCP和UDP區(qū)別,三次握手與四次揮手的細(xì)節(jié);為何建立鏈接需要三次,斷開(kāi)鏈接卻需要四次。
  • http和https區(qū)別。https的鏈接過(guò)程?
  • 斷線續(xù)傳如何實(shí)現(xiàn)。大圖分段上傳如何實(shí)現(xiàn)。關(guān)鍵步驟
  • 分段下載如何實(shí)現(xiàn)。
  • 請(qǐng)求重試機(jī)制如何實(shí)現(xiàn)。

5、設(shè)計(jì)模式

  • 你熟悉哪些設(shè)計(jì)模式?請(qǐng)舉例說(shuō)明。為何選用這個(gè)設(shè)計(jì)模式。
  • 策略模式和橋接模式的區(qū)別

6、kotlin

  • 說(shuō)一下kotlin的優(yōu)缺點(diǎn)。let和with的區(qū)別
  • 擴(kuò)展函數(shù)
  • kotlin的lateinit和by lazy的區(qū)別
  • 構(gòu)造函數(shù)有哪幾種
  • 協(xié)程

7、flutter

  • flutter的isolate
  • flutter的優(yōu)勢(shì)和劣勢(shì)
  • flutter的channel通信方式有哪幾種?
  • flutter的包體積優(yōu)化
  • flutter中State的生命周期,didUpdateWidget方法何時(shí)調(diào)用

8、項(xiàng)目相關(guān)

  • 選一個(gè)你最熟悉的項(xiàng)目講解下。
  • 講一下你的技術(shù)棧
  • 你最自豪的項(xiàng)目或者片段
  • 你最擅長(zhǎng)哪些部分
  • 你的上份工作經(jīng)歷中,最大的收獲是什么?
  • 你的職業(yè)規(guī)劃

百度面試經(jīng)歷分享 (已拿offer)

大多數(shù)題目都可以在上面找到答案.

電話面試題

1.ArrayList 和 Hashmap 簡(jiǎn)單說(shuō)一些,區(qū)別,底層的數(shù)據(jù)結(jié)構(gòu).

2.Handler 消息機(jī)制

3.引起內(nèi)存泄漏的場(chǎng)景

4.多線程的使用場(chǎng)景?

5.常用的線程池有哪幾種?

6.在公司做了什么?團(tuán)隊(duì)規(guī)模?為什么離職?

第一輪

1.知道哪些單例模式,寫(xiě)一個(gè)線程安全的單例,并分析為什么是線程安全的?

2.Java中的集合有哪些?解釋一下HashMap?底部的數(shù)據(jù)結(jié)構(gòu)?散列表沖突的處理方法,散列表是一個(gè)什么樣的數(shù)據(jù)結(jié)構(gòu)?HashMap是采用什么方法處理沖突的?

3.解釋一下什么是MVP架構(gòu),畫(huà)出圖解,一句話解釋MVP和MVC的區(qū)別?

4.Handle消息機(jī)制?在使用Handler的時(shí)候要注意哪些東西,是否會(huì)引起內(nèi)存泄漏?畫(huà)一下Handler機(jī)制的圖解?

5.是否做過(guò)性能優(yōu)化?已經(jīng)采取了哪些措施進(jìn)行優(yōu)化?

6.引起內(nèi)存泄漏的原因是什么?以及你是怎么解決的?

這些問(wèn)題應(yīng)該都是比較基礎(chǔ)的問(wèn)題,每個(gè)開(kāi)發(fā)者都應(yīng)該是非常熟悉并能詳細(xì)敘述的.這一輪的面試官問(wèn)的技術(shù)都是平時(shí)用到的.

第二輪

1.關(guān)于并發(fā)理解多少?說(shuō)幾個(gè)并發(fā)的集合?

2.Handler 消息機(jī)制圖解?

3.在項(xiàng)目中做了哪些東西?

4.畫(huà)圖說(shuō)明View 事件傳遞機(jī)制?并舉一個(gè)例子闡述

5.類加載機(jī)制,如何換膚,換膚插件中存在的問(wèn)題?hotfix是否用過(guò),原理是否了解?

6.說(shuō)說(shuō)項(xiàng)目中用到了哪些設(shè)計(jì)模式,說(shuō)了一下策略模式和觀察者模式?

7.會(huì)JS么?有Hybid開(kāi)發(fā)經(jīng)驗(yàn)么?

8.說(shuō)一下快排的思想?手寫(xiě)代碼

9.堆有哪些數(shù)據(jù)結(jié)構(gòu)?

對(duì)于這輪面那是明顯感覺(jué)到壓力,知識(shí)的縱向了解也比較深,應(yīng)該是個(gè)leader.

第三輪

1.介紹一下在項(xiàng)目中的角色?

2.遇到困難是怎么解決的?

3.如何與人相處,與別人意見(jiàn)相左的時(shí)候是怎么解決的,并舉生活中的一個(gè)例子.

4.有沒(méi)有壓力特別大的時(shí)候?

這個(gè)應(yīng)該是項(xiàng)目經(jīng)理了,問(wèn)的問(wèn)題偏向于生活性格方面.

以上面試中問(wèn)到的題目基本上都可以在我的GitHub里找到答案,所以做準(zhǔn)備是很重要的,但技術(shù)是一點(diǎn)點(diǎn)積累的,就算你全會(huì)背了,面試過(guò)了,真正等到工作的時(shí)候還是會(huì)捉襟見(jiàn)肘的,所以踏實(shí)點(diǎn)吧騷年.

我的【Github】會(huì)分享一些關(guān)于Android進(jìn)階方面的知識(shí),也會(huì)分享一下最新的面試題~

如果你熟練掌握【Github】中列出的知識(shí)點(diǎn),相信將會(huì)大大增加你通過(guò)前兩輪技術(shù)面試的幾率!這些內(nèi)容都供大家參考,互相學(xué)習(xí)。

①「Android面試真題解析大全」PDF完整高清版+②「Android面試知識(shí)體系」學(xué)習(xí)思維導(dǎo)圖壓縮包——————可以我的【Github】閱讀下載,最后覺(jué)得有幫助、有需要的朋友可以點(diǎn)個(gè)贊

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容