面試的一些理論題

1.談談你對sharedPreference的理解?

是一個以key value形式存放的輕量級的數據存儲方式在它中保存的數據是在整個應用程序中可以共享的是以一個xml文件存放數據的

2.接口回調是如何實現的?

一些情況下,可能需要fragment和activity共享事件,一個比較好的做法是在fragment裏面定義一個回調接口,然後要求宿主activity實現這個接口。當activity通過這個接口接收到一個回調,它可以讓同佈局中的其他fragment分享這個信息

3.當前來說,播放視頻有哪幾種方式?

SurfaceView + Mediapalyer ; 使用系統播放器播放視頻; VideoView結合MediaController

4.簡述版本升級流程

在APP首頁自動觸發向服務端請求最新的版本信息,如果服務端返回的版本信息中versionCode與當前版本不一致,就彈出升級提示框讓用戶選擇“立即更新”:直接啓動下載“稍後提醒”:什麼都不處理“忽略該版本”:當前版本不再提醒,如有更新版本還是要提醒。例如:用戶版本是1.0,當前檢查到的版本是2.0,用戶選擇了“忽略該版本”,則2.0的版本不再提示,到下個版本時,仍然要提示版本更新。

5.簡述Android activity的生命週期函數,以及各自的調用時機

onCreate(第一次創建一個Activity時調用)
onStart(Activity創建或者從後臺重新回到前臺時被調用)
onResume(Activity獲取焦點,界面可用時被調用)

onPause(Activity界面失去焦點,界面不可用被調用)

onStop(退出當前Activity或者跳轉到新Activity時被調用)

onDestroy(退出當前Activity時被調用,調用之後Activity就結束了)
onRestart(Activity從後臺重新回到前臺時被調用)

6.HTTP和HTTPS的區別

①、https協議需要到申請證書,一般免費證書較少,因而需要一定費用。
②、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
③、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。
④、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

7.Fresco精確顯示加載進度,需要重寫Drawable的onLevelChange

8.Activity中使用_______和_____、_____兩種方式來完成Fragment切換功能replace,add、hide

9.Image Pipeline默認有___3___個線程池

10.Dalvik是Android的____虛擬機____

11.簡述Fresco的緩存機制三級緩存:Bitmap緩存,未解碼圖片的內存緩存, 磁盤緩存

12簡述Image pipeline線程池配置

3個線程用於網絡下載,2個線程用於磁盤操作:本地文件的讀取,磁盤緩存操作。2個線程用於CPU相關的操作:解碼,轉換,以及後處理等後臺操作

13.請列舉四種線程間的通信機制Handler,EventBus,AsyncTask,Broadcast

14.RetentionPolicy.CLASS表示註解在class文件中可用,但會被VM丟棄

15.當我們下載未結束時候,退出保存下載進度,當下次打開繼續下載的時接着上次的進度繼續下載斷點續傳

16.抽象類 有構造方法,接口中 有構造方法 答案:可以、不可以

17.多線程斷點續傳就是將 和 相結合進行文件的下載。 斷點續傳、多線程

18.Android 項目開發過程中RxJava中主要4個角色Observable (可觀察者,即被觀察者)、 Observer (觀察者)、 subscribe (訂閱)、事件,subject

19.簡單說說版本更新實現的思路

第一步,通過接口獲取更新信息
第二步,通過接口拿到的版本號和本地的版本號進行比較
第三步,版本升級

20.簡述一下Android項目開發過程MVP的使用流程

當某個 View 需要展示某些數據時,首先會調用 Presenter 的某個接口,然後 Presenter 會調用 Model 請求數據。當 Model 數據加載成功後會調用 Presenter 的回調方法通知 Presenter 數據加載完畢,最後 Presenter 再調用 View 層接口展示加載後數據。

21.簡述Retrofit的認識?

Retrofit將 Http請求 抽象成 Java接口:採用 註解 描述網絡請求參數 和配置網絡請求參數 用 動態代理 動態 將該接口的註解“翻譯”成一個 Http 請求,最後再執行 Http 請求

22.EventBus框架是採用建造者 模式設計的

23.ButterKnife是一個支持_View__注入的框架

24.Rxjava的異步是_____觀察者_____模式實現的

25.Rxjava判斷是否存在數據項滿足某個條件的操作符_______exists________。

26.__響應式___編程是一種基於異步數據流概念的編程模式

27.Java反射相關的類所在的包是java.lang.____ 答案:reflect

28.Java反射中getDeclaredMethods方法用於獲取___所有的方法

29.java中允許子類繼承父類中的註解需要添加的元註解是_Inherited___

30.java四個元註解有那種?@Target,@Retention,@Documented,@Inherited

31.Fresco的源碼框架結構原理都有哪些?()強引用,軟引用,緩存(bitmap,sd),網絡。

32.你對ORM機制的理解多少?

ORM在面向對象模型與關係模型之間架起橋樑。通過對象與數據庫之間映射的元數據,自動透明地把java中的對象持久化到關係數據庫裏,對數據庫的操作可以轉換爲對對象的操作。效率:拋棄冗長乏味的持久化代碼,集中精力編寫業務邏輯。可維護性:邏輯清晰,維護更少的代碼,模型之間的緩衝避免牽一髮而動全身 可移植性:

33.在Android開發中你對Fresco的緩存機制瞭解多少?

Fresco 中設計有一個叫做 Image Pipeline 的模塊。它負責從網絡,從本地文件系統,本地資源加載圖片。爲了最大限度節省空間和CPU時間,它含有3級緩存設計(2級內存,1級磁盤)

34.在項目中你對對EventBus的理解?

EventBus是一款針對Android優化的發佈/訂閱事件總線。簡化了應用程序內各組件間、組件與後臺線程間的通信。優點是開銷小,代碼更優雅,以及將發送者和接收者解耦。

35.你項目中你對Java反射機制的認識?

Java反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱爲Java語言的反射機制。

36.在APK瘦身的過程中,我可以使用____TinyPng____工具來減少我們圖片的體積

37.字符類型變量已 char 類型表示,它在內存中佔 ___16__ 位 bit。

38.Rxjava異步處理是指_____觀察者_____模式

39.簡述一下線程同步與異步的區別。

異步操作兩者都可以達到避免調用線程阻塞的目的,從而提高軟件的可響應性。 同步是多個線程同時訪問同一資源,等待資源訪問結束,時間慢,效率低

40.簡述信息加密流程

先用base64加密一下這個信息,然後要用支付寶的公鑰進行加密一下,最後用你的私鑰加密一下這個支付信息,然後給支付寶服務器發送過去。

41.RxJava中觀察者模式相比java普通的觀察者模式的優點是什麼?

RxJava中規定當不再有新的事件發出時,可以調用onCompleted()方法作爲標示;當事件處理出現異常時框架自動觸發onError()方法;同時Observables支持鏈式調用,從而避免了回調嵌套的問題。

41.AngularJS 是一個 __ JavaScript__框架。

42.Android 默認使用_sp_作爲字號單位

43.優先級最高的進程是___前臺進程__

44.Git分佈式版本控制工具,_git add_的作用是把文件保存到暫存區

45.列舉文檔對象模型DOM裏document的常用的查找訪問節點的方法並做簡單說明

1.通過ID,使用 getElementById() 獲得標籤節點
2.通過標籤的名稱,使用getElementsByTagName() 獲得元素節點或標籤節點
3 通過使用一個元素節點的 parentNode、firstChild 以及 lastChild 屬性
4.節點名稱nodeName

46.寫出5條AngularJS 指令 form input select ngcloak nglf

47.加密算法根據內容是否可以還原分爲?可逆加密和非可逆加密?。可逆加密根據其加密解密是否使用的同一個密鑰而可以分爲___對稱加密____和___非對稱加密____。

48.你是如何理解線程池?

Java通過Executors提供四種線程池,分別爲:newCachedThreadPool創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閒線程,若無可回收,則新建線程。newFixedThreadPool 創建一個定長線程池,可控制線程最大併發數,超出的線程會在隊列中等待。newScheduledThreadPool 創建一個定長線程池,支持定時及週期性任務執行。newSingleThreadExecutor 創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO,LIFO, 優先級)執行。

49.簡述對異步的瞭解

異步就是一種不阻礙線程的一種操作方法,一個線程的運行結果如何,不會影響到另一個線程的運行

50.圖片二次採樣流程?

1.第一次採樣第一次採樣我主要是想要獲得圖片的壓縮比例,假如說我有一張圖片是200*200,那麼我想把這張圖片的縮略圖顯示在一個50*50的ImageView上,那我的壓縮比例應該爲4,那麼這個4應該怎麼樣來獲得呢?這就是我們第一步的操作了,我先加載圖片的邊界到內存中,這個加載操作並不會耗費多少內存,加載到內存之後,我就可以獲得這張圖片的寬高參數,然後根據圖片的寬高,再結合控件的寬高計算出縮放比。2.第二次採樣
在第一次採樣的基礎上,我來進行二次採樣。二次採樣的時候,我把第一次採樣後算出來的結果作爲一個參數傳遞給第BitmapFactory,這樣在加載圖片的時候系統就不會將整張圖片加載進來了,而是隻會加載該圖片的一張縮略圖進來,這樣不僅提高了加載速率,而且也極大的節省了內存,而且對於用戶來說,他也不會有視覺上的差異。

51.操作sqlist要繼承_____SQLiteOpenHelper_____,修改數據庫的內容____update_____方法

52.JSON中{}表示________,[]________表示對象,數組

53.android開發中ANR全稱__Application Not Responding__

54.說說JSON的優缺點

易讀、更便於肉眼檢查在語法的層面上,JSON與其他格式的區別是在於分隔數據的字符,JSON中的分隔符限於單引號、小括號、中括號、大括號、冒號和逗號。JSON片段的創建和驗證過程比一般的XML稍顯複雜。

55.JAVA中面向對象的三個基本特徵,並簡單描述

封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。繼承是指這樣一種能力:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴展。多態:一個接口,多種方法”同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果。

56.java8是_函數式_編程

57.Greendao在使用的時候自動生成_DaoMaster_,_Daosession_,_UserDao_等文件

58.微信支付提交支付接口數據格式是_XML_

59.EventBus在_onDestory()_方法中取消訂閱目的是防止_內存溢出_。

60.Android的APP加固主要是對__dex__文件加殼

61.爲了減小apk體積,項目中的圖片可以使用谷歌推出的__webp__格式

62..9.png左側和上方的橫線代表的區域是__可拉伸區域__

63.談談你對android中事件分發機制的理解?

Activity、ViewGroup、View一個點擊事件產生後,傳遞順序是:Activity(Window) ; View然後通過dispatchTouchEvent()是否分發 、onInterceptTouchEvent() 是否攔截  onTouchEvent()是否消費來處理事件分發

64.談談你對項目中網絡狀態監測是在麼處理的?

1.獲得ConnectivityManager對象用於查看網絡狀態和管理網絡連接相關的操作
2.獲取ConnectivityManager對象對應的NetworkInfo對象包含網絡連接的所有信息
3.根據需要從NetworkInfo對象取出關於網絡連接的信息

65.談談你對Java中的線程狀態的理解?

1. 新建(NEW):新創建了一個線程對象。
2.可運行(RUNNABLE):線程對象創建後,其他線程(比如main線程)調用了該對象的start()方法。該狀態的線程位於可運行線程池中,等待被線程調度選中,獲取cpu 的使用權 。
3. 運行(RUNNING):可運行狀態(runnable)的線程獲得了cpu 時間片(timeslice) ,執行程序代碼。
4. 阻塞(BLOCKED):阻塞狀態是指線程因爲某種原因放棄了cpu 使用權,也即讓出了cpu timeslice,暫時停止運行。直到線程進入可運行(runnable)狀態,纔有機會再次獲得cpu timeslice 轉到運行(running)狀態。阻塞的情況分三種: 
(一). 等待阻塞:運行(running)的線程執行o.wait()方法,JVM會把該線程放入等待隊列(waitting queue)中。
(二). 同步阻塞:運行(running)的線程在獲取對象的同步鎖時,若該同步鎖被別的線程佔用,則JVM會把該線程放入鎖池(lock pool)中。
(三). 其他阻塞:運行(running)的線程執行Thread.sleep(long ms)或t.join()方法,或者發出了I/O請求時,JVM會把該線程置爲阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入可運行(runnable)狀態。
5. 死亡(DEAD):線程run()、main() 方法執行結束,或者因異常退出了run()方法,則該線程結束生命週期。死亡的線程不可再次復生。

66.greenDAO 優勢?

1、一個精簡的庫
2、性能最大化
3、內存開銷最小化
4、易於使用的 APIs
5、對 Android 進行高度優化

67.http與https區別?

1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。
4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

68.對於一個已經存在的SharedPreferences對象setting,想向其中存入一個字符串"person",setting應該先調用_edit___方法

69.多線程下載其實就是,通過多個_____同時和____連接。線程、服務器

70.MVP和MVC框架模式的區別在哪兩層_Presenter__、_Controller__。

71.android中View事件分發機制

1.事件分發的對象:事件,當用戶觸摸屏幕時(View或ViewGroup派生的控件),將產生點擊事件(Touch事件);
2.事件分發的本質:將點擊事件(MotionEvent)向某個View進行傳遞並最終得到處理;即當一個點擊事件發生後,系統需要將這個事件傳遞給一個具體的View去處理。這個事件傳遞的過程就是分發過程。
3.事件在哪些對象之間進行傳遞:Activity、ViewGroup、View;一個點擊事件產生後,傳遞順序是:Activity(Window) -> ViewGroup -> View;
4.事件分發過程由哪些方法協作完成:dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent();
5.總結:Android事件分發機制的本質是要解決:點擊事件由哪個對象發出,經過哪些對象,最終達到哪個對象並最終得到處理;Android中事件分發順序:Activity(Window) -> ViewGroup -> View
事件分發過程由dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()三個方法協助完成。

72.android使用中如果父控件和子控件事件產生衝突,你該如何解決?事件分發機制

73.寫出Git命令 中 將所有修改過的工作文件提交暫存區的命令_____git add______

74.recycleView的LayoutManager作用是來確定每一個item的排列方式

75.定位的三種方式:__GPS定位____,___Network定位____,___AGPS定位_____

76.RecyclerView組件是Android__5.0___版本後推出的

77.Java中實現線程的兩種方式是__繼承Thread類、實現Runable接口

78.Android瘦身時去除無用資源需要在gradle中設置__shrinkResources__爲_true_

79.啓動一個Activity有四種模式_standard 、singleTask 、singleTop 、singleInstance

80.Android的APP加固主要是對__dex__文件加殼

81.WebView直接加載一個網址使用的方法是loadUrl()

82.簡述Android activity的生命週期函數,以及各自的調用時機

onCreate(第一次創建一個Activity時調用)
onStart(Activity創建或者從後臺重新回到前臺時被調用)
onResume(Activity獲取焦點,界面可用時被調用)
onPause(Activity界面失去焦點,界面不可用被調用)
onStop(退出當前Activity或者跳轉到新Activity時被調用)
onDestroy(退出當前Activity時被調用,調用之後Activity就結束了)
onRestart(Activity從後臺重新回到前臺時被調用)

83.簡述版本升級流程

在APP首頁自動觸發向服務端請求最新的版本信息,如果服務端返回的版本信息中versionCode與當前版本不一致,就彈出升級提示框讓用戶選擇“立即更新”:直接啓動下載“稍後提醒”:什麼都不處理“忽略該版本”:當前版本不再提醒,如有更新版本還是要提醒。例如:用戶版本是1.0,當前檢查到的版本是2.0,用戶選擇了“忽略該版本”,則2.0的版本不再提示,到下個版本時,仍然要提示版本更新。

84.當前來說,播放視頻有哪幾種方式?

SurfaceView + Mediapalyer ; 使用系統播放器播放視頻; VideoView結合MediaController

85.接口回調是如何實現的?

一些情況下,可能需要fragment和activity共享事件,一個比較好的做法是在fragment裏面定義一個回調接口,然後要求宿主activity實現這個接口。當activity通過這個接口接收到一個回調,它可以讓同佈局中的其他fragment分享這個信息

87.AlertDialog類不能直接使用new關鍵字來創建AlertDialog類的對象實例,而是首先創建其內部類Builder類的對象,再調用這個內部類的show()方法來顯示對話框。

88.Java開發環境中JDK的全稱是____Java Development Kit___

89.Java設計模式中觀察者模式,創建被觀察類,繼承______Observable_________類

90.RxJava採用_鏈式_調用

91.談談你對RxJava的使用流程

RxJAVA是一種觀察者模式的延伸,在使用的時候需要有觀察者和被觀察者,所以我們需要建立兩個類繼承Observer和Observable分別作爲觀察者和被觀察者

92.表達式 ”2”+3+4 的值爲___234___

93.設計模式中的單例模式有__餓漢式___和__懶漢式___

94.在項目中自定義View時如果有自定義屬性必須重寫帶__ 兩個 _或三個參數的構造函數

95.Android開發中五大布局中,權重屬性的佈局的類名是__LinearLayout_

96.在項目中如果父控件和子控件事件產生衝突,你該如何解決事件分發機制

97.寫出5個greenDAO的5個註解,並簡單說明

@Index
使用@Index作爲一個屬性來創建一個索引;定義多列索引(@link Entity#indexes())
@JoinEntity
定義表連接關係
@JoinProperty
定義名稱和引用名稱屬性關係
@OrderBy
排序
@Property
指定數據庫數據表名
@Unique
向數據庫列添加了一個唯一的約束

98.線程和進程的區別

進程和線程區別: 他們是不同的操作系統資源管理方式。
進程有獨立的地址空間,一個進程崩潰後,不會對其他進程產生影響線程只是一個進程中不同的執行路徑,線程有自己的堆棧和局部變量,線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,  所以多線程的操作要比多進程的程序健壯。   但在進程切換時耗費資源較大,效率要差一些對於一些要求同時進行並且又要共享某些變量的併發操作,只能用線程,不能用進程,(因爲進程在切換時耗費的資源要大一些,效率差一些)
進程是表示資源分配的基本單位,又是調度運行的基本單位。線程是進程中執行運算的最小單位,亦即執行處理機調度的基本單位。

99.java有幾種引用類型

強引用,軟引用、弱引用、虛引用、

100.android開發過程中自定義控件實現方式有:

組合控件自繪控件繼承控件

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章