面试经历

面了一些上海二线互联网公司,例如爱奇艺,京东,喜马拉雅,得物,B站,某安,美团等等,记录了部分面试真题。大部分可以自行搜到答案。

【爱奇艺】一面

handler里面的native pollonce 为什么不会anr

对称加密和非对称加密的区别

布局嵌套过深会导致什么问题

java为什么跨平台?c是跨平台吗

app打包过程

协程挂起和线程阻塞的区别

so文件加载流程

AIDL怎么实现

字节码是什么

【爱奇艺】二面

和一面间隔时间太久了,放弃

【货拉拉一面】 简述https的握手流程,私钥加密谁都可以破解,那么有什么意义

oom能否try catch

公钥和私钥的区别

客户端怎么安全保存私钥

怎么加载一张超大图

采集app启动时间原理

exception分类。oom属于哪种分类

弱网 无网优化

【货拉拉二面】

说下项目中怎么运用MVVM

viewModel的源码实现

设计一个图片加载框架(包含内存缓存和本地缓存),参考Glide回答就行了

简述hashMap put方法的流程,一些细节追问:什么时候链表转树?为啥要转成树?什么时候树再次转回链表

英语口语如何(我面的是国际化业务)

【货拉拉HR面】

办理了居住证积分吗?balabala

【京东一面】

简述LinkedHashMap源码实现

说下Handler流程

handler用于线程间通信,怎么保证线程安全

界面有个Button,手指放上去慢慢移到Button外的区域,描述事件分发的流程

说下View的绘制流程,包括渲染和绘制

算法 两个单链表合并成有序链表,说下思路

组件化的实现,WMRouter调用其他模块的对应方法怎么实现的

【京东二面】

完全忘了

【京东三面】

问项目细节,你主要负责的模块,怎么设计

算法 N宫格,从左上角A出发只能向右或者向下走,求所有不同路径的条数总和。手写伪代码(用递归就可以)

【京东四面】

平时的上下班时间点

有没有使用过咱们的app,有什么建议

前面的3次技术面有什么感受

职业规划

【京东HR面】

1.平时的上下班时间点 balabala

【某安一面】

多线程同步有哪些方式

sycnized和lock区别,分别用于什么场景

线程池原理

线程池拒绝策略怎么自定义

怎么实现线程加入线程池的优先级

volatile底层原理?是否线程安全

死锁怎么发生?怎么防止死锁

介绍下apm,怎么捕获crash和native crash?腾讯matrix怎么统计app启动时间,页面加载时间

gc回收算法有哪些?分别用于什么场景

jvm有哪些区域?栈的作用

算法 三数之和

【某安二面】

问项目 httpdns相关:为什么要httpdns?怎么处理握手问题,ip直连能否避免dns挟持?

问项目 首页弹窗优先级

做过哪些内存优化

怎么全局捕获app所有异常,并且保证app不崩溃,不卡死

如何获取app的所有线程信息

怎么查找anr

安卓有哪些进程间通信?为什么使用binder?mmap发生在哪个阶段?怎么找到目标进程

leakcanary怎么检测内存泄露的

算法 两个栈实现一个队列

【某安三面】

gradle生命周期,怎么自定义插件

统计编译耗时插件,运行在哪个阶段?

描述从编译到apk的过程,以及gradle有哪些task参与其中

如何实现字节码插桩

子线程更新ui会报什么异常?从哪里抛出来的

子线程怎么更新textview不会crash

activity window view显示出来,全流程源码解析,精确到类和核心方法

数据库用的什么库,熟悉sql语句吗

mmkv为什么比sp高效,存储的数据结构是什么样

mmap为什么比io高效,说下实现原理

sp存在哪些问题?

hashmap put流程源码解析,链表和树转换时机?扰动函数的作用?为什么hashcode & n-1?扩容时机?

gc roots有哪些

activity有个内部类handler,描述下引用关系链路,并说明为何gcroots能访问到activity

加载xml和动态创建view哪个高效?为什么加载xml效率低

如何减少布局嵌套?jetpack compose的原理

17.recycleview缓存实现?开发中怎么优化

算法 给定一个字符串,输出所有不同字符组合

【B站一面】

一句话描述协程 协程只在主线程使用,怎么实现挂起和切回的 协程的轻量级怎么体现的 ViewModel源码实现,它在Activity重启后为什么恢复数据?数据保存在哪里?和onsaveinstancestate有啥区别 LifeCycle源码实现 LiveData源码实现,先后setValue两次,都能收到吗? 简述View的刷新机制,屏幕刷新信号从哪里发出来的? 硬件加速是否了解 SurfaceView的工作原理是否有了解 组件化相关,WMRouer为什么可以这么方便实现组件之间通信,背后原理

【喜马拉雅一面】

有了解过直播吗?有哪些常见协议 说下自定义View的一般流程 多个线程异步执行任务,主线程需要等待它们都完成再继续,有哪些实现方式 说下handler的流程,异步消息是什么?Android中哪些场景会发送异步消息?我们在代码中可以手动发异步消息吗 弹幕怎么实现?比如直播中的流星雨特效,跑车这种怎么实现出来 说下你开发中做过的一个动画 了解过SurfaceView的原理吗 有没有接触过Socket编程,简单说下代码实现 加载一张超大图怎么实现 补间动画和属性动画各自的原理 内存优化有哪些手段 开放性题目 开发中怎么提升整个app的稳定性

【喜马拉雅二面】

动态代理是怎么实现的 你熟悉哪些设计模式 画一下动态代理的类图 说下插件化原理 说下热修复的基本原理?比如QQ空间的方案和Tinker 算法 判断两个单链表是否相交及找到第一个交点

【喜马拉雅HR面】

对公司感觉怎么样,之前有了解过吗 是否愿意承担一些管理角色

【得物一面】

狂问Kotlin相关,比如委托的实现原理,协程原理,kotlin的好处,kotlin编译流程,常用的kotlin技巧 app的打包流程 View的渲染绘制流程

【得物二面】

inflate加载view过程 简述okhttp源码,请求怎么管理,它的线程池怎么实现 apt原理 viewmodel为什么可以恢复数据 livedata可以保存多个数据吗 aac架构有什么优势 mmkv了解吗 算法 单链表找到倒数第K个元素 算法 单链表找到中间的元素(2个题都用快慢指针就可以了) 组件化怎么做的?WMRouter编译期间做了什么

【得物HR面】

没问什么特别的

经验tips

  1. 必考题一定要掌握!

【必问】Handler的工作流程,源码要记牢,细节要理解透,比如怎么唤醒主线程的,while为啥不会阻塞主线程 【必问】View的绘制流程,包括渲染和View本身的绘制3部曲 【必问】MVVM的含义,ViewModel+LivaData+LifeCycle的源码实现 【必问】自定义View的一般实现流程 【必问】内存泄漏怎么排查,OOM怎么排查 【必问】你做过哪些性能优化,参考这个https://blog.yorek.xyz/android/paid/master/ 【必问】Retrofit的实现,动态代理 【必问】组件化相关,WmRouter的原理 【高频】ANR怎么排查,有哪些原因 【高频】APP打包流程 【高频】kotlin常见知识点的原理,如协程,委托,扩展函数,编译流程 【高频】Android有哪些跨进程通信,AIDL的代码实现 【高频】怎么加载一张超大图 【高频】OkHttp的线程池实现,Java线程池原理,拒绝策略怎么自定义

2.算法准备

有时间就刷剑指offer66道题目,没时间就掌握一般的套路,回答一些常见题目基本够了。

3.关于性能优化

你做过哪些性能优化?这个点也是经常被问到,我的建议 不要随意把别人博客的性能优化当成自己做过的,很多都是纯KPI项目,他们可能自己都没去实践。面试官一听就知道你在瞎说,挑一些相对靠谱的结合自己项目说下,然后拓展一下还未实现但是准备去做的。

第一章 Java基础

  • 静态内部类和非静态内部类的比较
  • 多态的理解与应用
  • java方法的多态性理解
  • java中接口和继承的区别
  • 线程池的好处,详解,单例(绝对好记)
  • 线程池的优点及其原理
  • 线程池的优点(重点)
  • 为什么不推荐通过Executors直接创建线程池
  • 不怕难之BlockingQueue及其实现
  • 深入理解ReentrantLock与Condition
  • Java多线程:线程间通信之Lock
  • Synchronized 关键字原理
  • ReentrantLock原理
  • HashMap中的Hash冲突解决和扩容机制
  • JVM常见面试题
  • JVM内存结构 在这里插入图片描述

第二章 Android基础

  • Activity知识点(必问)
  • Fragment知识点
  • Service知识点
  • Intent知识点 在这里插入图片描述

第三章 UI控件篇

  • 屏幕适配
  • 主要控件优化
  • 事件分发与嵌套滚动 在这里插入图片描述

第四章 网络通信篇

  • 网络协议 在这里插入图片描述

第五章 架构设计篇

  • MVP架构设计
  • 组件化架构 在这里插入图片描述

第六章 性能优化篇

  • 启动优化
  • 内存优化
  • 绘制优化
  • 安装包优化 在这里插入图片描述

第七章 源码流程篇

  • 开源库源码分析
  • Glide源码分析
  • Android面试题:Glide
  • day 20 面试题:Glide面试题
  • 聊一聊关于Glide在面试中的那些事
  • 面试官:简历上如果写Glide,请注意以下几点…
  • Glide OOM问题解决方法汇总
  • OkHttp源码分析
  • Okhttp连接池复用机制
  • Okhttp 流程和优化的实现
  • 一篇让你受用的okhttp分析
  • OkHttp面试之–OkHttp的整个异步请求流
  • OkHttp面试之–HttpEngine中的sendRequest方法详解
  • OkHttp解析大总结
  • Okhttp任务队列工作原理
  • Android高频面试专题 - 架构篇(二)okhttp面试必知必会
  • Android 网络优化,使用 HTTPDNS优化 DNS,从原理到 OkHttp 集成
  • Retrofit源码分析
  • RxJava源码分析
  • RxJava原理与源码分析 在这里插入图片描述

第八章 新技术篇

  • 实战问题篇 在这里插入图片描述

第九章 面试篇

  • 开源文档

  • 面试题合集 在这里插入图片描述

    由于文章篇幅有限,文档资料内容较多,需要《2022最新Android面试真题+解析》、数据结构与算法面试题、Java 面试题、Android四大组件、Android 面试题、UI控件篇、网络通信篇、架构设计篇、性能优化篇、源码流程篇、 Kotlin方面、第三方框架、大厂面经,可以【点击这里免费获取】,希望能够共同进步,共同学习,共勉! alt

总结

简历上写的东西,一定要先搞懂,特别是简历上的专业技能。这次面试收到的最多反馈就是:基础知识不够扎实,技术深度不够。现在Android开发大部分需要懂点C++和Linux知识,大厂也需要刷算法面试题,在后面的学习过程中,我将从以上几个方面着手。当然也必须把基础知识学牢固,技术深度搞深入点。

最后祝大家都能拿到心仪的offer!