Android 面试题目整理

多次面试下来,发现自己在数据结构和算法方面基础很薄弱。

1.二叉树的前序,中序,后序遍历?

2.hashMap,红黑树的原理?

3.binder机制?

4.IntentService与Service‘的区别 

 https://www.cnblogs.com/denluoyia/p/5997452.html

 Android学习笔记---Service及IntentService理解

 https://www.cnblogs.com/xieyong_198510/p/3479408.html

异步消息处理机制,异步是如何体现的?
这个就要提到MessageQueue,正常情况下相当于队列,但注意MessageQueue的结构是一个单链表,不是队列,遵循先进先出法则。但是可以通过属性的设置来置顶(插队)这个只有链表能够做到,队列无法做到(只能在尾部添加),由于这里经过了线程的切换和消息处理的灵活性导致过程有延时,所以它的处理不是同步的,是异步的。
通过多线程去进行并行的操作(没有延时,实时性很好)
通过handler去进行异步请求处理操作(有延时),不过这里想讨论另一个方式来进行异步请求操作。
IntentService
 IntentServiceService类的子类,用来处理异步请求。客户端通过startService(Intent)方法传递请求给IntentService
 IntentService通过worker thread处理每个Intent对象,执行完所有工作后自动停止Service
 写构造方法 复写onHandleIntent()方法
IntentService执行如下操作 
   1.创建一个与应用程序主线程分开worker thread用来处理所有通过传递过来的Intent请求
   2.创建一个work queue,一次只传递一个intentonHandleIntent()方法中,从而不用担心多线程带来的问题
   3.当处理完所有请求后自动停止服务,而不需要我们自己调用stopSelf()方法
   4.默认实现了onBind()方法,返回值为null
   5. 默认实现了onStartCommand()方法,这个方法将会把我们的intent放到work queue中,然后在onHandleIntent()中执行。
创建 MyIntentService.java 继承:android.app.IntentService
由于一般的Service是运行在主线程中,对于一些耗时操作,是不能放在主线程的。这个时候就必须采取异步处理的方式,开启子线程去做耗时操作,于是IntentService应运而生。
调试方法:
Log.
d("MyIntentService"," tid2 "+Thread.currentThread().getId()); // Causes the currently executing thread to sleep some time Thread.sleep(5000);表示将当前线程sleep 5s 从调试的log中发现,在主线程中的IntentService是自动停止的,前提是将所有送过来的intent都处理完成。且在IntentService的方法中除了onHandleIntent方法,其他的方法都是运行在主线程中。这里的onHandleIntent方法是运行在一个叫worker thread中。 这个线程是一个子线程,耗时操作可以放到这里执行。

 5.大端与小端存储模式

在计算机系统中是以字节为单位的,每一个字节对应着一个地址。而对于宽度大于8位的处理器,如16/32/64,对应的寄存器宽度大于一个字节,必然涉及到字节的安排的问题,于是就有了大端与小端存储模式之分,高位字节与低位字节的安排。
注意:小端和我们的逻辑一致(高位字节大地址,地位字节小地址);大端是表面的形式(高位字节小地址,低位字节大地址)

start and fork me in my GitHub

https://github.com/chsiguo

posted @ 2019-04-03 22:03  代码海洋中的一条鱼  阅读(202)  评论(0编辑  收藏  举报