《程式員面試寶典與進階秘籍》—— Android篇
一、初級要求:
Android UI 基礎:四層系統架構的掌握和理解、環境的搭建、View常用屬性和常用控制元件、界面布局、Style的作用及基本用法、Android常用資源;
1、android五種基本布局:線性LinearLayout、相對RelativeLayout、幀布局FrameLayout、絕對布局AbsoluteLayout、表格布局TableLayout;
2、單位:
dip:device independent pixels(設備獨立像素),不依賴像素,不同設備有不同顯示效果,與設備硬體有關;
px:pixels(像素),不同設備顯示效果相同,HVGA代表320x480像素;
pt:point,標準的長度單位,1pt=1/72英寸,用于印刷業;
sp:scaled pixels(放大像素),用于字體顯示,TextView默認使用sp,
3、MVC模式:
模型層Model:對資料庫、網路的操作都應該在model里面處理,對業務計算等操作也是必須放在該層的;
視圖層View:一般采用XML檔案進行界面的描述;
控制層controller:Activity實作了這個職責;不要在activity中寫代碼,要通過activity交割model業務邏輯層處理,因為activity的回應時間只有5s;
4、android中有3種選單:
(1)選項選單Options menus:一個Activity只能有1個選項選單,在按下menu鍵時,顯示在螢屏下方;
(2)背景關系選單Context menus:為Activity中的任何一個視圖注冊一個背景關系選單,長按時出現;
(3)彈出式選單Popup menus:依賴于Activity中的某個視圖,
5、Android系統架構:應用程式層、應用程式框架層、系統運行庫層、Linux核心層;
6、log列印:Android.util.log常用方法5個:VERBOSE、DEBUG、INFO、WARN、ERROR
Log.v:黑色,verbose(啰嗦);
Log.d:藍色,debug(除錯);.
Log.i:綠色,information(提示性的資訊);
Log.w:橙色,warning(警告),需要我們這注意優化android的代碼;
Log.e:紅色,error(錯誤),需要認真分析,查找堆疊的資訊;
7、資源目錄:
res/anim/ 用來放置影片
res/xml/ 用來放置style theme等XML定義
res/raw/ 用來放置data資料
res/drawable 存放png、jpg等圖示檔案,或自定義drawable
res/layout 存放xml界面檔案
res/values 存放使用到的各種型別資料
8、構造對話框
AlertDialog.Builder db = new Builder(this); db.create().show();
PregressDialog pDialog = new ProgressDialog(context);
9、Android系統的5大不足
(1)安全和隱私;
(2)首先開賣Android手機的不是最大的運營商;
(3)運營商仍然能夠影響到Android手機;
(4)同類機型用戶減少;
(5)過分依賴開發商,缺少標準配置;
Android系統的5大優勢:
(1)開放性;
(2)掙脫運營商的束縛;
(3)豐富的硬體選擇;
(4)不受任何限制的開發商;
(5)無縫結合的Google應用;
10、ListView的優化方案:
(1)如果自定義配接器,那么在getView方法中要考慮方法傳進來的引數contentView是否為null,如果為null,就創建contentView并回傳,如果不為null,則直接使用,在這個方法中盡可能少創建view;
(2)給contentView設定tag(setTag()),傳入一個viewHolder物件,用于快取要顯示的資料,可以達到影像資料異步加載的效果;
(3)如果listView需要顯示的item很多,就要考慮分頁加載,比如一共顯示100潭訓者更多的時候,可以先加載20條,等用戶拉到串列底部的時候再去加載接下來的20條;
11、串列顯示需要3個元素:
(1)ListView:用來顯示串列的View;
(2)配接器:用來把資料映射到ListView的中介;
(1)資料源:具體的將被映射的字串、圖片、或者基本組件;
Java核心:java面向物件編程的核心、常用API---Java Web編程以及JavaSE核心內容,特別是IO和多執行緒;初步具備面向物件設計和編程的能力;掌味訓本的JVM優化策略,
1、java虛擬機采用“自適應”的垃圾回收技術,有兩種回收方式:
(1)“停止-復制”:先暫停程式的運行,將存活的物件從當前堆復制到另一個堆,沒有復制的全是垃圾,被復制到新堆上的物件是一個挨著一個的,保持緊湊排列,就可以按前述方法簡單、直接的分配記憶體了,這將導致大量記憶體復制行為,記憶體分配是以較大的“塊”為單位的,有了塊之后,垃圾回收器就可以不往堆里拷貝物件了,直接就可以往廢棄的塊里拷貝物件了,
(2)“標記-清除”:它的思路同樣是從堆疊和靜態存盤區出發,遍歷所有的參考,進而找出所有存活的物件,每當它找到一個存活物件,就會給物件一個標記,這個程序中不會回收任何物件,只有全部標記完成時,沒有標記的物件將被釋放,不會發生任何復制作業,所以剩下的堆空間是不連續的,然后垃圾回收器重新整理剩余的物件,使他們是連續排列的,
2、JNI的呼叫程序:
(1)安裝和下載Cygwin,下載Android NDK;
(2)在NDK專案中進行JNI介面的設計;
(3)使用C/C++實作本地方法;
(4)JNI生成元件.so檔案;
(5)將元件復制到Java工程,在Java工程中呼叫,運行Java工程即可,
3、ArrayList、Vector、LinkedList:
(1)ArrayList和Vector都是使用陣列方式存盤資料,此陣列元素數大于實際存盤的資料以便增加和插入元素,都允許直接按序號索引元素,但是插入元素要涉及陣列元素等記憶體操作,所以索引資料快而插入資料慢;
(2)Vector由于使用了synchronized方法(執行緒安全),性能上較ArryList差;
(3)LinkedList使用雙向鏈表實作存盤,按序號索引資料,需要進行向前或向后便利,但插入資料時,只需要記錄本項的前后項即可,所以插入速度較快;
4、HashMap和HashTable的區別:
(1)HashMap是HashTable的輕量級實作(非執行緒安全的實作),都實作了Map介面,主要區別在于HashMap允許空(null)鍵值(key),由于非執行緒安全,效率上可能高于HashTable;
(2)HashMap允許將null作為一個entry的key或者value,二HashTable不允許;
(3)HashMap把HashTable的contains方法去掉了,改成containsKey和containsValue;HashTable繼承自Dictionary類,而HashMap是Java1.2引進的一個Map interface實作;
(4)最大的不同是,HashTable的方法是Synchronize的,而HashMap不是,在多個執行緒訪問HashTable時,不需要自己為它的方法實作同步,而HashMap必須為之提供外同步;
(5)采用的hash/rehash演算法大概一樣,所以性能不會有很大的差異,
5、與(&)和短路與(&&)、或(|)和短路或(||)的區別:
&&(邏輯與),全真才為真;||(邏輯或),有真則為真;
使用短路與,只要第一個結果為false,則結果為false,不會繼續執行下去;如果不是短路與,第一個結果為false,仍然繼續執行下面的判斷;
6、建構式:與類同名、沒有回傳值、沒有return陳述句;
7、“==”和equals的區別:
“==”比較兩個變數的值是否相等,也就是變數對應記憶體中存盤的數值是否相同,比較基本資料型別的資料或兩個參考變數是否相等,用“==”;
equals用于比較兩個獨立物件的內容是否相同;
8、方法的重寫Overriding和多載Overloading:是java多型性的不同表現
重寫Overriding:是父類與子類之間多型性的一種表現,子類可以重寫(覆寫)父類的方法
多載Overloading:是一個類中多型性的一種表現,一個類中定義多個同名的方法,或有不同的引數個數或不同的引數型別,
9、面向物件的特征:
封裝:
繼承:
多型:
10、靜態變數和實體變數:
靜態變數:在記憶體中只有1份,所有實體共享該變數,可以用具體實體加.來參考,也可以直接類名加.來參考;
實體變數:隨實體不同可以不同,在別的類中只能先實體化,再用具體實體加.來呼叫;
11、final、finally、finalize
final:final修飾的類不能不繼承,final修飾的方法不能被覆寫,final修飾的欄位為常量;
finally:例外處理中來執行任何清除操作;
finalize:做必要的清理作業;
12、介面和抽象類的區別:
一個類可以實作多個介面,只能繼承一個抽象類;
抽象類可以有構造方法,介面不能有構造方法;
抽象類可以有普通成員變數,介面不能有普通成員變數;
抽象類中可以包含靜態方法,介面不能包含靜態方法;
Android應用核心組件:四大組件(Activity、Service、BroadcastReceiver、ContentProvider)、Activity生命周期及頁面跳轉傳值、啟動模式、Intent七大屬性A
1、Activity的生命狀態:
Active/Running:處于螢屏最上層,系統堆疊的最頂端;
Paused:失去焦點但還看得到畫面;
Stopped:被完全遮蔽;
Inactive:被殺死時,會從activity堆疊中移除;
2、Activity的啟動模式:
standard:每次都會實體化
singleTop:復用堆疊頂元素
singleInstance:獨占1個task,且只有一個activity
singleTask:堆疊內復用,清除其上的元素
3、Android的四大組件:
Activity:是android程式與用戶互動的視窗,保持各界面狀態,做很多持久化的事情,管理生命周期及一些跳轉邏輯;
Service:后臺
Content Provider:是Android提供的第三方應用資料的訪問方案
Broadcast Receiver:廣播接收器
4、URI:
是ContentResolver和ContentProvider進行資料交換的標識;
URI的標準前綴:以“content://”為前綴;
URI的authority部分:完整的類名(小寫的形式);
URI的path部分(資源部分、資料部分):用于決定哪類資料被請求
5、GC記憶體泄露的情況:
資料庫的cursor沒有關閉;
Bitmap物件不使用時采用recycle釋放;
Activity中物件的生命周期大于Activity的生命周期;
沒有使用contentView;
Android訊息機制:Android 通過Looper、Handler來實作訊息回圈機制;Android的訊息回圈是針對執行緒的,每個執行緒都可以有自己的訊息佇列和訊息回圈;Looper負責管理執行緒的訊息佇列和訊息回圈;通過Looper.myLooper()得到當前執行緒的Looper物件,通過Looper.getMainLooper()得到當前行程主執行緒的Looper物件,
1、Handler、Looper
Looper:一個執行緒可以產生一個Looper物件,來管理此執行緒里的MessageQueue(訊息佇列);
Handler:構造Handler物件,來與Looper溝通,以便push新訊息到MessageQueue中,或者接收Looper從MessageQueue取出送來的訊息;
MessageQueue:用來存放執行緒放入的訊息;
執行緒:主執行緒,Android啟動程式時會替它建立一個MessageQueue;
2、sleep()和wait()的區別
sleep:是執行緒類(Thread)的方法,使此執行緒暫停指定時間,把執行機會給其他執行緒,但監控狀態依然保持,到時會自動恢復,不會釋放物件鎖;
wait:是Object類的方法,導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件發出notify火災notifyAll方法后,本執行緒才獲得物件鎖進入運行狀態;
3、Android行程的重要程度由高到低:
前臺行程 > 可見行程 > 服務行程 > 后臺行程 > 空行程
Android異步操作:Android提供了一個工具類AsyncTask(異步執行任務),處理后臺比較耗時的任務,不再需要子執行緒和Handler就可以完成異步操作并且重繪用戶界面
1、Android處理耗時操作的方式有哪些
AsyncTask、Handler、Thread、Loaders
2、AsyncTask定義了3種泛型型別
AsyncTask是抽象類,定義了3種泛型型別:Params、Progress、Result
3、Handler的主要用途
確定在將來的某個時間點執行一個或者一些Message和Runnable物件;
在其他執行緒中排入一些要執行的動作;
4、AsyncTask作用:
開發程序中,要用多執行緒來進行操作,將耗時的操作放在單獨的執行緒中執行,避免占用主執行緒給用戶帶來不好的體驗;但在子執行緒中無法操作主執行緒,因此用Handler類在子執行緒中更新UI執行緒,用發訊息的機制更新UI界面,呈現給用戶;但耗時的任務會啟動一些匿名的子執行緒,太多的子執行緒給系統帶來巨大的負擔,隨之帶來一些性能問題;因此用一個工具類AsyncTask,來出來一些后臺的耗時任務,不需要子執行緒和Handler就可以完成異步操作,并且重繪用戶界面,
二、中級要求:
Android核心:高級UI的使用和定制、Android視圖系統和核心實踐處理、派發機制、繪圖原理和高級控制元件影片的使用、廣播接收器、聯系人提供程式、短信技術、電話技術、Android設備各種傳感器的使用
1、廣播的注冊方式:
靜態注冊:在清單檔案中宣告,是常駐型,當應用程式關閉后,如果有資訊廣播來到,程式也會被系統呼叫自動運行;
動態注冊:使用代碼進行注冊,不是常駐型,跟隨程式的生命周期;
資料存盤:對存盤空間及檔案存盤的掌握、SD卡存盤、Sharedpreferences存盤、資料庫SQLite存盤技術等
1、Android只有一種輕量級資料庫,就是SQLite;
2、Preference、File、DataBase這3種存盤方式的存盤路徑:
Preference:/data/data/包名/Shared_Prefs
File:/data/data/包名/files
DataBase:/data/data/包名/database
網路:Socket、HTTP、TCP/IP、UDP等各種網路協議的特點和使用方法的掌握、了解基于局域網點對點通信、掌握網路請求方式和亂碼處理、掌握常見的資料交換格式XML和
JSON、熟悉各種決議方式
1、json和xml的優缺點比較
流行度方面,xml被廣泛使用,json才剛剛開始;
json和xml同樣擁有豐富的決議手段;
json相對于xml來講,資料的體積小;
json與javascript的互動更加方便;
2、Socket通信編程中,客戶端的編程步驟是:
創建客戶端套接字(指定服務器端IP地址與埠號);
連接(Android創建Socket時會自動連接);
與服務器端進行通信;
關閉套接字;
3、Socket通信編程中,服務器端的編程步驟是:
創建一個ServerSocket,用于監聽客戶端Socket的連接請求;
采用回圈不斷接收來自客戶端的請求;
每當接收到客戶端Socket的請求,服務器端也對應產生一個Socket;
4、JSON決議類有哪些:
JSONObject、JSONStringer、JSONArray、JSONTokener、JSONException
5、XML決議方式:SAX、DOM、Pull
二、高級要求:
Android高級技術:LBS相關技術、第三方分享、推送、OpenFile框架和XMPP協議等
1、Android代碼優化技術:java記憶體控制、回圈使用、圖片優化
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/273259.html
標籤:其他
上一篇:iOS底層原理(四)block
