干貨 干貨 2019阿里巴巴Android40道基本面試題


找工作還是需要大家不要經常,有我們干這一行的接觸人本來就不多 難免看到面試官會緊張,主要是因為怕面試官問的問題到不上來,那時候不要着急 ,答不上了的千萬不然胡扯一些,直接就給面試官說這塊我還沒接觸到,以后如果工作當中遇到的話我可以很快的吧這個問題給解決了,但是我們有了這篇文章,就不一樣了,基本上問的問題都有適當的看一下,到時候很快就可以拿到  offer 我在這里祝大家工作順利,天天開心 ,好了下面就是正題,

1. Tcp和http 的區別
  Tcp是在網絡層,http是在服務層.Http借助Httpclient和urlconnenticon是短連接 ,請求一次后就斷開了需要 重新請求才能連接
  Tcp借助是socket,長連接需要三次握手,第四次握手才能取消連接

2 .存儲數據有哪些方式
  文件存儲,
  sharedpreference存儲,
  sqllite存儲 ,
  contentprivider存儲 ,
  網絡存儲

3. 如何將一個Activity設置成窗口的樣式。
可以自定義一個activity的樣式,詳細見手機衛士的程序詳細信息
android:theme="@android:style/Theme.Dialog"

4.如何退出Activity?如何安全退出已調用多個Activity的Application? 
  每打開一個Activity,就記錄下來。在需要退出時,關閉每一個Activity即可。
  在application 全集的環境里面 
  List<Activity> lists = new ArrayList<Activity>();
  每一個activity在執行oncreate()方法的時候 lists.add(this);
  Ondestory()中執行 lists.remove(this);
  退出的時候得到在application的lists執行,執行下面方法
  for(Activity activity: lists)
  {
    activity.finish();
  }

5. 兩個Activity之間怎么傳遞數據?
  基本數據類型可以通過.Intent 傳遞數據 
  Bundle bundle = new Bundle();
  bundle.putShort(key, value);
  intent.putExtras(bundle);
  獲取到激活他的 getIntent();
  Intent intent = getIntent();
  Bundle bundle = intent.getExtras();
  Bundle 類似map的集合 
  intent.getStringExtra("key","value");

6. Activity怎么和service綁定,怎么在activity中啟動自己對應的service?
  startService() 方法啟用服務,調用者與服務之間沒有關連,即使調用者退出了,服務仍然運行。 stopService停止 
  bindService () 把service 與調用者綁定 ,如果調用者被銷毀, service會銷毀 //unbindService(conn);//解除綁定
  onCreate, onStart, onDestroy,

7 . 什么時候使用service
  1.Service的特點可以讓他在后台一直運行,可以在service里面創建線程去完成耗時的操作. 后台播放音樂,
  錄音通話記錄
  2.Broadcast receiver捕獲到一個事件之后,可以起一個service來完成一個耗時的操作.

8. Intent傳遞數據時,可以傳遞哪些類型數據?
  1.一般的基本數據類型 Intent .putextra() intent.getStringextra();
  2. 數據的uri, intent.setData() intent.getData();

9.請描述一下Broadcast Receiver。
  有很多廣播接收者 ,系統已經實現了,監聽一些事件:如接收到短信 ,打出去電話
  廣播分兩種 
  有序廣播 可被攔截,可終止,可以修改數據
  無序廣播 是不可以被攔截掉的 


10. 請介紹下ContentProvider是如何實現數據共享的。 
  android 系統下不同程序 數據默認是不能共享訪問 
  把自己的數據通過uri的形式共享出去(查看短信,查看通訊錄聯系人)
  1.看urlmarcher. 
  2. 根據匹配碼 查看增刪改查的具體實現 

11. 為什么要用ContentProvider?它和sql的實現上有什么差別?
  屏蔽數據存儲的細節,對用戶透明,用戶只需要關心操作數據的uri就可以了,對應的參數 .

12. 請介紹下Android中常用的五種布局。
  LinearLayout(線性布局),RelativeLayout(相對布局),FrameLayout(幀布局),
  AbsoluteLayout(絕對布局),TableLayout(表格布局)

13.談談UI中, Padding和Margin有什么區別?
  Padding 文字對邊框內間距, margin是控件與控件之間的距離,外間距

14. widget相對位置的完成在activity的哪個生命周期階段實現。
  widget可以理解成桌面小控件, 
  也可以理解成 某個button, imageview這樣的控件…
  onmeasure() // 計算 控件在屏幕上的位子 
15.activity的生命周期。 
  activity主要生命周期的方法說明: 
  onCreate(Bundle savedInstanceState):創建activity時調用。設置在該方法中,還以Bundle的形式提供對以前儲存的任何狀態的訪問! 
  onStart():activity變為在屏幕上對用戶可見時調用。 
  onResume():activity開始與用戶交互時調用(無論是啟動還是重新啟動一個活動,該方法總是被調用的)。 
  onPause():activity被暫停或收回cpu和其他資源時調用,該方法用於保存活動狀態的,也是保護現場,壓棧吧! 
  onStop():activity被停止並轉為不可見階段及后續的生命周期事件時調用。 
  onRestart():重新啟動activity時調用。該活動仍在棧中,而不是啟動新的活動。 
  onDestroy():activity被完全從系統內存中移除時調用,該方法被

16 .在Android中,怎么節省內存的使用,怎么主動回收內存?
  盡量多使用內部類 提高程序效率 
  回收已經使用的資源, 
  合理的使用緩存 
  合理設置變量的作用范圍 application 對象 

17. dvm的進程和Linux的進程, 應用程序的進程是否為同一個概念
  Dvm的進程是dalivk虛擬機進程,每個android程序都運行在自己的進程里面,
  每個android程序系統都會給他分配一個單獨的liunx uid(user id), 
  每個dvm都是linux里面的一個進程.所以說這兩個進程是一個進程.

18. 談談Android的優點和不足之處。
  1、開放性,開源 ophone 阿里雲( 完全兼容android) 樂os 
  2、掙脫運營商束縛 
  3、豐富的硬件選擇 mtk android 
  4、不受任何限制的開發商
  5、無縫結合的Google應用
  缺點也有5處:
  1、安全問題、隱私問題 
  2、賣手機的不是最大運營商 
  3、運營商對Android手機仍然有影響
  4、山寨化嚴重
  5、過分依賴開發商,缺乏標准配置 版本過多 

19. 什么是ANR 如何避免它?
  主線程被阻塞的時候,會出現5秒超時的異常 在Android上,如果你的應用程序有一段時間響應不夠靈敏,系統會向用戶顯示一個對話框,這個對話框稱  作應用程序無響應(ANR:Application Not Responding)對話框。用戶可以選擇讓程序繼續運行,但是,他們在使用你的應用程序時,並不希望每次  都要處理這個對話框。因此,在程序里對響應性能的設計很重要,這樣,系統不會顯示ANR給用戶。
  Activity 5秒 broadcast10秒 
  耗時的操作 worker thread里面完成,
  handler message…AsynsTask , intentservice.等…

20. android中的動畫有哪幾類,它們的特點和區別是什么? 
  兩種,一種是Tween動畫、還有一種是Frame動畫。
  Tween動畫,這種實現方式可以使視圖組件移動、放大、縮小以及產生透明度的變化;
  另一種Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。

21.java中的soft reference是個什么東西
  StrongReference 是 Java 的默認引用實現,
  它會盡可能長時間的存活於 JVM 內, 當沒有任何對象指向它時 GC 執行后將會被回收

22,udp連接和TCP的不同之處
  tcp/滑動窗口協議. 擁塞控制. 可靠的連接 ,三次握手
  udp 不關心數據是否達到,是否阻塞,不可靠的連接
  畫面優先. tcp 
  流暢優先 udp

23.handler機制的原理 
     是一個消息的處理者, 是滿足線程間的通訊,和傳遞一些信息
    Handler 先進先出原則。Looper類用來管理特定線程內對象之間的消息交換(Message Exchange)。 
    1)Looper: 一個線程可以產生一個Looper對象,由它來管理此線程里的Message Queue(消息隊列)。 
    2)Handler: 你可以構造Handler對象來與Looper溝通,以便push新消息到Message Queue里;
  或者接收Looper從Message Queue取出)所送來的消息。 
    3) Message Queue(消息隊列):用來存放線程放入的消息。 
    4)線程:UI thread 通常就是main thread,而Android啟動程序時會替它建立一個Message Queue。

24.AsycTask與一般線程異步之間的差別
  1)是因為AsyncTask使用了線程池技術,而且其中的方法很容易實現調用
  2)是因為AsyncTask可以調用相關的方法,在開啟子線程前和后,進行界面的更新
  3)是因為一旦任務多了,不用每次都new新的線程,可以直接使用
25. ListView如何提高其效率?
  復用convertview , 復用歷史的view對象 
  Static class ViewHolder 
  使用靜態的view對象 避免創建過多的view,減少findViewByid
  異步加載數據, 可以使用,分批或分頁加載數據, onscallLinster()監聽;
  把下載后的數據緩存到數據庫里 
  客戶端和服務器 協同 作戰 .
  Http 請求 
26. 圖片的優化
  異步加載圖片
  圖片的壓縮處理bitMapFactory.options
  設置內存的大小
  緩存在內存,緩存在SD卡, 取的時候先從內存中取 ,在去SD卡取 ,沒有的話,去網上取
27.屏幕的適配
  文字使用SP ,控件使用dp ,weight
  多布局, 里面加不同的dimens.xml
  圖片有要求的話,采用多圖片處理
28.Activity的啟動模式
  1. standard 默認標准的啟動模式, 每次startActivity都是創建一個新的activity的實例。
      適用於絕大大數情況
  2. singleTop 單一頂部,如果要開啟的activity在任務棧的頂部已經存在,就不會創建新的實例,
      而是調用 onNewIntent() 方法。
      應用場景: 瀏覽器書簽。 避免棧頂的activity被重復的創建,解決用戶體驗問題。
  3. singletask 單一任務棧 , activity只會在任務棧里面存在一個實例。如果要激活的activity,在
      任務棧里面已經存在,就不會創建新的activity,而是復用這個已經存在的activity,
      調用 onNewIntent() 方法,並且清空當前activity任務棧上面所有的activity
      應用場景:瀏覽器activity, 整個任務棧只有一個實例,節約內存和cpu的目的
      注意: activity還是運行在當前應用程序的任務棧里面的。不會創建新的任務棧。

  4. singleInstance 單態 單例模式
    單一實例,整個手機操作系統里面只有一個實例存在。不同的應用去打開這個activity
    共享 公用的同一個activity。
    他會運行在自己單獨,獨立的任務棧里面,並且任務棧里面只有他一個實例存在。
    應用場景:呼叫來電界面 InCallScreen

29.注冊廣播哪幾種方法
  2種 ,
  1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。registerReceiver
  2)第二種是常駐型,也就是說當應用程序關閉后,如果有信息廣播來,程序也會被系統調用自動運行。一種是在AndroidManifest.xml中配置廣播

30.橫豎屏切換時候activity的生命周期? 
  1、不設置Activity的android:configChanges時,切屏會重新調用各個生命周期,
    切橫屏時會執行一次,切豎屏時會執行兩次
  2、設置Activity的android:configChanges="orientation"時,
    切屏還是會重新調用各個生命周期,切橫、豎屏時只會執行一次 
  3、設置Activity的android:configChanges="orientation|keyboardHidden"時,
    切屏不會重新調用各個生命周期,只會執行onConfigurationChanged方法 

31.如何將打開res aw目錄中的數據庫文件? 
  解答:在Android中不能直接打開res 
    aw目錄中的數據庫文件,而需要在程序第一次啟動時將該文件復制到手機內存或SD卡的某個目錄中,
    然后再打開該數據庫文件。復制的基本方法是使用getResources().openRawResource方法獲得res aw目錄中資源的 InputStream對象,然后    將該InputStream對象中的數據寫入其他的目錄中相應文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來打    開任意目錄中的SQLite數據庫文件。 

32.說說mvc模式的原理,它在android中的運用 
   MVC(Model_view_contraller)”模型_視圖_控制器”。 
   MVC應用程序總是由這三個部分組成。Event(事件)導致Controller改變Model
   傳遞到view上

33、 你后台的Activity被系統回收怎么辦:

  onSaveInstanceState
34.Framework工作方式及原理,Activity是如何生成一個view的,機制是什么。
  反射 , 配置文件 
  每個activity里面都有window.callback和keyevent.callback,一些回調的接口或者函數吧. 框架把activity創建出來就會調用里面的這些回調方法,會調用  activity生命周期相關的方法.
  setContentView();
  普通的情況:
  Activity創建一個view是通過 ondraw 畫出來的, 畫這個view之前呢,還會調用onmeasure方法來計算顯示的大小.

35.請解釋下Android程序運行時權限與文件系統權限的區別。
  運行時權限Dalvik( android授權) 
  文件系統 linux 內核授權

36. IntentService有何優點? 
  答:IntentService 的好處 
  * Acitivity的進程,當處理Intent的時候,會產生一個對應的Service 
  * Android的進程處理器現在會盡可能的不kill掉你 
  * 非常容易使用 

37. 顯式意圖和隱式意圖的區別
  顯式意圖 :必須指定要激活的組件的完整包名和類名 (應用程序之間耦合在一起)
  // 一般激活自己應用的組件的時候 采用顯示意圖
  隱式意圖: 只需要指定要動作和數據就可以 ( 好處應用程序之間沒有耦合)
  //激活別人寫的應用 隱式意圖, 不需要關心對方的包名和類名

38.引入任務棧目的 : 
  為了記錄用戶開啟了那些activity,
  記錄這些activity開啟的先后順序,
  幫助維護好的用戶體驗。

39 .Android中4大組件是:
ContentProvider、Activity、BroadcastReceiver和Service 

40. 簡單描述下Android 數字簽名。
在Android系統中,所有安裝到系統的應用程序都必有一個數字證書,此數字證書用於標識應用程序的作者和在應用程序之間建立信任關系 Android系統要求每一個安裝進系統的應用程序都是經過數字證書簽名的,數字證書的私鑰則保存在程序開發者的手中。Android將數字證書用來標識應用程序的作者和在應用程序之間建立信任關系,不是用來決定最終用戶可以安裝哪些應用程序。
這個數字證書並不需要權威的數字證書簽名機構認證(CA),它只是用來讓應用程序包自我認證的。
同一個開發者的多個程序盡可能使用同一個數字證書,這可以帶來以下好處。
(1)有利於程序升級,當新版程序和舊版程序的數字證書相同時,Android系統才會認為這兩個程序是同一個程序的不同版本。如果新版程序和舊版程序的數字證書不相同,則Android系統認為他們是不同的程序,並產生沖突,會要求新程序更改包名。 (2)有利於程序的模塊化設計和開發。Android系統允許擁有同一個數字簽名的程序運行在一個進程中,Android程序會將他們視為同一個程序。所以開發者可以將自己的程序分模塊開發,而用戶只需要在需要的時候下載適當的模塊。
在簽名時,需要考慮數字證書的有效期:
(1)數字證書的有效期要包含程序的預計生命周期,一旦數字證書失效,持有改數字證書的程序將不能正常升級。
(2)如果多個程序使用同一個數字證書,則該數字證書的有效期要包含所有程序的預計生命周期。
(3)Android Market強制要求所有應用程序數字證書的有效期要持續到2033年10月22日以后。 
Android數字證書包含以下幾個要點:
(1)所有的應用程序都必須有數字證書,Android系統不會安裝一個沒有數字證書的應用程序
(2)Android程序包使用的數字證書可以是自簽名的,不需要一個權威的數字證書機構簽名認證 (3)如果要正式發布一個Android,必須使用一個合適的私鑰生成的數字證書來給程序簽名,而不能使用adt插件或者ant工具生成的調試證書來發布。 (4)數字證書都是有有效期的,Android只是在應用程序安裝的時候才會檢查證書的有效期。如果程序已經安裝在系統中,即使證書過期也不會影響程序的正常功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM