安卓面试杂谈二

1、什么情况下要使用AIDL
在这里插入图片描述
2、面向对象思想和面向过程思想的区别:
  面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,对象包括属性和行为。
面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展

面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低

3、Handler机制
  Handler对象发送消息,调用MessageQueue(消息队列)的enqueueMessage()方法来让消息进入队列,Looper.loop()方法循环检测消息队列中是否有新消息入队。如果有则将这个消息取出,将它传递到msg.target(Handler)的dispatchMessage()方法中,内部调用handleMessage()。

注:每个线程中最多只会有一个Looper对象,一个Looper对应了一个MessageQueue
详细:Android异步消息处理机制完全解析,带你从源码的角度彻底理解

4、HashMap 是否是线程安全的,如何在线程安全的前提下使用 HashMap
  Hashtable 线程安全,但效率低,因为是 Hashtable 是使用 synchronized 的,所有线程竞争同一把锁;而 ConcurrentHashMap 不仅线程安全而且效率高,因为它包含一个 segment 数组,将数据分段存储,给每一段数据配一把锁,也就是所谓的锁分段技术(存在于Java7)。Java 7和8有区别,在8中ConcurrentHashMap摒弃了Segment(锁段)的概念,而是启用了一种全新的方式实现,利用CAS算法 + synchronized。
  HashMap线程不安全:因为多线程会导致 HashMap 的 Node 链表形成环形数据结构,一旦形成环形数据结构,Node 的 next 节点永远不为空,就会在获取 Node 时产生死循环。
  当使用 Collections.synchronizedMap(new HashMap()) 进行包装后就返回一个线程安全的SynchronizedMap,而在SynchronizedMap类中使用了synchronized同步关键字来保证对Map的操作是线程安全的。
  要保证线程安全的话使用ConcurrentHashMap,性能较好,详情:如何线程安全的使用HashMap
用法:

Map<Long, String> conMap = new ConcurrentHashMap<Long, String>();
        for (long i = 0; i < 15; i++) {
            conMap.put(i, i + "");
        }
        for (Entry<Long, String> entry : conMap.entrySet()) {
            long key = entry.getKey();
            if (key < 10) {
                conMap.remove(key);
            }
        }
        for (Entry<Long, String> entry : conMap.entrySet()) {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值