这些面试题是我在上半年跳槽换工作刷题时收集整理的,包括了BAT、京东、小米、蘑菇街、字节跳动、滴滴的面试真题等等。 并且面试题还是有一丢丢深度,适合人群:1-5年工作经验,打算跳槽面试的中高级工程师。
提示一下:因为面试题带上答案解析过于太多,怕影响朋友的阅读体验,就整理了PDF,领取链接在下方。
2020年腾讯Android工程师 (社招)面试题

网络编程
- 我项目中Socket是怎么实现IM通讯的;
- Socket通讯,怎么实现图片,大文件传输;
- http报文结构;
- https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解?
- http,https有什么不同,如何进行加密,各种加密算法的性能;
- 你知道的几种网络请求方式,get和post有什么区别,性能比较;
- 三次握手,四次挥手;浏览器请求一个网址的过程;
IO
- 10G Text文本,怎么读取到页面上;
- 封装一个网络框架,考虑哪些问题,使用多线程,下载一个大文件,如何得知文件下载完成
设计模式
- 单例模式几种,双层检测单例为啥要进行第二次判断,它一定安全么?
- 内部类为什么只会被加载一次。。。。。。。一个问题的延伸至代理模式,装饰者模式
数据结构+算法
- Java中你了解几种数据结构;
- 那你用过hashtable么,他是怎么实现唯一性的;
- 那你说下LinkeMap吧;
- 怎么监测链表有没有产生死循环;
- 你熟悉哪些算法,他们得时间复杂度是怎么样的;
- arrayMap的实现原理
- 1~100的int数组,循环打印输出index的为8的倍数的value并删除,要求,效率要高
- 设计一个算法,实现输出展示Android系统的所有文件路径;
序列化
- Android中Serializable和Parcelable原理,效率等;
- intent传递大小限制;怎么传输一直10M的图片;
并发编程
- 线程池有几种,锁有几种,线程的原子性等等。。;
- 多线程操作;
虚拟机
- 虚拟机内存模型,垃圾回收算法,JVM老年代和新生代的比例;
- java虚拟机和Dalvik虚拟机的区别
屏幕适配
- 怎么实现屏幕适配,dp,px转换关系;
- dp适配准确么,为什么不会。
四大组件原理
- provider原理;
- 广播的通讯原理;
Handler
- handle原理,在哪初始化loop,循环为啥不阻塞主线程
- handle中怎么实现消息延时发送的;
View
- view的绘制流程,从哪开始绘制的,事件分发机制;
- 自定义VIew,把一行String字体绘制到画板中间,怎么计算中间位置,怎么计算String字符串长度,高度等;
- 事件分发机制,view的事件中onCancle是怎么触发的
性能优化(Bitmap)
- 项目中怎么做性能,内存优化的,怎么监测性能,内存抖动的原因;
- 从网络加载一个10M的图片;
- 怎么读取一张100m的图片;
- LruCache原理;
跨进程通信
- 跨进程通讯几种方式,怎么实现一次性拷贝;
- 你项目中用到跨进程通讯的场景;
- binder通讯原理;
MVVM
- mvvm原理
- databinding的实现原理;mvvm中是怎么实现数据双向绑定的,原理是什么,liveData的原理
组件化
- 项目中组件化通讯是怎么实现的,事件总线怎么通讯;
- aRouter源码看过么,内部怎么实现的;
- 搭建一个组件化框架,思想,考虑哪些问题;
插件化与热修复
- 插件化如何加载插件;
- classLoade加载机制;
- 热修复资源文件的方案,插件化activity的hook点;
- 类的生命周期,加载流程;
- 热修复一个xml文件;
- Android类加载器有几种,分别应用什么场景;
开源框架原理
- RxJava的原理;
- RxJava会产生内存泄漏么,RxJava怎么实现背压,map和flatmap的区别;
- glide原理,生命周期的监听实现;
- eventbus原理,线程切换;
- eventbus是怎么样实现线程切换的;
- Retrofit原理,动态代理实现,动态代理的优缺点;
Framework
- 说下系统的启动流程,从电源键按下开始;
阿里Android工程师(社招)面试题

- Activity 的生命周期;
- Android 的 4 大启动模式,注意 onNewIntent() 的调用;
- 组件化架构思路,如何从一个老项目一步一步实现组件化,主要问实现思路,考察应试者的架构能力和思考能力。
- 这一块内容真的很多,你需要考虑的问题很多,哪一步做什么,顺序很重要。
- MVC、MCP、MVVP 的区别和各种使用场景,如何选择适合自己的开发架构?
- Router 原理,如何实现组件间通信,组件化平级调用数据方式。
- 系统打包流程;
- APP 启动流程;
- 如何做启动优化?
- 冷启动什么的肯定是基础,后续应该还有的是懒加载,丢线程池同步处理,需要注意这里可能会有的坑是,丢线程池如何知道全部完成。
- 事件分发机制。
- 事件分发已经不是直接让你讲了,会给你具体的场景,比如 A 嵌套 B ,B 嵌套 C,从 C 中心按下,一下滑出到 A,事件分发的过程,这里面肯定会有 ACTION_CANCEL 的相关调用时机。
- 如何检测卡顿,卡顿原理是什么,怎么判断是页面响应卡顿还是逻辑处理造成的卡顿?
- 生产者模式和消费者模式的区别?
- 单例模式双重加锁,为什么要这样做。
- Handler 机制原理,IdleHandler 什么时候调用。
- LeakCanary 原理,为什么检测内存泄漏需要两次?
- BlockCanary 原理。
- ViewGroup 绘制顺序;
- Android 有哪些存储数据的方式。
- SharedPrefrence 源码和问题点;
- 讲讲 Android 的四大组件;
- 属性动画、补间动画、帧动画的区别和使用场景;
- 自定义 ViewGroup 如何实现 FlowLayout?如何实现 FlowLayout 调换顺序?
- 自定义 View 如何实现打桌球效果;
- 自定义 View 如何实现拉弓效果,贝瑟尔曲线原理实现?
- APK 瘦身是怎么做的,只用 armabi-v7a 没有什么问题么?
- APK 瘦身这个基本是 100% 被面试问到,可能是我简历上提到的原因。
- ListView 和 RecyclerView 区别?RecyclerView 有几层缓存,如何让两个 RecyclerView 共用一个缓存?
- 如何判断一个 APP 在前台还是后台?
- 如何做应用保活?全家桶原理?
- 讲讲你所做过的性能优化。
- Retrofit 在 OkHttp 上做了哪些封装?动态代理和静态代理的区别,是怎么实现的。
- 讲讲轨迹视频的音视频合成原理;
- AIDL 相关;
- Binder 机制,讲讲 Linux 上的 IPC 通信,Binder 有什么优势,Android 上有哪些多进程通信机制?
- RxJava 的线程切换原理。
- OkHttp 和 Volloy 区别;
- Glide 缓存原理,如何设计一个大图加载框架。
- LRUCache 原理;
- 讲讲项目开发中遇到的最大的一个难题和挑战;
- 说说你开发最大的优势点。出现率同上。
字节跳动Android工程师(社招)面试题
- 什么是ANR,如何避免
- 主线程中的Looper.loop()一直无限循环为什么不会造成ANR?
- ListView原理与优化
- ContentProvider实现原理
- 如何使用ContentProvider进行批量操作?
- 为什么要使用通过
ContentResolver
类从而与ContentProvider
类进行交互,而不直接访问ContentProvider
类? - 介绍Binder机制
- 如何自定义View,如果要实现一个转盘圆形的View,需要重写View中的哪些方法?
- Android事件分发机制
- 如何加载大图片
- 布局文件中,layout_gravity 和 gravity 以及 weight的作用。
- ListView里的ViewType机制
- TextView怎么改变局部颜色
- Activity A 跳转到 Activity B,生命周期的执行过程是啥?
- Android中Handler声明非静态对象会发出警告,为什么非得是静态的?
- ListView使用过程中是否可以调用addView
- 属性动画(Property Animation)和补间动画(Tween Animation)的区别,为什么在3.0之后引入属性动画
- 有没有使用过EventBus或者Otto框架,主要用来解决什么问题,内部原理
- Android里的LRU(Least Recently Used 最近最少使用)算法原理
- Service onBindService 和startService 启动的区别
- invalidate()和postInvalidate() 的区别
- 导入外部数据库
- Parcelable和Serializable区别
- 在两个 Activity 之间传递对象还需要注意什么呢?
- Android里跨进程传递数据的几种方案
- 匿名共享内存,使用场景
- Application类的作用
- 广播注册后不解除注册会有什么问题?(内存泄露)
- 属性动画(Property Animation)和补间动画(Tween Animation)的区别
- BrocastReceive里面可不可以执行耗时操作?
- Android优化工具
- TraceView
- Systrace
- Android动态权限?
- ViewPager如何判断左右滑动?
- ListView与RecyclerView
- SpannableString
- APK安装过程
- 描述一下Android手机启动过程和App启动过程?
- Android手机启动过程
- App启动过程
- Include、Merge、ViewStub的作用
- Asset目录与res目录的区别
- System.gc && Runtime.gc
- Application 在多进程下会多次调用 onCreate() 么?
- Theme && Style
- SQLiteOpenHelper.onCreate() 调用时机?
- Removecallback 失效?
- Toast 如果会短时间内频繁显示怎么优化?
- Notification 如何优化?
- 应用怎么判断自己是处于前台还是后台?
- FragmentPagerAdapter 和 FragmentStateAdapter 的区别?
- Bitmap的本质?
- SurfaceView && View && GLSurfaceView
- 请简述一下你对fragment的理解?
- 请简述一下Fragment的生命周期?
- LayoutInflater,LayoutInflater.inflate()这两个是什么意思?
- Android的多渠道打包你了解吗
- 如何对APK瘦身?
- Android当前应用跳转到三方应用
- JVM、ART、Dalvik的区别和联系
- Android中的classLoader相比java中的classLoader有什么区别?
- Socket和LocalSocket
- HttpClient和URLConnection的区别,怎么使用https
- 设计一个网络请求框架(可以参考Volley框架)
- 网络图片加载框架(可以参考BitmapFun)
汇总
文末彩蛋
对于程序员来说,要学习的知识内容、技术有太多太多难点,要想不被面试淘汰就只能提前做好复习规划、认真刷题,在学习中不断提升自己,请记住,从来都是只是我们去适应环境,而不是环境来适应我们!
另外附上这段时间收集的23套互联网一二线企业Android开发岗社招面试题&答案解析(含BAT、京东、小米、蘑菇街、字节跳动、滴滴等等),已被我分类整理成PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。————(此处免费打包领取)


网友评论