Android面试题2019

一、网络知识

1、TCP和UDP的区别
2、https加密原理
3、socket有了解,socket是在应用层和传输层之间的一个抽象层

二、Android知识

1、Activity启动模式(standard模式、singleTop模式、singleTask模式、singleInstance模式)
1248713-fe2a61650dc6045f.png
Activity启动模式
2、Activity(或组件)通信机制

问题:

  • 通过什么携带需要传递的数据
  • 原型数据和java对象数据都能直接传递吗
  • 序列化的方式有哪几种,有啥区别
  • 为啥对象需要序列化才能进行传递

答案:

一般而言,为了保证安全,进程获得的内存空间时一块抽象的内存,然后会映射到实际的某一块物理内存,从而,每个进程都无法访问其他进程所在内存里的数据;
首先,原生的数据如int string数据是可以传递的,只要你说明这个数据时什么类型,那么就可以在目标进程里复原。但是对象数据,如果直接把对象传递过去,目标进程是无法复原的,因而也无法识别。

  • 对象序列化机制
  • 基于java语言的Serializable序列化方法:对象类要实现Serializable接口

JAVA中的Serialize机制是将对象转化为字节流存储在外部设备,在需要时重新生成对象(采用java反射机制)。主要用于外部设备保存对象状态,网络传输对象等场景。缺点是产生很多中间对象及造成一定的GC(垃圾回收),简而言之Serialize更慢

  • 基于android系统提出的Parcel序列化方法:实现Parcelable接口

Android提供的Parcel机制是针对移动设备的轻量级高效对象序列化机制。整个过程均在内存进行,不涉及外部设备,反序列化时读取的就是原对象,而不会创建新对象。简单来说Parcel更快;不过它使用复杂。

3、Android多线程管理

问题:

  • 为什么在子线程执行UI操作会导致程序闪退
  • 多个线程间如何进行通信
  • 在主线程执行耗时操作会导致什么结果/什么是ANR现象,如何避免ANR现象发生

答案:

  • 线程是不安全的

附加知识:什么是线程安全/不安全?
在多线程环境里,往往一段代码会被多个线程分别执行。而常见的情况是一个线程执行了该段代码的一部分后,
会被另一个线程抢走时间片又去执行这段代码,并修改其中变量。
当原线程再次回来继续运行时,其实里面的变量已经被别人改动了但它却不知,最后会导致错误。
这种线程就是不安全的。而安全的线程在执行一段代码时,只要没执行完,
其他线程就不能来执行这段代码或修改变量知道它执行完。

扫描二维码关注公众号,回复: 6510192 查看本文章

简单来说,每个线程拥有上面这三个东西,如线程A想发送消息给线程B,那么在线程A中调用线程B的handler来发送消息,消息会自动发送线程B的消息队列中,同时线程B的looper在不断遍历这个队列,如果发现有新消息就会自动去处理。

尽量在子线程中执行耗时操作(如网络请求或数据库读取等)或者资源开销较大的操作,当子线程执行完毕后,利用handler通知主线程做出更新。

4、内存管理机制

问题:

  • 图片缓存机制
  • 内存优化需要考虑哪些点

答案:

  • 图片缓存算法

LRU算法:设置缓存图片最大数量,当图片数量超过最大值就删除使用较少的图片,从而优化内存。
FTU算法:设置图片的缓存时限,从最后一次使用算起,当达到时限即删除。
FMU算法:设置固定大小的缓存空间,当达到空间限制后删除最大尺寸的图片。

1、Bitmap优化
2、对象引用类型
3、对象池和线程池的复用

三、java知识

参考文章

猜你喜欢

转载自blog.csdn.net/weixin_34116110/article/details/90794479