阿里android面试准备与题目整理

最近收到了阿里内推的邮件,很快会进行面试,为了准备面试,网上查阅相关阿里历史面试题目,并在这里整理了一下。
感谢以下博主提供的资料

  • 阿里android实习岗面试面经
  • {Android}参加阿里完面试后:一到HR四面,我的复盘经验总结!
  • 阿里巴巴android高级面试经历
  • 我在阿里做了5年的Android面试官,那些你必须知道的套路

android知识

基础

  • Activity的生命周期,每个周期伴随着什么?
    • 深入理解Activity的生命周期
    • onCreate: 初始化,加载布局、控件和变量初始化
    • onStart: 启动,activity可见,但是不在前台
    • onResume: activity在前台并且可见
    • onPause: 暂停,可见并且在前台,此处可以做一些状态存储的工作
    • onStop: 停止,activity不可见,但仍然在内存中,做一些资源的回收工作
    • onDestroy: 销毁,需要释放对应的资源
    • onRestart: 重新开始,当用户按Home键切换到桌面后又切回来或者从后一个Activity切回前一个Activity就会触发这个方法。这里一般不做什么操作
  • Activity的启动模式,四种方法?
    • 这里需要重点注意的是singleTask启动时候的回调onNewIntent以及不同栈之间的Activity如何跳转
    • standard: 标准
    • singleTop:栈顶复用
    • singleTask:单例
    • singleInstance:独立栈
  • 广播注册的两种方式,区别
    • 静态注册和动态注册
    • 在AndroidManifest中进行注册后,不管改应用程序是否处于活动状态,都会进行监听,比如某个程序时监听 内存的使用情况的,当在手机上安装好后,不管改应用程序是处于什么状态,都会执行改监听方法中的内容。
      在代码中进行注册后,当应用程序关闭后,就不再进行监听。我们读知道,应用程序是否省电,决定了该应用程序的受欢迎程度,所以,对于那些没必要在程序关闭后仍然进行监听的Receiver,在代码中进行注册,无疑是一个明智的选择。
  • 项目中如何做到后台监听的?
    • BroadcastReceive和Service相关问题
  • 自定义组件
  • 你是如何理解Android操作系统的,Android的系统结构:Linux Kenel -> Library & Android Runtime -> framework -> application
  • 动画总结。 重点是属性动画内部实现原理,差值器和估值器的使用
  • 隐式Intent与显示Intent的区别

高级

  • Android的性能优化
    • android性能优化从入门到精通
  • ListView和RecyclerView的区别?为什么使用RecyclerView,好在哪里?
    • 样式丰富方面:前者通过支持水平、垂直和变革列表及其他更复杂形式,而后者只支持具体某一种
    • 回收实现:lv需要自己来写ViewHolder,rv已经帮我们实现了ViewHolder,不需要自己去写
    • 复用机制区别
    • 效果增强方面:rv内置了ItemDecoration 和 ItemAnimator ,可以自定义绘制 itemView 之间的一些特殊UI 或Item 项数据变化时的动画效果,而lv实现比较麻烦。
  • ListView的优化
    • 复用ConverView
    • ViewHolder的使用
    • 优化item布局
    • 局部刷新
    • 图片三级缓存,快速滑动取消加载
  • 使用的是什么数据库?
    • greenDao
  • 有没有看过开源的代码?
    • okhttp源码解析
    • arouter源码解析
    • glide
      • Glide缓存策略
    • EventBus
    • RxJava
  • 是否熟悉framework层,如果熟悉,那就对framework做个简介
    • AMS
    • WMS
    • ActivityThread
  • Service的启动模式和生命周期,会延伸到Binder和IntentService,这里最好去看下IntentService的原理和源码。看了源码之后还会延伸到HandThread的问题
  • Android消息机制Handler,工作原理,Lopper架构,内部原理和源码以外还要清楚造成内存泄漏的原因和处理方式,考察阻塞消息队列原理
  • 事件分发原理。这里主要会问事件分发的流程以及进行拦截时候onInterceptTouchEvent返回true时剩下的MOVE与UP如何走,onTouch、onTouchEvent、onClick的先后顺序关系。谈一谈Android中的事件分发
    • android事件分发机制原理
  • 进程之间的通信方式,IPC原理。 这里会延伸到AIDL和Binder
    • android进程间通信:aidl使用及原理
  • 进程之间的优先级。 前台进程、可见进程、后台进程、不可见进程与空进程,如何保活
    • 史上最全android保活方案及比较分析
  • 图片的压缩处理。 这里会问四种图片格式的区别(ARGB888、RGB565、RGB444、Alpha_8),以及问给出一张以上格式的图片如何计算图片所占的内存大小
    • 宽高减少,宽高压缩用到哪个函数:BitmapFactory.options的inSampleSize
    • 色彩深度,ARGB_565、ARGB_888
    • 编码优化,例如鲁班,采用了哈夫曼编码,使用频率高的使用短码,使用频率低的使用长码
  • Android中断点续传的原理
  • 热更新的原理
  • ndk使用的是否熟练
  • 是否熟练hook技术

Java

  • Java内存模型
    • 堆:新生代(8:1:1)、老年代、永久存储区,gc算法
    • 栈:先进后出
    • 方法区
    • 程序计数器: 指向当前线程正在执行的字节码指令的地址(行号)
  • Java的垃圾回收机制,垃圾回收算法?
    • java中的垃圾回收机制
    • 停止复制、标记整理、标记清除
  • 线程池的参数详解?线程池原理
    • java的线程池ThreadPoolExecutor原理解析
  • 线程状态与切换
    • Java线程的5种状态及切换
    • JVM源码分析之Object.wait/notify实现
    • 类锁和对象锁是两种不同的锁,对静态方法加锁或者使用sychronized(XX.class)相当于加了类锁,对实例方法加锁或者采用sychronized(this或对象)相当于加了对象锁,区别在于对于同一个类的不同实例来说,如果加了类锁,那么在一个线程获得类锁后,其他线程即使是持有同一个类的不同的实例,也得等待类锁的释放,因为它们竞争的都是类锁,如果一个线程获得了对象锁,那么持有不同对象的线程则可以并发执行,因为虽然竞争的都是对象锁,但并不是同意把对象锁。既然类锁和对象锁是不同的锁,那么一个线程可以同时获取两把锁。
  • 是否熟悉多线程,如果熟悉,介绍下线程,线程并发和对象锁,并发容器
  • 对象锁和类锁是否会互相影响,会举例子让你判断锁的使用是否恰当,并说出原因
    • JVM源码分析之synchronized实现
    • Java多线程:由浅入深看synchronized的底层实现原理
  • Serializable与Parcable的区别。 在什么情况下需要用到序列化和反序列化,Serializable中为什么要设置UID,设置UID与不设置UID值的区别和影响。
    • 需要序列化的场景
      • 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中
      • 在网络上传送对象的字节序列
      • Android里面Activity之间对象传值
    • 如果我们把User实体添加属性private String address,User类对应的SerialversionUID也变化了,而序列化和反序列化就是通过对比其SerialversionUID来进行的,一旦SerialversionUID不匹配,反序列化就无法成功,当我修改属性执行反序列化时会报以下异常
  • 常用设计模式
    • java23种设计模式(最全最详细版)
  • 死锁的四个必要条件
  1. 互斥条件;
  2. 不可剥夺条件;
  3. 请求和保持;
  4. 循环等待条件;
  • JVM的调优参数?(-Xmn,-Xms等具体参数设置)

网络

  • 网络请求原理
  • http与https的区别、三次握手和四次挥手,为什么握手一定要三次?为什么挥手一定要四次?http的响应码。http1与http2的区别等。

数据结构和算法

  • ArrayList ,LinkedHashMap 的实现原理
  • 缓存淘汰策略
  • 红黑树和二叉树
  • 最短路径规划
  • 海量数据筛选
  • LruCache算法如何实现,内部为什么要用LinkHashMap来实现。 谈谈LruCache算法的底层实现原理及其内部源码

项目

  • 设计一个多线程并发处理大数据量,然后刷新UI的架构
  • 你有什么要问我的吗?(下面问题可选其中两三个)
    • 你在公司的一天是如何度过的?
    • 能否给我简单介绍下贵公司业务与战略的未来发展?
    • 贵公司最让你自豪的企业文化是什么?
    • 团队、公司现在面临的最大挑战是什么?
    • 对于未来加入这个团队,你对我的期望是什么?
    • 我期望参与团队合作达成共同目标,您可以给我举一个公司中团队合作的实例吗?
    • 通过刚才的面试交流,您觉得我还有那些不足?

你可能感兴趣的:(android,面试)