android面試攻略(4)

43.  下面異常是屬於Runtime Exception 的是(abcd)(多選) 

       A、ArithmeticException

       B、IllegalArgumentException

       C、NullPointerException

       D、BufferUnderflowException

44.  Math.round(11.5)等於多少(). Math.round(-11.5)等於多少(c)

       A、11 ,-11  

       B、11 ,-12   

       C、12 ,-11  

       D、12 ,-12

解答:

Math類中提供了三個與取整有關的方法:ceilfloorround,這些方法的作用與它們的英文名稱的含義相對應,例如,ceil的英文意義是天花板,該方法就表示向上取整,所以,Math.ceil(11.3)的結果爲12,Math.ceil(-11.3)的結果是-11floor的英文意義是地板,該方法就表示向下取整,所以,Math.floor(11.6)的結果爲11,Math.floor(-11.6)的結果是-12;最難掌握的是round方法,它表示“四捨五入”,算法爲Math.floor(x+0.5),即將原來的數字加上0.5後再向下取整,所以,Math.round(11.5)的結果爲12,Math.round(-11.5)的結果爲-11。

45. 下列程序段的輸出結果是:(b )

  void complicatedexpression_r(){

     int x=20, y=30;

     boolean b;

     b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;

     System.out.println(b);

     }

   A、true   B、false   C、1   D、0

46. Intent傳遞數據時,下列的數據類型哪些可以被傳遞(abcd)(多選)   
A、Serializable  B、charsequence  C、Parcelable  D、Bundle

47. 在android中使用Menu時可能需要重寫的方法有(ac)。(多選)

      A、onCreateOptionsMenu()

      B、onCreateMenu()

      C、onOptionsItemSelected()

      D、onItemSelected()

48. 下面是屬於GLSurFaceView特性的是(abc)(多選)

      A、管理一個surface,這個surface就是一塊特殊的內存,能直接排版到android的視圖

    view上。

      B、管理一個EGL display,它能讓opengl把內容渲染到上述的surface上。

      C、讓渲染器在獨立的線程裏運作,和UI線程分離。

      D、可以直接從內存或者DMA等硬件接口取得圖像數據

49. 關於ContenValues類說法正確的是(a) 

      A、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的

        名是String類型,而值都是基本類型

      B、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的

        名是任意類型,而值都是基本類型

      C、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的

        名,可以爲空,而值都是String類型    

      D、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中

        的名是String類型,而值也是String類型


50. 下面退出Activity錯誤的方法是(c)   
      A、finish()

      B、拋異常強制退出

      C、System.exit()

      D、onStop()


51. 下面關於Android dvm的進程和Linux的進程,應用程序的進程說法正確的是(d)    

      A、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,不一定擁有一個獨立 的Dalvik虛擬機實例.而每一個DVM都是在Linux中的一個進程,所以說可以認爲是同一個概念.

      B、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,不一定擁有一個獨立的Dalvik虛擬機實例.而每一個DVM不一定都是在Linux 中的一個進程,所以說不是一個概念.

      C、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例.而每一個DVM不一定都是在Linux 中的一個進程,所以說不是一個概念.

      D、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的 Dalvik虛擬機實例.而每一個DVM都是在Linux 中的一個進程,所以說可以認爲是同一個概念.


52. 下列對android NDK的理解正確的是(abcd )

      A、 NDK是一系列工具的集合

      B、 NDK 提供了一份穩定、功能有限的 API 頭文件聲明。

      C、 使 “Java+C” 的開發方式終於轉正,成爲官方支持的開發方式

      D、 NDK 將是 Android 平臺支持 C 開發的開端


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

  1. publicclass ProgressBarStu extends Activity {  
  2.        private ProgressBar progressBar = null;  
  3.        protected void onCreate(BundlesavedInstanceState) {  
  4.               super.onCreate(savedInstanceState);  
  5.               setContentView(R.layout.progressbar);  
  6.   
  7.               progressBar = (ProgressBar)findViewById(R.id.progressBar);  
  8.               Thread thread = new Thread(newRunnable() {        
  9.                      @Override  
  10.                      public void run() {  
  11.                             int progressBarMax =progressBar.getMax();  
  12.                             try {                                  
  13.                                    while(progressBarMax!=progressBar.getProgress())  
  14.                                    {  
  15.                                        int  stepProgress =progressBarMax/10;                              
  16.                                        int  currentprogress = progressBar.getProgress();                                        
  17.                                        progressBar.setProgress(currentprogress+stepProgress);                                          
  18.                                        Thread.sleep(1000);                                 
  19. }                                
  20.                             } catch(InterruptedException e) {  
  21.                              e.printStackTrace();  
  22.                             }  
  23.                      }  
  24.               });  
  25.               thread.start();  
  26.        }  
  27. }  

54. 在android中,請簡述jni的調用過程

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

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

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

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

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

55. 簡述Android應用程序結構是哪些?

  Android應用程序結構是:

  Linux Kernel(Linux內核)、Libraries(系統運行庫或者是c/c++核心庫)、Application Framework(開發框架包)、Applications  (核心應用程序)

56. 程序運行的結果是:(good and gbc)

  1. public classExample{  
  2.   String str=new String("good");  
  3.   char[]ch={'a','b','c'};  
  4.   public static void main(String args[]){  
  5.     Example ex=new Example();  
  6.     ex.change(ex.str,ex.ch);  
  7.     System.out.print(ex.str+" and ");  
  8.     Sytem.out.print(ex.ch);  
  9.   }  
  10.   
  11.    public void change(String str,char ch[]){  
  12.     str="test ok";  
  13.     ch[0]='g';  
  14.   }  

57.在SQL Server 2005中運行如下T-SQL語句,假定SALES表中有多行數據,執行查詢之 後的結果是(d)。

       BEGIN TRANSACTION A

  Update SALES Set qty=30 WHERE qty<30

  BEGIN TRANSACTION B

  Update SALES Set qty=40 WHEREqty<40

  Update SALES Set qty=50 WHEREqty<50

  Update SALES Set qty=60 WHEREqty<60

  COMMIT TRANSACTION B

  COMMIT TRANSACTION A

  A、SALES表中qty列最小值大於等於30

  B、SALES表中qty列最小值大於等於40

  C、SALES表中qty列的數據全部爲50

  D、SALES表中qty列最小值大於等於60

58.請繼承SQLiteOpenHelper實現:

       1).創建一個版本爲1的“diaryOpenHelper.db”的數據庫,

  2).同時創建一個 “diary” 表(包含一個_id主鍵並自增長,topic字符型100

  長度, content字符型1000長度)

  3).在數據庫版本變化時請刪除diary表,並重新創建出diary表。


  1.  publicclass DBHelper extends SQLiteOpenHelper{  
  2.   public final static String DATABASENAME ="diaryOpenHelper.db";  
  3.   public final static int DATABASEVERSION =1;  
  4.   
  5.    //創建數據庫  
  6.   public DBHelper(Context context,Stringname,CursorFactory factory,int version)  
  7.   {  
  8.   super(context, name, factory,version);  
  9.   }  
  10.   
  11.    //創建表等機構性文件  
  12.   public void onCreate(SQLiteDatabase db)  
  13.   {  
  14.   String sql ="create tablediary"+  
  15.   "("+  
  16.   "_idinteger primary key autoincrement,"+  
  17.   "topicvarchar(100),"+  
  18.   "contentvarchar(1000)"+  
  19.   ")";  
  20.   db.execSQL(sql);  
  21.   }  
  22.   
  23.    //若數據庫版本有更新,則調用此方法  
  24.   public void onUpgrade(SQLiteDatabasedb,int oldVersion,int newVersion)  
  25.   {  
  26.   String sql = "drop table ifexists diary";  
  27.   db.execSQL(sql);  
  28.   this.onCreate(db);  
  29.   }  
  30.   }  

59.java中 ==和equals的區別:

    值類型是存儲在內存中的堆棧(以後簡稱棧),而引用類型的變量在棧中僅僅是存儲引用類型變量的地址,而其本身則存儲在堆中。 ==操作比較的是兩個變量的值是否相等,對於引用型變量表示的是兩個變量在堆中存儲的地址是否相同,即棧中的內容是否相同。 equals操作表示的兩個變量是否是對同一個對象的引用,即堆中的內容是否相同。  ==比較的是2個對象的地址,而equals比較的是2個對象的內容。 顯然,當equals爲true時,==不一定爲true; 

60.android view繪製簡單描述
簡單描述可以解釋爲:計算大小(measure),佈局座標計算(layout),繪製到屏幕(draw);

           下面看看每一步的動作到底是什麼,

           第一步:當activity啓動的時候,觸發初始化view過程的是由Window對象的DecorView調用View(具體怎樣從xml中讀取是用LayoutInflater.from(context).inflate)對象的 public final void measure(int widthMeasureSpec, int heightMeasureSpec)方法開始的,這個方法是final類型的,也就是所有的子類都不能繼承該方法,保證android初始化view的原理不變。具體參數類值,後面會介紹。

           第二步:Viewmeasure方法 onMeasure(widthMeasureSpec, heightMeasureSpec),該方法進行實質性的view大小計算。注意:view的大小是有父view和自己的大小決定的,而不是單一決定的。這也就是爲什麼ViewGroup的子類會重新該方法,比如LinearLayout等。因爲他們要計算自己和子view的大小。View基類有自己的實現,只是設置大小。其實根據源碼來看,measure的過程本質上就是把Match_parentwrap_content轉換爲實際大小

            第三步:當measure結束時,回到DecorView,計算大小計算好了,那麼就開始佈局了,開始調用view public final void layout(int l, int t, int r, int b),該還是也是final類型的,目的和measure方法一樣。layout方法內部會調用onlayout(int l, int t, int r, int b )方法,二ViewGroup將此方法abstract的了,所以我們繼承ViewGroup的時候,需要重新該方法。該方法的本質是通過measure計算好的大小,計算出view在屏幕上的座標點

           第四步:measure過了,layout過了,那麼就要開始繪製到屏幕上了,所以開始調用view  public void draw(Canvas canvas)方法,此時方法不是final了,原因是程序員可以自己畫,內部會調用ondraw,我們經常需要重寫的方法。 簡單描述可以解釋爲:計算大小(measure),佈局座標計算(layout),繪製到屏幕(draw);

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