最近一直都在面试,只有把找工作当做一种工作认真对待的时候我才觉得自己这一天没有荒废。不去想未来有多远,活在当下做最好的自己就心满意足了。
说下面试吧,以后一点点记录,我刚毕业也就算是个初级程序员吧,以前看《80后脱口秀》王自健说:“所谓的小鲜肉,到了社会上就是没经验”,所以还是多多 总结每次的经验与教训吧。
1、Activity与Fragment的区别,什么情况下使用Activity什么情况下使用Fragment
(1)从fragment出现:fragment的一开始主要是为了解决平板的空间利用问题的,因此fragment能够更好的利用空间资源。
(2)fragmnet生命周期:从fragment生命周期可以看出来fragment必须依赖于activity,fragment通过onattach方法进行绑定Activity。fragment生命周期:onAttach—onCreate—onCreateView—onAcitivityCareated——onStart—onResume—运行—onPause—onStop—onDestoryView—onDestory。
(3)使用方面:①fragment可以在xml文件布局中编写,使用起来更加灵活,Activity则不能。②fragment加载布局是通过inflater.inflate进行加载的而Activity是通过seContentView加载布局的。③fragment可以在一个界面上灵活的替换一部分页面,Activity不可以。
(4)如果一个界面特别难实现的时候就可以用fragment。
2、View 与PopupWindow和Window的区别
(1)View是所有控件的父类,包含了ViewGroup和ImageButton等子控件。
(2)PopWindow类似弹出框吧,(我也不知道区别在哪里,不说又很尴尬,所以可以说下PopWindow与AlertDialog区别)
AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。这两种区别的表现是:AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。
(3)Window是主窗口,具体内容由phonewindow实现。
3、Service运行在主线程还是子线程?
主线程(可以通过在service中获取主线程id进行判断)
4、Handler消息机制
Handler消息机制分为4部分
(1)Handler本身:发送和处理消息
(2)Message:消息载体
(3)MessageQueue:消息队列
(4)Looper:轮询器
Handler发送消息Message之后,消息被放到MessageQueue消息队列中,Looper轮询器会不断进行轮询,当有消息需要处理时就会拿给handler,handler进行处理。但是使用时如果当前线程不是主线程,需要在子线程中创建looper轮询器调用looper.prepare
5、SharedPrefrence与Sqlite区别
二者都是轻量级的,都可以进行数据存储。其中SharedPrefrence是以xml文件形式进行存储,且存储的数据类型为基本数据类型,一般用于存储一些琐碎的数据比如用户名密码。Sqlite除了提供基本的存储类型外还提供了Blob类型数据存储,可以自己定义存储类型。
6、说下线程的几种实现方式
线程实现方式主要有三种:继承Thread、实现Runnable接口、实现Callable接口。
Runnable接口相比继承Thread类有如下好处:
避免继承的局限,一个类可以继承多个接口。适合于资源的共享。
Callable与Runnable的区别在于它可以传递一个返回值。
7、说下线程的几种实现方式
线程实现方式主要有三种:继承Thread、实现Runnable接口、实现Callable接口。
Runnable接口相比继承Thread类有如下好处:
避免继承的局限,一个类可以继承多个接口。适合于资源的共享。
Callable与Runnable的区别在于它可以传递一个返回值。
7、RelativeLayout与LinearLyout哪个性能更好
在没有weight属性的情况下LinearLayout更好,这是因为LinearLayout源码中测量控件部分分为了水平和垂直两种情况,而RelativeLayout则不是。