2022 Android 面试知识点

527 阅读14分钟

确实经历了比较艰难的时候。还是希望总结一些东西。下面都是一些常见知识点,建议熟练掌握

  1. View 绘制:
    1. 自定义view ,wrap_content 支持,  padding 支持, 自定义属性支持
      1. Carson带你学Android:手把手教你写一个完整的自定义View - 简书 
      2. Android 自定义View:为什么你设置的wrap_content不起作用?  
      3. Android自定义View_鉴于往事,有资于治道的博客-CSDN博客_android 自定义view
    2. ⭐️Android View的绘制流程 
    3. Android 面试官:简述一下 View 的绘制流程,这个都答不出来就别想拿Offer
    4. Android绘制流程 —— View、Window、SurfaceFlinger - 掘金
    5. Android 图形架构 之二—— SurfaceFlinger 启动和连接 
    6. TextView text 居中
    7. Android View 的绘制流程分析及其源码调用追踪
    8. 一篇文章看明白 Activity 与 Window 与 View 之间的关系
    9. 换肤:
      1. Android筑基——深入理解 LayoutInflater.inflate() 方法
      2. Android动态换肤实现原理
      3. 手写Android 一键换肤
      4. Android LayoutInflater.inflate详解
    10. Android图形系统(三)-View绘制流程
  2. View  事件传递
    1. requestLayout和invalidate区别
      1. requestLayout:递归到ViewRootImpl-> peformTraversals 会导致onMeasure和onLayout被调用,不一定会触发OnDraw
      2. invalidate: 递归调用父view的invalidateChildInParent,直到ViewRootImpl的invalidateChildInParent。不会导致onMeasure和onLayout被调用,而OnDraw会被调用
    2. Parent 如何拦截子View 事件:重写父view的onInterceptTouchEvent
    3. 最全面讲解事件分发
    4. ⭐️图解Android View的事件传递(非常好的文章) :www.jianshu.com/p/bea1bb4aa… (一大一小touch 事件传递)
      1. 如果child 设定了listener,那么在中途moveparent 拦截之后,会收到cancel,后续的事件将通过parent传,并且parent也不会合成click事件
      2. Android中ACTION_CANCEL的触发机制与滑出子view的情况:www.jb51.net/article/222…
    5. ⭐️层级过深对性能影响:blog.csdn.net/Androiddddd…
      1. 另外一篇:rengwuxian.com/compose-int…
    6. 浅谈 View 的 OnTouchEvent 和 OnTouchListener 的区别
    7. ****runOnUiThread 、Handler.post、View.post分析
    8. Onclick 详解
  3. Android 系统,Framework学习(三)之PMS、AMS、WMS
    1. Android系统启动流程
    2. 一篇文章看明白 Android 从点击应用图标到界面显示的过程
    3. ****ActivityThread的理解和APP的启动过程
    4. Android解析ActivityManagerService(一)AMS启动流程和AMS家族
    5. Android解析ActivityManagerService(二)ActivityTask和Activity栈管理
    6. Android WMS(一)-窗口管理
      1. Android图形系统(一)-Window加载视图过程
    7. ❌pms:一篇文章看明白 Android PackageManagerService 工作流程
      1. ❌APK 安装流程:www.jianshu.com/p/f47e45602…
    8. window和SurfaceFlinger建立连接分析
  4. Activity/fragment 相关
    1. Android开发 Activity生命周期详解
    2. ⭐️Android 应用程序的启动流程,桌面点击
    3. startActivity启动过程分析:
    4. Android Activity横竖屏切换生命周期
    5. 启动模式 & 应用场景
    6. Activity四种启动模式区别与适用场景、两种启动模式设置方式区别
    7. onResume View显示过程:
    8. Android之Application和Activity的Context区别 ****Activity Context 对比 Application Context
    9. Acticity之setContentView()详解
      1. Android中关于Activity的setContentView方法的剖析****
      2. Android Activity之 setContentView()总结
      3. Android高级UI系列(1)-- setContentView()详解
    10. Fragment
      1. Activity 与 Fragment 通信方式总结 ,Handler,广播,EventBus,接口回调,setArguments
      2. Android中Activity和Fragment传递数据的两种方式 
      3. Android Fragment 使用解析****
      4. Android-0.Fragment基础示例
      5. Fragment生命周期
  5. Service 相关:
    1. IntentService源码分析,service中单开一个线程执行任务,避免ANR
    2. ⭐️BindService 详解
    3. Binder Java层实现(一):IBinder/IInterface/Binder/Stub
    4. ****一篇文章看明白 Android Service 启动过程
  6. Broadcast receiver, 深入理解Android之 BroadcastReceiver
  7. Content provider , 深入理解Android 之 ContentProvider
    1. ****Android Content Provider 使用
  8. 设计模式,全集:refactoringguru.cn/design-patt…
    1. 观察者 代码实践 blog.csdn.net/leilifengxi…
    2. 单例,注意线程安全:volatile & double check
    3. 代理:静态 & 动态:www.liaoxuefeng.com/wiki/125259…
      1. Java动态代理——框架中的应用场景和基本原理,主要是AOP
  9. 线程&线程池&多线程
    1. New thread 创建过程
      1. Android中线程(Thread)的创建及内存分配过程分析
      2. 理解Android线程创建流程
    2. 线程状态图:blog.51cto.com/u_15127622/…
    3. Android线程池ThreadPool基本使用
    4. ****手写线程池,对照学习ThreadPoolExecutor线程池实现原理!
    5. 线程池 实现原理 www.jianshu.com/p/b9e26871a…
    6. 单个线程开销:1M blog.csdn.net/Dontla/arti…
    7. 优先级设定:PriorityBlockingQueue
    8. Java中sleep和wait的区别 ,
      1. ****LockSupport.park() 阻塞住的线程如何唤醒
    9. 线程Thread.yield: https://blog.csdn.net/y532798113/article/details/103997066
    10. 线程状态,Linuxhttps://www.cnblogs.com/klb561/p/11945157.html
    11. JAVA并发编程:volatile关键字
    12. 线程同步, Android 多线程 线程同步
      1. 悲观锁 synchronized
        1. 深入分析Synchronized原理(阿里面试题) 
        2. Java实现两个线程交替打印1-100
        3. ****Java6及以上版本对synchronized的优化
        4. synchronized 与 CAS 区别
      2. 谈谈synchronized与ReentrantLock的区别?
      3. ****ReentrantLock 
        1. 一文带你快速掌握AQS
        2. 透过 ReentrantLock 分析 AQS 的实现原理
      4. 乐观锁 CAS
        1. 真活久见,原来AtomicInteger还有这样的大秘密
        2. Java 使用AtomicInteger实现锁,即无锁编程 代码实现
        3. Java中的锁原理、锁优化、CAS、AQS详解 
  10. Binder 
    1. Android深入浅出之Binder机制
      1. 享受更多的资源,每个app的内存是有限的,多进程就让内存变大了。
      2. 主进程的安全隔离。一个进程崩了,主app不会崩。
      3. 进程保活几率提升,一个被杀了相互拉。
    2. Binder机制的原理、使用、源码
    3. 全面剖析Binder跨进程通信原理:
    4. 数据传输限制:www.jianshu.com/p/ea4fc6aef…
    5. Oneway(异步)& 阻塞模式 blog.csdn.net/Jason_Lee15…
    6. max: 4M/2 4M, 一般情况 (1M-8K)/2; oneway: 1m-8k
    7. 彻底理解Android Binder通信架构
  11. ❌Vsync 是怎么回事
    1. cpu & surfaceflinger www.jianshu.com/p/a5632f962…
  12. ❌性能优化 ,Android 性能优化必知必会
    1. 原因:
      1. 系统层面:SurfaceFlinger 主线程耗时,后台活动进程太多导致系统繁忙,主线程调度不到 , 处于 Runnable 状态,System 锁,Layer过多导致 SurfaceFlinger Layer Compute 耗时
      2. 应用层面:主线程执行时间长 主线程执行 Input \ Animation \ Measure \ Layout \ Draw \ decodeBitmap 等操作超时都会导致卡顿;主线程 Binder 耗时;WebView 性能不足;
      3. 内存泄露 的知识都在这里了!
        1. Heap Viewer
        2. Android Studio 的 Memory Monitor
        3. LeakCanary
      4. Android内存溢出/泄漏常见案例分析及优化方案最佳实践总结
    2. 检测,(卡顿检测以及优化):
      1. 被动集成检测方案:卡顿,内存泄露:
        1. Choreographer doFrame
        2. Handler 消息处理增加日志:setMessageLogging , 方案研究handlemessage Printer对象
        3. 【开发中使用】 Leakcanary 内存泄露,www.jianshu.com/p/b857736d1…
          1. 详解2:www.jianshu.com/p/cd607b9cc…
          2. 详解:juejin.cn/post/684490…
          3. 面试详解:www.jianshu.com/p/eb17a6bfd…
        4. BlockCanary
        5. ****Android卡顿监控方案,包含监控,上报,提单,定期打印回溯堆栈
      2. 主动:
        1. 高速摄像头&人工盲测
        2. adb shell dumpsys gfxinfo =》  Janky frames
        3. Android studio中使用systrace, traceview
        4. LayoutInspect 检查布局层次
        5. Android App性能评测分析-启动时间篇
        6. StrictMode
    3. 解决:
      1. 启动时间,application 和 main activity 流程监控:www.jianshu.com/p/fe81e4b4c…
      2. UI布局优化:减少过度绘制,局部刷新,自定义view,列表优化,绘制优化
      3. 减少主线程耗时操作,多线程
      4. 异步初始化
      5. 懒加载
      6. 缓存
      7. 抖音低版本上BoostMultiDex juejin.cn/post/684490…
      8. 闪屏页/广告页
      9. 深入探索Android启动速度优: juejin.cn/post/684490…
      10. apk&启动速度&稳定性&内存&操作流畅度:juejin.cn/post/695060…
        1. Native crash 抓取:www.cnblogs.com/mingfeng002…
      11. GC机制:www.jianshu.com/p/7759c6f21…
      12. ❌相同的图片放在不同的path 内存:blog.csdn.net/smileiam/ar…
  13. ANR 详解,system_server 监控:www.jianshu.com/p/4da2ca7fe…
  14. android 系统、编译
    1. 如何选择complieSdkVersion,minSdkVersion和targetSdkVersion
    2. 今日头条 Android '秒' 级编译速度优化
      1. AAR
      2. 增量编译
      3. maven 仓库地址
      4. transform 优化
    3. ****Android Apk文件包含的内容,资源文件,配置文件,dex文件等
    4. ****探究 Android 签名机制和原理,MAINFEST.MF,CERT.SF, CERT.RSA
  15. Recyclerview
    1. 缓存原理 zhuanlan.zhihu.com/p/80475040
    2. 详解:www.jianshu.com/p/3e9aa4bda…
      1. scrap: 通过 position 标识
      2. cache:通过 position 标识
      3. 【慎用】 mViewCacheExtension:通过position, type
      4. RecycledViewPool:通过 type
    3. ListView和RecyclerView的区别
  16. handler && looper
    1. 常见面试题:www.jianshu.com/p/784933f61…
    2. 同步屏障:www.jianshu.com/p/2fb96d4e0…
    3. 阻塞机制实现:nativePollOnce(ptr, nextPollTimeoutMillis); blog.csdn.net/qq_33490704…
    4. 阻塞&唤醒:www.it610.com/article/140…
    5. 生产者消费者模型在handler中的落地:
    6. Handler的sendMessage和post的区别
  17. String 是可变吗?为什么
    1. 不可变,blog.csdn.net/canot/artic…
  18. ❌sharedpreference??
    1. www.jianshu.com/p/41310c8f6…
  19. Array 数据结构 ArrayList , SparseArray
    1. ArrayList:https://www.jianshu.com/p/ea655eba6…
    2. SparseArray: blog.csdn.net/li132516902…
  20. Map数据结构:HashMap & ConcurrentHashmap & HashSet & ArrayMap
    1. SparseArray、ArrayMap、HashMap 之间的比较
    2. ****HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你
    3. ConcurrentHashmap 
      1. 大概文档:www.jianshu.com/p/43b85dec6…
      2. 图解文档:blog.csdn.net/zzu_seu/art…
      3. 与hashtable 相比,哪个效率更高? blog.csdn.net/fd2025/arti…
      4. 实现方案:blog.csdn.net/QQ114964629…
    4. HashMap 
      1. HashMap 基于 JDK 1.7 源码解析
      2. Java 8系列之重新认识HashMap
      3. load factor 0.99  zhuanlan.zhihu.com/p/103449454   www.jianshu.com/p/effb601f2…
      4. 如何简单改写达到线程安全:Collections.synchronizedMap
      5. 解决hash冲突:开放地址、链式地址、再hash:解决哈希冲突的常用方法分析
    5. ArrayMap blog.csdn.net/qq_31481093…
      1. 提高了空间利用率
    6. LinkedHashMap https://www.jianshu.com/p/8f4f58b4b8a
    7. HashSet
      1. 实现方案:内部就是一个Hashmap,然后value是常量 Object();
    8. 简单的同步方案: Collections.synchronizedXXXX
    9. List:线程安全Vector
    10. Android面试 HashMap算法
    11. HashMap面试题及答案(2022版
    12. ****hashmap面试:夺命14问
    13. 深入理解 hashcode() 和 HashMap 中的hash 算法
  21. Sdk 设计规范 SDK 开发规范 - 腾讯云开发者社区-腾讯云
  22. mvc mvp mvvm 区别,实现机制
    1. ⭐️ [译] MVC,MVP,MVVM 对比
    2. 对比:
      1. Mvc:view 内业务逻辑复杂;
      2. Mvp:劣势:presenter 接口过多,持有mv的引用;优势:解耦VM,单独测试view,presenter与view实现无关
      3. mvvm,出现bug的话排查麻烦,解耦的view 和model
    3. 一文说透 Android 应用架构 MVC、MVP、MVVM 和 组件化
    4. MVC、MVP、MVVM模式的概念与区别
  23. JVM www.cnblogs.com/andy-songwe…
    1. Jvm,Dalvik和Art区别
    2. 详解Java垃圾回收机制
    3. JVM的4种垃圾回收算法、垃圾回收机制与总结
    4. 深入详解JVM内存模型与JVM参数详细配置
    5. JVM性能调优的6大步骤,及关键调优参数详解
    6. JVM类加载机制: www.jianshu.com/p/7e9c8992c…
    7. 单个进程内存大小192M, largeHeap 生效之后是512M,可以通过/system/build.prop 配置变化.heapgrowthlimit 默认值,启动largeHeap之后使用heapsize
    8. JVM系列(一):深入详解JVM 内存区域总结
    9. JVM系列(二):深入讲解JVM内存溢出分析!
    10. JVM 系列
      1. JVM系列(一) - JVM总体概述
      2. JVM系列(二) - JVM内存区域
      3. JVM系列(三) - JVM对象探秘
      4. JVM系列(四) - JVM类加载机制详解
        1. 请你谈谈Java的类加载过程
      5. JVM系列(五) - JVM垃圾回收算法
      6. JVM系列(六) - JVM垃圾回收器
    11. Android 内存 - 垃圾回收(GC)机制
  24. 输入法框架:codeantenna.com/a/JgUKFxdQc…
  25. 组件化,插件化。组建化有几种实现方案,对比一下。
    1. Android插件化原理(一):插件类的加载 www.jianshu.com/p/54f2aa39f…
    2. Android插件化原理(二):Activity的插件化:www.jianshu.com/p/e52d9e1cb…
    3. Android插件化原理(三):Service的插件化:www.jianshu.com/p/b54b02d67…
    4. 【Android 插件化】“ 插桩式 “ 插件化框架:blog.csdn.net/shulianghan…
    5. Droid组件化方案设计:https://lrh1993.gitbooks.io/android_int…
    6. 使用APT 详解,实现EasyRouter:
      1. ARouter原理剖析及手动实现
      2. Android APT 系列 (一):APT 筑基之反射
      3. Android APT 系列 (二):APT 筑基之注解
      4. Android APT 系列 (三):APT 技术探究
      5. Android APT 系列 (四):APT 实战应用
    7. 组建化有几种实现方案,对比一下:1)模块拆分,单工程;2)模块拆分,多工程;3)apk拆分,多工程
      1. Android组件化,全面掌握! | 掘金技术征文-双节特别篇
      2. Android插件化原理(一):插件类的加载 
      3. 组件化实践:从零开始搭建 Android 组件化框架 - 开发者头条
  26. 热修复技术
    1. 简单的dex替换,更新PathClassLoader:blog.csdn.net/qq_39799899…
    2. Alibaba AndFix: blog.csdn.net/m0_46204016…
  27. Java语言进阶
    1. JVM中的四种引用类型
    2. 内存模型:new Object,过程。类加载过程?
      1. 扩展一下:单个对象大小。java 内存模型:www.cnblogs.com/rickiyang/p…
    3. 关于泛型的应用:List a = new ArrayList<>(); 这个a.getClass () 是什么,另外怎么能拿到String
      1. 通过匿名内部类,new ArrayList(){}; getGenericSuperclass -> getActualTypeArguments
    4. Gson.fromJson(infoString, new ArrayList().getType()) 为什么要写成这样
      1. fromJson使用TypeAdapter是为了减少反射的使用,增加效率: https://juejin.cn/post/7018189031519289381
      2. 示例:
        1. String jsonArray = "["Android","Java","PHP"]";
        2. String[] strings = gson.fromJson(jsonArray, String[].class); 
        3. 排查2,原因是泛型擦除,List list = gson.fromJson(jsonArray, new TypeToken<List>() {}.getType());
        4. 标准答案: https://www.cnblogs.com/jpfss/p/9952354.html
    5. 泛型的擦除:blog.csdn.net/qq_41701956…
      1. 文档www.zeng.dev/post/2019-j…
      2. 官方文档:www.oracle.com/technetwork…
    6. JAVA 抽象类(Abstract Class) 和 接口(Interface) 的区别
    7. ****Kotlin 和 Java 的区别
      1. Kotlin 与 Java有什么区别 ,变量,扩展函数,隐式转换,协程,静态成员,原始类型
    8. 【Android】函数插桩(Gradle + ASM)
  28. 网络编程
    1. TCP连接建立、断开过程详解
    2. 浏览器输入网址到显示发生了什么
    3. https 流程:zhuanlan.zhihu.com/p/72616216
    4. Android 网络编程之HTTPS详解
  29. Hashcode & equals : blog.csdn.net/qq_27706119…
  30. ❌红黑树:www.jianshu.com/p/e136ec792…
    1. 各种树时间复杂度
  31. http vs https 区别:www.cnblogs.com/klb561/p/10…
    1. 中间人攻击:zhuanlan.zhihu.com/p/412540663
  32. Android Service进程保活
    1. 双星系统
    2. 前台服务
    3. 优先级:可见进程&前台进程&服务进程,利用前台activity和通知:segmentfault.com/a/119000000…
  33. 每天定时进行一个任务,谷歌规范是
    1. AlarmManager www.codeleading.com/article/890…
    2. 多种方式实现 Android 定时任务,哪一款是你的 FEEL sleep,timer,ScheduledExecutorService,AlarmManager
  34. native coredump 怎么抓取
    1. java 层:blog.csdn.net/Jason_Lee15…
    2. native层:juejin.cn/post/684490…
  35. ❌进程间通信方式,
    1. 对比:blog.csdn.net/suyimin2010…
    2. 总结:www.cnblogs.com/andy-songwe…
  1. 混合编程
    1. Carson带你学Android:最全面、易懂的Webview使用教程
    2. ****Carson带你学Android:全面总结WebView与 JS 的交互方式
  2. SurfaceView
    1. ****SurfaceView与TextureView
    2. ****SurfaceView及TextureView区别
  3. 高级组件:  juejin.cn/post/688126…
    1. Android OkHttp常用详解
      1.   关于HTTP协议,一篇就够了
      2. ****99%的人都理解错了 HTTP 中 GET 与 POST 的区别
      3. OkHttp源码学习随笔
    2. 深入分析LeakCanary原理
    3. RxJava****
      1. ****RxJava在Android中的使用详解
      2. jianshu: Carson带你学Android:这是一篇清晰易懂的Rxjava入门教程
      3. csdn: Android Rxjava教程:清晰 简洁 易懂的Rxjava入门教程
    4. ❌jianshu:使用Bugly对Native lib的crash bug进行定位
    5. AOP 是什么? 
      1. 应用场景: 
        1. Android API23+的权限控制: 避免到处都是申请权限和处理权限的代码
        2. 无埋点: 分离业务代码和统计代码
        3. 安全控制: 比如全局的登录状态流程控制
        4. 日志记录: 侵入性更低更利于管控的日志系统
        5. 事件防抖: 防止View被连续点击触发多次事件
        6. 性能统计,事务处理、异常处理、缓存、软件破解
      2. AOP 切入点表达式
      3. ****AOP在Android开发中的使用
      4. ****Android开发中的AOP技术
      5. Android AOP — AspectJ的使用
      6. 廖雪峰讲解使用AOP
      7. 实现方案:AspectJ、APT、Javassist、 Transform、HotFix、ASM、 Retrofit
      8. 太好了!总算有人把动态代理、CGlib、AOP都说清楚了!
    6. Glide
      1. ****Google推荐——Glide使用详解
      2. ****探索 Glide 原理
    7. EventBus  Android 主流开源库源码分析(一)- EventBus 源码详解
    8. ButterKnife Android Studio实战之 ButterKnife 使用
    9. Dagger2
    10. ARouter
    11. Coil
    12. ****Android中如何Hook住JNI方法
    13. Gradle transform:  Android-Gradle-Transform用法
      1. Gradle学习系列(一):Groovy学习
      2. ****Gradle学习系列(二):Gradle核心探索
      3. ****Gradle学习系列(三):Gradle插件
      4. Gradle学习系列(四):Gradle依赖
      5. Gradle学习系列(五):Gradle Transform
    14. MAT 工具使用, android 内存分析工具——MAT使用
  4. Jetpack
    1.   livedata, LiveData 使用与源码分析——完全搞懂LiveData原理
      1. 数据倒灌:blog.csdn.net/hewuzhao/ar…
      2. 解决数据倒灌:www.jianshu.com/p/d0244c4c7…
    2. Android Jetpack? 实战和教程这里全都有
  5. 算法题
    1. 手写atof
    2. 绘制一个正弦线(使用path ):www.jianshu.com/p/e38c76de0…
    3. ❌贝塞尔曲线:juejin.cn/post/690259…

内容都是引用优秀作者的内容,侵权的话,联系我删除~