面試題一

1.一個(gè)聊天社交類軟件存儲方式有哪些?分別存儲什么內(nèi)容,比如微信。

  • SharedPrefences
  • 文件存儲
  • SQLite數(shù)據(jù)庫存儲
  • ContentProvider
  • 網(wǎng)絡(luò)存儲

2.說幾種android常用的jar包,以及他們的原理和作用

  • Volley.jar

3.return,break,continue的用法和區(qū)別

  • return:(1). return 從當(dāng)前的方法中退出,返回到該調(diào)用的方法的語句處,繼續(xù)執(zhí)行。
    (2).return 返回一個(gè)值給調(diào)用該方法的語句,返回值的數(shù)據(jù)類型必須與方法的聲明中的返回值的類型一致。
    (3). return后面也可以不帶參數(shù),不帶參數(shù)就是返回空,其實(shí)主要目的就是用于想中斷函數(shù)執(zhí)行,返回調(diào)用函數(shù)處。
  • break:在循環(huán)體中使用,強(qiáng)行跳出循環(huán),執(zhí)行循環(huán)體外的語句,注意(只能跳出一層循環(huán))
  • continue:終止當(dāng)前循環(huán)的過程,但不能終止循環(huán),而是繼續(xù)執(zhí)行下一次循環(huán)

4.列舉幾種Android不同進(jìn)程之間的通信方式

  • 方式一:訪問其他應(yīng)用程序的Activity
    activity跨進(jìn)程同樣需要一個(gè)Intent,但跨進(jìn)程不指定Context對象和Activity的class對象,而需要制定一個(gè)訪問Activity所對應(yīng)的Action,有些Activity還需要指定一個(gè)uri
  • 方式二:ContentProvider
    Content Provider提供了一種在多個(gè)應(yīng)用程序之間數(shù)據(jù)共享的方式(跨進(jìn)程共享數(shù)據(jù)),Content Provider存在的目的向其他應(yīng)用程序共享數(shù)據(jù)和允許其他應(yīng)用程序?qū)?shù)據(jù)進(jìn)行增、刪、改操作。Android系統(tǒng)本身提供了很多Content Provider,例如,音頻、視頻、聯(lián)系人信息等等。我們可以通過這些Content Provider獲得相關(guān)信息的列表。這些列表數(shù)據(jù)將以Cursor對象返回。因此,從Content Provider返回的數(shù)據(jù)是二維表的形式。
  • 方式三:BroadCast(廣播)
    廣播是一種被動跨進(jìn)程通訊的方式。當(dāng)某個(gè)程序向系統(tǒng)發(fā)送廣播時(shí),其他的應(yīng)用程序只能被動地接收廣播數(shù)據(jù)。這就象電臺進(jìn)行廣播一樣,聽眾只能被動地收聽,而不能主動與電臺進(jìn)行溝通。在應(yīng)用程序中發(fā)送廣播比較簡單。只需要調(diào)用sendBroadcast方法即可。該方法需要一個(gè)Intent對象。通過Intent對象可以發(fā)送需要廣播的數(shù)據(jù)。
  • 方式四:AIDL服務(wù)
    Android內(nèi)存中會自帶一塊存放AIDL的公共區(qū)域,服務(wù)端會通過AIDL文件,把要寫入客戶端的內(nèi)容寫進(jìn)去,然后通過onBInd方法返回binder對像(繼承Binder類實(shí)現(xiàn)了aidl接口的Stub對象),然后把生成的binder對象通過序列化的方式寫入到共享區(qū)域當(dāng)中。
    客戶端也需要一個(gè)aidl文件,這樣才能夠獲得服務(wù)器端在共享區(qū)域里存放的文件的內(nèi)容,然后客戶端通過綁定服務(wù)得到Binder對象,這個(gè)binder對象其實(shí)就是共享區(qū)域中服務(wù)器端生成的binder對象經(jīng)過反序列化的方式生成的對象。因此,通過binder對象就能夠獲得服務(wù)器傳來的信息了。
  • 方式五:Messenger 信使
    實(shí)現(xiàn)原理:
    在server和client端通過Messenger信使傳遞信息,該對象就相當(dāng)于一個(gè)信息的中轉(zhuǎn)站,所有的信息都要通過這個(gè)對象來攜帶,客戶端向服務(wù)器端發(fā)送信息就需要服務(wù)器的信使對象,然后他想要接收到消息,就需要創(chuàng)建自己的信使對象,然后把自己的Messenger對象作為消息中的一部分,傳遞給服務(wù)器端,然后服務(wù)器端就能夠拿著客戶端的信使給客戶端發(fā)消息。

5.說一下你對java接口的認(rèn)識,設(shè)計(jì)接口的作用是什么?

Java接口是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類實(shí)現(xiàn),而這些實(shí)現(xiàn)可以具有不同的行為(功能)。
接口彌補(bǔ)了類不能多繼承的缺點(diǎn),Java接口的方法只能是抽象的和公開的,Java接口可以有public、靜態(tài)的和final屬性。
用于處理多變的情況。
接口在實(shí)際開發(fā)過程中最大好處是,你可以按照設(shè)計(jì),先把接口寫好,然后分配大伙干活的時(shí)候,告訴a們?nèi)ビ脤懞玫慕涌谌?shí)現(xiàn)他們的具體功能,而告訴b們,去寫那些已經(jīng)寫好但是沒有具體的代碼的接口,這樣可以提高工作效率。并且底層和應(yīng)用也通過接口做了一個(gè)很明顯的分層。

6.談?wù)勑蛄谢疭eriaLizable的作用以及實(shí)現(xiàn)方式

簡單的說序列化就是以某種方式將內(nèi)存中的Java對象變成2進(jìn)制字節(jié)
既然是字節(jié),那么處理起來就很方便,可以存儲起來,也可以存在文件中、或者發(fā)送給別人。Java平臺允許我們在內(nèi)存中創(chuàng)建可復(fù)用的Java對象,但一般情況下,只有當(dāng)JVM處于運(yùn)行時(shí),這些對象才可能存在,即,這些對象的生命周期不會比JVM的生命周期更長(即每個(gè)對象都在JVM中)
但在現(xiàn)實(shí)應(yīng)用中,就可能要停止JVM運(yùn)行,但有要保存某些指定的對象,并在將來重新讀取被保存的對象。這是Java對象序列化就能夠?qū)崿F(xiàn)該功能。(可選擇入數(shù)據(jù)庫、或文件的形式保存)但是有時(shí)候,是需要在網(wǎng)絡(luò)上傳輸某些對象,如當(dāng)使用RMI(遠(yuǎn)程方法調(diào)用),也需要用到序列化和反序列化。

當(dāng)一個(gè)類實(shí)現(xiàn)了Seializable接口(該接口僅為標(biāo)記接口,不包含任何方法定義),表示該類可以序列化,一個(gè)對象實(shí)現(xiàn)Serializable接口序列化,先要創(chuàng)建某些OutputStream對象,然后將其封裝在一個(gè)ObjectOutputStream對象內(nèi),再調(diào)用writeObject()方法,即可序列化一個(gè)對象,反序列化,InputStream,再調(diào)用readObject()方法。(writeObject和readObject本身就是線程安全的,傳輸過程中是不允許被并發(fā)訪問的,所以對象只能一個(gè)一個(gè)接連不斷的傳過來)。
如果某個(gè)類能夠被序列化,其子類也可以被序列化。聲明為static和transient類型的成員數(shù)據(jù)不能被序列化。因?yàn)閟tatic代表類的狀態(tài),transient代表對象的臨時(shí)數(shù)據(jù),static對象變量在反序列化時(shí)取得的值為當(dāng)前jvm中對應(yīng)類中對應(yīng)static變量的值,而transient(瞬態(tài))關(guān)鍵字則一般用于標(biāo)識那些在序列化時(shí)不需要傳遞的狀態(tài)變量。

7.你用過jni嗎?說一說你用過的實(shí)例

8.Adapter有什么作用?常見得Adapter有哪些?

adapter是數(shù)據(jù)與ui之間的橋梁,它把后臺數(shù)據(jù)與前端ui連接到一起,是一個(gè)展示數(shù)據(jù)的載體。
常用的adapter:
BaseAdapter : 基礎(chǔ)適配器,對于spinner listview gridview 都是通用的,它是一個(gè)抽象類,繼承后要實(shí)現(xiàn)的方法很多
ArrayAdapter : 是BaseAdapter的一個(gè)子類,可以直接使用泛型,使用起來比較簡單
CursorAdapter:
ListAdapter:
SimpleAdapter :擴(kuò)展性好,可以定義各種各樣的布局,它里面涉及到的數(shù)據(jù)全是hashmap構(gòu)成的List
SimpleCursorAdapter: 可以從數(shù)據(jù)庫中讀取數(shù)據(jù)顯示在列表上
ResourceCursorAdapter:
PagerAdapter

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容