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秒的的时间完成其进度显示工作。

[java]  view plain copy print ?
  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)

[java]  view plain copy print ?
  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表。


[java]  view plain copy print ?
  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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2. 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?    答:在系统回收或者用户调用finish方法,都会销毁Activity,此时会调用onDestroy方法,利用onDestroy方法保存Activity状态   3. 如何将一个Activity设置成窗口的样式。    答:在AndriodMinifest.xml文件中配置Activity的属性的主题为android:theme="@android:style/Theme.Dialog"   4. 如何退出Activity?如何安全退出已调用多个Activity的Application?    答:单个的Activity,调用finish、killProcess()、System.exit()方法退出    多个Activity    在2.1之前,可以使用ActivityManager的restartPackage方法。    它可以直接结束整个应用。在使用时需要权限android.permission.RESTART_PACKAGES    在2.2,这个方法失效了。    在2.2添加了一个新的方法,killBackgroundProcesses(),需要权限 android.permission.KILL_BACKGROUND_PROCESSES   5. 请介绍下Android中常用的五种布局。    答:LinearLayout线性布局    RelativeLayout相对位置布局    AbsoluteLayout根据坐标布局    TableLayout表格布局    FrameLayout:里面只可以有一个控件,并且不能设计这个控件的位置,控件会放到左上角   6. 请介绍下Android的数据存储方式。    答:SharedPreferences键值对的存储    SQlite数据库存储    Files文件存储    NetWork网络存储 ContentProvider   7. 请介绍下ContentProvider是如何实现数据共享的。 答:ContentProvider负责: 组织应用程序的数据、向其他应用程序提供数据; ContentResolver负责:获取ContentProvider提供的数据、增删改查数据等   8. 如何启用Service,如何停用Service。    答:启动Service:    Intent intent = new Intent(this,MyService.class);    startService(intent);//启动服务的调用者跟服务没有任何关系,调用者退出跟服务不会有任何影响    或者bindService(intent);//启动负的调用者跟服务绑定在一起,调用者一点退出,服务也会终止    停用Service:    stopService(intent);//停止startService启动的服务    unbindService(intent);//停止bindService启动的服务   9. 注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。    答:两种,一种是xml注册,一种是代码注册    xml注册的优点:方便、易读    缺点:当手机处于关机状态时,仍然可以监听到广播,不灵活    代码注册的优点:灵活,手机处于关机状态时,不在监听广播    缺点:不方便,不容易读   10. 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。    答:Message Queue(消息队列):用来存放通过Handler发布的消息,通常附属于某一个创建它的线程,可以通过Looper.myQueue()得到当前线程的消息队列    Handler:可以发布或者处理一个消息或者操作一个Runnable,通过Handler发布消息,消息将只会发送到与它关联的消息队列,然也只能处理该消息队列中的消息    Looper:是Handler和消息队列之间通讯桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放入队列。Looper也把消息队列里的消息广播给所有的      Handler,Handler接受到消息后调用handleMessage进行处理    Message:消息的类型,在Handler类中的handleMessage方法中得到单个的消息进行处理   11. AIDL的全称是什么?如何工作?能处理哪些类型的数据?    答:全称是:Android Interface Define Language(android接口自定义语言)            12. 请解释下Android程序运行时权限与文件系统权限的区别。   13. 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。   14. 有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为      50%。   15. 你如何评价Android系统?优缺点。    答:优点:1、学习的开源性    2、软件兼容性比较好    3、软件发展迅速    4、界面布局好    缺点:1、版本过多    2、先有软件少    3、商务性能差 16、Intent传递数据时,下列的数据类型那些可以被传递(ABCD) A、Serializable B、charsequence C、Parcelable(邮包类型) D、Bundle 17、Android中使用Menu时可能需要重写的方法(AC) A、onCreateOptionsMenu() B、onCreateMenu() C、onOptionsItemSelected() D、onItemSelected() 18、关于ContentValues类的说法正确的是(A) A、他和HashTable比较类似,也是负责存储一些名值对,但是他存储的名值对当中名是String类型,而值都是基本类型 B、他和HashTable比较类似,也是负责存储一些名值对,但是他存储的名值对当中名是任意类型,而值都是基本类型 C、他和HashTable比较类似,也是负责存储一些名值对,但是他存储的名值对当中名可以为空,而值都是String类型 D、他和HashTable比较类似,也是负责存储一些名值对,但是他存储的名值对当中名是String类型,而值也是String类型 19、Android的四大组件:Activity、Service、Broadcast Receiver、Content Provider 20、简述Andrid应用程序的结构是哪些? 答:Linux Kernel(Linux 内核)、Libraries(系统运行类库或者C/C++核心库)、Application Framawork(开源框架)、Applications(核心应用程序) 21、什么是ANR,如何避免它? 答:ANR(Application Not Responding):应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应的对话框 避免ANR:Android应用程序通常运行在一个单独的线程里面,称谓主线程,所以在主线程里面少做一些耗时长的程序,而是利用子线程来操作一些繁琐的事情,用Handler来把子线程处理的消息返回给主线程 22、简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver 答:activity呈现了一个用户可以操作的可视化用户界面 service不包含可见的用户界面,而是在后台无限地运行可以连接到一个正在运行的服务中,连接后,可以通过服务中暴露出来的借口与其进行通信 broadcast receiver是一个接收广播消息并作出回应的component,broadcast receiver没有界面 intent:content provider在接收到ContentResolver的请求时被激活。 activity, service和broadcast receiver是被称为intents的异步消息激活的。 一个intent是一个Intent对象,它保存了消息的内容。对于activity和service来说,它指定了请求的操作名称和待操作数据的URIIntent对象可以显式的指定一个目标component。如果这样的话,android会找到这个component(基于manifest文件中的声明)并激活它。但如果一个目标不是显式指定的,android必须找到响应intent的最佳component。它是通过将Intent对象和目标的intent filter相比较来完成这一工作的。一个component的intent filter告诉android该component能处理的intent。intent filter也是在manifest文件中声明的

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值