你的位置:首页 > 操作系统

[操作系统]安卓工程师笔试

1.在微型计算机中,采用中断方式的优点之一是(C)

  1. 简单且容易实现
  2. CPU可以不工作
  3. 可实现响应突发事件
  4. 传递速度最快

 

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,ContentProvider,Servide各自定义及特点。5分

Activity: 活动。一个活动就是一个用户可以操作的可视化用户界面,每一个活动都被实现为一个独立的类,并且从活动基类继承而来。

Intent: 意图。最重要的部分是动作和动作对应的数据。

Content Provider:内容提供器,android应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中。当你想将你的应用数据和其他应用共享时,内容提供器就可以发挥作用了。

Service:服务,具有一段较长生命周期且没有用户界面的程序组件。

 

 

8.什么是Java序列化,序列化的优缺点,如何实现。5分

8序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。

序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implementsSerializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

 

 

9. 下列程序的输出结果是___C___。 int t(int x,int y,intcp,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),请评论一下这段代码,找出错误并改正.请指出问题点:

 __interruptdouble 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;

}