Android面试题汇总

最近花了大量的时间复习准备面试。杭州的一二线公司基本上都去面试过了,包括阿里,字节,快手,滴滴,有赞,涂鸦,哈啰(腾讯没有客户端的hc),其中也拿了几个不错的offer。这里就简单分享下面试题吧

注: 由于本人之前的职级有点低,所以这次的目标岗位是P6+ ~ P7岗(虽然最终还是只拿到了P6+的岗位)。如果有高P的大佬,那么这里的面试题看看就好,意义不大。


滴滴(二面挂)

一面:

  1. 简单介绍下项目中遇到的难题,怎么解决的?
  2. 大图加载的优化方案
  3. java注解元注解有哪些,有什么区别
  4. 简要讲解下APT技术
  5. ButterKnife为什么在子module要用R2文件,子module为什么不能使用switch-case来对view的id进行区别处理
  6. Activity.getWindow什么时候为空
  7. Handler 发送延迟消息,是否一定会在指定时间以后执行。异步消息怎么判断。消息列表是按什么顺序排列
  8. Looper在没有消息时,怎么处理,如何进行线程阻塞

二面:

  1. 简要介绍下项目中的亮点
  2. 主线程修改UI为什么会导致崩溃,怎么解决的
  3. 为什么Android要设计单线程操作UI
  4. 简单介绍下Activity启动流程
  5. Handler机制原理, Looper的阻塞机制
  6. 内存优化做过哪些,用过哪些工具

快手(一面挂)

一面:

  1. 如何计算bitmap大小,如何检测bitmap是否超过了1M,并打印
  2. 如何给在ImageView里面展示一个带边框的bitmap
  3. Handler机制
  4. ANR有哪些,怎么监控
  5. LRUCache原理
  6. 什么情况下会出现ConcurrentModifyException,为什么会出现,怎么解决
  7. 线程池使用过没,有哪些参数,什么作用
  8. HashMap原理
  9. SparseArray的原理
  10. SparseArray和HashMap的查找和插入时间复杂度是多少
  11. Android打包流程, 字节码插桩在哪个流程中实现
  12. 热更新有了解过么,tinker的原理是什么,有什么缺点。 有没有其他框架没有这个缺点的,怎么实现的
  13. Http 1.0,Http1.1 ,Http 2.0的区别 keep-alive和多路复用有啥区别
  14. 了解过HttpDNS么,什么作用
  15. 手写一个生产者和消费者模型

阿里(三面挂,问了下评价说是因为年纪和职级,觉得潜力不够就挂掉了)

一面:

  1. 卡顿检测怎么做的,为什么要这么做,会有兼容问题么
  2. 如果降低crash率的,有做哪些处理
  3. 觉得哪些东西做的比较好,说一下
  4. jsBridge是怎么实现的,如果客户端向前端发送消息怎么发送。
  5. 在图片框架选型的时候怎么考虑的,Fresco,Piccaso,Glide之间的优缺点
  6. 自定义一个从底部滑出的抽屉,该怎么做,需要有哪些考虑的点
  7. 一个简单的RecyclerView,说一下手势Down,Move,Up的分发。如果TextView上面设置了点击事件,那么分发逻辑是怎么样的
  8. 项目是怎么进行架构设计的
  9. 项目是否采用模块化处理,怎么做的,怎么进行交互
  10. git-merge和git-rebase的区别

二面:

  1. 现在项目的整体设计是怎么样的
  2. 降低crash率做了哪些处理
  3. 怎么检测线上卡顿问题
  4. kotlin相比于java有哪些优势
  5. 什么时机可以认为页面加载完成
  6. 内存优化有做过哪些
  7. 讲下merge和include
  8. 讲下运营商DNS劫持,又是如何防止DNS劫持
  9. 怎么使用Fragment的, 是采用一个Activity多个Fragment的形式么
  10. 有没有使用过一些跨端技术

三面:

  1. 项目合并做了哪些事情
  2. 怎么检测线上卡顿
  3. 怎么检测线上内存泄漏
  4. 做了哪些性能优化
  5. 最近研究了哪些新技术,谈谈看法
  6. 何如学习提高自己的技术
  7. 说说看自己的优劣势
  8. 对于现在做的产品有什么看法和见解,怎么看待竞品

有赞(过)

一面:

  1. 组件化的架构怎么设计的
  2. 组件之间怎么通信,除了EventBus还有其他哪些了解过
  3. EventBus是怎么工作的
  4. Router框架怎么设计的
  5. LiveData为什么具有生命周期感知能力,如何实现的
  6. APT怎么实现,如何生成代码文件
  7. MVP与MVVM的区别
  8. MVP为什么会存在内存泄漏的可能,怎么解决
  9. 线程池的创建有哪些参数,有什么作用
  10. 有用过kotlin么?object关键主要应用在哪里? let和run的区别
  11. GC有哪些算法,现代虚拟机基本采用什么算法,为什么这么做
  12. Activity的启动流程
  13. 在APP进程还没创建的时候,会做哪些额外操作,app进程是谁创建的
  14. View是如何显示出来的
  15. 如何把像素点显示到屏幕上
  16. Glide三级缓存策略有了解过么
  17. Glide为什么会感知生命周期
  18. 做过哪些性能优化
  19. 最近写的这篇博客写的什么,遇到了什么问题,怎么解决

二面:

  1. 讲讲项目的组成
  2. retrofit2原理
  3. 用过rxjava2哪些操作符,zip什么作用。
  4. 热修复的原理
  5. APT技术怎么实现,如何理解AOP,有过哪些应用场景
  6. MVC,MVP,MVVM的区别
  7. 讲一下LiveData+ViewModel怎么实现生命周期, 屏幕旋转时,会保存数据么
  8. 有没有碰到过LiveData接收多次消息的问题,LiveData的postValue和setValue有什么区别,平时怎么使用
  9. glide怎么实现生命周期的监听
  10. 组件化的方案,如何提高编译效率
  11. 组件通信用的什么
  12. 有没有写过印象深刻的框架
  13. 平时周末会遇到线上事故么,怎么处理
  14. 平时开发过程怎么沟通协调,在里面作为什么角色存在。

三面:

  1. 讲一下你觉得成长最大的一个项目,为什么
  2. 组件化考虑的因素有哪些,为什么这么考虑,为什么使用AAR包就会提高编译效率
  3. 说一个你觉得做的比较好的点。
  4. 有没有跨端经验
  5. 有没有推动过项目的一些方案的制作和实施。讲一下怎么做的

哈啰出行(过)

一面:

  1. 讲述一下自己做的最有亮点的项目
  2. view的绘制流程
  3. View的事件分发流程
  4. ViewPager内部嵌套同向RecyclerView,RecyclerView滑动与ViewPager滑动冲突解决方案
  5. 详细说下Handler机制
  6. Handler会存在哪些问题,怎么解决
  7. 设计模式用过哪些,简要讲述下最熟悉的几个设计模式,怎么设计,为什么这么设计
  8. APT怎么实现的,元注解什么作用。 IOC怎么实现

二面:

  1. 讲述一下自己项目亮点
  2. 讲一下路由框架的架构设计,路由还可以实现哪些功能
  3. 容灾方案怎么实现,怎么做降级处理,怎么做AbTest
  4. App Link有了解过没
  5. Handler的机制,如果取不到消息接下来怎么做。
  6. APP启动做过哪些优化,如果启动优化的负责人,你会怎么做
  7. Activity的冷启动流程
  8. Application由谁创建,Activity由谁创建。ContentProvider的onCreate发生在什么时候
  9. 热更新的原理,插件化的原理

三面:

  1. 讲述项目经历
  2. 讲一下自己觉得做得最好的地方
  3. 有做过哪些性能优化
  4. 让你负责埋点功能,你怎么设计实现
  5. leakcanary实现原理
  6. flutter有了解过么
  7. 讲当前部门的主要业务

涂鸦智能(过)

一面:

  1. Activity启动流程
  2. Handler机制
  3. 项目中解决过的难题
  4. Http1.0 http1.1 http2.0的区别
  5. Https的请求过程
  6. 用过抓包工具么,抓包工具为什么可以抓到请求,如何抓到HTTPS请求,怎么实现

二面:

  1. 讲几个项目中遇到的难题(技术上的难题或者团队协作上面的难题),怎么解决
  2. 如何进行团队协作
  3. 讲下项目亮点
  4. EventBus的原理,还有哪些可以通信的
  5. LiveData+ViewModel怎么实现生命周期的
  6. EventBus和LiveData的优缺点
  7. OKHttp的原理

三面:

  1. 组件化开发怎么实现
  2. 路由怎么实现,组件化通信有哪些
  3. 介绍下opengles开发魔方的流程
  4. retrofit实现原理
  5. 为什么这个时候选择看机会
  6. 涂鸦对你来说整体印象如何

字节跳动(过)

一面:

  1. git cherry-pick 操作commit id一样么
  2. git merge和rebase的作用
  3. Fragment 如何传参的,有没有使用构造函数传参
  4. SurfaceView和View绘制上面的差别,可以设置层级么。 mediaOverlay什么作用
  5. 插件化和组件化的差别, 插件化的加载过程
  6. 长图加载解决方案 DecodeRegion的底层原理
  7. 算法: A方法返回0和1的概率是p和1-p, 设计一个算法让0和1返回的概率各是1/2
  8. opengl 顶点着色器, 片段着色器
  9. classLoader通过什么判断class是否已经加载到内存中
  10. 内存优化怎么做的
  11. 滑动冲突怎么解决 nestchild和nestparent如何实现手势分发

二面:

  1. OpenGLES 怎么使用
  2. 线程启动方式
  3. HandlerThread了解过么
  4. Synchronized原理,notify wait底层是怎么做的, 了解过锁的膨胀么
  5. CAS操作如何保证两个线程数据安全
  6. Dialog和Activity属于同一个window么,为什么
  7. 用过哪些设计模式
  8. 讲讲设计原则,项目里使用情况
  9. 讲讲现在项目里的网络库, OKHttp有哪些优势(相比较于以前的HttpClient和HttpUrlConnection)
  10. EventBus 内部使用什么样的数据结构保存,EventBus的优缺点
  11. Bitmap内存怎么计算 假设一个100*100的图片放入xxhdpi的文件夹,在720的手机上面显示,Config是ARGB8888。 内存大小多少
  12. 讲讲为什么使用MVVM,MVP为什么会出现内存泄漏, MVVM为什么不会出现内存泄漏
  13. VSync信号 什么作用 同步多次执行addView,removeView等UI操作为什么不会多次进行View的绘制
  14. 算法: 如果将一串路径反转 例如 /a/b/././c/..d/e -> /e/d/c/b/a

三面:

  1. 自动登出如何处理的
  2. 登录之后页面,数据刷新怎么处理
  3. TCP和UDP的区别, 讲下视频通话中哪些用到了UDP,哪些用到了TCP
  4. Java的Thread是JVM创建的还是系统的
  5. Thread可以设置大小么
  6. JVM的内存回收算法
  7. View的onMeasure测量逻辑
  8. 解决过的难题
  9. 讲下mvvm的设计,与mvp相比优势是什么,如果用mvp如何防止内存泄露
  10. 100个人编号为1100,山洞有100盏灯,编号为1100。 人依次过山洞,当人经过【灯编号可以整除人编号】的路灯时,按下开关。假设刚开始灯都是灭的,那么100个人出去以后,有多少盏灯是亮着的。
  11. 给定两个职员,找出最近的公共上级 (树的最近公共祖先节点)

你可能感兴趣的:(Android面试题汇总)