國內一線互聯網公司內部面試題庫


歡迎在GitHub或者CSDN上關注我

GitHub: https://github.com/JackyAndroid

CSDN: http://blog.csdn.net/rain_butterfly


國內一線互聯網公司內部面試題庫

在線閱讀地址

面試題來自於百度、小米、樂視、美團、58、獵豹、360、新浪、搜狐內部題庫

熟悉本文中列出的知識點會大大增加通過前兩輪技術面試的幾率。

以下是部分面試題,完整版在github,點擊進入

一、java基礎

1.接口的意義(百度)

規范、擴展、回調

2.抽象類的意義(樂視)

為其子類提供一個公共的類型
封裝子類中得重復內容
定義抽象方法,子類雖然有不同的實現 但是定義是一致的

3.內部類的作用(百度,樂視)

  1. 內部類可以用多個實例,每個實例都有自己的狀態信息,並且與其他外圍對象的信息相互獨立。
  2. 在單個外圍類中,可以讓多個內部類以不同的方式實現同一個接口,或者繼承同一個類。
  3. 創建內部類對象的時刻並不依賴於外圍類對象的創建。
  4. 內部類並沒有令人迷惑的“is-a”關系,他就是一個獨立的實體。
  5. 內部類提供了更好的封裝,除了該外圍類,其他類都不能訪問

4.父類的靜態方法能否被子類重寫,為什么?(獵豹)

不能

子類繼承父類后,用相同的靜態方法和非靜態方法,這時非靜態方法覆蓋父類中的方法(即方法重寫),父類的該靜態方法被隱藏(如果對象是父類則調用該隱藏的方法),另外子類可繼承父類的靜態與非靜態方法,至於方法重載我覺得它其中一要素就是在同一類中,不能說父類中的什么方法與子類里的什么方法是方法重載的體現

5.舉1-2個排序算法,並使用java代碼實現(美團)

http://blog.csdn.net/qy1387/article/details/7752973

6.java虛擬機的特性(百度、樂視)

Java語言的一個非常重要的特點就是與平台的無關性。而使用Java虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平台上運行,至少需要編譯成不同的目標代碼。而引入Java語言虛擬機后,Java語言在不同平台上運行時不需要重新編譯。Java語言使用模式Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行字節碼時,把字節碼解釋成具體平台上的機器指令執行。

二、android基礎

1.數據庫的操作類型有哪些,如何導入外部數據庫?

把原數據庫包括在項目源碼的 res/raw

android系統下數據庫應該存放在 /data/data/com..(package name)/ 目錄下,所以我們需要做的是把已有的數據庫傳入那個目錄下.操作方法是用FileInputStream讀取原數據庫,再用FileOutputStream把讀取到的東西寫入到那個目錄.

2.是否使用過本地廣播,和全局廣播有什么差別?

因廣播數據在本應用范圍內傳播,不用擔心隱私數據泄露的問題。
不用擔心別的應用偽造廣播,造成安全隱患。
相比在系統內發送全局廣播,它更高效。

3.是否使用過intentServer,作用是什么,AIDL解決了什么問題?(小米)

生成一個默認的且與主線程互相獨立的工作者線程來執行所有傳送至 onStartCommand() 方法的Intetnt。

生成一個工作隊列來傳送Intent對象給你的onHandleIntent()方法,同一時刻只傳送一個Intent對象,這樣一來,你就不必擔心多線程的問題。在所有的請求(Intent)都被執行完以后會自動停止服務,所以,你不需要自己去調用stopSelf()方法來停止。

該服務提供了一個onBind()方法的默認實現,它返回null。

提供了一個onStartCommand()方法的默認實現,它將Intent先傳送至工作隊列,然后從工作隊列中每次取出一個傳送至onHandleIntent()方法,在該方法中對Intent對相應的處理。

AIDL (Android Interface Definition Language) 是一種IDL 語言,用於生成可以在Android設備上兩個進程之間進行進程間通信(interprocess communication, IPC)的代碼。如果在一個進程中(例如Activity)要調用另一個進程中(例如Service)對象的操作,就可以使用AIDL生成可序列化的參數。
AIDL IPC機制是面向接口的,像COM或Corba一樣,但是更加輕量級。它是使用代理類在客戶端和實現端傳遞數據。

4.Activity、Window、View三者的差別,fragment的特點?(360)

Activity像一個工匠(控制單元),Window像窗戶(承載模型),View像窗花(顯示視圖)
LayoutInflater像剪刀,Xml配置像窗花圖紙。

  1. 在Activity中調用attach,創建了一個Window
  2. 創建的window是其子類PhoneWindow,在attach中創建PhoneWindow
  3. 在Activity中調用setContentView(R.layout.xxx)
  4. 其中實際上是調用的getWindow().setContentView()
  5. 調用PhoneWindow中的setContentView方法
  6. 創建ParentView:
作為ViewGroup的子類,實際是創建的DecorView(作為FramLayout的子類)
  7. 將指定的R.layout.xxx進行填充
通過布局填充器進行填充【其中的parent指的就是DecorView】
  8. 調用到ViewGroup
  9. 調用ViewGroup的removeAllView(),先將所有的view移除掉
  10. 添加新的view:addView()

fragment 特點

  • Fragment可以作為Activity界面的一部分組成出現;
  • 可以在一個Activity中同時出現多個Fragment,並且一個Fragment也可以在多個Activity中使用;
  • 在Activity運行過程中,可以添加、移除或者替換Fragment;
  • Fragment可以響應自己的輸入事件,並且有自己的生命周期,它們的生命周期會受宿主Activity的生命周期影響。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: