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 IntentService是Service类的子类,用来处理异步请求。客户端通过startService(Intent)方法传递请求给IntentService, IntentService通过worker thread处理每个Intent对象,执行完所有工作后自动停止Service。 写构造方法 复写onHandleIntent()方法 IntentService执行如下操作 1.创建一个与应用程序主线程分开worker thread用来处理所有通过传递过来的Intent请求 2.创建一个work queue,一次只传递一个intent到onHandleIntent()方法中,从而不用担心多线程带来的问题 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
以分享为宗旨,共同进步