Android 面试题目

1  activity的生命周期。
activity主要生命周期的方法说明:
onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任何状态的访问!
onStart():activity变为在屏幕上对用户可见时调用。
onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。
onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈吧!
onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用。
onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。
onDestroy():activity被完全从系统内存中移除时调用,该方法被调用


2  横竖屏切换时候activity的生命周期

onCreate-->
onStart-->
onResume-->

按crtl+f12切换成横屏时

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

[在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行

总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。

至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,onRestoreInstanceState被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行

另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原

详细参见:http://blog.csdn.net/pathfinder163/archive/2011/02/26/6209416.aspx]

a、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

b、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

c、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

3  handler机制的原理

参见【http://www.cnblogs.com/TerryBlog/archive/2010/08/25/1808445.html
ps:好多小项目文章

4 android中线程与线程,进程与进程之间如何通信

一、可以确定的一些知识点
1、一个 Android 程序开始运行时,会单独启动一个Process。
   默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。
   默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个Thread。
2、一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。
   一个Android程序创建之初,一个Process呈现的是单线程模型--即Main Thread,所有的任务都在一个线程中运行。所以,Main Thread所调用的每一个函数,其耗时应该越短越好。而对于比较费时的工作,应该设法交给子线程去做,以避免阻塞主线程(主线程被阻塞,会导致程序假死现象)。

3、Android单线程模型:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。如果在子线程中直接修改UI,会导致异常。

5 android四大组件及其如何工作

http://android.group.iteye.com/group/blog/537654

 

7.widget相对位置的完成在activity的哪个生命周期阶段实现 


8.说说mvc模式的原理,它在android中的运用 

9.说说在android中有哪几种数据存储方式 

10.android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别

 

1  请描述下Activity的生命周期。

2  如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

3  如何将一个Activity设置成窗口的样式。(Edited by Sodino)

4  如何退出Activity?如何安全退出已调用多个Activity的Application?

5  请介绍下Android中常用的五种布局。

6  请介绍下Android的数据存储方式。(Edited by Sodino)

7  请介绍下ContentProvider是如何实现数据共享的。(Edited by Sodino)

8  如何启用Service,如何停用Service。(Edited by Sodino)

9  注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。

10 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。

11  AIDL的全称是什么?如何工作?能处理哪些类型的数据?

12  请解释下Android程序运行时权限与文件系统权限的区别。(Edited by Sodino)


13  系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。

14  有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片所有的白色不透明(

0xffffffff)像素点的透明度调整为50%

15  你如何评价Android系统?优缺点。

Basic:

1. 基本的UI控件和布局文件

2. UI配套的Adapter的使用

3. Activity, Intent,Service,broadCast Receiver他们的生命周期管理熟悉一下

4. 操作手机上的数据库SQLite应用

Advanced_1:

1. 为什么看好 Android

2. 现在在公司做哪些工作(关于 Android)

3. Android 的框架以及一些基础知识

4. Android 一些方面的领悟(如Android框架的 IoC特性,View System  的状态机机制等)

Advanced_2:

1.对多线程的运用和理解,及多线程之间handle的传值。

2.对android 虚拟机的理解,包括内存管理机制垃圾回收机制。

3.framework工作方式及原理,Activity是如何生成一个view的,机制是什么。

4. android本身的一些限制,不如apk包大小限制,读取大文件 时的时间限制。

5. Linux中跨进程通信的集中方式

Android_4:

1. dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

2. sim卡的EF 文件有何作用

sim文件系统有自己的规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,ED就是作存储并和手机通讯用的

3. AT命令的User case的概念

4.嵌入式操作系统内存管理有哪几种, 各有何特性

页式,段式,段页式,用到了MMU,虚拟内存管理

5. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之

内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、

 军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,

而android是基于linux内核的,因此属于软实时

6. 一条最长的短信息约占多少byte?

[ http://blog.sina.com.cn/s/blog_4e60b09d0100nlpp.html   好多学习资料]

以下题目根据公司面试或者网络整理而得,面试中经常会遇到。各个公司套路基本一样。仔细复习,必定成功。

   1. 什么是Activity?
   2. 请描述一下Activity生命周期。
   3. 两个Activity之间跳转时必然会执行的是哪几个方法。

【解3】 startActivity(Intent intent) ;  
startActivityForResult (Intent intent, int requestCode) ;
onActivityResult (int requestCode, int resultCode, Intent data); 
setResult(int resultCode);

   4. 横竖屏切换时候Activity的生命周期。
   5. 如何将一个Activity设置成窗口的样式。
   6. 你后台的Activity被系统 回收怎么办?
   7. 如何退出Activity?如何安全退出已调用多个Activity的Application?
   8. 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

【解8】onSaveInstanceState()
当你的程序中某一个Activity A在运行时,主动或被动地运行另一个新的Activity B,这个时候A会执行onSaveInstanceState()。B完成以后又会来找A,这个时候就有两种情况:一是A被回收,二是A没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上了参数savedInstanceState;而没被收回的就直接执行onResume(),跳过onCreate()了。

   9. 两个Activity之间怎么传递数据?
【解9】  http://skcceclipse.iteye.com/blog/704022

10. 怎么让在启动一个Activity是就启动一个service?
  11. 同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?
  12. Activity怎么和service绑定,怎么在activity中启动自己对应的service?
  13. 什么是Service以及描述下它的生命周期。
  14. Service有哪些启动方法,有什么区别,怎样停用Service?
  15. 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?
  16. 什么是IntentService?有何优点?
  17. 什么时候使用Service?
  18. 请描述一下Intent 和 Intent Filter。
  19. Intent传递数据时,可以传递哪些类型数据?
  20. 说说Activity,Intent,Service是什么关系 。
  21. 请描述一下Broadcast Receiver。
  22. 在manifest和代码中如何注册和使 用 broadcast receiver 。
  23. 请介绍下ContentProvider是如何实现数据共享的。
  24. 请介绍下Android的数据存储方式。

[解24] 介绍下Android的数据存储方式。
          一.SharedPreferences方式
          二.文件存储方式
          三.SQLite数据库方式
          四.内容提供器(Content provider)方式
          五.网络存储方式

  25. 为什么要用ContentProvider?它和sql的实现上有什么差别?
  26. 请介绍下Android中常用的五种布局。

【解26】FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)  27. 谈谈UI中, Padding和Margin有什么区别?
  28. widget相对位置的完成在antivity的哪个生命周期阶段实现。
  29. 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。
  30. AIDL的全称是什么?如何工作?能处理哪些类型的数据?
  31. 请解释下Android程序运行时权限与文件系统权限的区别。
  32. 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?
  33. 对多线程的运用和理解,及多线程之间handle的传值。
  34. 对android虚拟机的理解,包括内存管理机制垃圾回收机制。
  35. Framework工作方式及原理,Activity是如何生成一个view的,机制是什么。
  36.  android本身的一些限制,比如apk包大小限制,读取大文件时的时间限。
  37. 如何加载的音乐信息,如何改善其效率。
  38. ListView如何提高其效率?
  39. 启动应用后,改变系统语言,应用的语言会改变么?
  40. 启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?
  41. Android程序与Java程序的区别?
  42. Android中Task任务栈的分配。
  43. 在Android中,怎么节省内存的使用,怎么主动回收内存?
  44. 不同工程中的方法是否可以相互调用?
  45. 在Android中是如何实现判断区分通话记录中的电话状态,去电,来电、未接来电?
  46. dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念
  47. sim卡的EF 文件有何作用
  48. 如何判断是否有SD卡?
  49. 嵌入式操作系统内存管理有哪几种, 各有何特性。
  50. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?
  51. 一条最长的短信息约占多少byte?
  52. Linux中跨进程通信的几种方式 。

  53. 谈谈对Android NDK的理解。
  54. 谈谈Android的优点和不足之处。
  55. Android系统中GC什么情况下会出现内存泄露呢?

【解55】 
(一) 查询数据库没有关闭游标
描述:程序中经常会进行查询数据库的操作,但是经常会有使用完毕Cursor后没有关闭的情况。如果我们的查询结果集比较小,对内存的消耗不容易被发现,只有在常时间大量操作的情况下才会复现内存问题,这样就会给以后的测试和问题排查带来困难和风险。
(二) 构造Adapter时,没有使用缓存的 convertView
(三)Bitmap对象不在使用时调用recycle()释放内存
(四) 释放对象的引用

  56. Android UI中的View如何刷新。
  57. 简单描述下Android 数字签名。
【解57】在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应用程序才能取得该权限。Android使用Java的数字证书相关的机制来给apk加盖数字证书,要理解android的数字证书,需要先了解以下数字证书的概念和java的数字证书机制。Android系统要求每一个安装进系统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中。Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。
同一个开发者的多个程序尽可能使用同一个数字证书,这可以带来以下好处。
(1)有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则Android系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。
(2)有利于程序的模块化设计和开发。Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。
(3)可以通过权限(permission)的方式在多个程序间共享数据和代码。Android提供了基于数字证书的权限赋予机制,应用程序可以和其他的程序共享概功能或者数据给那那些与自己拥有相同数字证书的程序。如果某个权限(permission)的protectionLevel是signature,则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序。
在签名时,需要考虑数字证书的有效期:
(1)数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有改数字证书的程序将不能正常升级。
(2)如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。
(3)Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。
Android数字证书包含以下几个要点:
              (1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
              (2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
              (3)如果要正式发布一个Android ,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。
              (4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。  58. 什么是ANR 如何避免它?
【解58】http://blog.csdn.net/Zengyangtech/archive/2010/11/21/6025671.aspx  59. android中的动画有哪几类,它们的特点和区别是什么?
  60. handler机制的原理。
  61. android中线程与线程,进程与进程之间如何通信。
  62. 说说mvc模式的原理,它在android中的运用。
  63. android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别。
  64. DDMS与TraceView的区别?
  65. res目录有默认几项resource。
  66. android的哪个版本是一次重大的升级?

 

【Java核心】
1) What is the purpose of serialization?
为了传输,将java对象串行化以后变成01串方便传输或者保存,可以很容易的反串行变回原来的java对象。其中@tranxx的一个什么注解可以让java忽略某个属性不做串行化,比如某个巨大的字符串,有效减小串行化后的数据量。

2) What is the difference between JDK and JRE?
JDK是有开发功能的,比如javac什么的,javap什么的;JRE就是一个runtimeenvironment,跑java字节码的

3) What is the difference between equals and ==?
==是比较引用,equals是Object类的一个方法,可以通过重写equals方法达到比较内容的目的

4) When will you use Comparator and Comparableinterfaces?
比较大小有的很容易,比如说2>1, "abc">"aba",这种可以通过自然特性比较的容易理解,但是如果比较两个对象的时候怎么比呢,比如说比较两个人,是比年龄?身高?还是体重?
所以可以通过实现Comparable来实现比较大小的功能,还是用人来说,就比较年龄,A的年龄比B大,就认为A>B
这样的好处有很多,比如说实现了Comparable的以后,就可以用Collections.sort方法来排序。
问题是并不是每次都以年龄比较的,如果下次要比较体重怎么办?那么就要写一个实现了Comparator的比较器来比较传入的两个对象的大小。所以用 Collections.sort方法排序的时候传入一个List和一个Comparator

5) What is the wait/notify mechanism?
wait和notify的机制。。我没深入研究过,不过我想应该是通过共享锁的方法,比如说将某个对象设为锁(用那个synchronized关键字),某个线程占用了该锁以后,其它线程无法获得该锁就等着,知道那个占用线程释放锁,唤醒等待线程。
这个瞎掰的,按照对操作系统的的了解吹吹。。。

6) What is the difference between checked and uncheckedexceptions?
我不知道什么叫checked 和unchecked exception,我只知道有check exception 和runtimeexception,前者必须用try catch来处理的,后者不需要,比如数组越界之类和除以0这样的异常就是runtimeexception。

7) What is the difference between final, finally andfinalize?
这个太普通了,要写起来也太多了,只说一下finally的时候也可以没有catch,但是必须有try
finalize方法在对象被回收时调用,但是被调用的时候不代表一定马上就被回收,且他只会执行一次,比如说自己手动调用一次以后,等他被回收的时候也不会被执行了。

【Java企业版】
8) What is the difference between web server and appserver?
web server: 就是提供一个网站的,比如apache,IIS等,处理一个http请求,将静态网页或者图片什么的发回去
app server:可以执行程序的,比如说tomcat什么的。
这也是我瞎掰的。。。觉得自己说的不够清楚。。

9) Explain the Struts1/Struts2/MVC applicationarchitecture?
这个要写就太多了,就是模型-视图-控制三层架构,比如Struts2中,FilterAction对应着Control,Action返回的那些result对应着视图,strut2支持的视图层就多了,比如jsp,甚至是pdf等。。。模型就对应着后来的业务逻辑吧

10) What is the difference between forward andsendredirect?
sendredirect重新开一个request

【一般问题】
11) How does a 3 tier application differ from a 2 tierone?
三层模型和两层模型的区别?什么业务逻辑和展示层分离等等,有效分工,有利于后期维护等等。。。

12) How does the version control process works?
版本控制,目前有两大类吧,CVS,SVN等属于集中式的,Git属于分布式的,目前Git很火啊。
process就是check out > update > modify> check in, 如果发现冲突那么 merge > checkin.

13) What is the difference between JAR and WAR files?
jar和war都是zip格式压缩,war是web项目压缩的意思,里面有WEB-INF文件夹,下面有web.xml配置文件

【数据库】
14) What is a Left outer join?
左外连接,就是将左表对应于右表中没有关联的数据也列出来,比如
表 A
a b
c d
e f
表 B
b 1
d 2
c 3
A left outer join B的结果为:
a b 1
c d 2
e f
好久没有写SQL语句了,不记得是不是这样了。。
15) What is the difference between UNION and UNIONALL?
前者去除重复记录,后者不去除

你可能感兴趣的:(java,thread,android,service,嵌入式操作系统)