2017年08月31日Android面试总结:
1.View相关问题
照着我简历上问(LoadingView 网络自动请求自动Loading,成功显示数据,失败显示错误信息)是怎么实现的,回答在baseActivity 里面重写setContentView 方法,然后解释了相关的做法
面试官这时候问,如果重写setContentView的代价比较大,可不可以使用其他的办法来实现?
提示有没有看过activity的setContentView方法源码?
当时其实是懵的.因为我知道要考window,decorview等知识点,但是我对相关知识并未深入研究过,看来要深入学习一下.
然后回答不上,问我自己编写的activity.xml 上面一级是什么,我回答的decorview,回来一看居然蒙对了然后又问我,如何把一个View加上去,需要些什么条件?我当时回答的是必须是一个ViewGroup且必须要有layoutParams属性,也不知道回答正确没有现在来大概的总结一下window、Activity、DecorView、ViewRoot关系,具体的详解看来以后需要花一些时间来写一遍比较长的来分析一下
大概分析一下:Activity并不负责视图控制,它只是控制生命周期和处理事件,真正控制视图的是Window。一个Activity包含了一个Window,Window才是真正代表一个窗口,Window 中持有一个DecorView,而这个DecorView才是 view 的根布局
分析一下考点关键字:Window、Activity、DecorView、ViewRoot关系/activity的启动流程,Activity的setContentView 方法里面做了些什么
2.生产者消费者模式问题
当时面试官是这样说的,在一个餐馆里面,有厨师在生产东西,有一个食客在消费东西,那生产出来的东西用什么东西来存储?
我当时回答说是生产者消费者模式嘛.我当时回答的时候考虑到线程同步问题,把关注点放在了线程同步上面,所以很Sb的回答了HashTable和Vector,后来想想这个也是可以的,但是绝对不是最佳的方案
后来又问我,如果消费者和生产者都在对这个容器做操作的时候,需要做什么操作?
我当时就蒙了,因为之前在学习生产者消费者的时候,使用的都是没有同步的容器,比如(LinkedList),那在读取的时候肯定是要对这个进行加锁的操作的.当时也是蒙了
现在回想起来,其实面试官的考察点就是无非是队列,加锁,同步,其实使用队列是最好的容器,因为生产的时候,肯定有先后顺序的,这样一来,队列就完全可以,其次,要分析到一个问题就是阻塞问题,假设我们使用的是LinkedList,首先多个线程来读写这个仓库,肯定是加锁的,除了加锁之外,在仓库满了或者仓库空了,没有东西可以消费的时候,这时候需要wait(阻塞嘛),这点当时完全没考虑到,所以又要队列,又要同步,又要阻塞,在这种情况下使用LinkedBlockingQueue 是最佳的一种方案,因为什么呢?
如果是LinkedList,我们需要手动进行加锁,手动wait和notify,这样就很麻烦,LinkedBlockingQueue提供了take和put两个阻塞方法
延伸出来可不可以使用ConcurrentLinkedQueue呢?这个和LinkedBlockingQueue有什么区别? 首先两者都是同步的,这就保证了在写代码的时候不用对两者进行加锁操作,LinkedBlockingQueue提供了阻塞方法,当不可以取,或者队列满的时候会阻塞,但是ConcurrentLinkedQueue虽然是线程安全,但是并未提供相关阻塞方法,所以在写代码的时候,一样需要手动wait和notify.
分析一下考点关键字:生产者消费者模式/同步/加锁/阻塞
3.线程怎么使用的?
当时回答的是继承Thread或者实现runnable接口,当时有点装逼了,说不会手动去启动线程,一般使用RxJava框架,然后面试官问RxJava 是什么?比手动启用线程有些好处?.......后来越说越绕...没有表达好.....现在回想起来,无非是介绍RxJava框架的优点,链式和异步.
4.TCP和UDP的区别
当时回答的是TCP稳定可靠,需要进行三次握手,UDP不进行握手,只管发送,不管对方有没有接收到,但是局域网内传递效率高.现在回想起来解释的不是很到位,很多关键点也没描述清楚,应该分点来描述
- TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
- TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等) - 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
- TCP首部开销20字节;UDP的首部开销小,只有8个字节
- TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
5.Http 协议是基于TCP 还是UDP 的....
6.总结
- 面试过程中,思路还是不够清晰
- 回答问题要抓住核心点,分条理回答
- 要去揣测面试官的心理,抓住他面试的主线,可以带节奏,引到你熟悉的技术点上来