Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 安卓工程師筆試--2015--波導公司,安卓--2015--

安卓工程師筆試--2015--波導公司,安卓--2015--

編輯:關於android開發

安卓工程師筆試--2015--波導公司,安卓--2015--


1.在微型計算機中,采用中斷方式的優點之一是(C)

 

2.下列哪一項數據J2ME中所使用的虛擬機類型(C)

A.JVM  (java虛擬機)

B.DVM

C.CVM(or KVM)

D.Card VM

 

3.下列不屬於CLDC1.1核心類庫與J2SE核心類庫的主要區別是:(A)

A..不支持線程組或守護線程 

B.不支持浮點數據類型 

C.不支持弱引用 

D.有限的錯誤處理

 

4. 下列哪一個程序片段是在鏈表中間插入一個結點。(假設新結點為NEW,欲插入在 Pointer結點之後)(C) 

A.NEW->next=Pointer ;   Pointer=NEW        

B.NEW->next=Pointer->next ;  Pointer->next=NEW 

C.Pointer->next=NEW->next;  NEW->next=Pointer  

D.以上皆非

 

5.關於abstract抽象類描述正確的是:(A)

A.不能生成抽象的構造函數 

B.可以生成抽象的static方法 

C.允許生成private的抽象方法

D.以上描述都對  

 

6.一張png格式的圖片文件a.png,圖片寬70像素,高20像素,被用來創建Spirte,程序如下,下面描述正確的是:D

Image img;

try{ img = Image.createImage("/a.png");

}catch(Exception e){}

Sprite sprite = new Sprite(img,20,20); 

A.圖片被按照每塊寬20像素,高20像素的比例分割成三個畫面 

B.圖片被按照每塊寬20像素,高20像素的比例分割出一個畫面 

C.圖片被該Sprite所使用,並將該Sprite的圖像描繪到屏幕坐標(20,20)的位置上。

 D.出現異常 

 

7.下列方法中哪一個方法能實現在屏幕上描繪出一條虛線(其他部分程序代碼省略

 public void paint(Graphics g) 

g.setColor(255,255,255);

 g.fillRect(0,0, getWidth(), getHeight());

/* 代碼段A */

 g.setColor(255,0,0);

g.drawLine(20, 20, 100,20);

 /* 代碼段B */

 g.setColor(125, 125,125);

 g.drawLine(20,25,100,50);

 g.setStrokeStyle(Graphics.SOLID);

/* 代碼段C */ 

g.setColor(125, 125,125); 

g.drawLine(20,30,100,50);

 g.setStrokeStyle(Graphics.DOTTED);

/* 代碼段D */ 

g.setColor(255,255,255); 

g.drawLine(20,50,100,50); }

  A.代碼段A  B.代碼段B  C.代碼段C  D.代碼段D 

答案:C 

 

8. 藍牙和802.11b技術都屬於短程通訊技術,以下描述錯誤的是: ( D ) 

A. 藍牙和802.11b都是無線技術,並且都選用了2.4GHz的頻譜 

B. 802.11b主要是用來連接耗電的大型設備,如個人計算機及手提電腦等 

C. 藍牙主要是用來連接耗電極小的小型設備,如PDA和手機等等 

D. 藍牙技術的數據交流的速度達到11Mb/s,距離可達100米

 

9.以下是一個利用Timer類和TimerTask類實現線程的一個例子(其余代碼和類的設計省略),判斷下面代碼能實現什麼功能:(B )

      

       Timer timer = new Timer(); //生成一個Timer類的對象

       timerTask tT = new timerTask() ; //該類繼承了TimerTask類

       timer.schedule(tT, 100, 1000);

 

A. 程序啟動後等待1秒以後,每隔100毫秒運行一次TimerTask類的run()方法

B. 程序啟動後等待100毫秒以後,每隔1秒運行一次TimerTask類的run()方法

C. 程序啟動後等待10秒以後,每隔1000毫秒運行一次TimerTask類的run()方法

D. 程序啟動後等待1秒以後,每隔10秒運行一次TimerTask類的run()方法

 

10. 下列有關J2SE中有關方法的使用書寫正確的是__C__ 

A.g.getFont("SansSerif"); 用於獲取當前字體,不能帶參數

 B.g.erase(x,y,w,h); //清除位於(x,y)點的矩形

 C.Font f = new Font("serif",Font.BOLD,12);  

D.g.setColor(Color.Yellow); //將當前顏色設置為黃色 

 

11. J2ME體系架構包括  B

 A.Java語言、Java編輯器、Java虛擬機 

B.Configuration、Profile、可選包 

C.CLDC 、MIDP 、WMA 

D.CDC 、Profile、可選包

 

12.在Java中,創建線程的方法有(B D)多選

A.實現Run接口

B.實現Runnable接口

C.繼承Pocess類,實現run()方法

D.繼承Thread類,實現run()方法

 

13.D

 

14. 在MIDP中,代碼的同步主要包括如下哪些方法?( BC)  

 A.使用全局變量 

B.使用callSerially方法 

C.使用synchronized關鍵字,包括對單獨的語句或者整個方法或者對象

D.使用servicePaint方法

 

15. 操作系統具有進程管理、存儲管理、文件管理和設備管理的功能,在以下有關的描述中,哪一個是不正確的? (A )。
A.進程管理主要是對程序進行管理
B.存儲管理主要管理內存資源
C.文件管理可以有效地支持對文件的操作,解決文件的共享、保密和保護問題
D.設備管理是指計算機系統中除了CPU和內存以外的所有輸入輸出設備的管理

 

二、簡答題

1.什麼是同步和異步;兩者有何異同,舉例說明應用場合。5分

1如果數據將在線程間共享。例如正在寫的數據以後可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取。

當應用程序在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程序等待方法的返回時,就應該使用異步編程,在很多情況下采用異步途徑往往更有效率。

 

 

2.Android常用的五種布局,並簡單說明這幾種常用布局的特點。10分

2第二題 ,五種布局

一、 FrameLayout

這個布局可以看成是牆腳堆東西,有一個四方的矩形的左上角牆腳,我們放了第一個東西,要再放一個,那就在放在原來放的位置的上面,這樣依次的放,會蓋住原來的東西。這個布局比較簡單,也只能放一點比較簡單的東西。

 

二、 LinearLayout

線性布局,這個東西,從外框上可以理解為一個div,他首先是一個一個從上往下羅列在屏幕上。每一個LinearLayout裡面又可分為垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。當垂直布局時,每一行就只有一個元素,多個元素依次垂直往下;水平布局時,只有一行,每一個元素依次向右排列。linearLayout中有一個重要的屬性 android:layout_weight="1",這個weight在垂直布局時,代表行距;水平的時候代表列寬;weight值越大就越大。

 

三、 AbsoluteLayout

絕對布局猶如div指定了absolute屬性,用X,Y坐標來指定元素的位置android:layout_x="20px"

android:layout_y="12px" 這種布局方式也比較簡單,但是在垂直隨便切換時,往往會出問題,而且多個元素的時候,計算比較麻煩。

 

四、 RelativeLayout

相對布局可以理解為某一個元素為參照物,來定位的布局方式。主要屬性有:

相對於某一個元素

android:layout_below="@id/aaa" 該元素在 id為aaa的下面

android:layout_toLeftOf="@id[便便]b"  該元素的左邊是bbb

相對於父元素的地方

android:layout_alignParentLeft="true"  在父元素左對齊

android:layout_alignParentRight="true" 在父元素右對齊,還可以指定邊距等,具體詳見API

 

五、 TableLayout

表格布局類似Html裡面的Table。每一個TableLayout裡面有表格行TableRow,TableRow裡面可以具體定義每一個元素,設定他的對齊方式 android:gravity="" 。

每一個布局都有自己適合的方式,另外,這五個布局元素可以相互嵌套應用,做出美觀的界面。

 

 

3.請寫出BOOL flag 與“零值”比較的if語句;請寫出float  x 與“零值”比較的if語句;請寫出char *p與“零值”比較的if語句;5分

BOOL 的 if (!var) ... 和 if (var)...

float的 if ( (var >= - EPS) && (var <= EPS) )... 和 if ( var >= EPS || var <= -EPS)

char*的 if (var == NULL )... 和 if (var != NULL )...

 

 

4.內存分配區域有幾類,並簡單說明各個內存區域的功能;10分

1、程序計數器

    每個線程都擁有一個獨立的程序計數器,用於記錄當前線程所要執行的字節碼指令,該類內存區域為“線程私有”內存。

2、虛擬機棧

   主要負責方法執行的內存部分,在每個方法執行時都會創建一個棧針存儲局部變量,操作數等方法相關信息,每一次方法的調用到完成,都對應一個棧針在虛擬機棧中出入棧的過程。

3、本地方法棧

    和虛擬機棧類似,只是負責本地Native方法,也會拋出stackOverFlowError和OutOfMemoryError錯誤。

4、JAVA堆(JAVA Heap),GC堆

   主要存放對象實例,可以通過配置,設置不同代的大小和垃圾回收策略,很多優化也在堆上進行實現。

5、方法區(Method Area),非堆,永久代

   主要存儲虛擬機加載的類信息,常量,靜態變量等

6、直接內存

    直接內存沒有在圖中顯示,以為他並不是虛擬機運行時數據區的一部分,不歸虛擬機管理,

 

 

5.用圖示或文字簡單說明Android系統的架構。5分

Android的系統架構和其操作系統一樣,采用了分層的架構。從架構圖看,android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。

 

 

6.Java垃圾回收的優點和原理,並考慮兩種回收機制。5分

.程序可以用System.gc() 或Runtime.getRuntime().gc()請求垃圾回收,工作原理: 引用計數,標記復制

垃圾回收機制的優缺點:Java的垃圾回收機制是的程序員不用擔心內存空間的分配,減少了內存溢出.但同時也犧牲了一定的性能.

 

 

7.Android中Activity,Intent,Content Provider,Servide各自定義及特點。5分

Activity: 活動。一個活動就是一個用戶可以操作的可視化用戶界面,每一個活動都被實現為一個獨立的類,並且從活動基類繼承而來。

Intent: 意圖。最重要的部分是動作和動作對應的數據。

Content Provider:內容提供器,android應用程序能夠將它們的數據保存到文件、SQLite數據庫中,甚至是任何有效的設備中。當你想將你的應用數據和其他應用共享時,內容提供器就可以發揮作用了。

Service:服務,具有一段較長生命周期且沒有用戶界面的程序組件。

 

 

8.什麼是Java序列化,序列化的優缺點,如何實現。5分

8序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網絡之間。

序列化的實現:將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable只是為了標注該對象是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。

 

 

9. 下列程序的輸出結果是___C___。 int t(int x,int y,int cp,int dp) { cp=x*X+y*y; dp=x*x-y*y; } main() { int a=4,b=3,c=5,d=6: t(a,b,c,d); printf("%d%d\n" ,c,d);

A.4 5

B.4 6

C.5 6

D.5 5

 

 

10中斷是嵌入式系統中重要的組成部分,這導致了很多編譯開發商提供一種擴展 ―讓標准 C支持中斷。具代表事實是,產生了一個新的關鍵字__interrupt,下面的代碼就使用了 __interrupt關鍵字去定義了一個中斷服務子程序 (ISR),請評論一下這段代碼,找出錯誤並改正.請指出問題點:

 __interrupt double compute_area (double radius)

{

double area = PI * radius * radius;

//printf(" Area = %f", area);

return area;

}

1、ISR不能傳遞參數,必須用void;

2、ISR應該是短而高效的,所以不推薦在ISR中做浮點運算,應該只由中斷發出消息或置位標志然後由應用層去處理其他工作;

3、ISR中不應該有重入和性能上的問題,因此使用pintf()函數也是不好的

 

 

11.如何用兩個棧實現一個隊列的功能?要求給出算法和思路。10分

 

#include <iostream>

#include <stack>

 

class TMyQueue

{

private:

        stack<char> s1,s2;

public:

        void push(char c)

        {

                while (!s2.empty())

                {

                        char x = s2.top();

                        s2.pop();

                        s1.push(x);

                }

                s1.push( c );

        }

        char pop()

        {

                char c;

                while (!s1.empty())

                {

                        char x = s1.top();

                        s1.pop();

                        s2.push(x);

                }

                c = s2.top();

                s2.pop();

                return c;

        }

        bool empty() const

        {

                return s1.empty() && s2.empty();

        }

};

 

int main()

{

        TMyQueue q;

        int i;

        char buf1[4] = "one";

        char buf2[4] = "two";

        char buf3[6] = "three";

        for (i = 0; i < 3; i++)

                q.push(buf1[i]);

        for (i = 0; i < 3; i++)

                q.push(buf2[i]);

        for (i = 0; i < 3; i++)

                cout << q.pop();

        cout << endl;

        for (i = 0; i < 5; i++)

                q.push(buf3[i]);

        while (!q.empty())

        {

                cout << q.pop();

        }

        cout << endl;

        return 0;

}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved