杭州Android面試小結(jié)

最近一直在杭州面試,想要寫一寫面試中遇到的技術(shù)問題并總結(jié)一下。主要分為java基礎(chǔ)部分和android基礎(chǔ)部分。

java基礎(chǔ):

1.對(duì)抽象,封裝,繼承,多態(tài)的理解

抽象:就是把業(yè)務(wù)邏輯用程序代碼表示出來。分為數(shù)據(jù)抽象和過程抽象,數(shù)據(jù)抽象是對(duì)象的屬性,行為抽象是對(duì)象的行為特征

封裝:封裝是設(shè)置訪問權(quán)限,只把內(nèi)部的數(shù)據(jù)或方法暴露給可信的類或?qū)ο?,?duì)不可信的進(jìn)行隱藏

繼承:把一些有共性的類稱為父類,不同子類可以通過繼承付類重用這一些共性

多態(tài):允許不同類的對(duì)象對(duì)同一消息做出響應(yīng)。方法的重載體現(xiàn)了多態(tài),向上轉(zhuǎn)型也體現(xiàn)了多態(tài)。例如:

Animal d = new Dog();

Animal c = new Cat();

在編譯時(shí),并不知道引用的具體對(duì)象是那個(gè)類,只有當(dāng)程序運(yùn)行時(shí)才能知道。

2.java中的單例模式怎么寫

餓漢模式
public class Singleton {
    //餓漢模式,沒有達(dá)到懶加載的效果,在類加載時(shí)就會(huì)實(shí)例化,但是是線程安全的
    private static Singleton singleton = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return singleton;
    }
}

3.String和StringBuffer、StringBuilder的區(qū)別

String是不可變的,StringBuffer和StringBuider都是可變的;StringBuffer是線程不安全的,但是效率會(huì)高一些;StringBuilder是線程安全的,但是效率低一些。

4.對(duì)java的泛型的理解

泛型,即“參數(shù)化類型”。
創(chuàng)建集合時(shí)就指定集合元素的類型,該集合只能保存其指定類型的元素,避免使用強(qiáng)制類型轉(zhuǎn)換。

5.java中的垃圾回收機(jī)制是怎么樣的

5.1.確定刪除的對(duì)象

java中的GC采用對(duì)象引用遍歷的方式判斷該對(duì)象是否被回收,如果該對(duì)象是不可達(dá)的,則視為垃圾回收

5.2.GC掃描堆棧,刪除垃圾

刪除對(duì)象的過程中,會(huì)停止所有其他線程

6.如何實(shí)現(xiàn)對(duì)象排序

實(shí)現(xiàn)comparable接口,然后通過Collections.sort()或者Arrays.sort()進(jìn)行排序

7.java中的反射

Java反射機(jī)制可以讓我們?cè)诰幾g期(Compile Time)之外的運(yùn)行期(Runtime)獲得任何一個(gè)類的字節(jié)碼。包括接口、變量、方法等信息。還可以讓我們?cè)谶\(yùn)行期實(shí)例化對(duì)象,通過調(diào)用get/set方法獲取變量的值。
反射機(jī)制詳解

8.java中的設(shè)計(jì)模式

1.單例模式
2.適配器模式
3.觀察者模式
4.builder模式
個(gè)人理解它的優(yōu)點(diǎn)是能把一個(gè)復(fù)雜對(duì)象的每一步的構(gòu)造過程解耦
5.代理模式

android中使用的設(shè)計(jì)模式

9.synchronized關(guān)鍵字的應(yīng)用

synchronized詳解

10.HashMap工作原理

HashMap工作原理

Android基礎(chǔ):

1.Activity生命周期是怎么樣的

ActivityA跳轉(zhuǎn)到ActivityB:

a.onPause()-->b.onCreate()-->b.onStart()-->b.onResume()-->a.onStop()

ActivityB再回退到ActivityA:

b.onPause()-->a.onRestart()-->a.onStart()-->a.onResume()-->b.onStop()-->b.onDestory()

若在Activity界面按home鍵又返回:

onPause()-->onStop()-->onRestart()-->onStart()-->onResume()

2.Service的生命周期有哪些

通過start方式啟動(dòng):

onCreate()-->onStartCommand()-->onDestory()

通過bind方式啟動(dòng):

onCreate()-->onBind()-->onUnbind()-->onDestory()

3.對(duì)MVP、MVC、MVVM的了解

4.android中handler的使用

//handler綁定looper,并暴露接口,用于實(shí)現(xiàn)
mHandler = new Handler(Looper.myLooper()){
            @Override
            public void handleMessage(Message msg){
                Log.d(TAG, "獲得了message");
                super.handleMessage(msg);
            }
        };
//創(chuàng)建MessageQueue
looper.prepare();
//發(fā)送Message到MessageQueue
Message message = new Message();
message.sendToTarget();
//輪詢MessageQueue
looper.loop();

5.android中touch事件的傳播

6.有沒有用過EventBus

EventBus使用詳解

7.談?wù)刟ndroid中的性能優(yōu)化

7.1.對(duì)布局的優(yōu)化

1.使用include標(biāo)簽,能達(dá)到對(duì)布局的重用
2.使用merge標(biāo)簽,他可以刪除多余層級(jí)
3.使用ViewStub,ViewStub加載布局時(shí),占用資源很少。ViewStub的應(yīng)用
關(guān)于include,merge和ViewStub

7.2.使用clipRect用于防止overDraw

7.3.ListView滑動(dòng)卡頓:

可能是因?yàn)榛瑒?dòng)過程中正在下載圖片,也可能是item布局太復(fù)雜

8.有哪些常用的開源框架,說說他們的優(yōu)點(diǎn)

網(wǎng)絡(luò)請(qǐng)求 okhttp:會(huì)從很多常用的連接問題中自動(dòng)恢復(fù)。如果您的服務(wù)器配置了多個(gè)IP地址,當(dāng)?shù)谝粋€(gè)IP連接失敗的時(shí)候,OkHttp會(huì)自動(dòng)嘗試下一個(gè)IP。OkHttp還處理了代理服務(wù)器問題和SSL握手失敗問題
圖片加載 glide:glide會(huì)根據(jù)imageview的大小來確定要加載的圖片的大小,磁盤緩存時(shí),也只緩存控件大小的bitmap
View注入 Butter Knife
數(shù)據(jù)存儲(chǔ) DBFlow ORM
熱修復(fù) tinker 熱修復(fù)的原理是用classloader來加載class文件
事件總線框架 EventBus EventBus使用詳解

9.JNI的使用

JNI基礎(chǔ)

10.Android中常用的IPC的方式,以及各自的優(yōu)缺點(diǎn)

1.使用Bundle 數(shù)據(jù)類型支持有限,序列化耗時(shí)
2.使用文件共享 無法即時(shí)通信,不好處理高并發(fā)
3.使用Messenger 通過Message進(jìn)行傳輸,所以也只能支持bundle數(shù)據(jù);適用于輕量級(jí)和地并發(fā) Messenger詳解
4.AIDL AIDL詳解
5.ContentProvider 用于數(shù)據(jù)共享
6.Socket 用于網(wǎng)絡(luò)交換

11.Android中的內(nèi)存泄漏,內(nèi)存溢出,以及內(nèi)存抖動(dòng)

內(nèi)存泄漏是某些對(duì)象不能被回收
內(nèi)存溢出是由于內(nèi)存不足
內(nèi)存抖動(dòng)是由于頻繁GC

Android性能優(yōu)化典范

12.圖片的處理

13.Fragment與Activity通信,F(xiàn)ragment之間是怎么通信的

Fragment與Activity之間通過EventBus或者接口的方式通信
Fragment之間通過綁定的Activity中轉(zhuǎn)做通信

14.Fragment的生命周期和Activity生命周期比較

Activity與Fragment生命周期探討

15.android藍(lán)牙開發(fā)流程

Android經(jīng)典藍(lán)牙開發(fā)簡介

16.android應(yīng)用啟動(dòng)流程

17.android中的緩存策略

分為內(nèi)存緩存(一級(jí)緩存)和磁盤緩存(文件緩存),需要特定數(shù)據(jù)時(shí),先去找內(nèi)存中是否存在,如果沒有再去磁盤中找,如果都沒有,則再去進(jìn)行網(wǎng)絡(luò)請(qǐng)求。

18.android組件化開發(fā)

19.兩種注冊(cè)廣播的方法的區(qū)別

清單文件中注冊(cè)廣播是常駐型廣播,不跟隨程序的生命周期,在代碼中注冊(cè)的廣播正相反

20.如何實(shí)現(xiàn)自定義標(biāo)簽列表

Android自定義標(biāo)簽列表控件

21.Activity四種啟動(dòng)模式

Activity啟動(dòng)模式

22.lrucache在android中的使用及原理

LruCache的使用及原理

23.android圖片處理

android圖片處理

24.android surfaceView

android surfaceView

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android Studio JNI流程首先在java代碼聲明本地方法 用到native關(guān)鍵字 本地方法不用去實(shí)現(xiàn)...
    MigrationUK閱讀 12,088評(píng)論 7 123
  • 踏羈寒 北國的冬天, 嘯風(fēng)穿我耳畔 哪怕獨(dú)我一人,也愿撿起耳麥 背起行囊,漫步輕吟 只為 這里的黎...
    澤007閱讀 327評(píng)論 0 0
  • 是同學(xué)亦是朋友,記得再猴子的生日聚會(huì)上認(rèn)識(shí)你,轉(zhuǎn)眼四年了 馬上又入秋天,或許我的秋天有點(diǎn)晚,就是這樣,上海這邊的天...
    文字隨風(fēng)閱讀 508評(píng)論 0 0
  • spring-cloud版本:Finchley.SR1 本文是用數(shù)據(jù)庫的方式存儲(chǔ)配置信息的,本人覺得 git 的方...
    程序之道閱讀 4,030評(píng)論 0 1
  • 夜空里的泡桐花,像小喇叭一樣。 泡桐花,久遠(yuǎn)而又美好的回憶。 記得小時(shí)候,媽媽的學(xué)校里有很多...
    njlinda閱讀 295評(píng)論 0 0

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