面試中的一些問題

android是什麼?Android的框架;javascript

android是基於linux平臺的自由及開放的操做系統,主要用於移動設備如手機和移動PDA等設備,有google和開放手機聯盟共同推出。包括操做系統、中間件、用戶界面以及應用程序。html

Android的框架從上往下主要包括:applications(應用包括:通信錄、短信等)、application frameworkactivityservice等)、libraries c/c++庫)android runtimeandroid運行時)、linux kernal(包含camer 驅動、mediaplayer 驅動等);java

2.android四大組件及各自含義;linux

Activity:活動,一個activity對應一個界面,能夠加載對應xml中的控件也能夠監聽並響應用戶事件。android

使用方式:繼承activity,重寫onCreateonStart等方法;c++

Service:服務,不含界面,不能與用戶直接交互,運行於程序後臺,一般用於處理一些耗時長的操做,避免阻塞主線程;程序員

使用方法:繼承Service,啓動模式重寫onStartCommond方法,綁定方式重寫onBind();注意Service運行在主線程中,所以耗時操做須要另開線程,或者用IntentServiceweb

Broadcast Receiver:廣播接收器,使用它能夠過濾一些事件而只對本身感興趣的事件做出響應,他沒有界面,可是能夠經過activityservice來響應響應事件、也能夠經過震動、響鈴或者notification來響應;算法

使用方法:繼承BroadcastReceiver,重寫onReceive方法,onReceive的是處理時間是10S,所以耗時操做不能直接寫在裏面,須要經過intent傳給Service來處理;sql

註冊方式:靜態註冊,在manifest中註冊,應用關閉也存在;動態註冊,通常在須要接受廣播的組件中onResume時註冊,onPause是取消註冊;

Content provider:內容提供者,它爲android應用之間進行數據共享的統一訪問方式。

使用方法:採用ContentResolver來實現增刪改查,uri地址格式:conten//惟一標準(一般是包名)/資源路徑/資源ID

自定義:繼承ContentProvider,實現querydeleteupdate等方法,而後在manifest中註冊。

3.Activity啓動模式;

Standard:默認模式、標準模式。每次激活activity時,都會從新建立activity實例,退出都會銷燬該activity實例;

Single Top:須要被激活的activity位於棧的頂部的時候,不須要從新建立activity實例,不然都須要建立activity實例;

Single Task:只要須要被激活的activity位於棧中,就會將其上面的全部activity移除,經過newInstance重用該activity實例,始終使其處於棧頂;

Single instance:在啓動的時候,會開啓一個新的BackStack,這個BackStack裏只有一個Activity的實例存在,而且把這個BackStack得到焦點。這是一種很極端的模式,它會致使整個設備的操做系統裏,只會 存在一個這個Activity示例,不管是從何處被啓動的。

4.Activity轉屏(ctrl+f12)生命週期變化、界面跳轉、回到桌面生命週期變化;

Activity生命週期:onCreate(建立)--onStart(可見、無焦點)--onResume(可見、有焦點)--onPause(可見、無焦點)--onStop(不可見、無焦點)--onDestory(銷燬);

Activity生命狀態:active--pause--stop--destory

啓動activity的過程:onCreate--onStart--onResume

界面跳轉:onPause1--onCreate2-onStart2--onResume2--onStop1

界面返回:onPause2--onRestart1--onStart1--onResume1--onStop2--onDestory2

回到主界面:onSaveInstanceState1--onPause1--onStop1

轉橫屏:onSaveInstanceState()--onPause()--onStop()--onDestory()--onCrate()--onStart()--onRestoreInstanceState()--onResume()

轉豎屏:onSaveInstanceState()--onPause()--onStop()--onDestory()--onCreate()--onStart()--onRestoreInstanceState()--onResume()--onSaveInstanceState()--onPause()--onStop()--onDestory ()--onCreate()--onStart()--onRestoreInstanceState()--onResume()

manifest中加入:configChanges=orientation

轉橫屏:onSaveInstanceState()--onPause()--onStop()--onDestory()--onCreate()--onStart()--onRestoreInstanceState()--onRsume();

轉豎屏:onSaveInstanceState()--onPause()--onStop()--onDestory()-onCreate()--onStart()--onRestoreInstanceState()--onResume()--onConfigurationChanged();

manifest中加入:configChanges=orientation|keyboardHidden

轉橫屏:onConfigurationChanged()

轉豎屏:onConfigurationChanged()--onConfigurationChanged();

5.Activity之間數據的傳輸方式?

Activity之間的數據經過intent.putExtra();傳輸,簡單的直接傳遞,複雜的能夠經過Bundle傳輸,注意bundle傳遞的對象必需要通過序列化,實現parcelable

6.同一個應用中,不一樣的activity中是否能夠放在不一樣的Task中?

答:能夠放在不一樣的Task中。須要爲不一樣的activity設置不一樣的taskaffinity屬性,啓動activityIntent須要包含FLAG_ACTIVITY_NEW_TASK標記

7.Activity變成窗口?

兩種方式:一種是自定義樣式的方式實現:在manifesttheme=@style/myStyle」,另外一種是調用系統的窗口樣式在manifesttheme=@androidstyle/Theme.dialog」;

8.如何退出activity?徹底退出整個應用?

退出activity能夠採用finish()、system.exit()killProcess();

退出整個應用有如下幾種方式:

用列表記住打開的activity,退出時一一關閉(經過application單例模式實現);

經過廣播關閉:在須要關閉的activity中註冊廣播,收到廣播後關閉;

拋出異常關閉:須要處理異常彈出框.

9.Service啓動方式及生命週期;

啓動模式:Context.startService()--onCreate--onStart--運行--Context.StopService()--onDestory;須要主動調用stopService中止服務,不然可能會一直運行;

綁定模式:Context.bindService()--onCreate--onBind--運行--onUnbind()--onDestory,與綁定的activity生命週期一致,無需手動關閉服務。

10.IntentService

IntentService經過Context.startService(Intent)的方式啓動了一個能夠處理異步請求的service,使用時只須要繼承IntentService,添加一個空的構造方法(調用父類含字符串的方法),重寫onHandleIntentIntent.

主要特色:1在應用的主線程外建立一個單獨的工做線程來處理傳遞到onStartCommand()方法的Intent組件;2建立一個工做隊列,每次傳遞一個IntentonHandleIntent,開發人員不須要考慮多線程問題, 3當全部請求處理完後,會自動中止服務不須要開發人員顯示調用stopSelf方法,4提供了onBind的實現並返回null5提供了onStartCommond的默認實現,將全部的intent發送到一個工做隊列,並進一步發 送到onHandleIntent。應用場景:下載任務

這是一個基於消息的服務,每次啓動該服務並非立刻處理你的工做,而是首先會建立對應的Looper,Handler而且在MessageQueue中添加的附帶客戶Intent的Message對象,當Looper發現有Message的時候 接着獲得Intent對象經過在onHandleIntent((Intent)msg.obj)中調用你的處理程序.處理完後即會中止本身的服務.意思是Intent的生命週期跟你的處理的任務是一致的.因此這個類用下載任務中很是好,下 載任務結束後服務自身就會結束退出。

10.Service遠程調用;

Aidlandroid interface definition languageandroid接口定義語言)。

在服務端:1)建立aidl2)編譯aidl,在eclipse中直接在gen文件夾下面;3)實現aidl中的Stud類;4)將新建的服務添加到manifest中;

在客戶端:1)將aidl文件拷貝到客戶端,在gen下面自動生成接口類;2)在客戶端中經過serviceConnection調用服務器服務remoteService.Stub.asInterface(service);

11.數據存儲的方式;

SharePreferences:存儲各類參數,以xml格式存儲。以key-value的方式存儲數據,keyString類型,value能夠是基本數據類型和String類型的數據;

       經過preferenceManager.getDefaultSharedPreferences(this);或經過this.getSharedPreferences(MODE_);經過SharedPreferences.Editor存放數據,執行完後須要用Editor,commit();

   經過preferences.registerOnsharedPreferenceChangedListener()監聽;

contentProvider:內容提供器,提供數據共享接口。

Sqlite:輕量級的本地數據庫,可支持sql語句,注意sqlite不能一次讀取過多條數據,會致使溢出,能夠先查一下有多少條,而後按每次少於5000取;

File:經過IO流存儲和讀取,會涉及SDcard權限;IO流分兩種:字符流、字節流

網絡:經過HTTPwebservice實現數據存儲

數據存儲在/data/data/packagename/share_prefs(filesdatabase)

12.Android經常使用控件;

ButtonTextViewListViewEditTextSpinnerGridView

13.Fragment的使用、生命週期;

Fragment:碎片,他有本身的生命週期、佈局文件也能處理本身的事件,可是他不能單獨存在,必須依附於activity,其生命週期也將受到activity生命週期的影響。

activity中使用fragment有兩種方式:一種是在activityxml文件中經過<fragment>來使用,注意必須添加name=「自定義的fragment」;另外一種則是直接在activity的代碼中建立,經過FragmentManager manager  = getFragmentManager();FragmentTranSaction  ft= manager.beginTranSaction(); MyFragment fragement = new MyFragment(); ft.add(R.id.layout,fragment);ft.commit();

Fragment生命週期:onAttach--onCreate--onCreateView--onActivityStarted--onstart--onResume--onpause--ondestoryView--onDestory--onDetach

Activity一塊兒的生命週期:onCreateActivity--onAttach--onCreate--onCreateView--onStartActivity--onActivityStart--onStart--onResumeActivity--onResume--onPause--onPauseActivity-onStop--onStopActivity--onDestoryView--onDestory--onDetach--onDestoryActivity)。

14.ViewPager的使用;

1.ViewPager用於實現多頁面的切換效果,該類存在於Google的兼容包裏面,因此在引用時記得在BuilldPath中加入「android-support-v4.jar」;

2.xml文件中添加viewpager;建立每一個子頁面的xml文件

3.onCreate內實例化viewpager,實例化各個子頁面的view,並將view添加到List<View>中;

4.實例化PagerAdapter,重寫instantiateItem方法;

5.viewpager.setAdapter(pageAdapter)

15.Listview的優化;

Listview每條數據顯示的時候都會執行getView操做,所以Listview的優化主要體如今這個模塊。不作優化,即每次滾動都新建View會形成巨大的資源浪費,判斷convertview是否爲空,在爲空時實例化,不 爲空時僅僅更換數據能夠提升效率2倍,可是經過viewHolderconvertView.setTag能夠再提升0.5倍效率。

16.其餘的一些加載速度、性能優化:

1)圖像:預先縮放視圖大小,避免實時縮放;originalImage = Bitmap.createScaledBitmap(originalImage, // 縮放圖像view.getWidth(), // 視圖寬度view.getHeight(), // 視圖高度true); // 線性過濾器

2)背景:默認的狀況下窗口有個默認的背景,當高層視圖不是透明的或者或者高層視圖覆蓋整個區域則不須要顯示窗口默認背景,所以能夠去掉:在onCreategetWindow().setBackgroundDrawable(null); 節省時間;

3)Xml:若窗口包含的視圖太多、則繪製時間會很長,界面反應速度會很慢。所以:使用中間件合併視圖,如merge能夠減小根節點;使用relativeLayout減小層次;使用自定義視圖;使用自定義佈局;

4)內存分配:在性能敏感的代碼裏,避免建立java對象:onMeasure();onDraw();getView();onLayout();onTouchEvent();

5)管理好對象:使用軟引用:內存緩存;使用弱引用:避免內存泄露。

17.列表中含有按鈕如何解決焦點衝突?

1)自定義按鈕控件,將按鈕對應的數據傳給自定義按鈕;

2)自定義一個onCLickListener,獲取View中的數據,在onClick中進行處理,並將執行結果綁定到Button按鈕中便可。

18.自定義控件如何實現?

實現方式有三種:

1)繼承已有的控件來實現自定義控件:通常是自定義控件與原有控件有不少類似功能,須要在其上進行擴展的時候;

2)繼承LinearLayout來實現自定義控件:通常來講作組合控件的時候能夠採用此方法。此時不用onDraw方法,在構造函數中經過inflater來加載xml文件,再addViewv),自定義控件就加在過來了。

3)繼承View來實現:經過GDI來繪製組件界面。

瞭解View屬性:Android系統的視圖結構的設計也採用了組合模式,即View做爲全部圖形的基類,ViewgroupView繼承擴展爲視圖容器類。

View的繪圖操做:measure()layout()draw(),其內部又分別包含了onMeasure()onLayout()onDraw()三個子方法。

 measure操做主要用於計算視圖的大小,即視圖的寬度和長度。在view中定義爲final類型,要求子類不能修改。measure()函數中又會調用onDraw函數:onMeasure(),視圖大小的將在這裏最終肯定,也就 是說measure只是對onMeasure的一個包裝,子類能夠覆寫onMeasure()方法實現本身的計算視圖大小的方式,並經過setMeasuredDimension(width, height)保存計算結果。

layout操做:用於設置視圖在屏幕中顯示的位置。在view中定義爲final類型,要求子類不能修改。layout()函數中有兩個基本操做:setFramel,t,r,b),l,t,r,b即子視圖在父視圖中的具體位置,該函數用於 將這些參數保存起來;onLayout(),在View中這個函數什麼都不會作,提供該函數主要是爲viewGroup類型佈局子視圖用的。

draw操做利用前兩部獲得的參數,將視圖顯示在屏幕上,到這裏也就完成了整個的視圖繪製工做。子類也不該該修改該方法,由於其內部定義了繪圖的基本操做:繪製背景;若是要視圖顯示漸變框,這裏 會作一些準備工做;繪製視圖自己,即調用onDraw()函數。在viewonDraw()是個空函數,也就是說具體的視圖都要覆寫該函數來實現本身的顯示(好比TextView在這裏實現了繪製文字的過程)。而對ViewGroup則不須要實現該函數,由於做爲容器是「沒有內容「的,其包含了多個子view,而子View已經實現了本身的繪製方法,所以只須要告訴子view繪製本身就能夠了,也就是下面的dispatchDraw() 方法;繪製子視圖,即dispatchDraw()函數。在view中這是個空函數,具體的視圖不須要實現該方法,它是專門爲容器類準備的,也就是容器類必須實現該方法;若是須要(應用程序調用了setVerticalFadingEdge 或者setHorizontalFadingEdge),開始繪製漸變框;繪製滾動條。從上面能夠看出自定義View須要最少覆寫onMeasure()onDraw()兩個方法。

19.OnClickonTouch的區別,能不能同時使用?

onTouchdown返回false表示是按鍵事件,若爲true則表示是觸摸事件,而up標記此事件此事件的結束時間,判斷是否爲長按(爲true表示此時間一直沒結束);所以:

1)若onTouchfalse,則:首先是down事件,此時,若長按,則出發onLongClick事件,接着up事件,按鍵事件結束,觸發onClick事件;

2)若onTouchtrue,則線是down事件,而後是up事件,不會觸發onClickonLongClick事件;

3)若downtrueupfalse,則表示是觸摸事件,不會觸發按鍵事件;

4)若downfalseuptrue,則表示是按鍵事件,up一直爲true,表示此事件一直沒有結束,達到長按臨界值時就會觸發onLongClick事件,不會觸發onClick事件;

20.Android圖片處理,OOM

Android應用程序的內存大小有限制,根據平臺而定有16Mb24Mb。通常耗內存的就是圖片、音頻和視頻,可是音頻和視頻android採用邊解析邊播放的方式,所以通常不會出現OOM。所以圖片比較容易出 現此類情形:1)顯示單張圖片,體積大道3000*4000級別時;2)在listViewgallery中一次性加載過多圖片;

解決方案:1)採用軟引用緩存圖片到內存,不要每次都從新加載;2)對於不一樣分辨率的手機調整圖片大小;3)採用低內存編碼方式,如好比Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省內 存;4)及時回收圖像,若是引用了大量Bitmap對象,而應用又不須要同時顯示全部圖片,能夠將暫時用不到的Bitmap對象及時回收掉;5)自定義堆內存分配大小,優化Dalvik虛擬機的堆內存分配;

21.Java對象的引用方式:

java內存管理分爲內存分配和內存回收,都不須要程序員負責。垃圾回收的機制主要是看對象是否有引用指向該對象。

1)強引用:建立一個對象並把這個對象賦給一個引用變量,垃圾處理器即便報OOM也不肯意回收強引用;

2)軟引用:經過SoftReference類來實現,只具備軟引用是,當內存空間足的時候不會被垃圾處理器回收,當內存不足時會被回收;能夠單獨使用;

3)弱引用:經過weakReference類來實現,只具備弱引用時,當垃圾處理器掃描到它時,無論內存是否夠用都會被回收;能夠單獨使用;

4)虛引用:虛引用不能單獨使用,需引用的做用是就跟蹤對象被垃圾回收的 狀態,程序能夠經過檢測與虛引用關聯的虛引用隊列是否已經包含了指定的虛引用,從而瞭解虛引用的對象是否即將被回收。 一個 對象持有虛引用,任什麼時候候均可能被回收。

若是使用軟引用,弱引用,虛引用的引用方式引用對象,垃圾回收就可以隨意的釋放這些對象,若果但願儘量減少程序在起聲明週期中所佔用的內存大小,能夠靈活使用這些引用。

  若是使用了這些引用就不能保留這些對象的強引用(強制引用應該置null),不然就浪費了這些類提供的任何好處。

22.GC是什麼,何時會出現內存泄露?

GC是垃圾收集器。java對內存的釋放採起的垃圾自動回收機制,在編程的時候不用考慮變量不用時釋放內存,java虛擬機能夠自動判斷出並收集到垃圾,但通常不會當即釋放它們的內存空間,固然也可 以在程序中使用System.gc()來強制垃圾回收,可是要注意的是,系統並不保證會當即進行釋放內存。要請求垃圾收集,能夠調用下面的方法之一:System.gc();或者Runtime.getRuntime().gc()。

  1. 數據庫的cursor沒有關閉

2.構造adapter,沒有使用緩存contentview

  1. 衍生listview的優化問題-----減小建立view的對象,充分使用contentview,能夠使用一靜態類來優化處理getview的過程

4.Bitmap對象不使用時採用recycle()釋放內存

5.activity中的對象的生命週期大於activity

6.調試方法: DDMS==> HEAPSZIE==>dataobject==>[Total Size]

23.Support包的做用?

   版本兼容,高版本兼容低版本。如api-8(android2.2)必會兼容api-4(android 1.6);可是反之則不會,你使用2.2的平臺版本build了一個apk,若想能在1.6上運行,則須要作向下兼容。android support-xxgoogle 官方的向下兼容包.如名所示,會幫助構建程序向下兼容到1.6版本.不過也並不是萬能的,仍是會受限制.

24.多線程的實現方式及區別、線程啓動方式,銷燬方式?

多線程的實現方式有:繼承Thread和實現Runnable。重寫run方法。啓動方式:myThread.start();new Thread(new myRunnable()).start();銷燬方式:

區別:實現Runnable的好處:避免了單繼承的侷限性;適合多個相同代碼的線程去處理同一個資源(同一runnable實例的多個線程);加強了程序的健壯性,代碼能被多個線程共享,代碼是獨立的。

25.線程同步及線程池的概念;

線程同步:同步是爲了防止多個線程訪問同一數據對象,對對象形成破壞。同步兩步驟:1)將須要同時被多個線程訪問的資源設置爲private類型;2)對於會修改須要同步資源的代碼用關鍵字synchronized 法或代碼塊。每個對象有且僅有一個鎖;當程序運行到非靜態同步方法上時,會得到與該類實例有關的鎖,其餘線程會等待該同步方法釋放鎖才能得到該鎖的機會。

同步與鎖:1)只能同步方法和代碼塊,不能同步變量和類;2)每個對象有且僅有一個鎖;3)沒必要同步類中的全部方法,能夠同時含有同步方法和非同步方法,4)若是兩個線程執行一個類中同步方法,並 且使用同一個實例,則只能有一個線程得到鎖,另外一個須要等待第一個釋放鎖爲止;5)一個類中含有同步和非同步方法時,多線程能夠對非同步方法任意訪問;6)線程sleep時不會釋放所;7)線程能夠得到 多個鎖,如在一個類的同步方法中調用另外一類的同步方法則會得到兩個鎖;8)同步損壞併發性,應儘可能減小同步範圍;9)使用同步塊時須要指定在哪一個對象上同步,synchronizedthis);10要同步靜態方 法,須要一個用於整個類對象的鎖,這個對象是就是這個類(XXX.class)

靜態同步與非靜態同步的區別:一、調用同一個對象中非靜態同步方法的線程將彼此阻塞。若是是不一樣對象,則每一個線程有本身的對象的鎖,線程間彼此互不干預。二、調用同一個類中的靜態同步方法的線程將 彼此阻塞,它們都是鎖定在相同的Class對象上。三、靜態同步方法和非靜態同步方法將永遠不會彼此阻塞,由於靜態方法鎖定在Class對象上,非靜態方法鎖定在該類的對象上。四、對於同步代碼塊,要看清 楚什麼對象已經用於鎖定(synchronized後面括號的內容)。在同一個對象上進行同步的線程將彼此阻塞,在不一樣對象上鎖定的線程將永遠不會彼此阻塞。靜態同步與非靜態同步不會相互影響;

線程安全:當一個類已經很好的同步以保護它的數據時,這個類就稱爲「線程安全的」;

線程死鎖:兩個或兩個以上的進程在執行過程當中,因爭奪資源而形成的一種互相等待的現象,若無外力做用,它們都將沒法推動下去。緣由通常是兩個對象的鎖相互等待形成的。緣由:由於系統資源不足;進程運行推動的順 序不 合適;資源分配不當。

線程同步方法:1)用synchronized 2wait()+notify/notifyall()wait(long)+notify()/notifyall()wait(long,int)+notify()/notifyall();

同步塊與同步方法的區別:同步塊是對一段代碼同步,其鎖是括號中的對象的鎖,所以住一次對象不要選擇可能在鎖的做用域改變值得對象,爲null會報錯。

26.線程的運行狀態

1)新狀態:線程對象已建立,尚未調用start();

2)可運行狀態:調用start()後或者線程在運行以後或者阻塞回來之後的狀態,注意調用start()方法後並不會立馬進入運行狀態,須要等調度程序調用,即分片處理到達該線程纔會進入運行狀態;

3)運行狀態:線程調度程序從可運行池中選擇一個線程做爲當前線程時線程所處的狀態。這也是線程進入運行狀態的惟一一種方式。

4)阻塞/等待/睡眠:這是線程有資格運行時它所處的狀態。實際上這個三狀態組合爲一種,其共同點是:線程仍舊是活的,可是當前沒有條件運行。換句話說,它是可運行的,可是若是某件事件出現,他可能返回到可運行狀態。

5)死亡狀態:當線程的run()方法完成時就認爲它死去。這個線程對象也許是活的,可是,它已經不是一個單獨執行的線程。線程一旦死亡,就不能復生。 若是在一個死去的線程上調用start()方法,會拋出java.lang.IllegalThreadStateException異常。

27.線程的優先級

範圍:1-10;默認的優先級爲父類優先級,mainThread的優先級爲Normal=5;最大優先級爲父類最大優先級,且不能超過父類的最大優先級;可經過setPriority來修改優先級;當設計多線程應用程序的時候,必定不要依賴於線程的優先級。由於線程調度優先級操做是沒有保障的,只能把線程優先級做用做爲一種提升程序效率的方法,可是要保證程序不依賴這種操做。

28.Android屏幕自適應;

1)使用layout_weightlayout_width=0pxlayout_height=0px或者wrap_contentmatch_parent或者dp

2)定義不一樣的尺寸文件;

3)代碼中實現:首先咱們要作的是獲取當前屏幕的寬高度,DisplayMetrics displayMetrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);Constant.displayWidth =  displayMetrics.widthPixels;Constant.displayHeight = displayMetrics.heightPixels;LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,(int) (Constant.displayHeight * 0.1f +  0.5f));

4)多個佈局,針對largsmall等寫不一樣xml文件,在manifest<supports-screens android:largeScreens="true"android:normalScreens="true" android:anyDensity="true" />

5)不一樣分辨率採用不一樣分辨率的圖片;

6)不要使用Absolutely,像素用dip,文本用sp

29..9文件的使用?

.9.pngandroid平臺上定義的一種能夠被拉伸不失真的圖片格式,邊緣含有11個像素點的區域,用於對圖片的可擴展區和內容區進行定義;

特色:1)可拉伸不變形;2)可擴展區容許內容被延伸;3)內容區用於顯示文字和其餘內容;4)佔用資源小,節省流量,提高加載速度。

30.圖片、視頻的基本參數,如dppxptsp之間的定義及區別;

Dipdevice independent pixels(設備獨立像素). 不一樣設備有不一樣的顯示效果,這個和設備硬件有關,通常咱們爲了支持WVGAHVGAQVGA 推薦使用這個,不依賴像素。Dpdip一致

px: pixels(像素). 不一樣設備顯示效果相同,通常咱們HVGA表明320x480像素,這個用的比較多。

pt: point,是一個標準的長度單位,1pt1/72英寸,用於印刷業,很是簡單易用; 

sp: scaled pixels(放大像素). 主要用於字體顯示best for textsize

31.NDK是什麼?

NDK全稱:Native Development Kit。NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將sojava應用一塊兒打包成apk;NDK集成了交叉編譯器,並提供了相應的mk文件隔離CPU、平臺、ABI等差別,開發人員只須要簡單修改mk文件(指出哪些文件須要編譯編譯特性要求等),就能夠建立出so

好處:使用NDK,咱們能夠將要求高性能的應用邏輯使用C開發,從而提升應用程序的執行效率;使用NDK,咱們能夠將須要保密的應用邏輯使用C開發。畢竟,Java包都是能夠反編譯的;NDK促使專業so組件商的出現。

32.ANR是什麼?怎麼產生,怎麼預防,如何定位?

ANRapplication not responding。產生的緣由是應用長時間無響應,在activity中響應時間通常是5S,超過5S就會報ANR,所以應該避免將一些耗時的操做直接放在主線程中,能夠採用開啓線程和service後臺處理來解決這問題。應該注意的是service中也是須要開新線程的。

33.Handler機制、Looper

andriod提供了Handler 和 Looper 來知足線程間的通訊。Handler先進先出原則。Looper類用來管理特定線程內對象之間的消息交換(MessageExchange)UIthread 一般就是main thread,而Android啓動程序時會替它創建一個MessageQueue 

1)Handler建立消息:Handler建立消息時首先查詢消息池中是否有消息存在,若是有直接從消息池中取得,若是沒有則從新初始化一個消息實例。使用消息池的好處是:消息不被使用時,並不做爲垃圾回收,而是放入消息池,可供下次Handler建立消息時使用。消息池提升了消息對象的複用,減小系統垃圾回收的次數。

2)Handler發送消息:UI主線程初始化第一個Handler時會經過ThreadLocal建立一個Looper,該LooperUI主線程一一對應。使用ThreadLocal的目的是保證每個線程只建立惟一一個Looper。以後其餘Handler初始化的時候直接獲取第一個Handler建立的LooperLooper初始化的時候會建立一個消息隊列MessageQueue

3)3Handler處理消息:UI主線程經過Looper循環查詢消息隊列UI_MQ,當發現有消息存在時會將消息從消息隊列中取出。首先分析消息,經過消息的參數判斷該消息對應的Handler,而後將消息分發到指定的Handler進行處理。

34.Collection類,Arraylistlinklist的區別,優缺點、arrayListvector的區別,MapHashMapHashTableSet的原理?

Collection-->set-->hashsetlinkedhashset: sortedSet-->TreeSet

  List-->arrayList:ArrayList 可以動態地增長或減少其大小。數組列表以一個原始大小被建立。 當超過了它的大小,類集自動增大。當對象被刪除後,數組就能夠縮小。Arrays.asList()返回一個列表      LinkedList:提供了一個連接列表數據結構;

 ArrayList 底層採用數組完成,而 LinkedList 則是以通常的雙向鏈表(double-linked list)完成,其內每一個對象除了數據自己外,還有兩個引用,分別指向前一個元素和後一個元素。若是咱們常常在 List   的開始處增長元素,或者在 List 中進行插入和刪除操做,咱們應該使用 LinkedList , 不然的話,使用 ArrayList 將更加快速。

Map-->hashMap: 映射(map)是一個存儲關鍵字和值的 關聯或者說是關鍵字/值對的對象。給定一個關鍵字,能夠獲得它的值。關鍵字和值都是對 象。關鍵字必須是惟一的。但值是能夠重複的。有些映射能夠接收 null 關鍵字和 null 值。而 有的則不行。

SortedMap-->TreeMap:

35.泛型,通配符,限制性通配符與非限制性通配符;

泛型是對 Java 語言的類型系統的一種擴展,以支持建立能夠按類型進行參數化的類。能夠把類型參數看做是使用參數化類型時指定的類型的一個佔位符,就像方法的形式參數是運行時傳遞的值的佔位符同樣。

泛型的做用:1提升 Java 程序的類型安全。經過知道使用泛型定義的變量的類型限制,編譯器能夠在一個高得多的程度上驗證類型假設。沒有泛型,這些假設就只存在於程序員的頭腦中(或者若是幸運的話,還存在於代碼註釋中)。經過在變量聲明中捕獲這一附加的類型信息,泛型容許編譯器實施這些附加的類型約束。類型錯誤如今就能夠在編譯時被捕獲了,而不是在運行時看成 ClassCastException 展現出來。將類型檢查從運行時挪到編譯時有助於您更容易找到錯誤,並可提升程序的可靠性。2消除強制類型轉換。 泛型的一個附帶好處是,消除源代碼中的許多強制類型轉換。這使得代碼更加可讀,而且減小了出錯機會。3潛在的性能收益。在泛型的初始實現中,編譯器將強制類型轉換(沒有泛型的話,程序員會指定這些強制類型轉換)插入生成的字節碼中。可是更多類型信息可用於編譯器這一事實,爲將來版本的 JVM 的優化帶來可能。

通配符:<?>,它們爲一個泛型類所指定的類型集合提供了一個有用的類型範圍。

限制性通配符:<? Extends >

36.經常使用代碼管理工具;

SVNlinuxwindows都支持,在任何任何因特網接入點獲取最新代碼;安全性和版本管理功能較強,能夠實現異地開發的支持,但 SVN 安裝和使用多采用命令行方式,學習曲線高,同時不提供對變動管理的功能,對於小型團隊,能夠採用 SVN 進行管理。

VSS 的使用簡便易學,但 VSS 的功能和安全性較弱,且只對 windows 平臺進行支持,建議做爲項目配置管理的入門時採用的工具;

ClearCase 功能完善,安全性好,能夠支持複雜的管理,但學習曲線和學習成本高,須要集成 ClearQuest 才能完成完整的配置管理功能。大公司若是採用異地多研發中心同時開發的模式,推薦使用ClearCase

37.代碼的質量審查;

  • 1編碼標準、代碼重複、代碼覆蓋率、依賴項分析、複雜度監控 2)工具:CheckStyle、PMD 的 CPD 、Coverlipse 、JDepend 、Eclipse Metric 、findbugs

38.AsyncTask的使用;

Asynctask:異步任務,是一個輕量級的異步類。使用於一些簡單的異步處理之中,不太適用於多個異步後臺任務處理中。使用該類時只須要繼承它,而且複寫它的doInbackGround()(與主線程無關,不能在 這裏操做)、onPreExcute()、onPostExcute()方法便可,AsyncTask定義了三種泛型類型 ParamsProgressResultParams 啓動任務執行的輸入參數,好比HTTP請求的URLProgress 後臺任務執行的百分 比。Result 後臺執行任務最終返回的結果,好比String。相對於來講,handler則不適用於處理一些簡單的異步處理之中,這樣反而顯得代碼過多,結構過於複雜,子線程在主線程中經過start開啓,同時handler 將子線程執行的消息經過handler.sendToTarget()傳遞給主線程的messageQuenelooper經過循環檢查messageQuene中的message執行處理過程,並反饋到主線程UI控制上面。

39.Http的含義?HTTPHTTPS的區別?HTTP的方法有哪些?http的實現原理、異步HTTP的實現原理?

HTTP:超文本傳輸協議。用於從服務器傳輸超文本到本地瀏覽器(客戶端)的傳送協議。它能夠使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分,以及哪部份內容首先顯示。特色是:1)支持客戶端/服務器模式;2)簡單快速:客戶端向服務器請求時,只須要傳遞請求方法和路徑;3靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。4HTTP 0.91.0使用非持續鏈接:限制每次鏈接只處理一個請求,服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。HTTP 1.1使用持續鏈接:沒必要爲每一個web對象建立一個新的鏈接,一個鏈接能夠傳送多個對象。5無狀態:HTTP協議是無狀態協議(可經過cookiessession來保持狀態,第一次客戶端請求時成功後服務端返回一個session,以後每一次請求客戶端將此session發給服務器,服務器檢驗合法後再返回相應數據)。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。

HTTPS:安全超文本傳輸協議。比HTTP(明文傳輸)協議多提供了SSL安全機制。HTTP端口80HTTPS端口:443.它的主要做用能夠分爲兩種:一種是創建一個信息安全通道,來保證數據傳輸的安全; 另外一種就是確認網站的真實性,凡是使用了 https 的網站,均可以經過點擊瀏覽器地址欄的鎖頭標誌來查看網站認證以後的真實信息,也能夠經過 CA 機構頒發的安全簽章來查詢

請求方法:Head向服務器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法能夠在沒必要傳輸整個響應內容的狀況下,就能夠獲取包含在響應消息頭中的元信息。

      Post向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會致使新的資源的創建和/或已有資源的修改。

  GET向特定的資源發出請求。相似於查詢,不會修改服務器數據,可認爲是數據安全的和冪等的。提交給服務器的請求行的長度不要超過1K

  PUT向指定資源位置上傳其最新內容,相似於添加功能;

  DELETE請求服務器刪除Request-URI所標識的資源。相似於刪除功能;

  TRACE回顯服務器收到的請求,主要用於測試或診斷;

HTTP原理:HTTP是基於TCP的協議,TCP是一個端到端的面向鏈接的協議。所謂的端到端能夠理解爲進程到進程之間的通訊。因此HTTP在開始傳輸以前,首先須要創建TCP鏈接。在傳輸完成之間並不斷開TCP鏈接

  TCP:面向鏈接;數據流;保證正確性;保證順序;結構複雜;系統資源要求多。

        3次握手:客戶端向服務器發送同步序列號標誌位SYN;服務端收到客戶端請求返回帶有確認應答ACK和同步序列SYN;客戶端再回復確認應答ACK,完成三次握手。

  UDP:面向無鏈接;數據報;可能丟包;不保證順序;結構簡單;系統資源要求少。(應用於DNS

HTTP請求的基本過程

HTTP協議是無狀態的鏈接,能夠多個鏈接同時進行,不須要等到另外一個鏈接完畢才進行。

1)創建鏈接:HTTP協議是TCP/IP模型中的應用層協議,兩個應用程序之間的通訊必須先創建TCP鏈接。經過網址找到對應IP,創建TCP鏈接;

2)客戶端向服務器發送請求信息;

3)服務器返回響應請求信息;

4)客戶端獲取返回信息後解析;

5)關閉鏈接。

異步HTTP原理:

1)定義一個MyHandler抽象類類繼承自Handler,構造方法onSuccess();onStart();onStop()onFailure()等。

2)封裝一個異步MyHTTP類,構造如POST方法,傳入參數URLStr以及MyHandler,在方法內新建子線程,經過MyHandler發送消息到主線程messagequene中,從而操做UI

3)在Activity須要使用的地方用MyHttp(urlStr,myHandler{//複寫onStart等方法處理UI便可})

40.WEBSERVICE

能使得運行在不一樣機器上的不一樣應用無須藉助附加的、專門的第三方軟件或硬件, 就可相互交換數據或集成。依據Web Service規範實施的應用之間, 不管它們所使用的語言、 平臺或內部協議是什麼, 都 能夠相互交換數 據。Web Service是自描述、 自包含的可用網絡模塊, 能夠執行具體的業務功能。Web Service減小了應用接口的花費。

主要技術:1xml:可擴展標記語言 2SOAP簡單對象訪問協議用於交換xml標準通用標記語言下的一個子集)編碼信息的輕量級協議。它有三個主要方面:XML-envelope爲描述信息內容和如何處理內 容定義了框架,將 程序對象編碼成爲XML對象的規則,執行遠程過程調用(RPC)的約定 :SOAP使用XML消息調用遠程方法,這樣web services能夠經過HTTP協議的postget方法與遠程機器交互,而 且,SOAP更加健壯和靈活易用;

Web Service自己實際上是在實現應用程序間的通訊。咱們如今有兩種應用程序通訊的方法:RPC遠程過程調用 和消息傳遞。使用RPC的時候,客戶端的概念是調用服務器上的遠程過程,一般方式爲實例化 一個遠程對象並 調用其方法和屬性。RPC系統試圖達到一種位置上的透明性:服務器暴露出遠程對象的接口,而客戶端就好像在本地使用的這些對象的接口同樣,這樣就隱藏了底層的信息,客戶端也就根本不 須要知道對象是在哪臺機器上。

41.推送方案及區別;

客戶端獲取服務器最新數據的方式:第一種是客戶端使用Pull(拉)的方式,就是隔一段時間就去服務器上獲取一下信息,看是否有更新的信息出現。第二種就是 服務器使用Push(推送)的方式,當服務器端有新信息了,則把最新的信息Push到客戶端上。

1)輪詢(pull):應用程序應當階段性的與服務器進行鏈接並查詢是否有新的消息到達,你必須本身實現與服務器之間的通訊,例如消息排隊等。並且你還要考慮輪詢的頻率,若是太慢可能致使某些消息的延遲,若是太快,則會大量消耗網絡帶寬和電池。

2)SMSpush):經過攔截SMS消息而且解析消息內容來了解服務器的意圖,並獲取其顯示內容進行處理。可是問題是這個方案的成本相對比較高,咱們須要向移動公司繳納相應的費用。咱們目前很難找到免費的短消息發送網關來實現這種方案。

3)持久鏈接(push):這個方案能夠解決由輪詢帶來的性能問題,可是仍是會消耗手機的電池。這個方案存在着不少的不足之處,就是咱們很難在手機上實現一個可靠的服務

解決方案:

1)C2DMcloud to device messaging):

2)MQTT協議實現android推送:

3)RSMB實現推送:

4)XMPP協議實現推送:

5)第三方平臺:百度雲推送、極光推送

6)本身搭建一個平臺。

42.JSON解析方式;

JSON就是一串字符串 只不過元素會使用特定的符號標註。生成: JSONObject jsonObject = new JSONObject();jsonObject.put(key, value);

解析方式:1jsonObject.get(「key」);2)用GSON:Gson gson = new Gson();list = gson.fromJson(jsonString, new TypeToken<list<t>>();t = gson.fromJson(jsonString, cls);

3FastJson t = JSON.parseObject(jsonstring, cls);list = JSON.parseArray(jsonstring, cls);list = JSON.parseObject(jsonstring,new TypeReference<list<map<string,  object="">>>() {}.getType());效率最高。

43.分頁查詢的原理是什麼?

分頁的意義在於減小每次傳輸的數據量,根據用於所需查找某一頁信息,減小沒必要要的信息傳遞,節省流量。分頁能夠在客戶端、服務器和數據庫進行,可是在客戶端的方式效率最低。經過客戶端經過首次進請求得到總的頁數,當前頁數這些信息,而後每次請求能夠指定頁數進行跳轉。

44.ZXING開元框架,二維碼基本原理。

ZXING是一個二維碼的開元框架,集成了二維碼掃描、解析等工做,只須要根據本身所需修改部分效果便可。二維碼用到的包是:

45.XMPP協議、ASMACK包(只實現了文本傳輸,語音和圖片是如何進行的)

XMPP協議:Extensible Messageing and presence protocol,可擴展消息與存在協議。是一種基於XML的協議,它繼承了xml靈活的發展性具備良好的可擴展性,通過擴展後的xmpp能夠經過發送擴展的信息來處理用戶的需求,以及在xmpp頂端創建如內容發佈系統和基於地址的服務等應用程序。XMPP包含了針對服務器端的軟件協議,使之能與另外一個進行通話,這使得開發者更容易創建客戶應用程序或給一個配好系統添加功能。

46.Android的新技術有哪些?

 

47.Android的開發環境有哪些?

Eclipse+adt;  

48.有沒有用過別人的框架?

49.有沒有涉及源碼?

50.Static的使用?靜態塊在何時加載?

static表示「全局」或者「靜態」的意思,用來修飾成員變量和成員方法,也能夠造成靜態static代碼塊,被static修飾的成員變量和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的全部實例共享。只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。所以,static對象能夠在它的任何對象建立以前訪問,無需引用任何對象。 用public修飾的static成員變量和成員方法本質是全局變量和全局方法,當聲明它類的對象市,不生成static變量的副本,而是類的全部實例共享同一個static變量。static變量前能夠有private修飾,表示這個變量能夠在類的靜態代碼塊中,或者類的其餘靜態成員方法中使用(固然也能夠在非靜態成員方法中使用--廢話),可是不能在其餘類中經過類名來直接引用,這一點很重要。

靜態變量和實例變量:對於靜態變量在內存中只有一個拷貝(節省內存),JVM只爲靜態分配一次內存,在加載類的過程當中完成靜態變量的內存分配,可用類名直接訪問(方便),固然也能夠經過對象來訪問(可是這是不推薦的)。 對於實例變量,沒建立一個實例,就會爲實例變量分配一次內存,實例變量能夠在內存中有多個拷貝,互不影響(靈活)。

靜態方法:靜態方法能夠直接經過類名調用,任何的實例也均可以調用,
所以靜態方法中不能用this和super關鍵字,不能直接訪問所屬類的實例變量和實例方法(就是不帶static的成員變量和成員成員方法),只能訪問所屬類的靜態成員變量和成員方法。

靜態塊:static代碼塊也叫靜態代碼塊,是在類中獨立於類成員的static語句塊,能夠有多個,位置能夠隨便放,它不在任何的方法體內,JVM加載類時會執行這些靜態的代碼塊,若是static代碼塊有多個,JVM將按照它們在類中出現的前後順序依次執行它們,每一個代碼塊只會被執行一次。

static和final一塊用表示什麼 :static final用來修飾成員變量和成員方法,可簡單理解爲「全局常量」!對於變量,表示一旦給值就不可修改,而且經過類名能夠訪問;對於方法,表示不可覆蓋,而且能夠經過類名直接訪問。

51.Finalfinallyfinalized的區別?

final爲關鍵字;final定義基本類型變量時,要求變量初始化必須在聲明時或者構造函數中,不能用於其它地方。該關鍵字定義的常量,除了初始化階段,不能更改常量的值。final定義對象的引用,該引用的初始化與定義常量時的要求一致; 該關鍵字定義的對象內容能夠改變,可是引用指向的地址不能改變;定義參數:若是傳入該參數定義的變量時,方法不能對該參數內容進行修改(錯誤),與定義變量的修改規則相同;java方法中傳遞基本類型時是傳值的,java方法對於對 象的傳遞是傳參的;<歸根結底,java中方法的傳遞是依靠傳遞副本:對於基本類型,首先創建一個Copy,並將傳入的值賦值給Copy,而後對Copy進行操做;對於對象類型,首先創建一個引用Copy,並將傳入的對象引用賦值給Copy> 使用final關鍵字定義的類,不能被子類繼承;修飾方法,方法不能被覆蓋

finally爲爲區塊標誌,用於try語句中;finally{}用於標識代碼塊,與try{}進行配合,不論try中的代碼執行完或沒有執行完(這裏指有異常),該代碼塊之中的程序一定會進行;

finalize()爲方法;finalize()方法在Object中進行了定義,用於在對象「消失」時,由JVM進行調用用於對對象進行垃圾回收,相似於C++中的析構函數;用戶自定義時,用於釋放對象佔用的資源(好比進行I/0操做);

52.抽象類與接口的區別?

1)接口是抽象類的變體,接口中全部的方法都是抽象的,而抽象類容許含有普通方法;2接口能夠多繼承,抽象類不行,只能單繼承;3抽象類能夠有本身的成員變量,而接口只能有static final類型的成員變量;4abstract class表示的是"is-a"關係,interface表示的是"like-a"關係。 5.接口中的方法默認都是 public,abstract 類型的。

 

53.==equals的區別?何時須要重寫equals方法?

==是應用對象的地址相等,而equals是值相等。隊醫基本數據類型,==也是比較值是否相等。

默認equals在比較兩個對象時,是看他們是否指向同一個地址的。
但有時,咱們但願兩個對象只要是某些屬性相同就認爲他們的qualstrue。好比:
Student s1 = new Student(1,"name1");
Student s2 = new Student(1,"name1");
若是不重寫equals的話,他們是不相同的,因此咱們要重些equals,判斷只要他們的id和名字相同equals就爲true,在一些集合裏有時也這樣用,集合裏的contain也是用equals來比較

54.熟練掌握一下算法與數據結構知識:

1)二叉樹的生成,遍歷、深度、層數、求第K曾的節點數、求節點所在的層數、求兩節點的公告最低父節點;

2)鏈表的生成、插入、刪除、查找;

3)線性表的生成、插入、刪除、查找;

4)經常使用的排序法有哪些?代碼實現;

直接插入排序、希爾排序、快速排序、冒泡法、選擇法、堆排序。

55.什麼是內部類?Nest ClassInner Class的區別?

nest class就是static inner class,而inner class就是no-static inner class。可見用inner class能夠模擬closure的特性,就是運行時定義class的某些狀態。inner class和nest class之間的區別就是後者是靜態類。前者必須經過wrap class的實例來調用new,e.g. new Test().new innerClass。由於nest class是靜態類,因此能夠添加static member 或者static method,而inner class 不行。匿名內部類是inner class的一種特殊形式,因此也不能添加static member 或者static method。

56.Java面向對象的特性有哪些?分別說明;

封裝:一個類繼承另外一個類,則稱繼承的類爲子類,被繼承的類爲父類。繼承後子類自動擁有了父類的屬性和方法,但特別注意的是,父類的私有屬性和構造方法並不能被繼承。
另外子類能夠寫本身特有的屬性和方法,目的是實現功能的擴展,子類也能夠複寫父類的方法即方法的重寫。

繼承:封裝也稱爲信息隱藏,是指利用抽象數據類型將數據和基於數據的操做封裝在一塊兒,使其構成一個不可分割的獨立實體,數據被保護在抽象數據類型的內部,儘量地隱藏內部的細節,只
保留一些對外接口使之與外部發生聯繫。系統的其餘部分只有經過包裹在數據外面的被受權的操做來與這個抽象數據類型交流與交互。也就是說,用戶無需知道對象內部方法的實現細節,但能夠根據對象提供的外部接口(對象名和參數)訪問該對象。

多態:相同的事物,調用其相同的方法,參數也相同時,但表現的行爲卻不一樣。對象的方法在實例時不能明確是哪一個方法,須要到具體運行時才能知道調用的哪一個方法。

57.Sleepwait的異同?

Sleep不釋放鎖;wait釋放鎖,等到notifynotifyall喚醒。sleep(milliseconds)能夠用時間指定來使他自動醒過來,若是時間不到你只能調用interreput()來強行打斷;wait()能夠用notify()直接喚起. sleep是Thread類的靜態方 法。wait是Object的方法sleep()是讓某個線程暫停運行一段時間,其控制範圍是由當前線程決定wait()是由某個肯定的對象來調用的。

sleep和wait的區別有:

1,這兩個方法來自不一樣的類分別是Thread和Object;2,最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其餘線程能夠使用同步控制塊或者方法。;3,wait,notify和notifyAll只能在同步 控制方法或者同步控 制塊裏面使用,而sleep能夠在;任何地方使用synchronized(x){x.notify()//或者wait()}4,sleep必須捕獲異常,而wait,notify和notifyAll不須要捕獲異常

58.關於相關、依賴、聚合的概念;

依賴(Dependency)關係是類與類之間的聯接。依賴關係表示一個類依賴於另外一個類的定義。例如,一我的(Person)能夠買車(car)和房子(House),Person類依賴於Car類和House類的定義,由於Person類引用了Car和House。與關 聯不一樣的是,Person類裏並無Car和House類型的屬性,Car和House的實例是以參量的方式傳入到buy()方法中去的。通常而言,依賴關係在Java語言中體現爲局域變量、方法的形參,或者對靜態方法的調用。

關聯(Association)關係是類與類之間的聯接,它使一個類知道另外一個類的屬性和方法。關聯能夠是雙向的,也能夠是單向的。在Java語言中,關聯關係通常使用成員變量來實現。

聚合(Aggregation) 關係是關聯關係的一種,是強的關聯關係。聚合是總體和個體之間的關係。例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關係便總體和個體的關係。與關聯關係同樣,聚合關係也是經過實例變量實現 的。可是關聯關係所涉及的兩個類是處在同一層次上的,而在聚合關係中,兩個類是處在不平等層次上的,一個表明總體,另外一個表明部分。

組合(Composition) 關係是關聯關係的一種,是比聚合關係強的關係。它要求普通的聚合關係中表明總體的對象負責表明部分對象的生命週期,組合關係是不能共享的。表明總體的對象須要負責保持部分對象和存活,在一些狀況下將 負責表明部分的對象湮滅掉。表明總體的對象能夠將表明部分的對象傳遞給另外一個對象,由後者負責此對象的生命週期。換言之,表明部分的對象在每個時刻只能與一個對象發生組合關係,由後者排他地負責生命週期。部分和總體 的生命週期同樣。

59.設計4個線程、兩個遞增、兩個遞減(代碼實現);

60.UML瞭解不?如何畫?

61.經常使用的設計模式有哪些?

單例模式、觀察者模式、工廠模式等。

62.堆內存與棧內存?

堆內存:new建立出來的對象;垃圾回收器管理;動態分配內存,存取速度慢;

棧內存:基本類型的變量和對象的引用;超過變量做用域釋放;取速度快,僅次於寄存器,二者都是java用來在ram存數據的地方。

63.什麼是sdkadt

    Sdksoftware development kit,軟件開發包。SDK是一些公司針對某一項技術爲軟件開發人員製做的一套輔助開發或者減小開發週期的工具。一般包含對應的jar包以及說明文檔。

Adtandroid development tool,安卓開發工具。

64.ERRORException的區別?

    error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。 

    exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。

65.運行時異常與普通異常,常見的異常有哪些?

     普通異常又叫作checked 異常,也就是咱們常常遇到的IO異常,以及SQL異常都是這種異常。對於這種異常,JAVA編譯器強制要求咱們必需對出現的這些異常進行catch。因此,面對這種異常無論咱們是否願意,只能本身去寫一大堆catch塊去處理可能的異常。 

運行時異常,咱們能夠不處理。當出現這樣的異常時,老是由虛擬機接管。好比:咱們歷來沒有人去處理過NullPointerException異常,它就是運行時異常,而且這種異常仍是最多見的異常之一。 
    出現運行時異常後,系統會把異常一直往上層拋,一直遇處處理代碼。若是沒有處理塊,到最上層,若是是多線程就由Thread.run()拋出,若是是單線程就被main()拋出。拋出以後,若是是線程,這個線程也就退出了。若是是主程序拋出的異常,那麼這整個程序也就退出了。運行時異常是Exception的子類,也有通常異常的特色,是能夠被Catch塊處理的。只不過每每咱們不對他處理罷了。也就是說,你若是不對運行時異常進行處理,那麼出現運行時異常以後,要麼是線程停止,要麼是主程序終止。若是不想終止,則必須撲捉全部的運行時異常,決不讓這個處理線程退出。隊列裏面出現異常數據了,正常的處理應該是把異常數據捨棄,而後記錄日誌。不該該因爲異常數據而影響下面對正常數據的處理。在這個場景這樣處理多是一個比較好的應用,但並不表明在全部的場景你都應該如此。若是在其它場景,遇到了一些錯誤,若是退出程序比較好,這時你就能夠不太理會運行時異常,或者是經過對異常的處理顯式的控制程序退出。

 

66.Try-catch-finally的執行,含有return的執行過程?

try中沒有異常的狀況下trycatchfinally的執行順序 try --- finally

若是try中有異常,執行順序是try --- catch --- finally

若是try中沒有異常而且try中有return這時候正常執行順序是try ---- finally --- return

若是try中有異常而且try中有return這時候正常執行順序是try----catch---finally--- return

總之 finally 永遠執行!

try-catch-finally裏都沒有return finally 以後有個return ,若是try中有異常,finally執行完後,還能執行return嗎?那是不可能執行的了,try中有異常之後,根據java的異常機制先執行catch後執行finally,此時錯誤異常已經拋出,程序因異常而終止,因此你的return是不會執行的。

67.&&&|||的區別?

&按位與:兩邊是數字時進行按位與運算,當兩邊是bool類型時執行與運算,判斷左右表達式的真假;

&&邏輯與:當左邊爲假時,右邊再也不執行;

|按位或:兩邊是數字時進行按位或運算,當兩邊是bool型或表達式時執行或運算,判斷左右表達式的真假;

||邏輯或:當左邊爲真時,右邊再也不計算。

68.StringstringBufferStringBuilder的區別?

String:字符串常量,定義爲final類型,不能改變其值,在每次對 String 類型進行改變的時候其實都等同於生成了一個新的 String 對象,而後將指針指向新的 String 對象,因此常常改變內容的字符串最好不要用 String ,由於每次生成對象都會對系統性能產生影響,特別當內存中無引用對象多了之後, JVM 的 GC 就會開始工做,那速度是必定會至關慢的。

StringBuffer:字符串變量,線程安全的,每次結果都會對 StringBuffer 對象自己進行操做,而不是生成新的對象,再改變對象引用。因此在通常狀況下咱們推薦使用 StringBuffer ,特別是字符串對象常常改變的狀況下。可是常量相加的時候仍是推薦使用String,對象相加的時候推薦StringBuffer

StringBuilder:與StringBuffer相似,字符串變量,非線程安全的。

69.Xml的解析方式及區別?

XML如今已經成爲一種通用的數據交換格式,它的平臺無關性,語言無關性,系統無關性,給數據集成與交互帶來了極大的方便。

解析方式:SAX和DOM

SAX:事件驅動。當解析器發現元素開始、元素結束、文本、文檔的開始或結束等時,發送事件,程序員編寫響應這些事件的代碼,保存數據。優勢:不用事先調入整個文檔,佔用資源少;SAX解析器代碼比DOM解析器代碼小,適於Applet,下載。缺點:不是持久的;事件事後,若沒保存數據,那麼數據就丟了;無狀態性;從事件中只能獲得文本,但不知該文本屬於哪一個元素;使用場合:Applet;只需XML文檔的少許內容,不多回頭訪問;機器內存少;

DOM:解析器讀入整個文檔,而後構建一個駐留內存的樹結構,而後代碼就能夠使用 DOM 接口來操做這個樹結構。優勢:整個文檔樹在內存中,便於操做;支持刪除、修改、從新排列等多種功能;缺點:將整個文檔調入內存(包括無用的節點),浪費時間和空間;使用場合:一旦解析了文檔還需屢次訪問這些數據;硬件資源充足(內存、CPU)。 

70.Mysql的基本語句使用,連表查詢?

建立一個數據庫表:CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));

顯示錶的結構:DESCRIBE MYTABLE;

往表中加入記錄:insert into MYTABLE values (」hyq」,」M」);

刪除表:drop TABLE MYTABLE;

清空表:delete from MYTABLE;

更新表中數據:update MYTABLE set sex=」f」 where name=’hyq’;

連表查詢:select * from table a as a ,table b as b where a.cc=b.cc

71.JSP包含哪些?

一、request對象 客戶端請求,此請求會包含來自GET/POST請求的參數經過它才能了                   解到客戶的需求,而後作出響應。

        二、response對象 響應客戶請求的有關信息

三、session對象 它指的是客戶端與服務器的一次會話,從客戶端連到服務器的一個      WebApplication開始,直到客戶端與服務       器斷開鏈接爲止。

       四、out對象   它是JspWriter類的實例,是向客戶端輸出內容經常使用的對象

五、page對象   它是指向當前JSP頁面自己,有點象類中的this指針,它是 java.lang.Object類的實例

六、application對象 它實現了用戶間數據的共享,可存放全局變量。它開始於服務器的啓動,直到服務器的關閉

七、exception對象 它是一個例外對象,當一個頁面在運行過程當中發生了例外,就產生這個對象。

       八、pageContext對象 它提供了對JSP頁面內全部的對象及名字空間的訪問

       九、config對象 它是在一個Servlet初始化時,JSP引擎向它傳遞信息用的 

72.Servlet的生命週期;

1)初始化階段  調用init()方法

2)響應客戶請求階段  調用service()方法

3)終止階段  調用destroy()方法

73.androidManifest中含有那些東西?

權限、包名、版本號、四大組件等。

74.Contentvalues存放數據的格式?

key-value的方式存儲,其中keyString類型,value可爲基本數據類型和String

75.android動畫的分類有哪些、特色及區別?

有兩種:TweenFrame

Tween這種實現方式能夠使視圖組件移動、放大、縮小以及產生透明度的變化;在xml文件中:alphaAlphaAnimation;ScaleScaleAnimation

Frame傳統的動畫方法,經過順序的播放排列好的圖片來實現,相似電影。Zaixml文件中:translateTranslateAnimationrotateRoateAnimation

76.Android的五中佈局方式?

LinearLayout:線性佈局;

RelativeLayout:相對佈局;

AbsolutelyLayout:絕對佈局;

FrameLayout:幀佈局;

TableLayout:表格佈局。

77.Java的基本數據類型有哪些?

Intfloatdoublecharbytelongshortboolean

78.Androiddvm進程與linux進程的是一個概念嗎?

    DVMdalivk的虛擬機。每個Android應用程序都在它本身的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每個DVM都是在Linux 中的一個進程,因此說能夠認爲是同一個概念。

79.Android工程的結構,分別含有什麼?

Src--源代碼

Lib--庫文件

Gen--自動生成的文件,R文件,資源索引

Res--資源文件:raw:原始文件,如MP3文件、視頻文件等;drawable:圖片文件;layout:佈局文件;values:字符串文件等;

androidManifest:清單文件,包含權限、四大組件的申明等。

80.java.io包中的objectinputstreamobjectoutputstream類;

用於從底層輸入流中讀取對象類型的數據和對象類型的數據寫入到底層輸出流。將對象中全部成員變量的取值保存起來就等於保存了對象,將對象中全部成員變量的取值還原就相等於讀取了對象。 所讀寫的對象必須實現了Serializable接口

81.JavaIO流;

包括字節流和字符流。

字節流:InputStream OutputStream;字符流處理的單元爲2個字節的Unicode字符,分別操做字符、字符數組或字符串;若是是音頻文件、圖片、歌曲,就用字節流好點;字節流轉換成字符流能夠用 InputSteamReader OutputStreamWriter,並轉換成BufferdReader BufferedWriter 他們具備緩衝區

字符流:Reader Writer ;處理單元爲1個字節,操做字節和字節數組;若是是關係到中文(文本)的,用字符流.

82.重載與複寫的區別?

    重載:方法名稱相同,參數的個數或者類型不一樣;發生在同一個類中;

    重寫:方法名稱相同,參數的個數和類型相同,方法體不一樣;發生在繼承關係中,是由子類進行復寫

  1. 請使用命令行的方式建立一個名字爲myAvd,sdk版本爲2.2,sd卡是在d盤的根目錄下,名字爲scard.img,並指定屏幕大小HVGA

84.Androidjni的調用過程?

1)安裝和下載Cygwin,下載 Android NDK;

2)在ndk項目中JNI接口的設計;

3)使用C/C++實現本地方法;

4)JNI生成動態連接庫.so文件;

5)將動態連接庫複製到java工程,在java工程中調用,運行java工程便可.

85.請繼承SQLiteOpenHelper實現:

建立一個版本爲1的「diaryOpenHelper.db」的數據庫,.同時建立一個 「diary」 表(包含一個_id主鍵並自增加,topic字符型100長度, content字符型1000長度);.在數據庫版本變化時請刪除diary表,並 從新建立出diary表。

86.頁面上現有ProgressBar控件progressBar,請用書寫線程以10秒的的時間完成其進度顯示工做。

87.如何捕獲ANR異常?如何定位?

 

88.設計一個應用節約電量?

1)service是後臺服務,長期存在會比較耗內存,也會耗電量,所以儘可能關閉沒必要要的後臺服務;

2)算法上進行優化,減小運算複雜度;

3)設置應用長期不觸碰讓屏幕變暗以節省電量。

89.你是如何解決問題的,常看哪些書、上哪些網站?

90.請解釋下Android程序運行時權限與文件系統權限的區別。

運行時權限是Dalvik( android受權) ;文件系統 是linux 內核受權。

91.系統上安裝了多種瀏覽器,可否指定某瀏覽器訪問指定頁面?

能夠,經過intent實現。具體以下:

Intent intent = new Intent();  intent.setAction("android.intent.action.VIEW");

Uri content_url = Uri.parse("http://www.163.com");

intent.setData(content_url);
  intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");
startActivity(intent); 

  1. 你如何評價Android系統?

優勢:

1)開源特性,獲得衆多廠商及軟件開發者的支持;

2)無縫結合的Google應用

3)自由性極高的Android將會讓咱們更加的接近網絡化,而讓咱們不要再爲花費煩擾,這裏主要說的是經過軟件咱們能夠實現各類各樣的網絡會話,而不是長途,漫遊。

4)減小運營商的束縛。

 缺點:

1)安全和隱私:因爲手機與互聯網的緊密聯繫,我的隱私很可貴到保守。除了上網過程當中經意或不經意留下的我的足跡,Google這個巨人也時時站在你的身後,洞穿一切,所以,互聯網的深刻將會帶來新一輪的隱私危機。

2)首先開賣Android手機的不是最大運營商;

3)運營商仍然可以影響到Android手機

4)同類機型用戶減小;

5)過度依賴開發商缺乏標準配置。

93.你認爲android將來的發展趨勢,前景如何?(本身總結回答)

1)市場足夠大,Android這幾年的發展可謂有目共睹,就像前面所說,天天的設備激活數目就達到了50萬臺

2)有足夠多的大公司參與其中,或者成就了一些公司:除了Google自己外,Motorola移動、HTC,前者借Android鹹魚翻身,後者借Android成了市值超越Nokia的公司。

3)開放平臺取代了封閉平臺。讓參與者均能經過本身的努力而得到利益。

  1. 什麼狀況會致使Force Close ?如何避免?可否捕獲致使其的異常?

程序出現異常,好比nullpointer避免:編寫程序時邏輯連貫,思惟縝密。能捕獲異常,在logcat中能看到異常信息

95.程序調試方式?

1)斷點Debug:在須要調試的地方加上斷點,F11運行程序,F5逐句調試,F6略過方法,F7逐句進入方法後退出,ctrl+R運行到光標處,F8斷點運行到結束。

2)Logcat:在代碼中經過Log.i;Log.v等標記打印的數據,在LogCat中對應能夠查看;另外也能夠在Logcat中建立過濾器,Log cat->create filter->設置Filter Nameby tab name

3)Adb:經過鏈接手機或者模擬器進行調試,虛擬機的調試能夠經過DDMS調試監控服務;

4)traceView:跟蹤並報告程序運行過程當中的全部方法調用和每一個方法的耗時。

96.Android自己的api並未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會致使什麼問題?如何解決?

會,好比nullpointerException。我遇到過,好比textview.setText()時,textview沒有初始化。會致使程序沒法正常運行出現forceclose。打開控制檯查看logcat信息找出異常信息並修改程序。

97.Intentintentfilter的區別?

Intent是一種在不一樣組件之間傳遞的請求消息,是應用程序發出的請求和意圖。做爲一個完整的消息傳遞機制,Intent不只須要發送端,還須要接收端。

IntentFilter類表示Intent過濾器大部分狀況下每個component都會定義一個或多個IntentFilter, 用於代表其可處理的Intent.通常來講, componentIntentFilter應該在AndroidManifest.xml文件中定義。定義的方法<activity>, <receiver>, <service>元素中增長一個或多個<intent-filter>子元素.

Intent分爲顯示Intent(明確指定了目標組件名稱的Intent,顯式Intent更多用於在應用程序內部傳遞消息 )和隱式Intent沒有明確指出目標組件名稱的Intent,經過intent-filter 來尋找與隱式Intent相關的對象,它不會用組件名稱定義須要激活的目標組件,它更普遍地用於在不一樣應用程序之間傳遞消息 )。一個聲明瞭IntentFilter的組件既能夠響應顯式Intent請求,也能夠響應隱式Intent請求。在經過和 IntentFilter比較來解析隱式Intent請求時,Android將如下三個因素做爲選擇的參考標準。

Action:action屬性是一個字符串表明某一種特定的動做. Intent類預約義了一些action常量開發者也能夠自定義action. 通常來講自定義的action應該以application的包名做爲前綴而後附加特定的大寫字符串例如"cn.xing.upload.action.UPLOAD_COMPLETE"就是一個命名良好的action.

Data:data屬性指定所操做數據的URI. data常常與action配合使用若是actionACTION_EDIT, data的值應該指明被編輯文檔的URI; 若是actionACTION_CALL, data的值應該是一個以"tel:"開頭並在其後附加號碼的URI; 若是actionACTION_VIEW, data的值應該是一個以"http: "開頭並在其後附加網址的URI...

Category:category屬性也是一個字符串, 用於指定一些目標組件須要知足的額外條件. 

98.如何將打開res aw目錄中的數據庫文件

Android中不能直接打開res aw目錄中的數據庫文件,而須要在程序第一次啓動時將該文件複製到手機內存或SD卡的某個目錄中,而後再打開該數據庫文件。複製的基本方法是使用getResources().openRawResource方法得到res aw目錄中資源的 InputStream對象,而後將該InputStream對象中的數據寫入其餘的目錄中  相應文件中。在Android SDK中能夠使用SQLiteDatabase.openOrCreateDatabase方法來打開任 意目錄中的SQLite數據庫文件

99.sim卡的EF 文件有何做用 

SIM卡里的全部文件按樹來組織:
主文件MF(Master File)——每一塊SIM卡只有一個惟一的主文件其餘全部文件都是它的子孫主文件只有文件頭,裏面存放着整個SIM卡的控制和管理信息
專用文件DF(Dedicated File)——也是隻有一個文件頭裏面存放着整個目錄的管理控制信息專用文件至關於一個目錄的根.
基本文件EF(Elementary File)——既有文件頭,也有文件體文件頭存放該文件的位置和控制信息文件體存放真正的數據整個SIM卡中只有基本文件有文件體也只有基本文件才用來存放數據.

sim卡的文件系統有本身規範,主要是爲了和手機通信,sim本 身能夠有本身的操做系統,EF就是做存儲並和手機通信用的

100.Android引入廣播機制的用意

1)從MVC的角度考慮(應用程序內)其實回答這個問題的時候還能夠這樣問,android爲何要有那4大組件,如今的移動開發模型基本上也是照搬的web那一套MVC架構,只不過是改了點嫁妝而已。android的四大組件本質上就是爲了實現移動或者說嵌入式設備上的MVC架構,它們之間有時候是一種相互依存的關係,有時候又是一種補充關係,引入廣播機制能夠方便幾大組件的信息和數據交互;

2)程序間互通消息(例如在本身的應用程序內監_聽系統來電);

3)效率上(參考UDP的廣播協議在局域網的方便性);

4)設計模式上(反轉控制的一種應用,相似監_聽者模式)。

101.嵌入式操做系統內存管理有哪幾種,各有何特性 

什麼是嵌入式實時操做系統, Android 操做系統屬於實時操做系統嗎

嵌入式實時操做系統是指當外界事件或數據產生時,可以接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間以內來控制生產過程或對處理系統做出快速響應,並控制全部實時任務協調一致運行的嵌入式操做系統。主要 用於工業控制、 軍事設備、 航空航天等領域對系統的響應時間有苛刻的要求,這就須要使用實時系統。又可分爲軟實時和硬實時兩種,而android是基於linux內核的,所以屬於軟實時。

102.一條最長的短信息約佔多少byte? 

中文70(包括標點),英文160,160個字節

103.說說mvc模式的原理,它在android中的運用 

mvcmodel-view-controller。

Model應用程序的主體部分,全部的業務邏輯都應該寫在該層。

View是應用程序中負責生成用戶界面的部分。也是在整個mvc架構中用戶惟一能夠看到的一層,接收用戶的輸入,顯示處理結果。

Controller是根據用戶的輸入,控制用戶界面數據顯示及更新model對象狀態的部分,控制器更重要的一種導航功能,用戶出發的相關事件,交給model處理。

Androidmvc

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

View(視圖層):通常採用xml文件進行界面的描述,使用的時候能夠很是方便的引入,固然,如何你對android瞭解的比較的多了話,就必定 能夠想到在android中也能夠使用javascript+html等的方式做爲view層,固然這裏須要進行javajavascript之間的通 信,幸運的是,android提供了它們之間很是方便的通訊實現。

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

  1. DDMSTraceView的區別

DDMS是一個程序執行查看器,在裏面能夠看見線程和堆棧等信息,TraceView是程序性能分析器。

105.java中如何引用本地語言

經過JNI實現本地C語言的調用。本地方法是以庫文件的形式存放的(在WINDOWS平臺上是DLL文件形式,在UNIX機器上是SO文件形式)。經過調用本地的庫文件的內部方法,使JAVA能夠實現和本地機器的緊密聯繫,調用系統級的各接口方法。在JAVA程序中,首先須要在類中聲明所調用的庫名稱,以下:

static {

       System.loadLibrary(goodluck);

}

還須要對將要調用的方法作本地聲明,關鍵字爲native。而且只須要聲明,而不須要具體實現。以下:

public native static void set(int i);

public native static int get();

而後編譯該JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就會生成C/C++的頭文件。

106.談談Android進程間通訊有哪些:

contentProvider:不一樣應用間數據的共享;

Intent:在四大組件中來去自如,能夠實現不一樣進程間的通訊;

BroadcastReceiver:一旦註冊、能夠接受不一樣進程間的消息,也算進程通訊的一種;

Service:服務能夠控制其餘應用的一些事件,也算進程間通訊;

Activity:不一樣activity之間的通訊;

遠程調用:客戶端調用服務端應用,屬於進程調用的典型;

IBinderBinder是一種進程間通訊機制,它是一種相似於COMCORBA分佈式組件架構,通俗一點,實際上是提供遠程過程調用(RPC)功能。在Android系統的Binder機制中,由一系統組件組成,分別是ClientServerService  ManagerBinder驅動程序,其中ClientServerService Manager運行在用戶空間,Binder驅動程序運行內核空間。Binder就是一種把這四個組件粘合在一塊兒的粘結劑了,其中,核心組件即是Binder驅動程序了,Service Manager 提供了輔助管理的功能,ClientServer正是在Binder驅動和Service Manager提供的基礎設施上,進行Client-Server之間的通訊。

107.Activityservice屬於同一進程嗎?是同一線程嗎?

同一個包內的activityservice,若是service沒有設定屬性android:process=":remote"的話,service會和activity跑在同一個進程中,因爲一個進程只有一個UI線程,因此,serviceacitivity就是在同一個線程裏面的。所以耗時 的操做必須在service中新開線程而不能直接放在service中。android:process=":remote"值得注意他的用法!!!若是Activity想訪問service中的對象或方法,若是service設定屬性android:process=":remote",那麼就是跨進程訪 問,跨進程訪問容易出現意想不到的問題,仍是慎重給service 設定屬性android:process=":remote"

108.View, surfaceView, GLSurfaceView有什麼區別

1)view是最基礎的,必須在UI主線程內更新畫面,速度較慢。

2)SurfaceView view的子類,相似使用雙緩機制,在新的線程中更新畫面因此刷新界面速度比view快

3)GLSurfaceView SurfaceView的子類,opengl 專用的

109.本身的理解描述下Android數字簽名。

(1)全部的應用程序都必須有數字證書,Android系統不會安裝一個沒有數字證書的應用程序;

(2)Android程序包使用的數字證書能夠是自簽名的,不須要一個權威的數字證書機構簽名認證;

(3)若是要正式發佈一個Android程序,必須使用一個合適的私鑰生成的數字證書來給程序簽名,而不能使用adt插件或者ant工具生成的調試證書來發布。

(4)數字證書都是有有效期的,Android只是在應用程序安裝的時候纔會檢查證書的有效期。若是程序已經安裝在系統中,即便證書過時也不會影響程序的正常功能。

110.Gravitylayout_grivaty的區別?

Gravity相對於元素自己來講所處的位置;

Layout_gravity相對於父元素來講,處於父元素的什麼位置。

111.DalvikJVM的區別:

(5)基於的平臺不一樣:dalvik基於寄存器,JVM基於棧;

(6)運行環境不一樣:在有限的內存中,容許同時運行多個davlik實例,而且每個Dalvik應用做爲一個獨立的Linux進程執行。 JVM只能運行一個JVM實例,因平臺的不一致進程也不一致;

(7)運行語言:Dalvik能夠運行不一樣的語言,如javaScalaJVM能夠運行不一樣的語言,如javaPython語言

(8)運行格式不一樣:JVM通常是.classDalvik.dexKVM通常是.class 

(9)編寫語言:Dalvik是通常由CC++編寫,JVM通常是C++java編寫,KVM通常是CC++ 

(10)效率不一樣:Dalvik是基於寄存器因此效率高於基於棧的JVMKVM 加載函數不一樣:DalvikDexfile加載class類文件,JVMKVMClassLoader 

112.Socket通訊編程:

Socket一般也稱做"套接字",用於描述IP地址和端口,是一個通訊鏈的句柄。在Internet上的主機通常運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個Socket,並綁定到一個端口上,不一樣的端口對應於不一樣的服務。 網絡上的兩個程序經過一個雙向的通信鏈接實現數據的交換,這個雙向鏈路的一端稱爲一個Socket。Socket一般用來實現客戶方和服務方的鏈接。Socket是TCP/IP協議的一個十分流行的編程界面,一個Socket由一個IP地址 和一個端口號惟一肯定。在java中,Socket和ServerSocket類庫位於java .net包中。ServerSocket用於服務器端,Socket是創建網絡鏈接時使用的。在鏈接成功時,應用程序兩端都會產生一個Socket實例,操做這個實例, 完成所需的會話。

服務端:1)建立一個ServerSocket,用於監聽客戶端Socket的鏈接請求 :實例ServerSocket:ServerSocket server = new ServerSocket(PORT); 

    2)採用循環不斷接受來自客戶端的請求:經過server .accept()返回一個對應客戶端的socket;socket.getOutputStream()得到傳給客戶端的輸出流;

客戶端:實例socket:Socket socket = new Socket(HOST, PORT);經過socket.getInputStream()得到服務端的輸入流。

113.雙緩衝技術原理以及優缺點:

建立一幅後臺圖像,將每一幀畫入圖像,而後調用drawImage()方法將整個後臺圖像一次畫到屏幕上去。

優勢:雙緩衝技術的優勢在於大部分繪製是離屏的。

        將離屏圖像一次繪至屏幕上,比直接在屏幕上繪製要有效得多。

        雙緩衝技術能夠使動畫平滑。

缺點:要分配一個後臺圖像的緩衝,若是圖像至關大,這將佔用很大一塊內存。

114.Selector的使用方式:

selector是在文件夾drawable中進行定義的xml文件。主要是用來描述控件不一樣狀態時的效果。它主要定義控件在下pressedselectedfocused及日常狀態下的屬性。

越前面定義的狀態,其優先級越高。對定得某個狀態,若是某個屬性沒有顯示說明,則表示此時該屬性爲任意值,都不要緊。

115.能說一下java的反射(reflection)機制嗎

Java運行時環境中,對於任意一個類,可否知道這個類中有哪些屬性和方法?對於任意一個對象,可否調用它的任意一個方法?答案是確定的,這種動態獲取類的信息以及動態調用對象的方法的功能來自java反射機制。

反射提供的功能:1)在運行時判斷任意一個對象所屬的類;2)在運行時任意構造一個類的對象;3)在運行時任意判斷一個類所具備的成員變量和方法;4)在運行時調用任意一個對象的方法。

相關文章
相關標籤/搜索