面试题目及其答案大全

别妄想泡我
907次浏览
2021年02月07日 17:38
最佳经验
本文由作者推荐

淘宝客服中心-

2021年2月7日发(作者:美美伴游网)


android


面试题目及其答案大全



1



++i



i++


区别



2< /p>



makefile


文件代码,写代码< /p>



3


,隐藏与重写的区别




4



linux


基本命令使用





如:如何查询帮助文档(


man



,


如何查处文件


(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

< p>


UMI


建模概念



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


的虚拟机。每一个


Android


应用程序都在它自己的进程中运行,都拥有


一个独立的


Dalvik


虚拟机实例。而每一个


DVM


都是在


Linux

< p>
中的一个进程,所以说可以


认为是同一个概念。





2



sim


卡的


EF


文件有何作用







sim


卡的文件系统有自己规范,


主要是为了和手机通讯,

< p>
sim




身可以有自己 的操作系


统,


EF


就是作存储并和手机 通讯用的





3


、嵌入式操作系统内存管理有哪几种,



各有何特性







页式, 段式,段页,用到了


MMU,


虚拟空间等技术

< br>




4




什么是嵌入式实时操作系统


, Android


操作系统属于实时操作系统吗


?






嵌入式 实时操作系统是指当外界事件或数据产生时,


能够接受并以足够快的速度予以处


理,


其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作 出快速响应,


并控


制所有实时任务协调一致运行的嵌入式操作系 统。


主要用于工业控制、



军事设备、



航空航

< br>天等领域对系统的响应时间有苛刻的要求,


这就需要使用实时系统。


又可分为软实时和硬实


时两种,而


android< /p>


是基于


linux


内核的,因此属于软实 时。





5


、一条最长的短信息约占多少


byte?






中文


70(


包括标点


)


,英文


160


< br>160


个字节。





6




android


中的动画有哪几类,它们的特点和区别是什么


?






两种,一种是


Tween

< p>
动画、还有一种是


Frame


动画。


Tween


动画,这种实现方式可以


使视图组件移动 、放大、缩小以及产生透明度的变化


;


另一种

< br>Frame


动画,传统的动画方法,


通过顺序的播放排列 好的图片来实现,类似电影。




< /p>


7



handler

机制的原理







andriod


提供了



Handler




Looper


来满足线程间的通信。


Handler


先进先出原则。


Looper


类用来管理特定线程内对象之间 的消息交换


(Message Exchange)








1)Looper:


一个线程可以产生一个

< br>Looper


对象,由它来管理此线程里的


Messag e


Queue(


消息队列


)








2)Handler:


你可以构造


Handler


对象来与

< p>
Looper


沟通,以便


push


新消息到


Message


Queue



;


或者接收


Looper< /p>



Message Queue


取出


)


所送来的消息。







3) Message Queue(


消息队列


):


用来存放线程放入的消息。







4)


线程:


UI thread


通常就是


main thread


,< /p>



Android


启动程序时会替它建立 一个


Message


Queue






8


、说说


mvc


模式的原理,它在


androi d


中的运用






MVC(Model_view_ contraller)



模型


_


视图


_


控制器”




MVC


应用程序总是由这三个部分组


成。


Event(


事件


)


导致


Controller


改变


Model



View

< p>
,或者同时改变两者。只要



Controlle r


改变了


Models


的数据或者属性 ,所有依赖的


View


都会自动更新。类似的,只要

< p>
Contro




9< /p>



Activity


的生命周期







和其他手机



平台



的应用



程序



一样,


Android


的应用程序



的生命周期是被统一掌控



的,也



就是说我们写的应用程序命运 掌握在别人


(


系统


)

< br>的手里,我们不能改变它,只能学






适应它。






简单地说一下为什么是这样:我们手机在运行



一个应用程序的时候,有可能打进来电




发进来短信



,或者没有电了,这时候 程序都会被中断,优先去服务电话的基本功能






外系统也不允许你占用太多资源



,至 少要保证电话功能吧


,


所以资源不足的时候也就有




能被干掉。







言归正传,


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


方法会抛



异常的。







onPause



onstop

< p>



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






上面说的是属性名称,具体有什么值是在





可以看到,比如这个



就对应于


_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


教程


< p>
里的情况,


你正在编辑某一个


note

< p>


突然被中断,


那么就把


这个


note



id

< br>记住,再起来的时候就可以根据这个


id


去把那个


note


取出来,程序就完整


一些。


这也是看你的应用需不需要保存什么,


比如你的界面就是读取一个列表,


那就不需要


特殊记住什么,哦,



没准你需要记住滚动条的位置


...




12




调用与被调用:我们的通信使者


Intent






要说


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


就好了,


这个部分设计



地确实很好啊。








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

< p>
里可以用


getIntent()


来的到这个


intent


和数据。







第二种就需要先看一下


AndroidMenifest

< p>
中的


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


,让系统帮你去调用那个界面,这样就多么松藕合 啊,而且符合了生命


周期被系统管理的原则。







想知道


category


都有啥,


Android


为你预先定制好的


action


都有啥等等,请亲自访问


官方链接


In tent






ps:


想知道怎么调用系统应用程序 的同学,可以仔细看一下你的


logcat


,每次运行一个


程序的时候是不是有一些信息比如


:






Starting


activity:


Intent


{


action=tegories={ER}


flags=0x10200000comp={/yPicker} }






再对照一下


Intent


的一些

< p>
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=






就变 成半透明的,


[


友情提示


-.-]


类似的这种


activity


的属性可以在


ble


类的


AndroidManifestActivity


方法中看到,



中所有元素的属性的介绍都可


以参考这个类


ble


上面说的是属性 名称,具体有什么值是在



中可以看到,比如这个



就对应于


_Dialog ,



'_'


换成


'.'


<--


注意:这个是文章内容不是笑脸)就可以用在描述文件中了


,


找找类定义和描述文件中的对


应关系就都明白了。







4.


如何退出

Activity?


如何安全退出已调用多个


Activi ty



Application?






5.


请介绍下


Android


中常用的五种 布局。




淘宝客服中心-


淘宝客服中心-


淘宝客服中心-


淘宝客服中心-


淘宝客服中心-


淘宝客服中心-


淘宝客服中心-


淘宝客服中心-