國內數一數二的網際網路公司內部面試題庫

Q1Ge發表於2018-06-12

一、java基礎

1.介面的意義(百度)

規範、擴充套件、回撥

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

為其子類提供一個公共的型別

封裝子類中得重複內容

定義抽象方法,子類雖然有不同的實現 但是定義是一致的

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

內部類可以用多個例項,每個例項都有自己的狀態資訊,並且與其他外圍物件的資訊相互獨立。

在單個外圍類中,可以讓多個內部類以不同的方式實現同一個介面,或者繼承同一個類。

建立內部類物件的時刻並不依賴於外圍類物件的建立。

內部類並沒有令人迷惑的“is-a”關係,他就是一個獨立的實體。

內部類提供了更好的封裝,除了該外圍類,其他類都不能訪問

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配置像窗花圖紙。

在Activity中呼叫attach,建立了一個Window

建立的window是其子類PhoneWindow,在attach中建立PhoneWindow

在Activity中呼叫setContentView(R.layout.xxx)

其中實際上是呼叫的getWindow().setContentView()

呼叫PhoneWindow中的setContentView方法

建立ParentView:
作為ViewGroup的子類,實際是建立的DecorView(作為FramLayout的子類)

將指定的R.layout.xxx進行填充
通過佈局填充器進行填充【其中的parent指的就是DecorView】

呼叫到ViewGroup

呼叫ViewGroup的removeAllView(),先將所有的view移除掉

新增新的view:addView()

fragment 特點

Fragment可以作為Activity介面的一部分組成出現;

可以在一個Activity中同時出現多個Fragment,並且一個Fragment也可以在多個Activity中使用;

在Activity執行過程中,可以新增、移除或者替換Fragment;

Fragment可以響應自己的輸入事件,並且有自己的生命週期,它們的生命週期會受宿主Activity的生命週期影響。

轉載於GitHub: https://github.com/JackyAndroid

加我好友拉你進群:

國內數一數二的網際網路公司內部面試題庫國內數一數二的網際網路公司內部面試題庫



相關文章