面试题目及其答案大全
淘宝客服中心-
android
面试题目及其答案大全
1
,
++i
和
i++
区别
2<
/p>
,
makefile
文件代码,写代码<
/p>
3
,隐藏与重写的区别
4
,
linux
基本命令使用
如:如何查询帮助文档(
man
p>
)
,
如何查处文件
(fiind)
,常用命令
5
,进程间通信有几种,效率如何
6
、
什么是嵌入式实时操作系统
, Android
操作系统属于实时操作系统吗
?
7
,
tcp/ip
有几层
8
、
一条最长的短信息约占多少
byte?
9
,
p2p
和
SMTP
分别在哪层
10
、
an
droid
中的动画有哪几类,它们的特点和区别是什么
?
11
,多态概念(父类引用子类参数)
12
、
handler
机制的原理
13
,
java
写
1+N
的和
14
,数据结构与算法
如
排序,二叉树
15,MVC
概念(为什么有
DAO
层,什么作用)
16
,
GC
回收机制
17
、说说
mvc
模式的原理,它在
androi
d
中的运用
18
,
android
项目
自述
19
,
java
的进程与线程维护
20
、
Activity
的生命周期
21
,
N*N
打印出来的样子是(例如
N=4
)
1
2
3
4
12
13
14
5
11
16
15
6
10
9
8
7
22
,
linux
末行,输入,命令三个模式
23
、
Android dvm
的进程和
Li
nux
的进程
,
应用程序的进程是否为同一个概念
24
,
android
四层架构分别的作用(
android
系统框图)<
/p>
25
、
sim
卡的
EF
文件有何作用
26
,
android
四大组件,
生命周期,
onpause()
与
on
stop
()的区别
27
,
UMI
建模概念
p>
28
,
C
语言打印
N*N
数组,规律如下:
2
维
1 2
3 4
3
维
1 2 3
8 9 4
7 6 5
4
维
1
2
3
4
12
13 14
5
11 16 15
6
10
9
8
7
1
、
Android dvm
的进程和
Li
nux
的进程
,
应用程序的进程是否为同一个概念
DVM
指
dalivk
的虚拟机。每一个
p>
Android
应用程序都在它自己的进程中运行,都拥有
一个独立的
Dalvik
虚拟机实例。而每一个
DVM
都是在
Linux
中的一个进程,所以说可以
认为是同一个概念。
2
、
p>
sim
卡的
EF
文件有何作用
sim
卡的文件系统有自己规范,
主要是为了和手机通讯,
sim
本
身可以有自己
的操作系
统,
EF
就是作存储并和手机
通讯用的
3
、嵌入式操作系统内存管理有哪几种,
各有何特性
页式,
段式,段页,用到了
MMU,
虚拟空间等技术
< br>
4
、
什么是嵌入式实时操作系统
, Android
操作系统属于实时操作系统吗
?
嵌入式
实时操作系统是指当外界事件或数据产生时,
能够接受并以足够快的速度予以处
理,
其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作
出快速响应,
并控
制所有实时任务协调一致运行的嵌入式操作系
统。
主要用于工业控制、
军事设备、
航空航
< br>天等领域对系统的响应时间有苛刻的要求,
这就需要使用实时系统。
又可分为软实时和硬实
时两种,而
android<
/p>
是基于
linux
内核的,因此属于软实
时。
5
、一条最长的短信息约占多少
byte?
p>
中文
70(
包括标点
)
,英文
160
,
< br>160
个字节。
6
、
p>
android
中的动画有哪几类,它们的特点和区别是什么
?
两种,一种是
Tween
动画、还有一种是
Frame
动画。
Tween
动画,这种实现方式可以
使视图组件移动
、放大、缩小以及产生透明度的变化
;
另一种
< br>Frame
动画,传统的动画方法,
通过顺序的播放排列
好的图片来实现,类似电影。
<
/p>
7
、
handler
机制的原理
andriod
提供了
Handler
和
Looper
来满足线程间的通信。
Handler
先进先出原则。
Looper
类用来管理特定线程内对象之间
的消息交换
(Message
Exchange)
。
1)Looper:
一个线程可以产生一个
< br>Looper
对象,由它来管理此线程里的
Messag
e
Queue(
消息队列
)
。
2)Handler:
你可以构造
Handler
对象来与
Looper
沟通,以便
push
新消息到
Message
Queue
里
;
或者接收
Looper<
/p>
从
Message Queue
取出
p>
)
所送来的消息。
3) Message Queue(
消息队列
):
用来存放线程放入的消息。
4)
线程:
UI thread
通常就是
main thread
,<
/p>
而
Android
启动程序时会替它建立
一个
Message
Queue
。
8
、说说
mvc
模式的原理,它在
androi
d
中的运用
MVC(Model_view_
contraller)
”
模型
_
p>
视图
_
控制器”
。
MVC
应用程序总是由这三个部分组
成。
Event(
事件
)
导致
Controller
改变
Model
或
View
,或者同时改变两者。只要
Controlle
r
改变了
Models
的数据或者属性
,所有依赖的
View
都会自动更新。类似的,只要
Contro
9<
/p>
、
Activity
的生命周期
和其他手机
平台
的应用
程序
一样,
Android
的应用程序
的生命周期是被统一掌控
的,也
就是说我们写的应用程序命运
掌握在别人
(
系统
)
< br>的手里,我们不能改变它,只能学
习
并
适应它。
简单地说一下为什么是这样:我们手机在运行
一个应用程序的时候,有可能打进来电
话
发进来短信
,或者没有电了,这时候
程序都会被中断,优先去服务电话的基本功能
,
另
外系统也不允许你占用太多资源
,至
少要保证电话功能吧
,
所以资源不足的时候也就有
可
能被干掉。
p>
言归正传,
Activity
的基本生命周
期如下代码
所示:
Java
代码
1. public
2. class
MyActivity extends Activity {
3.
protected
4. void onCreate(Bundle
savedInstanceState);
5.
6.
protected
7. void onStart();
8.
9. protected
10. void onResume();
11.
12. protected
13. void onPause();
14.
15. protected
16. void onStop();
17.
18. protected
19. void onDestroy();
20. }
21.
22.
public
class
MyActivity extends Activity {
protected
void onCreate(Bundle
savedInstanceState);
protected
void onStart();
protected
void onResume();
protected
void onPause();
protected
void onStop();
protected
void onDestroy();
}
你自己写的
Activity
会按需要
重载这些方法,
< br>onCreate
是免不了的,
在一个
< br>Activity
正
常启动的过程中,他们被调用的顺序
是
onCreate -> onStart ->
onResume,
在
Activity
被干掉
的时候顺序是
onPause -> onStop
-> onDestroy
,
这样就是一个完整的生命周期,
但是有人问
了
,程序正运行着呢来电话了,这个程序咋办
?
中止了呗,如果
中止的时候新出的一个
Activity
是全屏的那么:
onPause->onStop
,恢复的时候
onStart->onResume
,如果打断
这
个应用程序的是一个
Theme
为
T
ranslucent
或者
Dialog
< br>的
Activity
那么只是
o
nPause
,
恢复
的时候
onResume
。
详细介绍一下这几个方法中系统在做什么以及我们应该做什么:
onCreate:
在这里创建界面
,做一些数据
的初始化工作
onStart:
到这一步变成用户可见不可交互
的
onResume:
变成和用户可交互
的,
(
在
activity
栈系统通过栈的方式管理这些个
Act
ivity
的最上面,运行完弹出栈,则回到上一个
Activ
ity)
onPause:
到这一步是可见但不可交互
的,系统会停止动画
等消耗
CPU
的事情
从上文的描述已经知道,
应该在这里保存你的一些数据
,
因为这个时候
<
/p>
你的程序的优先级
降低,有可能被系统收回。在这里保存的数据,
应该在
onResume
里读出来,注意:这个
方法里做的事情时间要短,因为下一
个
activity
不会
等到这个方法完成才启动
onstop:
变得不可见
,被下一个
activity
覆盖了
onDestroy:
这是
acti
vity
被干掉前最后一个被调用方法了,可能是外面类调用
f
inish
方
法或者是系统为了节省空间将它暂时性的干掉,可以用
isFinishing()
来判断它,如果你有一
个
Progre
ss
Dialog
在线程中转动,请在
onDestroy
里
把他
cancel
掉,不然等线程结束的时
候,调
用
Dialog
的
cancel
方法会抛
异常的。
p>
onPause
,
onstop
,
onDestroy
,三种状态
下
activity
都有可能被系统干掉
为了保
证程序的正确性,你要在
onPause()
里写上持久层操作
的代码,将用户编辑的内容
都保存到存储介质上
(
一般都是数据库
)
。实际
工作中因为生命周期的变化而带来的问题也
很多,
比如你的应用
程序起了新的线程在跑,
这时候中断了,
你还要去维护那个线程
,
是暂
停还是杀掉还是数据回滚,是吧
?
因为
Activity
可能被杀掉,
所以线程中使用的变量和一些
界面元素就千万要注意了,
一般我
都是采用
Android
的消息机制
[Handler,Message]
来处理多
线程和界面交互的问题。
这个我后面会讲一些,
最近因
为这些东西头已经很大了,
等我理清
思绪再跟大家分享。
ller
改变了
V
iew
,
View
会
< br>
从潜在的
Model
中获取数
据来刷新自己。
10
、让
Activity
变
成一个窗口:
Activity
属性设定
讲点轻松的吧
,
可能有人希望做出来的
应用程序是一个漂浮在手机主界面的东西,那么
很
简单你只需要设置
一下
Activity
的主题就可以了在
中定义
Activity
的
地方一句话:
Xml
代码
1.
android :theme=
2.
3.
android:theme=
android :theme=
android:theme=
这就使你的应用程序变成对话框的形式弹出来了,或者
Xml
代码
1.
android:theme=
2.
3.
android:theme=
android:theme=
android:theme=
就变成半透明的,
[
友情提示
-.-]
类似的这
种
activity
的属性可以在
bl
e
类
的
AndroidManife
stActivity
方法中看到,
中所有元素的属性的介绍都可
以参考这个类
ble
p>
上面说的是属性名称,具体有什么值是在
中
可以看到,比如这个
就对应于
_Dialog
,('_'
换成
'.'
<
--
注意:
这个是文章内容不是笑脸
)
就可以用在描述文件
中了
,
找找类定义和描述
文件中的对应关系
就都明白了。
11
、
<
/p>
你后台的
Activity
被系统回收怎
么办:
onSaveInstanceState
当你的程序中某一个
Activity A
在运行时中,主动或被动地运行另一个新的
Activity
B
这个时候
A
会执行
Java
代码
1. public
2. void
onSaveInstanceState(Bundle outState) {
3.
super
.onSaveInstanceState(outState);
4. g(
5. }
public
void
onSaveInstanceState(Bundle outState) {
sup
er
.onSaveInstanceState(outState);
g(
}
B
完成以后又会来找
A,
这个时候就有
两种情况,
一种是
A
被回收,
一种是没有被回收,
被回
收的
A
就要重新调用
onCrea
te()
方法,不同于直接启动的是这回
onCreate()
里是带上
参数
savedInstanceState
,没被收回的就还是
onResume
就好了。
sav
edInstanceState
是一个
Bundle
对象,你基本上可以把他理解为系统帮你维护的一
个
Map
对象。在
onCreate()
里你可能会用到它,如果正常启动
onCreate
就不会
有它,所以
用的时候要判断一下是否为空。
Java
代码
1. if(savedInstanceState != null){
2. long id = g(
3. }
if(savedInstanceState != null){
long id = g(
}
就像官
方的
Notepad
教程
里的情况,
你正在编辑某一个
note
,
突然被中断,
那么就把
这个
note
的
id
< br>记住,再起来的时候就可以根据这个
id
去把那个
note
取出来,程序就完整
一些。
这也是看你的应用需不需要保存什么,
比如你的界面就是读取一个列表,
那就不需要
特殊记住什么,哦,
没准你需要记住滚动条的位置
...
12
、
调用与被调用:我们的通信使者
Intent
p>
要说
Intent
了,
Intent
就是这个这个意图
,
应用程序间
Intent
进行交流,
打个电话啦,
来个
电话啦都会发
Intent,
这个是
Android
架构的松耦合的精髓部分,大大提高了组件的<
/p>
复用性,比如你要在你的应用程序中点击按钮,给某人打电话,很简单啊,看下代码先:<
/p>
Java
代码
1. Intent intent = new Intent();
2. ion(_CALL);
3.
a((
4.
startActivity(intent);
Intent intent =
new Intent();
ion(_CALL);
a((
startActivity(intent);
p>
扔出这样一个意图,
系统看到了你的意图就唤醒了电话拨号程序,<
/p>
打出来电话。
什么读
联系人,
发短信啊,
邮件啊,
统统只需要扔出
intent
就好了,
这个部分设计
地确实很好啊。
那
p>
Intent
通过什么来告诉系统需要谁来接受他呢
?
通常使用
Intent
有两种方法,第一种是直接说明需要哪一个类来接收代码如下
:
Java
代码
1. Intent intent = new Intent(this, );
2.
ras().putString(
3. tartActivity(intent);
Intent intent = new
Intent(this, );
ras().putString(
tartActivity(intent);
第一种
方式很明显,直接指定了
MyActivity
为接受者
,
并且传了一些数据给
MyActivity
,
在
MyActivity
里可以用
getIntent()
来的到这个
p>
intent
和数据。
p>
第二种就需要先看一下
AndroidMenifest
中的
intentfilter
的配置了
Xml
代码
< intent-filter>
< action
android:name=
/>
<
action
android:value=
/>
<
action
android:value=
/>
<
category
android:name=
/>
<
data
android:mi
meType=
.dir/
/>
<
/intent-filter>
这里面配置用到了
action,
data,
category
这些东
西,那么聪明的你一定想到
intent
里
也会有这些东西,然后一匹配不就找到接收者了吗
?
act
ion
其实就是一个意图的字符串名称。
上面这段
intent-filter
的配置文件说明了这个
Activity
可以接受不同的
Action
,当然相
应的程序逻辑也不一样
咯
,
提一下那个
mimeType,
他是在
ContentProvide
r
里定义的,你要
是自己实现一个
Co
ntentProvider
就知道了,必须指定
mimeType
才能让数据被别人
使用。
不知道原理说明白没,总结一句,就是你调用别的界面不是直
接
new
那个界面,而是
通过扔出一个
intent
,让系统帮你去调用那个界面,这样就多么松藕合
啊,而且符合了生命
周期被系统管理的原则。
p>
想知道
category
都有啥,
Android
为你预先定制好的
action
都有啥等等,请亲自访问
官方链接
In
tent
ps:
想知道怎么调用系统应用程序
的同学,可以仔细看一下你的
logcat
,每次运行一个
p>
程序的时候是不是有一些信息比如
:
Starting
activity:
Intent
{
action=tegories={ER}
flags=0x10200000comp={/yPicker} }
p>
再对照一下
Intent
的一些
set
方法,就知道怎么调用咯,希望你喜欢:
)
Android
面试题
1.
请描述下
Activity
的生命周期
。
2.
如果后台的
< br>Activity
由于某原因被系统回收了,如何在被系统回收之前保存当前状<
/p>
态
?
调用
onSaveInstanceState();
3.
如何将一个
Activity<
/p>
设置成窗口的样式。
(Edited by Sodino)
单你只需要设置
< br>一下
Activity
的主题就可以了在
中定义
Activity
的
地方一句话:
Xml
代码
1.
2.
3.
4.
这就使你的应用程序变成对话框的形式弹出来了,或者
Xml
代码
1.
2.
3.
4.
android:theme=
android:theme=
android
:theme=
android:theme=
就变
成半透明的,
[
友情提示
-.-]
p>
类似的这种
activity
的属性可以在
ble
类的
AndroidManifestActivity
p>
方法中看到,
中所有元素的属性的介绍都可
以参考这个类
ble
上面说的是属性
名称,具体有什么值是在
中可以看到,比如这个
就对应于
_Dialog ,
(
'_'
换成
'.'
<--
注意:这个是文章内容不是笑脸)就可以用在描述文件中了
,
找找类定义和描述文件中的对
应关系就都明白了。
4.
如何退出
Activity?
如何安全退出已调用多个
Activi
ty
的
Application?
5.
请介绍下
Android
中常用的五种
布局。