当前位置:网站首页>2022年金九银十,Android面试中高频必问的问题汇总
2022年金九银十,Android面试中高频必问的问题汇总
2022-08-02 20:08:00 【Android技术圈】
关于android面试中最常问的问题,我在这两年持续总结、细化、沉淀出来的 Android中高级核心面试题指南里都有整理,里面很多的核心题答案在面试的压力下,经过了反复的校正、优化与升华,含金量极高。这些都已经整理好了, 有需要完整版,可点击传送门直达!
Android现在是越来越不好找工作了,并且未来还会更难,主要原因呢还是太卷,同样是搞搞业务代码,谁更熟练要谁,同样的高工岗,谁对底层原理研究最深要谁,比如下面这些面试题,八股文越熟练越容易通过 Android 面试。
一、Java
- HashMap原理
- HashMap中put()如何实现的
- HashMap中get()如何实现的
- 为什么HashMap线程不安全
- HashMap1.7和1.8有哪些区别
- 解决hash冲突的时候,为什么用红黑树
- 红黑树的效率高,为什么一开始不用红黑树存储
- 不用红黑树,用二叉查找树可以吗
- 为什么阀值是8才转为红黑树
- 为什么退化为链表的阈值是6
- hash冲突有哪些解决办法
- 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解析要传入匿名内部类
二、Kotlin
- 请简述下什么是kotlin?它有什么特性?
- Kotlin中注解@ JvmOverloads的作用?
- Kotlin中的MutableList与List有什么区别?
- kotlin实现单例的几种方式?
- kotlin中关键字data的理解?相对于普通的类有哪些特点?
- 什么是委托属性?简单说一下应用场景?
- kotlin中with、run、 apply、 let函数的区别?一般用于什么场景?
- kotlin中Unit的应用以及和Java中void的区别?
- Kotlin中infix关键字的原理和使用场景?
- Kotlin中的可见性修饰符有哪些?相比于Java有什么区别?
- 你觉得Kotlin与Java混合开发时需要注意哪些问题?
- 在Kotlin中,何为解构?该如何使用?
- 在Kotlin中,什么是内联函数?有什么作用?
- 谈谈kotlin中的构造方法?有哪些注意事项?
- 谈谈Kotlin中的Sequence,为什么它处理集合操作更加高效?
- 请谈谈Kotlin中的Coroutines,它与线程有什么区别?有哪些优点?
- Kotlin中该如何安全地处理可空类型?
- Kotlin中的?然后后面调用方法如果为空的情况下是什么?
- 说说Kotlin中的Any与Java中的Object有何异同?
- Kotlin中的数据类型有隐式转换吗?为什么?
- Kotlin中集合遍历有哪几种方式?
- 为什么协程比线程要轻量?
- 协程Flow是什么,有哪些应用场景?
三、Android基础
- Activity的启动流程
- onSaveInstanceState(),onRestoreInstanceState的掉用时机
- activity的启动模式和使用场景
- Activity A跳转Activity B,再按返回键,生命周期执行的顺序
- 横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme 为 Dialog 的 Activity,弹出Dialog时Activity的生命周期
- onStart 和 onResume、onPause 和 onStop 的区别
- Activity之间传递数据的方式Intent是否有大小限制,如果传递的数据量偏大,有哪些方案
- Activity的onNewIntent()方法什么时候会执行
- 显示启动和隐式启动
- scheme使用场景,协议格式,如何使用
- ANR 的四种场景
- onCreate和onRestoreInstance方法中恢复数据时的区别
- activty间传递数据的方式
- 跨App启动Activity的方式,注意事项
- Activity任务栈是什么
- 有哪些Activity常用的标记位Flags
- Activity的数据是怎么保存的,进程被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家族常用的API
- Fragment与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硬件加速原理和应用
- 高性能丶页面渲染丶组件业务化
五、Framework
- Framework 工作方式及原理,Activity 是如何生成一个 view 的,机制是什么?
- Android系统启动流程
- Android的Laucher是如何创建的?
- App的进程是如何启动起来的?
- 点击桌面图标,是如何启动App的Activity的?
- AMS的启动流程
- Binder机制
- 系统级app和第三方应用级app分别在什么目录下?
- SystemUI是在system/priva-app还是system/app路径下?
- android中UID和PID的作用及区别
- android系统的低电耗模式(Doze模式)是怎么工作的
- Service 什么时候启动可以不影响启动速度?
- Activity onResume 回调的时候真的可见了么?
- Redex 为什么会加快应用启动速度?
- ContentProvider 会不会影响启动速度?为什么会影响?
- ThreadLocal 做什么的?
- Thread 和 Handler 的关系
- 为什么不能在子线程更新 UI?
- idleHandler 什么时候运行?
- 主线程为什么循环却不会卡死?
- ContentProvider、Broadcast、Service 是怎么利用 Message 监控 ANR 的?
这些题目的答案我都已经整理到了本地PDF文档中,这里由于篇幅原因没有一一把答案贴上来,需要完整文档的朋友们可以顺手帮我点赞评论一下,这些都已经整理好了, 有需要完整版,可点击传送门直达!
六、性能优化
- 做了哪些稳定性方面的优化?
- 性能稳定性是怎么做的?
- 业务稳定性如何保障?
- 如果发生了异常情况,怎么快速止损?
- 启动优化是怎么做的?
- 是怎么异步的,异步遇到问题没有?
- 启动优化有哪些容易忽略的注意点?
- 版本迭代导致的启动变慢有好的解决方式吗?
- 如果提高启动速度,设计一个延迟加载框架或者sdk的方法和注意的问题
- 内存优化项目的过程是怎么做的?
- 做了内存优化最大的感受是什么?
- 如何检测所有不合理的地方?
- 如何避免内存抖动?
- 在做布局优化的过程中用到了哪些工具?
- 布局为什么会导致卡顿,如何优化?
- 做完布局优化有哪些成果产出?
- 怎么做卡顿优化的?
- 怎么样自动化的获取卡顿信息?
- 卡顿的一整套解决方案是怎么做的?
- TextView setText耗时的原因,对TextView绘制层源码的理解?
- 如何优化一个列表页面的打开速度和流畅性
- APK瘦身
- 客户端网络安全实现
- 设计一个网络优化方案,针对移动端弱网环境
- 电量优化
- 提高app安全性的方法
- 安卓的app加固如何做?
- 安卓的混淆原理是什么?
- 对安卓签名的理解
- 为什么WebView加载会慢呢?
- 如何优化自定义View?
- Java多线程引发的性能问题,怎么解决?
- TraceView的实现原理,分析数据误差来源
- 使用过SysTrace吗?原理了解得怎么样?
- mmap + native 日志优化
七、开源库
- 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热修复的实现原理
八、架构设计
- 配置中心以及灰度测试
- 调试组件
- 性能监控框架
- 基础网络组件
- 埋点框架
- 启动相关
- 中间件(图片 日志 存储 基础信息)
- 第三方sdk(偏中台方向)
- 组件化插件化动态化
- android编译流程
- Gradle 生命周期
- apt是编译中哪个阶段?
- Dex和class有什么区别?
- Transform是如何被执行的?
- Transform和其他系统Transform执行的顺序
- 如何监控编译速度变慢问题?
- Gradle中如何给一个Task前后插入别的任务?
- ksp APT Transform的区别
- Transform上的编译优化能做哪些?
- aar 源码切换插件原理
- 你们有哪些保证代码质量的手段?
- 如何对第三方的依赖做静态检查?
- R.java code too large 解决方案
- R inline 你需要注意些什么?
- 一个类替换父类 比如所有activity实现类替换baseactivity
- R8 D8 以及混淆相关的,还有R8除了混淆还能干些什么? 混淆规则有没有碰到什么奇怪的问题?
- 编译的时候有没有碰到javac的常量优化?
九、跨平台
- 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, ‘no data’)是什么意思?
- const修饰构造函数和放声明数值前分别有什么作用?
- Assert(断言)有什么作用?什么时候有效?
- StatefulWidget 的生命周期是怎么样的?
- Widgets、RenderObjects 和 Elements的关系
- Flutter 是如何与原生Android、iOS进行通信的?
- 简述Flutter 热重载
- Flutter 和其他跨平台方案的本质区别
- Widget 唯一标识Key有哪几种?
- 什么是Navigator? MaterialApp做了什么?
- Flutter动画类型有哪些?
- Flutter是怎么完成组件渲染的?
- Flutter绘制流程是怎么样的?
- Flutter 中存在哪四大线程?
- PlatformView使用了哪些东西来实现?
- PlatformView原理
- Platform Channel有哪几种通信方式?分别是用于什么操作?
- RenderObject如何使得页面重绘?流程是怎么样的?
- 状态管理基本分类
- 状态管理的底层逻辑一般是怎么样的?
- 状态管理的使用原则是怎么样的?
- 使用成熟状态管理库的弊端有哪些?
- flutter run实际走了哪三个命令?分别用于什么操作?
- Flutter引擎启动过程中做了什么操作?
- Flutter应用启动runApp(MyApp)过程是怎么样的?
- Dart虚拟机如何管理的?怎么调用?如何跟Flutter引擎交互?
- setState在哪种场景下可能会失效?
- isolate是怎么进行通信的?实例化过程是怎么样的?
十、音视频
- 为什么要有YUV这种数据出来?(YUV相比RGB来说的优点)
- H264/H265有什么区别?
- 什么是音视频编码格式?什么是音视频封装格式?
- 视频或者音频传输,你会选择TCP协议还是UDP协议?为什么?
- 平时说的软解和硬解,具体是什么?
- 何为直播?何为点播?
- 简述推流、拉流的工作流程?
- 如何在直播中I帧间隔设置、与帧率分辨率选定?
- 直播推流中推I帧与推非I帧区别是什么?
- 常见的直播协议有哪些?之间有什么区别?
- 点播中常见的数据传输协议主要有哪些?
- 何为Nginx?有什么特点?
- RTMP、HLS协议各自的默认端口号是?
- 简述RTMP协议,如何封装RTMP包?
- m3u8构成是?直播中m3u8、ts如何实时更新?
- MediaCodec编码机制
- 何为音视频同步,音视频同步是什么标准?
- 音视频能做到绝对同步吗?
- 音频超前与视频超前在同步中如何解决?
- 播放器暂停、快进快退、seek、逐帧、变速怎么实现?
- 视频倒放如何实现?
- 说说你平时在播放过程中做的优化工作?
- 你研究过哪些具体的流媒体服务器,是否做过二次开发?
当然,面试时不会上面的每个题都问到,通常会根据简历里写的项目经历来问,结合岗位相关的技术,而面试中经常会出现层层深挖,并且会结合实际问题来问,面试中的大多数问题都是在探明你的技术边界,全方位地考察你对技术的理解深度,以及解决问题的能力。
边栏推荐
猜你喜欢
美国爱荷华州立大学| Improving Distantly Supervised Relation Extraction by Natural Language Inference(通过自然语言推理改进远程监督关系提取)
Parse common methods in the Collection interface that are overridden by subclasses
用了TCP协议,就一定不会丢包吗?
Helm基础知识
Solve the docker mysql can't write Chinese
软件测试的流程规范有哪些?具体要怎么做?
软件成分分析:华为云重磅发布开源软件治理服务
「每周译Go」这次我们来点不一样的!--《How to Code in Go》系列上线
接口测试常用工具及测试方法(入门篇)
交 叉 数 组
随机推荐
.NET性能优化-你应该为集合类型设置初始大小
信息学奥赛一本通(1259:【例9.3】求最长不下降序列)
C# Barrier class
第一次进入前20名
setup syntax sugar defineProps defineEmits defineExpose
DataGrip 安装教程 详细版
golang 源码分析:uber-go/ratelimit
Soft Exam ----- UML Design and Analysis (Part 2)
SQL 入门之第一讲——MySQL 8.0.29安装教程(windows 64位)
程序员也许都缺一个“二舅”精神
Flutter 常见异常分析
4 kmiles join YiSheng group, with more strong ability of digital business, accelerate China's cross-border electricity full domain full growth
开关、电机、断路器、电热偶、电表接线图大全
训练双塔检索模型,可以不用query-doc样本了?明星机构联合发文
太魔人招新啦|快来加入我们吧!
Translate My Wonderful | July Moli Translation Program Winners Announced
LM小型可编程控制器软件(基于CoDeSys)笔记二十五:plc的数据存储区(数字量输入通道部分)
[21 Days Learning Challenge] Bubble Sort and Insertion Sort
信息学奥赛一本通(1257:Knight Moves)
Lvm逻辑卷