阿里騰訊-常問的面試題總結

阿里騰訊-常問的面試題總結

面試,一個老生常談的話題,相信新手去面試都會灰常的緊張,怎麼辦吶?緊張的原因基本都是沒有準備好,所以今天代碼君打算結合以往自己的經歷,給大家總結下Android面試中常問的問題,希望對你們有幫助。

Javab部分總結

1. 靜態內部類、內部類、匿名內部類區別

  • 靜態內部類:使用static修飾的內部類

  • 內部類:就是在某個類的內部又定義了一個類,內部類所嵌入的類稱為外部類

  • 匿名內部類:使用new生成的內部類

2. String、StringBuffer與StringBuilder的區別

  • String 類型和 StringBuffer 類型的主要性能區別其實在於 String 是不可變的對象

  • StringBuffer和StringBuilder底層是 char[]數組實現的

  • StringBuffer是線程安全的,而StringBuilder是線程不安全的

3. Java有哪幾種引用

  • 強引用:如果一個對象具有強引用,它就不會被垃圾回收器回收。即使當前內存空間不足,JVM 也不會回收它。

  • 軟引用:在使用軟引用時,如果內存的空間足夠,軟引用就能繼續被使用,而不會被垃圾回收器回收,只有在內存不足時,軟引用才會被垃圾回收器回收。

  • 弱引用:具有弱引用的對象擁有的生命週期更短暫。因為當 JVM 進行垃圾回收,一旦發現弱引用對象,無論當前內存空間是否充足,都會將弱引用回收。

  • 虛引用:在任何時候都可能被垃圾回收器回收。

4. Java回收機制是怎麼樣的?

Java的垃圾回收機制是Java虛擬機提供的能力,用於在空閒時間以不定時的方式動態回收無任何引用的對象佔據的內存空間。

5. ArrayList與LinkedList的區別

  • ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。

  • 對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。

  • 對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動數據。

阿里騰訊-常問的面試題總結

Android 部分總結

1. Android 線程間通信有哪幾種方式

  • 共享內存(變量);

  • 文件,數據庫;

  • Handler;

  • Java 裡的 wait(),notify(),notifyAll()

2. Activity和Fragment生命週期有哪些?

  • Activity——onCreate->onStart->onResume->onPause->onStop->onDestroy

  • Fragment——onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume->onPause->onStop->onDestroyView->onDestroy->onDetach

3. Activity的幾種LaunchMode及使用場景

  • standard 模式:這是默認模式

  • singleTop 模式:如果在任務的棧頂正好存在該Activity的實例,就重用該實例( 會調用實例的 onNewIntent() ),否則就會創建新的實例並放入棧頂。

  • singleTask 模式:如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的 onNewIntent() )。重用時,會讓該實例回到棧頂,在它上面的實例將會被移出棧。

  • singleInstance 模式:一個新棧中創建該Activity的實例,並讓多個應用共享該棧中的該Activity實例。一旦該模式的Activity實例已經存在於某個棧中,任何應用再激活該Activity時都會重用該棧中的實例( 會調用實例的 onNewIntent() )。

4. View的繪製過程

一個View要顯示在界面上,需要經歷一個View樹的遍歷過程,這個過程又可以分為三個過程,也就是自定義View中的三要素: 大小,位置,畫什麼,即onMesure(),onLayout(),onDraw()。

5. Touch事件的傳遞機制

  • dispatchTouchEvent(); //用來分派event

  • onInterceptTouchEvent();//用來攔截event

  • onTouchEvent();//用來處理event

6. ListView卡頓的原因,如何進行性能優化?

  • 重用converView: 通過複用converview來減少不必要的view的創建,另外Infalte操作會把xml文件實例化成相應的View實例,屬於IO操作,是耗時操作。

  • 使用 RecycleView 代替listview: 每個item內容的變動,listview都需要去調用notifyDataSetChanged來更新全部的item,太浪費性能了。RecycleView可以實現當個item的局部刷新,在性能上會很大的改善

7. 如何避免內存洩漏?

  • 適配器裡的Item複用

  • 廣播註冊後不用及時關閉

  • 長時間持有垃圾對象,導致回收不了

  • 儘量使用application裡的context

8. 常用的設計模式有幾種?

  • 單例模式

  • 建造者模式

  • 裝飾模式

  • 動態代理

  • 適配器模式

  • 策略模式

  • 工廠模式

9. 圖片加載框架有幾種,各自的優缺點?

  • Glide的優點

    • Glide默認bitmap格式是GB565,內存佔用小

    • Glide更易用除了傳遞context,還可以傳遞activity和fragment

    • Glide存儲的是imageview的大小,就省了重新調整圖片大小的步驟,加載速度會變快

    • glide是基於Picasso的,進行大量的優化改進

  • Fresco

    • 優點:圖片漸進式呈現 ,通過在Native做處理大大減少OOM

    • 缺點:功能強大但是相比於其他體積過大,除非需要圖片社交,不然大材小用,使用比較複雜

  • Picasso 圖片過期採用LRU淘汰算法 glide完勝他

    阿里騰訊-常問的面試題總結

    總結

    找工作是每個人都會遇到的難題,代碼君前幾天出了一篇如何寫簡歷的文章,今天又寫了一篇面試問題總結,相信結合著兩篇文章,應該會對職場新人找工作有很大幫助的,最後祝大家找到理想的工作。

    本文屬於原創,如有轉載,請標記出處。如果您覺得這篇文章對你有所幫助的話,不妨點個贊或轉發一下讓更多人知道,您的支持是我堅持原創的動力~

    相關推薦

    推薦中...