您的位置:首页 > 职场人生

2017春 Android面试总结

2017-03-20 21:48 260 查看
几套Android面试题和答案
http://www.cnblogs.com/zady/p/3380888.html http://blog.csdn.net/zoe_sj/article/details/53366437 http://www.myexception.cn/android/1979113.html http://www.bkjia.com/Androidjc/1042951.html http://www.docin.com/p-603761472.html
一,选择题

0.在多个应用中读取共享存储数据时,需要用到的query方法,是哪个对象的方法(A)

A. ContentResolver

B. ContentProvider

C.CursorD

D.SQLiteHelper

答:ContentProvider负责 组织应用程序的数据; 向其他应用程序提供数据; 

ContentResolver则负责 获取ContentProvider提供的数据; 修改/添加/删除更新数据等

32、以下关于Service的说法错误的是(c ) 

A. Android中,Service有两种不同的使用方式:一种是以启动方式使用Service

(Started Service),另一种是以绑定方式使用Service(Bound Service)。 

B. 需要在AndroidManifest.xml文件中注册,否则,Service根本无法启动。 

C. 以绑定方式使用Service,能够获取到Service对象,不仅能够正常启动Service,而且

能够调用正在运行中的Service实现的私有方法和属性。 

D. 为了使Service支持绑定,需要在Service类中重写onBind()方法,并在onBind()方法

中返回Service对象。

1.下列哪些语句关于内存回收的说明是正确的? (B)

A 程序员必须创建一个线程来释放内存; 

B 内存回收程序负责释放无用内存 

C 内存回收程序允许程序员直接释放内存 

D 内存回收程序可以在指定的时间释放内存对象

    B是对的。 A. 程序员不需要创建线程来释放内存。 C. 也不允许程序员直接释放内

存。 D. 不一定在什么时刻执行垃圾回收。

2.下面异常属于Runtime Exception 的是(ABCD)

A.ArithmeticException

B.IllegalArgumentException

C.NullPointerException

D.BufferUnderflowException

  异常分两种:

 1):编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。

 2):运行时异常,其中Exception有一个特殊的子类RuntimeException,以及  

RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。

  编译时被检查的异常和运行时异常的区别:

 编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。

 声明的原因:是需要调用者对该异常进行处理。

 运行时异常如果在函数内被抛出,在函数上不需要声明。

 不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所

以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。

3.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?(C)

A.11,-11 B.11,-12
C.12,-11 D.12,-12

  Math类中提供了三个与取整有关的方法:ceil 向上取整、 floor向下取整、 round四

舍五入.最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即

将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round

(-11.5)的结果为-11。

4.下列程序段的输出结果是(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

   运算符的优先级依次是><, &&, ||

5.对一些资源以及状态的操作保存 ,最好是保存在

生命周期的哪个函数中进行(A)

A.onPause() B.onCreate() C.onResume() D.onStart()

6.我们都知道Handler是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会

变得越慢,那么线程销毁的方法是(A)

A.onDetroy() B.onCreate() C.onFinish() D.onStop()

  正确销毁线程的方法是:mHandler.removeCallbacks(mBackgroundRunnable); 这样就

可以避免在多次进入同一个Activity时创建多个同时运行着的线程。

7.为满足线程间通信,Android提供了(A)

A.Handler和Looper B.Handler

C.Message Queue D.Looper

8.下列对android NDK 的理解正确的是(ABCD)

A.NDK 是一系列工具的集合。

B.NDK 提供了一份稳定、功能有限的API头文件声明。

C.使“Java+C”的开发方式终于转正,成为官方支持的开发方式。

D.NDK 将是Android 平台支持C开发的开端。

9.下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的是(A)

    A、<receiver android:name="NewBroad" >

        <intent-filter>

            <action android:name="android.provider.action.NewBroad" />

        </intent-filter>

    </receiver>

     B、 <
c947
;receiver android:name="NewBroad" >

        <intent-filter>

            action android:name="android.provider.action.NewBroad" />

        </intent-filter>

    </receiver>

     C、<receiver android:name="NewBroad" >

        <intent-filter>

            <action android:name="android.provider.action.NewBroad" /><action>

        </intent-filter>

    </receiver>

     D、 <intent-filter>
<receiver android:name="NewBroad" >

       

            <action> android:name="android.provider.action.NewBroad"/>
<action>
</receiver>

        </intent-filter>

    

10.Intent传递数据时,下列的数据类型哪些可以被传递(ABCD)(多选)   

A、Serializable  B、charsequence  C、Parcelable  D、Bundle

  通过查询Intent/Bundle的API文档,我们可以获知,Intent/Bundle支持传递基本类型

的数据和基本类型的数组数据,以及String/CharSequence类型的数据和

String/CharSequence类型的数组数据。而对于其它类型的数据貌似无能为力,其实不然

,我们可以在Intent/Bundle的API中看到Intent/Bundle还可以传递Parcelable(包裹化

,邮包)和Serializable(序列化)类型的数据,以及它们的数组/列表数据。

二、简答题

1.内部类的作用

  答:a.可以直接访问外部类的所有成员;b.简化代码增强程序的可读性;c.更好的定位

与接口关联的方法在代码中的位置;(参考 
http://blog.sina.com.cn/s/blog_8fc52b02010114ml.html)
2.Hashcode的作用,与equal有什么区别?

equals()反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,

也可能是值类型的值。而hashCode()是对象或变量通过哈希算法计算出的哈希值。之所以

有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都

用到了hashCode,比如HashTable。

两个obj,如果equals()相等,hashCode()一定相等。

两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然

概率很低)。

所以:

可以考虑在集合中,判断两个对象是否相等的规则是:

第一步,如果hashCode()相等,则查看第二步,否则不相等;

第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。

 为什么需要hashCode?

(1)通过hashCode可以很快的查到小内存块。

(2)通过hashCode比较比equal方法快,当get时先比较hashCode,如果hashCode不同,直

接返回false。

(参考 http://www.cnblogs.com/nktblog/articles/2518111.html)
3.页面上现有ProgressBar控件progressBar,请用书写线程以10秒的时间完成其进度显示

工作。

    /**  

     * progressBar改变  

     */  

    private void progressBarChange() {  

        //开启一个线程  

        Thread thread = new Thread(new Runnable() {  

            @Override  

            public void run() {  

                //得到progeressBar的最大长度  

                int progressBarMax = progressBar.getMax();  

                try {  

                    //progressBar当前的长度没有达到他的最长度,让循环一直进行  

                    while (progressBarMax != progressBar.getProgress()) {  

                        //拿到一个每次前进的进度值,因为是要10s完成,所以分为10

份  

                        int stepProgress = progressBarMax / 10;  

                        //progressBar当前的进度值  

                        int currentProgress = progressBar.getProgress();  

                        //让progressBar进度为每次前进最大值的十分之一  

                        progressBar.setProgress(currentProgress + 

stepProgress);  

                        //前进一次,睡眠一秒  

                        Thread.sleep(1000);  

                    }  

  

                } catch (Exception e) {  

                    e.printStackTrace();  

                }  

  

            }  

        });  

        //开启线程  

        thread.start();  

    } 

 

4.请描述下Activity的生命周期。

创建 onCreate -  启动onStart – 开始 onResume – 暂停 onPause – 结束 onStop 

– 销毁onDestroy - 重启onRestart

(参考 http://blog.csdn.net/ramondlee/article/details/6840140)
5.如何将一个Activity设置成窗口的样式。

(参考 http://blog.163.com/zhou_411424/blog/static/197362156201231251637341/)
做法有两种(1).在AndroidManifest.xml文件当中设置当前activity的一个属性(系统自

带的属性):android:theme="@android:style/Theme.Dialog"(2)方法2.a.在你的

styles.xml文件中可以新建一如下的style:

    <style name="Theme.FloatActivity" parent="android:style/Theme.Dialog">

    </style>

b.在AndroidManifest.xml中在你需要显示为窗口的activity中添加如果属性:

android:theme="@style/Theme.FloatActivity" 即可

    

6.Activity、Window、View三者的差别,fragment的特点?

(参考 http://www.th7.cn/Program/Android/201610/982832.shtml)
(1)Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显

示视图) LayoutInflater像剪刀,Xml配置像窗花图纸。Window是android中的窗口,表

示顶级窗口的意思,也就是主窗口,它有两个实现类,PhoneWindow和MidWindow,我们一

般的 activity对应的主要是PhoneWindow,在activity中经常使用的setContentView等方

法也是在这个里面实现的。

(2)fragment 特点:

Fragment可以作为Activity界面的一部分组成出现;

可以在一个Activity中同时出现多个Fragment,并且一个Fragment也可以在多个Activity

中使用;

在Activity运行过程中,可以添加、移除或者替换Fragment;

Fragment可以响应自己的输入事件,并且有自己的生命周期,它们的生命周期会受宿主

Activity的生命周期影响。

7.Android Service与Activity之间通信的几种方式

答:(参考 http://blog.csdn.net/xiaanming/article/details/9750689)
a.通过Binder对象 b.通过broadcast(广播)的形式

8.如何保证service在后台不被kill

(参考 http://blog.csdn.net/mad1989/article/details/22492519)
答:a、Service设置成START_STICKY(onStartCommand方法中),kill 后会被重启(等

待5秒左右),重传Intent,保持与重启前一样.b、通过 startForeground将进程设置为

前台进程,做前台服务,优先级和前台应用一个级别?,除非在系统内存非常缺,否则此

进程不会被 kill.c、双进程Service:让2个进程互相保护,其中一个Service被清理后,

另外没被清理的进程可以立即重启进程.d、AlarmManager不断启动service

9.Android中activity、service、broadcastReceiver的作用

应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监

听并处理用户的事件做出响应。

一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。

你的应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者

数据网络可用时)进行接收并做出响应。

Content Provider使一个应用程序的指定数据集提供给其他应用程序,实现多个应用程序

间共享数据。它的好处:统一数据访问方式。

10.什么情况导致内存泄漏,如何避免?

答:a.不使用setImageBitmap等方法设置一张大图,通过BitmapFactory.decodeStream方

法创建一个bitmap。b.对图片进行压缩。c.使用缓存。d.使用LruCache的ImageLoader。

e.借助第三方框架,picasso,xUtils中的bitmapUtils,volley等。

11.进程的优先级

答:按android系统优先杀死的顺序排列为:1.空进程;2.后台进程;3.服务进程;4.可见

进程;5.前台进程。一般来说,前台进程Android系统是不会杀死的,只有当前4个都杀掉

资源依旧不够才可能会发生。

12.传值和传引用的区别?

13.view的绘制过程

答: Android的View绘制是从根节点(Activity是DecorView)开始,他是一个自上而下

的过程。View的绘制经历三个过程:Measure、Layout、Draw。

14.Android中的“Application”,“Task”,“Activities”的关系

答:a.任何一个Android Application基本上是由一些Activities组成,当用户与应用程

序交互时其所包含的部分Activities具有紧密的逻辑关系,或者各自独立处理不同的响应

。这些Activities捆绑在一起成为了一个处理特定需求的Application, 并且以“.apk”

作为后缀名存在于文件系统中。

b.一个Task就是用户体验上的一个“应用”。它将相关的Activity组合在一起,以stack

的方式管理,这就是Task。在Android平台上可以将task简单的理解为幽多个Activity共

同协作完成某项应用,而不管Activity具体属于哪个Application,

15.String和StringBuffer的区别

答:string对象是不可变的,线程安全。StringBuilder与StringBuffer这两种对象都是

可变的。StringBuffer对方法加了同步锁,所以是线程安全的。StringBuilder并没有对

方法进行加同步锁,所以是非线程安全的。

16.AsyncTask的用法举例

答:class MyTask extends AsyncTask<String, Integer, String> {里面要重写四个方

法,一般在doInBackground()方法中执行具体的耗时任务,在OnProgressUpdate()中

进行更新UI操作,在onPreExecute()中进行界面的初始化,最后在onPostExecute()

方法中做收尾工作,比如关闭对话框pdialog.dismiss(); 

17.WebView如何获取网页中的标题、内容和图片
http://www.th7.cn/Program/Android/201608/935713.shtml
18.java object的wait和Thread的sleep方法区别

留给大家自己百度,欢迎交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: