久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      分享Android面試心得【精選】

      推薦:《2020年Android面試題大匯總【收藏】》

      從年前至今參加面試了很多公司,也收到了幾家巨頭的offer,還有其他公司的。總結(jié)下經(jīng)驗(yàn),也是對過去的一個(gè)回顧和總結(jié)吧。

      一、簡歷

      網(wǎng)上有很多對程序員簡歷的一些指導(dǎo),這里就不重述,大家可以搜下網(wǎng)上其他大神的總結(jié),結(jié)合自身情況修改下。我有幾點(diǎn)建議:

      1.盡量不要花哨,程序員和設(shè)計(jì)師或者產(chǎn)品運(yùn)營還不一樣,我們的簡歷成功與否決定權(quán)還是在技術(shù)面試官那,而他們看重的是你的項(xiàng)目經(jīng)驗(yàn)內(nèi)容和技術(shù)等描述。

      2.技能描述這塊盡量只寫你懂得而且理解深刻的,可以適當(dāng)加入一些新技術(shù)或流行框架,不過這塊需要理解,沒來得及看源碼的可以看看大神們對它的總結(jié),網(wǎng)上一大堆。

      3.項(xiàng)目經(jīng)驗(yàn)這塊盡量加入關(guān)鍵詞,比如使用了什么技術(shù)、用到哪些設(shè)計(jì)模式、優(yōu)化數(shù)據(jù)對比、擴(kuò)展總結(jié)之類的。而非一味地介紹這個(gè)項(xiàng)目內(nèi)容(那是產(chǎn)品經(jīng)理的描述),比如性能優(yōu)化這塊,分為UI性能優(yōu)化、內(nèi)存優(yōu)化、數(shù)據(jù)庫優(yōu)化、網(wǎng)絡(luò)優(yōu)化、耗電優(yōu)化等等??梢詮?.如何發(fā)現(xiàn)問題,2.怎么解決問題,3.解決效果對比,這幾個(gè)方面去描述。舉個(gè)簡單例子——UI優(yōu)化,可以從 UI出現(xiàn)什么問題(卡頓不流暢),怎么查找問題(手機(jī)開發(fā)者權(quán)限>GPU過度繪制 發(fā)現(xiàn)層級(jí)問題,TraceView CPU使用情況分析),怎么解決問題(降低層級(jí)、自定義View繪圖出現(xiàn)問題等),解決問題后性能再次對比。

      二、技能儲(chǔ)備

      (一)Java

      一、HashMap和Hashtable區(qū)別?

      這個(gè)一定要去看源碼!看源碼!看源碼!實(shí)在看不下去的可以上網(wǎng)看別人的分析。簡單總結(jié)有幾點(diǎn):

      1.HashMap支持null Key和null Value;Hashtable不允許。這是因?yàn)镠ashMap對null進(jìn)行了特殊處理,將null的hashCode值定為了0,從而將其存放在哈希表的第0個(gè)bucket。

      2.HashMap是非線程安全,HashMap實(shí)現(xiàn)線程安全方法為Map map = Collections.synchronziedMap(new HashMap());Hashtable是線程安全

      3.HashMap默認(rèn)長度是16,擴(kuò)容是原先的2倍;Hashtable默認(rèn)長度是11,擴(kuò)容是原先的2n+1

      4.HashMap繼承AbstractMap;Hashtable繼承了Dictionary

      擴(kuò)展,HashMap 對比 ConcurrentHashMap ,HashMap 對比 SparseArray,LinkedArray對比ArrayList,ArrayList對比Vector

      二、Java垃圾回收機(jī)制

      需要理解JVM,內(nèi)存劃分——方法區(qū)、內(nèi)存堆、虛擬機(jī)棧(線程私有)、本地方法棧(線程私有)、程序計(jì)數(shù)器(線程私有), 理解回收算法——標(biāo)記清除算法、可達(dá)性分析算法、標(biāo)記-整理算法、復(fù)制算法、分代算法,優(yōu)缺點(diǎn)都理解下。

      詳細(xì)的可以看看其他同學(xué)寫的 點(diǎn)擊打開鏈接

      三、類加載機(jī)制

      這個(gè)可以結(jié)合 熱修復(fù) 深入理解下。點(diǎn)擊打開鏈接

      四、線程和線程池,并發(fā),鎖等一系列問題

      這個(gè)可以擴(kuò)展下 如何自己實(shí)現(xiàn)一個(gè)線程池?

      五、HandlerThread、IntentService理解

      六、弱引用、軟引用區(qū)別

      七、int、Integer有什么區(qū)別

      主要考值傳遞和引用傳遞問題

      八、手寫生產(chǎn)者/消費(fèi)者 模式

      (二)Android

      一、android啟動(dòng)模式

      需要了解下Activity棧和taskAffinity

      1.Standard:系統(tǒng)默認(rèn),啟動(dòng)一個(gè)就多一個(gè)Activity實(shí)例

      2.SingleTop:棧頂復(fù)用,如果處于棧頂,則生命周期不走onCreate()和onStart(),會(huì)調(diào)用onNewIntent(),適合推送消息詳情頁,比如新聞推送詳情Activity;

      3.SingleTask:棧內(nèi)復(fù)用,如果存在棧內(nèi),則在其上所有Activity全部出棧,使得其位于棧頂,生命周期和SingleTop一樣,app首頁基本是用這個(gè)

      4.SingleInstance:這個(gè)是SingleTask加強(qiáng)本,系統(tǒng)會(huì)為要啟動(dòng)的Activity單獨(dú)開一個(gè)棧,這個(gè)棧里只有它,適用新開Activity和app能獨(dú)立開的,如系統(tǒng)鬧鐘,微信的視頻聊天界面不知道是不是,知道的同學(xué)告訴我下,在此謝過!

      另外,SingleTask和SingleInstance好像會(huì)影響到onActivityResult的回調(diào),具體問題大家搜下,我就不詳說。

      Intent也需要進(jìn)一步了解,Action、Data、Category各自的用法和作用,還有常用的

      Intent.FLAG_ACTIVITY_SINGLE_TOP Intent.FLAG_ACTIVITY_NEW_TASK Intent.FLAG_ACTIVITY_CLEAR_TOP

      等等,具體看下源碼吧。

      二、View的繪制流程

      ViewRoot -> performTraversal() -> performMeasure() -> performLayout() -> perfromDraw() -> View/ViewGroup measure() -> View/ViewGroup onMeasure() -> View/ViewGroup layout() -> View/ViewGroup onLayout() -> View/ViewGroup draw() -> View/ViewGroup onDraw()

      看下invalidate方法,有帶4個(gè)參數(shù)的,和不帶參數(shù)有什么區(qū)別;requestLayout觸發(fā)measure和layout,如何實(shí)現(xiàn)局部重新測量,避免全局重新測量問題。

      三、事件分發(fā)機(jī)制

      -> dispatchTouchEvent() -> onInterceptTouchEvent() -> onTouchEvent() requestDisallowInterceptTouchEvent(boolean)

      還有onTouchEvent()、onTouchListener、onClickListener的先后順序

      四、消息分發(fā)機(jī)制

      這個(gè)考得非常常見。一定要看源碼,代碼不多。帶著幾個(gè)問題去看:

      1.為什么一個(gè)線程只有一個(gè)Looper、只有一個(gè)MessageQueue?

      2.如何獲取當(dāng)前線程的Looper?是怎么實(shí)現(xiàn)的?(理解ThreadLocal)

      3.是不是任何線程都可以實(shí)例化Handler?有沒有什么約束條件?

      4.Looper.loop是一個(gè)死循環(huán),拿不到需要處理的Message就會(huì)阻塞,那在UI線程中為什么不會(huì)導(dǎo)致ANR?

      5.Handler.sendMessageDelayed()怎么實(shí)現(xiàn)延遲的?結(jié)合Looper.loop()循環(huán)中,Message=messageQueue.next()和MessageQueue.enqueueMessage()分析。

      五、AsyncTask源碼分析

      優(yōu)劣性分析,這個(gè)網(wǎng)上一大堆,不重述。

      六、如何保證Service不被殺死?如何保證進(jìn)程不被殺死?

      這兩個(gè)問題我面試過程有3家公司問到。

      七、Binder機(jī)制,進(jìn)程通信

      Android用到的進(jìn)程通信底層基本都是Binder,AIDL、Messager、廣播、ContentProvider。不是很深入理解的,至少ADIL怎么用,Messager怎么用,可以寫寫看,另外序列化(Parcelable和Serilizable)需要做對比,這方面可以看看任玉剛大神的android藝術(shù)開發(fā)探索一書。

      八、動(dòng)態(tài)權(quán)限適配問題、換膚實(shí)現(xiàn)原理

      這方面看下鴻洋大神的博文吧

      九、SharedPreference原理,能否跨進(jìn)程?如何實(shí)現(xiàn)?

      (三)性能優(yōu)化問題

      一、UI優(yōu)化

      a.合理選擇RelativeLayout、LinearLayout、FrameLayout,RelativeLayout會(huì)讓子View調(diào)用2次onMeasure,而且布局相對復(fù)雜時(shí),onMeasure相對比較復(fù)雜,效率比較低,LinearLayout在weight>0時(shí)也會(huì)讓子View調(diào)用2次onMeasure。LinearLayout weight測量分配原則。

      b.使用標(biāo)簽<include><merge><ViewStub>

      c.減少布局層級(jí),可以通過手機(jī)開發(fā)者選項(xiàng)>GPU過渡繪制查看,一般層級(jí)控制在4層以內(nèi),超過5層時(shí)需要考慮是否重新排版布局。

      d.自定義View時(shí),重寫onDraw()方法,不要在該方法中新建對象,否則容易觸發(fā)GC,導(dǎo)致性能下降

      e.使用ListView時(shí)需要復(fù)用contentView,并使用Holder減少findViewById加載View。

      f.去除不必要背景,getWindow().setBackgroundDrawable(null)

      g.使用TextView的leftDrawabel/rightDrawable代替ImageView+TextView布局

      二、內(nèi)存優(yōu)化

      主要為了避免OOM和頻繁觸發(fā)到GC導(dǎo)致性能下降

      a.Bitmap.recycle(),Cursor.close,inputStream.close()

      b.大量加載Bitmap時(shí),根據(jù)View大小加載Bitmap,合理選擇inSampleSize,RGB_565編碼方式;使用LruCache緩存

      c.使用 靜態(tài)內(nèi)部類+WeakReference 代替內(nèi)部類,如Handler、線程、AsyncTask

      d.使用線程池管理線程,避免線程的新建

      e.使用單例持有Context,需要記得釋放,或者使用全局上下文

      f.靜態(tài)集合對象注意釋放

      g.屬性動(dòng)畫造成內(nèi)存泄露

      h.使用webView,在Activity.onDestory需要移除和銷毀,webView.removeAllViews()和webView.destory()

      備:使用LeakCanary檢測內(nèi)存泄露

      三、響應(yīng)速度優(yōu)化

      Activity如果5秒之內(nèi)無法響應(yīng)屏幕觸碰事件和鍵盤輸入事件,就會(huì)出現(xiàn)ANR,而BroadcastReceiver如果10秒之內(nèi)還未執(zhí)行操作也會(huì)出現(xiàn)ANR,Serve20秒會(huì)出現(xiàn)ANR 為了避免ANR,可以開啟子線程執(zhí)行耗時(shí)操作,但是子線程不能更新UI,因此需要Handler消息機(jī)制、AsyncTask、IntentService進(jìn)行線程通信。

      備:出現(xiàn)ANR時(shí),adb pull data/anr/tarces.txt 結(jié)合log分析

      四、其他性能優(yōu)化

      a.常量使用static final修飾

      b.使用SparseArray代替HashMap

      c.使用線程池管理線程

      d.ArrayList遍歷使用常規(guī)for循環(huán),LinkedList使用foreach

      e.不要過度使用枚舉,枚舉占用內(nèi)存空間比整型大

      f.字符串的拼接優(yōu)先考慮StringBuilder和StringBuffer

      g.數(shù)據(jù)庫存儲(chǔ)是采用批量插入+事務(wù)

      (四)設(shè)計(jì)模式

      1.單例模式:好幾種寫法,要求會(huì)手寫,分析優(yōu)劣。一般雙重校驗(yàn)鎖中用到volatile,需要分析volatile的原理

      2.觀察者模式:要求會(huì)手寫,有些面試官會(huì)問你在項(xiàng)目中用到了嗎?實(shí)在沒有到的可以講一講EventBus,它用到的就是觀察者模式

      3.適配器模式:要求會(huì)手寫,有些公司會(huì)問和裝飾器模式、代理模式有什么區(qū)別?

      4.建造者模式+工廠模式:要求會(huì)手寫

      5.策略模式:這個(gè)問得比較少,不過有些做電商的會(huì)問。

      6.MVC、MVP、MVVM:比較異同,選擇一種你拿手的著重講就行

      (五)數(shù)據(jù)結(jié)構(gòu)

      1.HashMap、LinkedHashMap、ConcurrentHashMap,在用法和原理上有什么差異,很多公司會(huì)考HashMap原理,通過它做一些擴(kuò)展,比如中國13億人口年齡的排序問題,年齡對應(yīng)桶的個(gè)數(shù),年齡相同和hash相同問題類似。

      2.ArrayList和LinkedList對比,這個(gè)相對簡單一點(diǎn)。

      3.平衡二叉樹、二叉查找樹、紅黑樹,這幾個(gè)我也被考到。

      4.Set原理,這個(gè)和HashMap考得有點(diǎn)類似,考hash算法相關(guān),被問到過常用hash算法。HashSet內(nèi)部用到了HashMap

      (六)算法

      算法主要考刷題吧,去LeetCode和??途W(wǎng)刷下。

      (七)源碼理解

      項(xiàng)目中多多少少會(huì)用到開源框架,很多公司都喜歡問原理和是否看過源碼,比如網(wǎng)絡(luò)框架Okhttp,這是最常用的,現(xiàn)在Retrofit+RxJava也很流行。

      一、網(wǎng)絡(luò)框架庫 Okhttp

      okhttp源碼一定要去看下,里面幾個(gè)關(guān)鍵的類要記住,還有連接池,攔截器都需要理解。被問到如何給某些特定域名的url增加header,如果是自己封裝的代碼,可以在封裝Request中可以解決,也可以增加攔截器,通過攔截器去做。

      推薦一篇講解Okhttp不錯(cuò)的文章

      二、消息通知 EventBus

      1.EventBus原理:建議看下源碼,不多。內(nèi)部實(shí)現(xiàn):觀察者模式+注解+反射

      2.EventBus可否跨進(jìn)程問題?代替EventBus的方法(RxBus)

      三、圖片加載庫(Fresco、Glide、Picasso)

      1.項(xiàng)目中選擇了哪個(gè)圖片加載庫?為什么選擇它?其他庫不好嗎?這幾個(gè)庫的區(qū)別

      2.項(xiàng)目中選擇圖片庫它的原理,如Glide(LruCache結(jié)合弱引用),那么面試官會(huì)問LruCache原理,進(jìn)而問LinkedHashMap原理,這樣一層一層地問,所以建議看到不懂的追進(jìn)去看。如Fresco是用來MVC設(shè)計(jì)模式,5.0以下是用了共享內(nèi)存,那共享內(nèi)存怎么用?Fresco怎么實(shí)現(xiàn)圓角?Fresco怎么配置緩存?

      四、消息推送Push

      1.項(xiàng)目中消息推送是自己做的還是用了第三方?如極光。還有沒有用過其他的?這幾家有什么優(yōu)勢區(qū)別,基于什么原因選擇它的?

      2.消息推送原理是什么?如何實(shí)現(xiàn)心跳連接?

      五、TCP/IP、Http/Https

      網(wǎng)絡(luò)這一塊如果簡歷中寫道熟悉TCP/IP協(xié)議,Http/Https協(xié)議,那么肯定會(huì)被問道,我就驗(yàn)證了。一般我會(huì)回答網(wǎng)絡(luò)層關(guān)系、TCP和UDP的區(qū)別,TCP三次握手(一定要講清楚,SYN、ACK等標(biāo)記位怎樣的還有報(bào)文結(jié)構(gòu)都需要熟悉下),四次揮手。為什么要三次握手?DDoS攻擊。為什么握手三次,揮手要四次?Http報(bào)文結(jié)構(gòu),一次網(wǎng)絡(luò)請求的過程是怎樣的?Http和Https有什么不同?SSL/TLS是怎么進(jìn)行加密握手的?證書怎么校驗(yàn)?對稱性加密算法和非對稱加密算法有哪些?挑一個(gè)熟悉的加密算法簡單介紹下?DNS解析是怎樣的?

      六、熱更新、熱修復(fù)、插件化(這一塊要求高點(diǎn),一般高級(jí)工程師是需要理解的)

      了解classLoader

      七、新技術(shù)

      RxJava、RxBus、RxAndroid,這個(gè)在面試想去的公司時(shí),可以反編譯下他們的包,看下是不是用到,如果用到了,面試過程難免會(huì)問道,如果沒有,也可以忽略,但學(xué)習(xí)心強(qiáng)的同學(xué)可以看下,比較是比較火的框架。

      Retrofit,熟練okhttp的同學(xué)建議看下,聽說結(jié)合RxJava很爽。

      Kotlin

      三、最后

      簡歷首選內(nèi)推方式,速度快,效率高?。∪缓罂梢栽诶^,boss,脈脈,大街上看看。簡歷上寫道熟悉什么技術(shù)就一定要去熟悉它,不然被問到不會(huì)很尷尬!做過什么項(xiàng)目,即使項(xiàng)目體量不大,但也一定要熟悉實(shí)現(xiàn)原理!不是你負(fù)責(zé)的部分,也可以看看同事是怎么實(shí)現(xiàn)的,換你來做你會(huì)怎么做?做過什么,會(huì)什么是廣度問題,取決于項(xiàng)目內(nèi)容。但做過什么,達(dá)到怎樣一個(gè)境界,這是深度問題,和個(gè)人學(xué)習(xí)能力和解決問題的態(tài)度有關(guān)了。大公司看深度,小公司看廣度。大公司面試你會(huì)的,小公司面試他們用到的你會(huì)不會(huì),也就是崗位匹配度。

      選定你想去的幾家公司后,先去一些小的公司練練,學(xué)習(xí)下面試技巧,總結(jié)下,也算是熟悉下面試氛圍,平時(shí)和同事或者產(chǎn)品PK時(shí)可以講得頭頭是道,思路清晰至極,到了現(xiàn)場真的不一樣,怎么描述你所做的一切,這絕對是個(gè)學(xué)術(shù)性問題!

      面試過程一定要有禮貌!即使你覺得面試官不尊重你,經(jīng)常打斷你的講解,或者你覺得他不如你,問的問題缺乏專業(yè)水平,你也一定要尊重他,誰叫現(xiàn)在是他選擇你,等你拿到offer后就是你選擇他了。

      另外,描述問題一定要慢!不要一下子講一大堆,慢顯得你沉穩(wěn)、自信,而且你還有時(shí)間反應(yīng)思路接下來怎么講更好?,F(xiàn)在開發(fā)過多依賴ide,所以會(huì)有個(gè)弊端,當(dāng)我們在面試講解很容易不知道某個(gè)方法怎么讀,這是一個(gè)硬傷……所以一定要對常見的關(guān)鍵性的類名、方法名、關(guān)鍵字讀準(zhǔn),有些面試官不耐煩會(huì)說“你到底說的是哪個(gè)?”這時(shí)我們會(huì)容易亂了陣腳。正確的發(fā)音+沉穩(wěn)的描述+好聽的嗓音決對是一個(gè)加分項(xiàng)!

      最重要的是心態(tài)!心態(tài)!心態(tài)!重要事情說三遍!面試時(shí)間很短,在短時(shí)間內(nèi)對方要摸清你的底子還是比較不現(xiàn)實(shí)的,所以,有時(shí)也是看眼緣,這還是個(gè)看臉的時(shí)代。

      希望大家都能找到合適自己滿意的工作!fighting!

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)