上海面试题总结3

上海面试题总结
1.int和integer的区别
Java中int和Integer
关系是比较微妙的。关系如下:
1.int
是基本的数据类型;
2.Integer
是int的封装类;
3.int
和Integer都可以表示某一个数值;
4.int
和Integer不能够互用,因为他们两种不同的数据类型;
2.Application类有什么用
他们都继承自 android.content.ContextWrapper ,与menifest有关联
3.编写代码,如何使用ContentProvider得到音乐信息
4.Manifest.xml文件中包括哪些信息
manifest:根节点,描述了package中所有的内容。uses-permission:请求你的package正常运作所需赋予的安全许可。permission: 声明了安全许可来限制哪些程序能你package中的组件和功能。instrumentation:声明了用来测试此package或其他package指令组件的代码。application:包含package中application级别组件声明的根节点。activity:Activity是用来与用户交互的主要工具。receiver:IntentReceiver能使的application获得数据的改变或者发生的操作,即使它当前不在运行。service:Service是能在后台运行任意时间的组件。provider:ContentProvider是用来管理持久化数据并发布给其他应用程序使用的组件。
5.数据连接池的工作机制是什么?
程序和数据库建立连接,发送数据操作的指令,完成后断开连接。等下一次请求的时候重复这个过程,即每个请求都需要和数据库建立连接和断开连接,这样当数据量大的时候系统的消耗是很大的。连接池就是为了解决这个问题:在一个空间中预先建立好一定数量的连接,当程序请求数据时直接使用池中的现存的连接,不需要重复建立连接和断开的过程,节省了时间提高了性能
6.abstract class和interface的区别
7.分析下struts是怎么实现mvc的
8.load和get的区别
9.JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?
10. 在try块中可以抛出异常吗?
11. char型变量中能不能存贮一个中文汉字?为什么?
12.多线程有几种实现方法,都 是什么?同步有几种实现方法,都是什么?
13.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
14.error和exception有什么区别?
15.abstract class和interface有什么区别?
16.当一个线程进入一个对象的一个synchronized方法后,其他线程是否可进入此对象的这个方法,为什么?
17. 请写出类Activity和View的主要方法?(越多越好)
18. 一个view如何刷新它?
19.简述利用Android的Matrix类实现J2ME的drawRegion的方法?
20.设计一个程序Count类计算如下表达式:(可写伪代码)
sum=1-1/2+1/3-1/4+1/5+…
21.整数数组a[]={1,2,3,…100},要求打乱顺序后取出一半成为
整数数组b,并按从小到大的顺序。(可以写伪代码)
22.求出1-1000中出现次数最多的数字(可以写伪代码)
23.50个人围城一圈数到三和三的倍数时出圈,问剩下的人是谁?在原来的位置是多少(可以写伪代码)
24.作用域public,private,protected以及不写时的区别?
25.数组有没有length()这个方法?String有没有这个方法?
26.Error和Exception有什么区别?
27.接口是否可继承接口?抽象类是否可实现接口?抽象类是否可继承实体类?
28.我们用__int_来定义一个整数,用_char__来定义一个字符型,称为原始类型。
29. .android中常用的布局是。
30. android的四大组件是。
31. java.io包中的objectinputstream和objectoutputstream类。
32. android中service的实现方法是。
33. 简述activity的生命周期。
34. android的数据存储的方式有哪些。
35. 当启动一个activity并且新的actvity执行完后需要返回到启动它的activity来执行的回调函数式什么。
36. 请使用命令行的方式创建一个名字为myAvd,sdk版本为2.2,sd卡是d盘的根目录下,名字为scard.img,并之地制定
37. 程序运行的结果是:good and gbc________
public class Example{
String str=new String(“good”);
char[] ch={‘a’,‘b’,‘c’};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+“and”);
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
str=“test ok”;
ch[0]=‘g’;
}
}

选择题:

  1. java.io包中定义多个流类型来实现输入和输出功能,可以从不同的角度对其进行分类,按功能分为:©如果为读取
    的内容进行处理后再输出,需要使用下列哪种流?(G)
    A.输入流和输出流 B.字节流和字符流 C.节点流和处理流
    D.File stream E.Pipe stream F.Random stream G.Filter stream
    2.下列代码的执行结果是:(B)
    public class Test3{
    public static void main(String args[]){
    System.out.print(100%3);
    System.out.print(".");
    System.out.print(100%3.0);
    }
    }
    A.1,1
    B.1,1.0
    C.1.0,1
    D.1.0,1.0
    3.在继承中,关于构造方法的说明,下列说法错误的是(D).
    A.子类无条件的继承父类的无参构造方法。
    B.子类中可以引用父类中的有参构造方法,使用super关键字。
    C.如果子类没有构造方法,则父类的无参构造方法作为自己的构造方法。
    D.如果子类有无参构造方法,而父类的无参构造则被覆盖。
    4.以下程序的运行结果为(B)
    public calss IfTest{
    public static void main(String args[]){
    int x=3;
    int y=1;
    if(x==y)
    System.out.println(“Not equal”);
    else
    System.out.println(“Equal”);
    }
    }
    A.Not equal B.Equal C.无输出 D.编译出错
    5.Java语言中字符串"学java"所占的内存空间是(A)
    A.6个字节
    B.7个字节
    C.10个字节
    D.11个字节
    6.关于下列程序段的输出结果,说法正确的是:(D)
    public class MyClass{
    static int i;
    public static void main(String argv[]){
    System.out.println(i);
    }
    }
    A.有错误,变量i没有初始化。
    B.null
    C.1
    D.0
    7.下列哪些语句关于内存回收的说明是正确的?(B)
    A.程序员必须创建一个线程来释放内存
    B.内存回收程序负责释放无用内存
    C.内存回收程序允许程序直接释放内存
    D.内存回收程序可以在制定的时间释放内存对象
    8.下面异常是属于Runtime Exception的是(ABCD)(多选)。
    A.ArithmeticException
    B.IllegalArgumentException
    C.NullpointerException
    D.BufferUnderflowException
    9.Math.round(11.5)等于多少().Math.round(-11.5)等于多少©。
    A.11,-11 B.11,-12 C.12,-11 D.12,-12
    10.下列程序段输出的结果是:(B)
    void comlicatedecpression_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
    11.activity对一些资源以及状态的操作保存,最好的保存在生命周期的哪个函数中进行(D)
    A.onPause() B.onCreate() C.onResume() D.onStart()
    12.Intent传递数据时,下列的数据类型哪些可以被传递(ABCD)(多选)
    A.Serializable B.charsequence C.Parcelable D.Bundle
    13.android中下列属于Intent的作用的是(C)
    A.实现应用程序间的数据共享
    B.是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失
    C.可以实现页面间的切换,可以包含动作和动作数据,链接四大组件的纽带
    D.处理一个应用程序整体性的工作
    14.下列属于SAX解析xml文件的优点的是(B)
    A.将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能
    B.不用事先调入整个文档,占用资源少
    C.整个文档调入内存,浪费时间和空间
    D.不是长久驻留在内存,数据不是持久的,时间过后,若没有保存数据,数据就会消失
    15.下面的自定义Style的方式正确的是(A)
    A.


    16.在android中使用Menu时可能需要重写的方法有(AC)(多选)。
    A.onCreateOptionsMenu()
    B.onCreateMenu()
    C.onOptionsItemSelected()
    D.onItemSeleted()
    17.在SQL Server Management Studio 中运行下列T-SQL语句,其输出值(C)
    SELECT @@IDENTITY
    A.可能为0.1
    B.可能为3
    C.不可能为-100
    D.肯定为0
    18.在SQL Servser 2005中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询后的结果是(D).
    BEGIN TRANSACTION A
    Update SALES Set qty=30 WHERE qty<30
    BEGIN TRANSACTION B
    Update SALES Set qty=40 WHERE qty<40
    Update SALES Set qty=50 WHERE qty<50
    Update SALES Set qty=60 WHERE qty<60
    COMMIT TRANSACTION B
    COMMIT TRANSACTION A
    A.SALES表中qty列最小值大于等于30
    B.SALES表中qty列最小值大于等于40
    C.SALES表中qty列最小值大于等于50
    D.SALES表中qty列最小值大于等于60
    19.在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,数据库版本进行管理的方法可以是(AB)
    A.getWriteableDatabase()
    B.getReadableDatabase()
    C.getDatebae()
    D.getAbleDatabase()
    20.android关于service生命周期的onCreate()和onStart()说法正确的是(AD)(多选题)
    A.当第一次启动的时候先后调用onCreate()和onStart()方法。
    B.当第一次启动的时候只会调用onCreate()方法
    C.如果service已经启动,将先后调用onCreate()方法
    D.如果service已经启动,只会执行onStart()方法,不会执行onCreate()方法
    21.下面是属于GLSurFaceView特性的是(ABC)。(多选)
    A.管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。
    B.管理一个EGL display,它能让opngl把内存内容渲染到上述的surface上
    C.让渲染器在独立的线程里运行,和UI线程分离
    D.可以直接从内存或者DMA等硬件接口取得图像数据
    22.下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的是(A)
    A.





    B.

    android:name=“android.provider.action.NewBroad”/>


    C.



    D.





    23.关于ContentValues类说法正确的是(A)
    A.他和Hastable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的
    名是String类型,而值都是基本类型
    B.他和Hastable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的
    名是任意类型,而值都是基本类型
    C.他和Hastable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的
    名,可以为空,而值都是String类型
    D.他和Hastable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的
    名是String类型,而值都是String类型
    24.我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器
    就会变得很慢,那么线程销毁的方法是(A)
    A.onDestroy()
    B.onClear()
    C.onFinish()
    D.onStop()
    25.下面退出Activity错误的方法是(C)
    A.finish()
    B.抛异常强制退出
    C.System.exit()
    D.onStop()
    26.下面属于android的动画分类的有(AB)(多选)
    A.Tween B.Frame C.Draw D.Animation
    27.下面关于Android dvm的进程和linux的进程,应用程序的进程说法正确的是(D)
    A.DVM是指dalivk的虚拟机,每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的
    Dalvik虚拟机实例,而每一个DVM都是在linux中的一个进程,所以可以说认为是同一个概念。
    B.DVM是指dalvik的虚拟机,每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的
    Dalvik虚拟机,而每一个DVM不一定都是在linux中的一个进程,所以说不是一个概念
    C.DVM是指dalvik的虚拟机,每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的
    Dalvik虚拟机实例,而每一个DVM不一定都是在linux中的一个进程,所以说不是一个概念
    D.DVM是指dalvik的虚拟机,每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的
    Dalvik虚拟机,而每一个DVM都是在linux中的一个进程,所以说可以认为是同一个概念
    1. Android项目工程下面的assets目录的作用是什么(B)
      A.放置应用到的图片资源
      B.主要放置多媒体等数据文件
      C.放置字符串,颜色,数组等常量数据
      D.放置一些与UI相应的布局文件,都是xml文件
      29.关于res/raw目录说法正确的是(A)
      A.这里的文件时原封不动的存储到设备上不会转换为二进制的格式
      B.这里的文件时原封不动存储到设备上会转换成二进制的格式
      C.这里的文件最终以二进制的格式存储到指定的包中
      D.这里的文件最终不会以二进制的格式存储到指定的包中
      30.下列对android NDK的理解正确的是(ABCD)
      A.NDK是一系列工具的集合
      B.NDK提供了一份稳定,功能有限的API头文件声明
      C.使“java+c”的开发方式终于转正,成为官方支持的开发方式
      D.NDK将是Android平台支持C开发的开端

37.public class Test{
static boolean foo(char c){
System.out.print©;
return true;
}
public static void main(String[] args){
int i=0;
for(foo(‘A’);foo(‘B’)&&(i<2);foo(‘C’)){
i++;
foo(‘D’);
}
}
}
What is the result?
A.ABDCBDCB
B.ABCDABCD
C.Compliation fails
D.An exception is thrown at runtime

38.class A{
protected int method1(int a,int b){
return 0;
}
}
Which two are valid in a class that extends class A?(Choose two)
A.public int method1(int a,int b){return 0;}
B.private int method1(int a,int b){return 0;}
C.private int method1(int a,long b){return 0;}
D.public short method1(int a,long b){return 0;}
E.static protected int method1(int a,long b){return 0;}

39.public class Outer{
public void someOuterMethod(){
//Line3
}
public class Inner{}
public static void main(String[] args){
Outer o = new Outer();
//Line8
}
}
Which instantiates an instance of inner?
A.new Inner();//At line3
B.new Inner();//At line8
C.new o.Inner();//At line8
D.new Outer.Inner();//At line8//new Outer().new Inner()

40.interface A{
int x=0;
}
class B{
int x=1;
}
class C extends B implements A{
public void pX(){
System.out.println(x);
}
public static void main(String[] args){
new C().pX();
}
}
Which output is right?
A.0
B.1
C.Compiling error
D.Rumtime exception

简单编程题:
1.在android中,请简述jni的调用过程。
1)安装和下载Cygwin,下载 Android NDK
2)在ndk项目中JNI接口的设计
3)使用C/C++实现本地方法
4)JNI生成动态链接库.so文件
5)将动态链接库复制到java工程,在java工程中调用,运行java工程即可
2.简述Android应用程序结构是哪些?
Linux Kernel(Linux内核)、Libraries(系统运行库或者是c/c++核心库)、Application
Framework(开发框架包)、Applications (核心应用程序)
3.请解释在单线程模型中Message,Handler,Message Queue,Looper之间的关系:
1. Message
Message消息,理解为线程间交流的信息,处理数据后台线程需要更新UI,则发送Message内含一些数据给UI线程。
2. Handler
Handler处理者,是Message的主要处理者,负责Message的发送,Message内容的执行处理。后台线程就是通过传进来的 Handler对象引用来sendMessage(Message)。而使用Handler,需要implement 该类的 handleMessage(Message)
方法,它是处理这些Message的操作内容,例如Update UI。通常需要子类化Handler来实现handleMessage方法。
3. Message Queue
Message Queue消息队列,用来存放通过Handler发布的消息,按照先进先出执行。
每个message queue都会有一个对应的Handler。Handler会向message queue通过两种方法发送消息:sendMessage或post。这两种消息都会插在message queue队尾并按先进先出执行。但通过这两种方法发送的消息执行的方式略有不同:通过sendMessage发送的是一个message对象,会被 Handler的handleMessage()函数处理;而通过post方法发送的是一个runnable对象,则会自己执行。
4. Looper
Looper是每条线程里的Message Queue的管家。Android没有Global的Message Queue,而Android会自动替主线程(UI线程)建立Message Queue,但在子线程里并没有建立Message Queue。所以调用Looper.getMainLooper()得到的主线程的Looper不为NULL,但调用Looper.myLooper() 得到当前线程的Looper就有可能为NULL。
对于子线程使用Looper,API Doc提供了正确的使用方法:

这个Message机制的大概流程:
1. 在Looper.loop()方法运行开始后,循环地按照接收顺序取出Message Queue里面的非NULL的Message。
2. 一开始Message Queue里面的Message都是NULL的。当Handler.sendMessage(Message)到Message Queue,该函数里面设置了那个Message对象的target属性是当前的Handler对象。随后Looper取出了那个Message,则调用 该Message的target指向的Hander的dispatchMessage函数对Message  进行处理。
在dispatchMessage方法里,如何处理Message则由用户指定,三个判断,优先级从高到低:
1) Message里面的Callback,一个实现了Runnable接口的对象,其中run函数做处理工作;
2) Handler里面的mCallback指向的一个实现了Callback接口的对象,由其handleMessage进行处理;
  1. 处理消息Handler对象对应的类继承并实现了其中handleMessage函数,通过这个实现的handleMessage函数处理消息。

    由此可见,我们实现的handleMessage方法是优先级最低的!
    3. Handler处理完该Message (update UI) 后,Looper则设置该Message为NULL,以便回收!
    在网上有很多文章讲述主线程和其他子线程如何交互,传送信息,最终谁来执行处理信息之类的,个人理解是最简单的方法——判断Handler对象里面的 Looper对象是属于哪条线程的,则由该线程来执行!

    1. 当Handler对象的构造函数的参数为空,则为当前所在线程的Looper;

    2. Looper.getMainLooper()得到的是主线程的Looper对象,Looper.myLooper()得到的是当前线程的Looper对 象。
      4.你常用过的控件有哪些?
      TextView - 文本显示控件
      Button - 按钮控件
      ImageButton - 图片按钮控件
      ImageView - 图片显示控件
      CheckBox - 复选框控件
      RadioButton - 单选框控件
      AnalogClock - 钟表(带表盘的那种)控件
      DigitalClock - 电子表控件
      5.页面上现有ProgressBar控件progressBar,请用书写线程以10秒的时间完成其进度条的显示工作。
      public class ProgressBarStu extends Activity {

      private ProgressBar progressBar = null;
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.progressbar);
      //从这到下是关键
      progressBar = (ProgressBar)findViewById(R.id.progressBar);

      Thread thread = new Thread(new Runnable() {

      @Override
      public void run() {
      int progressBarMax = progressBar.getMax();
      try {
      while(progressBarMax!=progressBar.getProgress())
      {

      int stepProgress = progressBarMax/10;
      int currentprogress = progressBar.getProgress();
      progressBar.setProgress(currentprogress+stepProgress);
      Thread.sleep(1000);
      }

      } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }

      }
      });

      thread.start();

      //关键结束
      }
      6.用最有效率的方法算出2乘以18等于多少?
      7.给定一组字符串如:xt9i5Q2BMWwith7,请编程输出里面的数字:9527
      8.编程实现显示出某一目录下的所有文件名。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值