Android 研发大厂面试记:阿里,字节,腾讯 android 面试题目
最近花了大量的时间复习准备面试。杭州的一二线公司基本上都去面试过了,包括阿里,字节,快手,滴滴,有赞,涂鸦,哈啰(腾讯没有客户端的 hc),其中也拿了几个不错的 offer。这里就简单分享下面试题吧
注: 由于本人之前的职级有点低,所以这次的目标岗位是 P6+ ~ P7 岗(虽然最终还是只拿到了 P6+的岗位)。如果有高 P 的大佬,那么这里的面试题看看就好,意义不大。
===================================================================
一面:
简单介绍下项目中遇到的难题,怎么解决的?
大图加载的优化方案
java 注解元注解有哪些,有什么区别
简要讲解下 APT 技术
ButterKnife 为什么在子 module 要用 R2 文件,子 module 为什么不能使用 switch-case 来对 view 的 id 进行区别处理
Activity.getWindow 什么时候为空
Handler 发送延迟消息,是否一定会在指定时间以后执行。异步消息怎么判断。消息列表是按什么顺序排列
Looper 在没有消息时,怎么处理,如何进行线程阻塞
二面:
简要介绍下项目中的亮点
主线程修改 UI 为什么会导致崩溃,怎么解决的
为什么 Android 要设计单线程操作 UI
简单介绍下 Activity 启动流程
Handler 机制原理, Looper 的阻塞机制
内存优化做过哪些,用过哪些工具
===================================================================
一面:
如何计算 bitmap 大小,如何检测 bitmap 是否超过了 1M,并打印
如何给在 ImageView 里面展示一个带边框的 bitmap
Handler 机制
ANR 有哪些,怎么监控
LRUCache 原理
什么情况下会出现 ConcurrentModifyException,为什么会出现,怎么解决
线程池使用过没,有哪些参数,什么作用
HashMap 原理
SparseArray 的原理
SparseArray 和 HashMap 的查找和插入时间复杂度是多少
Android 打包流程, 字节码插桩在哪个流程中实现
热更新有了解过么,tinker 的原理是什么,有什么缺点。 有没有其他框架没有这个缺点的,怎么实现的
Http 1.0,Http1.1 ,Http 2.0 的区别 keep-alive 和多路复用有啥区别
了解过 HttpDNS 么,什么作用
手写一个生产者和消费者模型
阿里(三面挂,问了下评价说是因为年纪和职级,觉得潜力不够就挂掉了)
=============================================================================================
一面:
卡顿检测怎么做的,为什么要这么做,会有兼容问题么
如果降低 crash 率的,有做哪些处理
觉得哪些东西做的比较好,说一下
jsBridge 是怎么实现的,如果客户端向前端发送消息怎么发送。
在图片框架选型的时候怎么考虑的,Fresco,Piccaso,Glide 之间的优缺点
自定义一个从底部滑出的抽屉,该怎么做,需要有哪些考虑的点
一个简单的 RecyclerView,说一下手势 Down,Move,Up 的分发。如果 TextView 上面设置了点击事件,那么分发逻辑是怎么样的
项目是怎么进行架构设计的
项目是否采用模块化处理,怎么做的,怎么进行交互
git-merge 和 git-rebase 的区别
二面:
现在项目的整体设计是怎么样的
降低 crash 率做了哪些处理
怎么检测线上卡顿问题
kotlin 相比于 java 有哪些优势
什么时机可以认为页面加载完成
内存优化有做过哪些
讲下 merge 和 include
讲下运营商 DNS 劫持,又是如何防止 DNS 劫持
怎么使用 Fragment 的, 是采用一个 Activity 多个 Fragment 的形式么
有没有使用过一些跨端技术
三面:
项目合并做了哪些事情
怎么检测线上卡顿
怎么检测线上内存泄漏
做了哪些性能优化
最近研究了哪些新技术,谈谈看法
何如学习提高自己的技术
说说看自己的优劣势
对于现在做的产品有什么看法和见解,怎么看待竞品
=================================================================
一面:
组件化的架构怎么设计的
组件之间怎么通信,除了 EventBus 还有其他哪些了解过
EventBus 是怎么工作的
Router 框架怎么设计的
LiveData 为什么具有生命周期感知能力,如何实现的
APT 怎么实现,如何生成代码文件
MVP 与 MVVM 的区别
MVP 为什么会存在内存泄漏的可能,怎么解决
线程池的创建有哪些参数,有什么作用
有用过 kotlin 么?object 关键主要应用在哪里? let 和 run 的区别
GC 有哪些算法,现代虚拟机基本采用什么算法,为什么这么做
Activity 的启动流程
在 APP 进程还没创建的时候,会做哪些额外操作,app 进程是谁创建的
View 是如何显示出来的
如何把像素点显示到屏幕上
Glide 三级缓存策略有了解过么
Glide 为什么会感知生命周期
做过哪些性能优化
最近写的这篇博客写的什么,遇到了什么问题,怎么解决
二面:
讲讲项目的组成
retrofit2 原理
用过 rxjava2 哪些操作符,zip 什么作用。
热修复的原理
APT 技术怎么实现,如何理解 AOP,有过哪些应用场景
MVC,MVP,MVVM 的区别
讲一下 LiveData+ViewModel 怎么实现生命周期, 屏幕旋转时,会保存数据么
有没有碰到过 LiveData 接收多次消息的问题,LiveData 的 postValue 和 setValue 有什么区别,平时怎么使用
glide 怎么实现生命周期的监听
组件化的方案,如何提高编译效率
组件通信用的什么
有没有写过印象深刻的框架
平时周末会遇到线上事故么,怎么处理
平时开发过程怎么沟通协调,在里面作为什么角色存在。
三面:
讲一下你觉得成长最大的一个项目,为什么
组件化考虑的因素有哪些,为什么这么考虑,为什么使用 AAR 包就会提高编译效率
说一个你觉得做的比较好的点。
有没有跨端经验
有没有推动过项目的一些方案的制作和实施。讲一下怎么做的
===================================================================
一面:
讲述一下自己做的最有亮点的项目
view 的绘制流程
View 的事件分发流程
ViewPager 内部嵌套同向 RecyclerView,RecyclerView 滑动与 ViewPager 滑动冲突解决方案
详细说下 Handler 机制
Handler 会存在哪些问题,怎么解决
设计模式用过哪些,简要讲述下最熟悉的几个设计模式,怎么设计,为什么这么设计
A
PT 怎么实现的,元注解什么作用。 IOC 怎么实现
二面:
讲述一下自己项目亮点
讲一下路由框架的架构设计,路由还可以实现哪些功能
容灾方案怎么实现,怎么做降级处理,怎么做 AbTest
App Link 有了解过没
Handler 的机制,如果取不到消息接下来怎么做。
APP 启动做过哪些优化,如果启动优化的负责人,你会怎么做
Activity 的冷启动流程
Application 由谁创建,Activity 由谁创建。ContentProvider 的 onCreate 发生在什么时候
评论