2016年面試題總結

2016年面試題總結

    經朋友介紹,今天起了一個大早,7點起牀,做完早餐,吃完早飯,收拾了一下面試需用品就從家裏出發了,8點出門然後就找複印店複印簡歷和學歷。結果人家都沒開門,我在外面凍得要死然後就覺得過去那面可能就會有複印的地方,就坐車來到望京那邊了,剛出地鐵就被呼呼的北風吹的頭腦發涼 耳朵也有些受不了,在公交牌前一等就是半個小時,結果112路還是沒到,我就打的去到朋友的公司了。本以爲朋友說的內推,公司剛走一個android的員工,不用面試就可以來,結果到了後跟他們的產品總監聊完,經過了兩輪技術面試纔算完事,結果可想而知,準備不充分 面試結果不理想,就被告知等通知吧!!!

好了,聊聊正題,就我面試的一些疑難問題總結下,好爲接下來的面試準備:開始回憶。。。


1月12日面試總結

1,​​你們整個項目是基於什麼框架搭建的?(直接矇蔽了,不過我還算淡定一些的)

mvc

MVC(Model_view_contraller)”模型視圖控制器”。 MVC應用程序總是由這三個部分組成。Event(事件)導致Controller改變Model或View,或者同時改變兩者。只要 Controller改變了Models的數據或者屬性,所有依賴的View都會自動更新。類似的,只要Contro ​

1)視圖層(view):一般採用xml文件進行界面的描述,使用的時候可以非常方便的引入,當然,如何你對android瞭解的比較的多了話,就一定可以想到在android中也可以使用javascript+html等的方式作爲view層,當然這裏需要進行java和javascript之間的通信,幸運的是,android提供了它們之間非常方便的通信實現。

2)控制層(controller):android的控制層的重任通常落在了衆多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model業務邏輯層處理,這樣做的另外一個原因是android中的acitivity的響應時間是5s,如果耗時的操作放在這裏,程序就很容易被回收掉。

3)模型層(model):對數據庫的操作、對網絡等的操作都應該在model裏面處理,當然對業務計算等操作也是必須放在的該層的。

2,說說內存泄漏怎麼處理?

a) 查詢數據庫沒有關閉遊標

b) 構造Adapter時,沒有使用緩存的 convertView

c) Bitmap對象不在使用時調用recycle()釋放內存

d) 不用的對象沒有及時釋放對象的引用

  1. android內存的優化

答:android內存泄露容易導致內存溢出,又稱爲OOM。

Android內存優化策略:

1)在循環內儘量不要使用局部變量2)不用的對象即時釋放,即指向NULL

3)

數據庫的cursor

即時關閉。4)

構造adapter

時使用緩存contentview

5)

調用registerReceiver()後

在對應的生命週期方法中調用unregisterReceiver()

6)即時

關閉InputStream/OutputStream。

7)

android系統

給圖片分配的內存只有8M

, 圖片儘量使用軟引用, 較大圖片可通過BitmapFactory

8)

儘量避免static成員變量引用資源耗費過多的實例。

  1. 加載大圖片的時候如何防止內存溢出

答:

android系統

給圖片分配的內存只有8M

,當加載大量圖片時往往會出現OOM。

Android加載大量圖片內存溢出解決方案:

1)

儘量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource來設置一張大圖,因爲這些函數在完成decode後,最終都是通過java層的createBitmap來完成的,需要消耗更多內存

,可以通過BitmapFactory.decodeStream方法,創建出一個bitmap,再將其設爲ImageView的 source

2)

使用BitmapFactory.Options對圖片進行壓縮

InputStream is = this.getResources().openRawResource(R.drawable.pic1); BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds = false; options.inSampleSize = 10; //width,hight設爲原來的十分一

Bitmap btp =BitmapFactory.decodeStream(is,null,options); 3)運用Java軟引用,進行圖片緩存,將需要經常加載的圖片放進緩存裏,避免反覆加載

及時銷燬不再使用的Bitmap對象

if(!bmp.isRecycle() ){ bmp.recycle() //回收圖片所佔的內存

system.gc() //提醒系統及時回收

}

3,socket通信是否運用過?(這家公司就是做通信相關的產品,結果我不瞭解也沒接觸過這塊)​

4,android存儲有哪些?具體述說下?(這都對答自如,因爲昨天晚上看了並且之前項目中也用的過)​

SharedPreferences方式

用來存儲”key-value paires”格式的數據,它是一個輕量級的鍵值存儲機制,只可以存儲基本數據類型,可以通過它保存一些上次用戶所做的修改操作

文件存儲方式

它通過FileInputStream和FileOutputStream對文件進行操作。但是在Android中,文件是一個應用程序私有的,一個應用程序無法讀寫其他應用程序的文件,如果要共享數據就用Content Providers

SQLite數據庫方式

Android提供的一個標準的數據庫,支持SQL語句

內容提供器(Content provider)方式

是所有應用程序之間數據存儲和檢索的橋樑,它的作用是使得各個應用程序之間實現數據共享

網絡存儲方式

通過網絡來存儲和獲取數據

5,數據存儲你是用的框架還是自己寫的?(我說是自己寫的,然後就問我怎麼避免內存泄漏,我直接答在查詢或者操作完的地方關閉cursor遊標,然後面試官有深入的問 具體怎樣避免呢?)​

6,網絡請求數據你是用的框架還是自己的?(我說用自己封裝好的,他又問我:你能說下怎麼避免發生請求數據異常或者數據泄漏嗎)​

7,​你的職業規劃是?

跟隨公司晉升自己的職位,或者一直從事技術方面的工作 不斷地成長爲技術大牛​

8,​多線程問題?同時下載會出現的問題有哪些?

9,AIDL的全稱是什麼?如何工作?能處理哪些類型的數據?

AIDL全稱Android Interface Definition Language(AndRoid接口描述語言)是一種藉口描述語言; 編譯器可以通過aidl文件生成一段代碼,通過預先定義的接口達到兩個進程內部通信進程跨界對象訪問的目的.AIDL的IPC的機制和COM或CORBA類似, 是基於接口的,但它是輕量級的。它使用代理類在客戶端和實現層間傳遞值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相關類.; 2. 調用aidl產生的class.理論上, 參數可以傳遞基本數據類型和String, 還有就是Bundle的派生類, 不過在Eclipse中,目前的ADT不支持Bundle做爲參數,

​10,HashMap與HashSet的區別?

Set的集合裏不允許對象有重複的值,List允許有重複​,

什麼是HashSet

HashSet實現了Set接口,它不允許集合中有重複的值,當我們提到HashSet時,第一件事情就是在將對象存儲在HashSet之前,要先確保對象重寫equals()和hashCode()方法,這樣才能比較對象的值是否相等,以確保set中沒有儲存相等的對象。如果我們沒有重寫這兩個方法,將會使用這個方法的默認實現。

什麼是HashMap

HashMap實現了Map接口,Map接口對鍵值對進行映射。Map中不允許重複的鍵。Map接口有兩個基本的實現,HashMap和TreeMap。TreeMap保存了對象的排列次序,而HashMap則不能。HashMap允許鍵和值爲null。HashMap是非synchronized的,但collection框架提供方法能保證HashMap synchronized,這樣多個線程同時訪問HashMap時,能保證只有一個線程更改Map。

public Object put(Object Key,Object value)方法用來將元素添加到map中。

你可以閱讀這篇文章

看看HashMap的工作原理,以及這篇文章看看HashMap和HashTable的區別

hashmap與hashset的區別

40 描述一下android的系統架構

android系統架構分從下往上爲linux 內核層、運行庫、應用程序框架層、和應用程序層

linuxkernel:負責硬件的驅動程序、網絡、電源、系統安全以及內存管理等功能。

libraries和 androidruntime:libraries:即c/c++函數庫部分,大多數都是開放源代碼的函數庫,例如webkit,該函數庫負責 android網頁瀏覽器的運行,例如標準的c函數庫libc、openssl、sqlite等,當然也包括支持遊戲開發2dsgl和 3dopengles,在多媒體方面有mediaframework框架來支持各種影音和圖形文件的播放與顯示,例如mpeg4、h.264、mp3、 aac、amr、jpg和png等衆多的多媒體文件格式。android的runtime負責解釋和執行生成的dalvik格式的字節碼。

applicationframework(應用軟件架構),java應用程序開發人員主要是使用該層封裝好的api進行快速開發。

applications:該層是java的應用程序層,android內置的googlemaps、e-mail、即時通信工具、瀏覽器、mp3播放器等處於該層,java開發人員開發的程序也處於該層,而且和內置的應用程序具有平等的位置,可以調用內置的應用程序,也可以替換內置的應用程序。

  上面的四個層次,下層爲上層服務,上層需要下層的支持,調用下層的服務,這種嚴格分層的方式帶來的極大的穩定性、靈活性和可擴展性,使得不同層的開發人員可以按照規範專心特定層的開發。

android應用程序使用框架的api並在框架下運行,這就帶來了程序開發的高度一致性,另一方面也告訴我們,要想寫出優質高效的程序就必須對整個 applicationframework進行非常深入的理解。精通applicationframework,你就可以真正的理解android的設計和運行機制,也就更能夠駕馭整個應用層的開發。

  1. SQLite支持事務嗎? 添加刪除如何提高性能?

    SQLite作爲輕量級的數據庫,比MySQL還小,但支持SQL語句查詢,提高性能可以考慮通過原始經過優化的SQL查詢語句方式處理。

1, 聯想公司android面試題
點擊查看
2,2016年1月Android最新面試題彙總
點擊查看

1月15日面試題:

1)android與js交互用到的方法和具體實現?

2)推送分爲羣推送,個推送,指定推送,你具體描述下?

3)做下自我介紹?

4)爲什麼從上家公司離職?

5)xutils有哪些框架,說說具體你用過哪些,說下Httputils底層採用什麼方式請求數據的?

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