大厂面试问题广?先来看看这些Android高级面试题你都掌握了没

一、性能优化

1、做过哪些性能优化?是怎么评测和具体优化的?
2、为什么WebView加载会慢呢?
3、如何优化自定义View
4、FC(Force Close)什么时候会出现?
5、Java多线程引发的性能问题,怎么解决?

二、Android Framework相关

1、Android系统架构
2、View的事件分发机制?滑动冲突怎么解决?
3、View的绘制流程?
4、跨进程通信
5、Android系统启动流程是什么?(提示:init进程 -> Zygote进程 –> SystemServer进程 –> 各种系统服务 –> 应用进程)
6、启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?
7、AMS家族重要术语解释
8、App启动流程(Activity的冷启动流程)
9、ActivityThread工作原理
10、说下四大组件的启动过程,四大组件的启动与销毁的方式
11、AMS是如何管理Activity的?
12、理解Window和WindowManager
13、WMS是如何管理Window的?
14、大体说清一个应用程序安装到手机上时发生了什么?
15、Android的打包流程?(即描述清点击 Android Studio 的 build 按钮后发生了什么?)apk里有哪些东西?签名算法的原理?
16、说下安卓虚拟机和java虚拟机的原理和不同点?(JVM、Davilk、ART三者的原理和区别)
17、安卓采用自动垃圾回收机制,请说下安卓内存管理的原理?
18、Android中App是如何沙箱化的,为何要这么做?
19、一个图片在app中调用R.id后是如何找到的?
20、JNI
21、请介绍一下NDK?

三、Android优秀三方库源码

1、你项目中用到哪些开源库?说说其实现原理?
2、Android中软引用与弱引用的应用场景

四、热修复、插件化、模块化、组件化、Gradle

1、热修复和插件化

热修补技术是怎样实现的,和插件化有什么区别?
为什么选用插件化?

2、模块化和组件化

  • 模块化的好处
  • 组件化原理,组件化中路由(ARouter)的实现
  • Android 组件化的原理,还有一些组件化平时使用的问题。
  • 项目组件化的理解
  • 多模块开发的时候不同的负责人可能会引入重复资源,相同的字符串,相同的icon等但是文件名并不一样,怎样去重?

3、gradle

  • gradle熟悉么,自动打包知道么?
  • 如何加快 Gradle 的编译速度?
  • Gradle的Flavor能否配置sourceset?
  • Gradle生命周期

五、设计模式与架构设计

1、设计模式

  • 谈谈你对Android设计模式的理解
  • 项目中常用的设计模式
  • 手写生产者/消费者模式

2、架构设计

  • MVC MVP MVVM原理和区别?
  • MVC的情况下怎么把Activity的C和V抽离?
  • MVP 架构中 Presenter 定义为接口有什么好处;
  • MVP如何管理Presenter的生命周期,何时取消网络请求?
  • aop思想
  • Fragment如果在Adapter中使用应该如何解耦?
  • 项目框架里有没有Base类,BaseActivity和BaseFragment这种封装导致的问题,以及解决方法?
  • 设计一个音乐播放界面,你会如何实现,用到那些类,如何设计,如何定义接口,如何与后台交互,如何缓存与下载,如何优化(15分钟时间)
  • 从0设计一款App整体架构,如何去做?
  • 说一款你认为当前比较火的应用并设计(比如:直播APP,P2P金融,小视频等)
  • 实现一个库,完成日志的实时上报和延迟上报两种功能,该从哪些方面考虑?

其它高频面试题

1、如何保证一个后台服务不被杀死?(相同问题:如何保证service在后台不被kill?)比较省电的方式是什么?
2、Android动画框架实现原理。
3、Activity-Window-View三者的差别?
4、低版本SDK如何实现高版本api?
5、说说你对Context的理解?
6、Android的生命周期和启动模式
7、ListView和RecyclerView系列
8、如何实现一个推送,消息推送原理?推送到达率的问题?
9、动态权限系列
10、自定义View系列
11、对谷歌新推出的Room架构
12、没有给权限如何定位,特定机型定位失败,如何解决?
13、Debug跟Release的APK的区别?
14、android文件存储,各版本存储位置的权限控制的演进,外部存储,内部存储
15、有什么提高编译速度的方法?
16、Scroller原理
17、Hybrid系列
18、如果在当前线程内使用Handler postdelayed 两个消息,一个延迟5s,一个延迟10s,然后使当前线程sleep 5秒,以上消息的执行时间会如何变化?
19、Android中进程内存的分配,能不能自己分配定额内存?
20、下拉状态栏是不是影响activity的生命周期,如果在onStop的时候做了网络请求,onResume的时候怎么恢复
21、Android长连接,怎么处理心跳机制
22、CrashHandler实现原理?
23、SurfaceView和View的最本质的区别?
24、Android程序运行时权限与文件系统权限
25、曲面屏的适配
26、TextView调用setText方法的内部执行流程
27、怎么控制另外一个进程的View显示(RemoteView)?
28、如何实现右滑finish activity?
29、如何在整个系统层面实现界面的圆角效果。(即所有的APP打开界面都会是圆角)
30、非UI线程可以更新UI吗?
31、如何解决git冲突?
32、单元测试有没有做过,说说熟悉的单元测试框架?
33、实现一个Json解析器(可以通过正则提高速度)。
34、Jenkins持续集成。
35、为什么 Google 会推出Fragment ,有什么好处和用途? 直接用 View 代替不行么?
36、工作中有没有用过或者写过什么工具?脚本,插件等等;比如:多人协同开发可能对一些相同资源都各自放了一份,有没有方法自动检测这种重复之类的。

最后

不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。

关于这一点,在我当时确立好Android方向时,就已经开始梳理自己的成长路线了,包括技术要怎么系统地去学习,都列得非常详细。

这里最后分享耗时一年多整理的一系列Android学习资源:Android源码解析、Android第三方库源码笔记、Android进阶架构师七大专题学习、历年BAT面试题解析包、Android大佬学习笔记等等,这些内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容

猜你喜欢

转载自blog.csdn.net/weixin_44339238/article/details/112253808