现在确实是越来越不好找工作了,并且未来还会更难,主要原因呢还是太卷,同样是搞搞业务代码,谁更熟练要谁,同样的高工岗,谁对底层原理研究最深要谁 比如下面这些面试题,八股文越熟练越容易通过Android面试。一、JavaHashMap原理HashMap中put()如何实现的HashMap中get()如何实现的为什么HashMap线程不安全HashMap1。7和1。8有哪些区别解决hash冲突的时候,为什么用红黑树红黑树的效率高,为什么一开始不用红黑树存储不用红黑树,用二叉查找树可以吗为什么阀值是8才转为红黑树为什么退化为链表的阈值是6hash冲突有哪些解决办法HashMap在什么条件下扩容HashMap中hash函数怎么实现的,还有哪些hash函数的实现方式为什么不直接将hashcode作为哈希值去做取模,而是要先高16位异或低16位为什么扩容是2的次幂链表的查找的时间复杂度是多少红黑树Java中创建线程的方式,Callable,Runnable,Future,FutureTask线程的几种状态谈谈线程死锁,如何有效的避免线程死锁?如何实现多线程中的同步synchronized和Lock的使用、区别,原理;volatile,synchronized和volatile的区别?为何不用volatile替代synchronized?锁的分类,锁的几种状态,CAS原理为什么会有线程安全?如何保证线程安全sleep()与wait()区别,run和start的区别,notify和notifyall区别,锁池,等待池Java多线程通信为什么Java用线程池Java中的线程池参数,共有几种注解的分类和底层实现原理自定义注解什么是反射反射机制的相关类反射中如何获取Class类的实例如何获取一个类的属性对象构造器对象方法对象Class。getField和getDeclaredField的区别,getDeclaredMethod和getMethod的区别反射机制的优缺点什么是泛型擦除?为什么需要泛型擦除?泛型擦除后retrofit是怎么获取类型的?Gson解析为什么要传入内部类那些泛型信息会被保留,哪些是真正的擦除了?为什么Gson解析要传入匿名内部类二、虚拟机JVM内存模型的理解?GC原理和回收策略JVM跟Art、Dalvik对比GC收集器简介?以及它的内存划分怎么样的?栈内存和堆内存的区别是什么?JVM调优的常见命令行工具有哪些?JVM常见的调优参数有哪些?jstack,jmap,jutil分别的意义?如何线上排查JVM的相关问题?JVM方法区存储内容是否会动态扩展?是否会出现内存溢出?出现的原因有哪些?如何解决同时存在的对象创建和对象回收问题?JVM中最大堆大小有没有限制?如何理解Java的虚函数表?Java运行时数据区域导致内存溢出的原因对象创建、内存布局,访问定位深入理解AndroidJVM,构建完整JVM知识体系,彻底吃透JVM!三、Android基础Activity的启动流程onSaveInstanceState(),onRestoreInstanceState的掉用时机activity的启动模式和使用场景ActivityA跳转ActivityB,再按返回键,生命周期执行的顺序横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个Theme为Dialog的Activity,弹出Dialog时Activity的生命周期onStart和onResume、onPause和onStop的区别Activity之间传递数据的方式Intent是否有大小限制,如果传递的数据量偏大,有哪些方案Activity的onNewIntent()方法什么时候会执行显示启动和隐式启动scheme使用场景,协议格式,如何使用ANR的四种场景onCreate和onRestoreInstance方法中恢复数据时的区别activty间传递数据的方式跨App启动Activity的方式,注意事项Activity任务栈是什么有哪些Activity常用的标记位FlagsActivity的数据是怎么保存的,进程被Kill后,保存的数据怎么恢复的service的生命周期,两种启动方式的区别Service启动流程Service与Activity怎么实现通信IntentService是什么,IntentService原理,应用场景及其与Service的区别Service的onStartCommand方法有几种返回值?各代表什么意思?bindService和startService混合使用的生命周期以及怎么关闭如何保证Service不被杀死?广播的分类和使用场景广播的两种注册方式的区别广播发送和接收的原理本地广播和全局广播的区别什么是ContentProvider及其使用ContentProvider,ContentResolver,ContentObserver之间的关系ContentProvider的实现原理ContentProvider的优点Uri是什么Fragment为什么被称为第五大组件如何切换Fragment(不重新实例化)Fragment的优点Activity和Fragment的区别getFragmentManager、getSupportFragmentManager、getChildFragmentManager之间的区别?Fragment如何实现类似Activity栈的压栈和出栈效果Fragment的replace和add方法的区别Activity创建Fragment的方式FragmentPageAdapter和FragmentPageStateAdapter的区别Fragment的生命周期Fragment家族常用的APIFragment与Activity的通信方式ViewPager对Fragment生命周期的影响什么是ANR?如何避免?横竖屏切换时候Activity的生命周期AsyncTask的缺陷和问题,原理android中进程的优先级?Bunder传递对象为什么需要序列化?Serialzable和Parcelable的区别?Android各版本特性android中有哪几种解析xml的类,官方推荐哪种?它们的原理和区别Android为每个应用程序分配的内存大小是多少?Thread、AsyncTask、IntentService的使用场景与特点为什么我们能在主线程直接使用Handler,而不需要创建Looper?Handler里藏着的Callback能干什么?内存泄露怎样查找,怎么产生的内存泄露?类的初始化顺序依次是?Bitmap使用时需要注意什么?强引用置为null,会不会被回收?如何计算一个Bitmap占用内存的大小,怎么保证加载Bitmap不产生内存溢出?屏幕适配的处理技巧都有哪些?断点续传如何实现?四、高级UI绘制流程及其原理Resource原理与机制,UI样式如何加载?UI绘制过程中,如何加载布局文件?QQ消息气泡的实现原理贝塞尔曲线的原理及使用事件传递机制事件冲突解决办法及其类型属性动画原理自定义view硬件加速原理和应用高性能丶页面渲染丶组件业务化五、FrameworkFramework工作方式及原理,Activity是如何生成一个view的,机制是什么?Android系统启动流程Android的Laucher是如何创建的?App的进程是如何启动起来的?点击桌面图标,是如何启动App的Activity的?AMS的启动流程Binder机制系统级app和第三方应用级app分别在什么目录下?SystemUI是在systemprivaapp还是systemapp路径下?android中UID和PID的作用及区别android系统的低电耗模式(Doze模式)是怎么工作的Service什么时候启动可以不影响启动速度?ActivityonResume回调的时候真的可见了么?Redex为什么会加快应用启动速度?ContentProvider会不会影响启动速度?为什么会影响?ThreadLocal做什么的?Thread和Handler的关系为什么不能在子线程更新UI?idleHandler什么时候运行?主线程为什么循环却不会卡死?ContentProvider、Broadcast、Service是怎么利用Message监控ANR的?Framework面试题精讲40节,彻底掌握底层知识!精通Framework是真的可以为所欲为! 这些题目的答案我都已经整理到了本地PDF文档中,这里由于篇幅原因没有一一把答案贴上来,需要完整文档的朋友们可以私信我【面试】免费领取!六、性能优化做了哪些稳定性方面的优化?性能稳定性是怎么做的?业务稳定性如何保障?如果发生了异常情况,怎么快速止损?启动优化是怎么做的?是怎么异步的,异步遇到问题没有?启动优化有哪些容易忽略的注意点?版本迭代导致的启动变慢有好的解决方式吗?如果提高启动速度,设计一个延迟加载框架或者sdk的方法和注意的问题内存优化项目的过程是怎么做的?做了内存优化最大的感受是什么?如何检测所有不合理的地方?如何避免内存抖动?在做布局优化的过程中用到了哪些工具?布局为什么会导致卡顿,如何优化?做完布局优化有哪些成果产出?怎么做卡顿优化的?怎么样自动化的获取卡顿信息?卡顿的一整套解决方案是怎么做的?TextViewsetText耗时的原因,对TextView绘制层源码的理解?如何优化一个列表页面的打开速度和流畅性APK瘦身客户端网络安全实现设计一个网络优化方案,针对移动端弱网环境电量优化提高app安全性的方法安卓的app加固如何做?安卓的混淆原理是什么?对安卓签名的理解为什么WebView加载会慢呢?如何优化自定义View?Java多线程引发的性能问题,怎么解决?TraceView的实现原理,分析数据误差来源使用过SysTrace吗?原理了解得怎么样?mmapnative日志优化由点及面,深入原理!彻底吃透启动优化、内存优化七、开源库OkHttp这个库有哪些用法?对应什么样的使用场景?OkHttp的优缺点是什么,跟同类型库的比较?OkHttp连接池复用原理OkHttp责任链模式如何运行的?Dispatcher分发流程如果让你实现OkHttp的某些核心功能,你会考虑怎么去实现?从OkHttp中学到什么有价值的或者说可借鉴的设计思想?OKhttp针对网络层有哪些优化?网络请求缓存处理,okhttp如何处理网络缓存的?HttpUrlConnection和okhttp关系?自己去设计网络请求框架,怎么做?从网络加载一个10M的图片,有哪些注意事项?http怎么知道文件过大是否传输完毕的响应?谈谈你对WebSocket的理解WebSocket与socket的区别Retrofit与OkHttp的关系Retrofit都有哪些用法?对应什么样的使用场景?Retrofit如何通过动态代理实现对Okhttp的调用的?Retrofit自定义注解的作用Retrofit为何能直接渲染UI线程?Retrofit运用了哪些设计模式如果让你实现Retrofit的某些核心功能,你会考虑怎么去实现?Glide为什么不用担心内存泄漏?Glide的3级缓存是如何实现的Glide怎么实现页面生命周期绑定?Glide为什么对Fragment做缓存?模块化、组件化、插件化有哪些区别?路由框架原理如何优化组件化中的路由表?组件化核心编译时如何通过apt实现对路由的接入?如果你来做大型架构,如何设计组件化架构?插件化原理及运用场景插件生命周期管理插件四大组件跳转机制插件中Activity的上下文如何管理和应用美团robust修复原理class字节码加载过程原理Tinker热修复的实现原理直击大厂!Android开发常见原理级面试题详解八、架构设计配置中心以及灰度测试调试组件性能监控框架基础网络组件埋点框架启动相关中间件(图片日志存储基础信息)第三方sdk(偏中台方向)组件化插件化动态化android编译流程Gradle生命周期apt是编译中哪个阶段?Dex和class有什么区别?Transform是如何被执行的?Transform和其他系统Transform执行的顺序如何监控编译速度变慢问题?Gradle中如何给一个Task前后插入别的任务?kspAPTTransform的区别Transform上的编译优化能做哪些?aar源码切换插件原理你们有哪些保证代码质量的手段?如何对第三方的依赖做静态检查?R。javacodetoolarge解决方案Rinline你需要注意些什么?一个类替换父类比如所有activity实现类替换baseactivityR8D8以及混淆相关的,还有R8除了混淆还能干些什么?混淆规则有没有碰到什么奇怪的问题?编译的时候有没有碰到javac的常量优化?APP架构设计的精华:从整体到细节深入解析,如果是你会怎么做?九、跨平台Dart语言有哪些重要的特性?Dart是如何实现多任务并行的?Stream有哪两种订阅模式?分别是怎么调用的?dart中mixin机制是怎么样的?JIT与AOT分别是什么?Dart的内存分配与垃圾回收是怎么样的?mixin怎么指定异常类型?Future和Isolate有什么区别?Stream与Future是什么关系?Flutter的优缺点Flutter跨平台原理移动端跨平台技术划分移动端跨平台技术演进蓝湖设计图有一张轮播图,宽度是335高度是120,左右间隔是10,如何使用屏幕算法适配全机型屏幕宽和高?未知数据数量有规则的列表视图,要求一行显示5个,每个间隔为10(含上下),最外边距margin左右都为20,高度为50,多出的数据继续往下排并向左对齐,适配任何机型,怎么做?如何实现点击空白区域收起键盘?无需上下文进行路由跳转原理是怎么样的?为什么我的容器无论设置宽高多少都是占整个的宽高?怎么解决?键盘弹出时底部溢出如何解决?Container设置borderRadius不生效怎么解决?如何导致的?GestureDetector设置onTap不生效怎么解决?如何实现动态更改TabBar长度?如何实现键盘弹出后遮住布局,而不是顶起布局?为何输入框输入内容之后返回到桌面,再进入app时内容被清空了?怎么解决?为何本地资源图片刚进入的时候切换到另一张出现白屏?怎么解决?如何拦截App返回事件,用什么组件?如何监听App暂停运行或不可见状态事件?Text的TextOverflow。ellipsis不生效如何解决?如何获取控件的大小和位置?类构造方法后面加个super表示什么意思?assert(data!null,‘nodata’)是什么意思?const修饰构造函数和放声明数值前分别有什么作用?Assert(断言)有什么作用?什么时候有效?StatefulWidget的生命周期是怎么样的?Widgets、RenderObjects和Elements的关系Flutter是如何与原生Android、iOS进行通信的?简述Flutter热重载Flutter和其他跨平台方案的本质区别Widget唯一标识Key有哪几种?什么是Navigator?MaterialApp做了什么?Flutter动画类型有哪些?Flutter是怎么完成组件渲染的?Flutter绘制流程是怎么样的?Flutter中存在哪四大线程?PlatformView使用了哪些东西来实现?PlatformView原理PlatformChannel有哪几种通信方式?分别是用于什么操作?RenderObject如何使得页面重绘?流程是怎么样的?状态管理基本分类状态管理的底层逻辑一般是怎么样的?状态管理的使用原则是怎么样的?使用成熟状态管理库的弊端有哪些?flutterrun实际走了哪三个命令?分别用于什么操作?Flutter引擎启动过程中做了什么操作?Flutter应用启动runApp(MyApp)过程是怎么样的?Dart虚拟机如何管理的?怎么调用?如何跟Flutter引擎交互?setState在哪种场景下可能会失效?isolate是怎么进行通信的?实例化过程是怎么样的?十、音视频为什么要有YUV这种数据出来?(YUV相比RGB来说的优点)H264H265有什么区别?什么是音视频编码格式?什么是音视频封装格式?视频或者音频传输,你会选择TCP协议还是UDP协议?为什么?平时说的软解和硬解,具体是什么?何为直播?何为点播?简述推流、拉流的工作流程?如何在直播中I帧间隔设置、与帧率分辨率选定?直播推流中推I帧与推非I帧区别是什么?常见的直播协议有哪些?之间有什么区别?点播中常见的数据传输协议主要有哪些?何为Nginx?有什么特点?RTMP、HLS协议各自的默认端口号是?简述RTMP协议,如何封装RTMP包?m3u8构成是?直播中m3u8、ts如何实时更新?MediaCodec编码机制何为音视频同步,音视频同步是什么标准?音视频能做到绝对同步吗?音频超前与视频超前在同步中如何解决?播放器暂停、快进快退、seek、逐帧、变速怎么实现?视频倒放如何实现?说说你平时在播放过程中做的优化工作?你研究过哪些具体的流媒体服务器,是否做过二次开发? 当然,面试时不会上面的每个题都问到,通常会根据简历里写的项目经历来问,结合岗位相关的技术,而面试中经常会出现层层深挖,并且会结合实际问题来问,面试中的大多数问题都是在探明你的技术边界,全方位地考察你对技术的理解深度,以及解决问题的能力。 上面这些题目的答案我也都记录在了文档中,这里由于篇幅原因就没有一一把答案贴上来了,需要完整文档的朋友们可以私信我【面试】免费领取! 这些题目的答案我都已经整理到了本地PDF文档中,这里由于篇幅原因没有一一把答案贴上来,需要完整文档的朋友们可以私信我【面试】免费领取!