为什么Android开发岗位要求越来越高?
Posted River_ly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么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解析要传入匿名内部类
二、虚拟机
- JVM内存模型的理解?
- GC原理和回收策略
- JVM跟Art、Dalvik对比
- GC收集器简介?以及它的内存划分怎么样的?
- 栈内存和堆内存的区别是什么?
- JVM调优的常见命令行工具有哪些?JVM常见的调优参数有哪些?
- jstack,jmap,jutil分别的意义?如何线上排查JVM的相关问题?
- JVM方法区存储内容是否会动态扩展?是否会出现内存溢出?出现的原因有哪些?
- 如何解决同时存在的对象创建和对象回收问题?
- JVM中最大堆大小有没有限制?
- 如何理解Java的虚函数表?
- Java运行时数据区域导致内存溢出的原因
- 对象创建、内存布局,访问定位
- 深入理解 Android JVM,构建完整 JVM 知识体系,彻底吃透 JVM !
三、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 的?
- Framework面试题精讲40节,彻底掌握底层知识!精通Framework是真的可以为所欲为!
这些题目的答案我都已经整理到了本地PDF文档中,这里由于篇幅原因没有一一把答案贴上来,需要完整文档的朋友们可以顺手帮我点赞评论一下,直接前往公号:Android开发之家,自行领取。
六、性能优化
- 做了哪些稳定性方面的优化?
- 性能稳定性是怎么做的?
- 业务稳定性如何保障?
- 如果发生了异常情况,怎么快速止损?
- 启动优化是怎么做的?
- 是怎么异步的,异步遇到问题没有?
- 启动优化有哪些容易忽略的注意点?
- 版本迭代导致的启动变慢有好的解决方式吗?
- 如果提高启动速度,设计一个延迟加载框架或者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热修复的实现原理
- 直击大厂!Android开发常见原理级面试题详解
八、架构设计
- 配置中心以及灰度测试
- 调试组件
- 性能监控框架
- 基础网络组件
- 埋点框架
- 启动相关
- 中间件(图片 日志 存储 基础信息)
- 第三方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的常量优化?
- 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, ‘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、逐帧、变速怎么实现?
- 视频倒放如何实现?
- 说说你平时在播放过程中做的优化工作?
- 你研究过哪些具体的流媒体服务器,是否做过二次开发?
当然,面试时不会上面的每个题都问到,通常会根据简历里写的项目经历来问,结合岗位相关的技术,而面试中经常会出现层层深挖,并且会结合实际问题来问,面试中的大多数问题都是在探明你的技术边界,全方位地考察你对技术的理解深度,以及解决问题的能力。
这些题目的答案我都已经整理到了本地PDF文档中,这里由于篇幅原因没有一一把答案贴上来,需要完整文档的朋友们可以顺手帮我点赞评论一下,直接前往公号:Android开发之家,自行领取。
这些题目的答案我都已经整理到了本地PDF文档中,这里由于篇幅原因没有一一把答案贴上来,需要完整文档的朋友们可以顺手帮我点赞评论一下,直接前往公号:Android开发之家,自行领取。
与50位技术专家面对面 20年技术见证,附赠技术全景图以上是关于为什么Android开发岗位要求越来越高?的主要内容,如果未能解决你的问题,请参考以下文章
作为一名Android开发者,怎样才能进入阿里,拿到30-50K