一线互联网移动架构师Android框架体系架构!干货整理
# 面试经验
自己大大小小投了也有20多家公司,不过经历简历筛选以及笔试淘汰,最终就经历了7家公司的面试。下面我就把自己面试中问到的问题贴出来供大家参考,一些具体项目相关的就不贴了。
# 阿里巴巴
> 阿里是3月初开始投的,是自己第一次面试大型的互联网公司,当时自己的准备也不够充分,表现不是很好,经历了三次技术面,最后挂了。
**一面**
1. 自我介绍
2. hashmap和hashtable
3. jdbc
4. 三次握手
5. http状态码
6. HTTPS加密:对称,非对称,CA证书
7. handler
8. 线程池的使用
9. sychonized,volatile
10. binder
11. activity绘制流程
12. 事件响应流程
13. activity周期,启动模式
**二面**
1. 自我介绍
2. 对自己项目的介绍,架构图呈现
3. 对MVP和MVVM的理解。
4. 四大启动模式,以及场景对应
5. Handler的机制介绍,为什么不能在子线程初始化问题
6. 设计模式中的单例介绍,使用场景(Okhttp的Seesion存储等等),在线编写
7. 快排算法
8. OkHttp的源码分析,及整体架构的流程图绘制
9. 四大引用的问题和MVP框架相结合进行回答
10. View绘制流程问题,如何不使用xml,来实现中间位置的定位
11. 事件分发机制流程讲解,以及如何实现单击事件和长按事件的判定
12. 关于为什么选用mqtt协议的问题,优势,原理
**三面**
1. 自我介绍
2. abstract和interface区别
3. int和Integer区别
4. 四种引用
5. Java里面int、char、long的字节数
6. 线程的创建方式
7. RxJava的优缺点
8. EventBus
9. 从网络上加载一个10M的图片,要考虑哪些
10. http与https
11. http 1.0 和 http 2.0之间的区别
12. 设计模式准则
13. Handler机制
14. 算法:判断一个链表是否回文算法,给定一个数组,将数组里面的每一位向后移动k位
# 携程
> 携程当时投的时候就没抱希望,招聘信息上明确指定只招固定的那几所985高校,就随便投了,没想到笔试都没做就直接打电话面试了,不过问的问题确实很深入,结果显然,一面就挂了。
**一面**
1. 集合
2. concurrenthashmap
3. volatile
4. synchronized与Lock
5. Java线程池
6. wait/notify
7. NIO
8. 垃圾收集器
9. Activity生命周期
10. AlertDialog,popupWindow,Activity区别
# 斗鱼
> 斗鱼是一家直播公司,给出的实习待遇是相当好,经室友推荐就投了简历。最后流程走完,得知挂在了二面上,大概原因就是没有拿得出手的项目,实际项目经验不足。
**一面**
1. 线程同步(五个线程如何顺序执行)
2. GC
3. 内部类特点
4. 四大引用范式
5. 新建线程的方式(三个)
6. arraylist和linkedlist
7. 线程池(使用,种类,参数)
8. hashmap(底层实现,冲突解决方式,扩容方式,线程安全?LinkedHashmap)
9. 自定义VIew(View的绘制,自定义View的方法)
10. 性能优化(布局和代码)
11. sp、dp和px的区别(适配问题)
12. handler(基本原理,ThreadLocal原理和使用)
13. 四大组件(问了生命周期和特点和基本使用)* 计网
14. TCP和UDP
15. HTTP建立过程
**二面**
1. 问的都是一些项目问题,比较宽泛,没问具体技术点
# 字节跳动
> 字节跳动是在三月底投的,当时找了一个月,都没拿到拿得出手的offer,有点心烦意乱,就又海投了一波。3.24接了字节跳动的面试,3.29进行的视频面试。一共进行了3轮视频面试,字节的面试官很好,看得出来字节的技术是很强的,也很注重算法。最终拿到offer。
**一面**
1. 数据结构中堆的概念,堆排序
2. 死锁的概念,怎么避免死锁
3. ReentrantLock
4. synchronized
5. volatile
6. HashMap
7. singleTask启动模式
8. 用到的一些开源框架,介绍一个看过源码的,内部实现过程。
9. 消息机制实现
**二面**
1. synchronized与ReentrantLock
2. ReentrantLock的内部实现
3. 用到的一些开源框架,介绍一个看过源码的,内部实现过程。
4. Java中异常
5. App启动崩溃异常捕捉
6. 事件传递机制的介绍
7. ListView的优化
8. 今日头条推荐新闻去重,推荐的时候去掉用户已经看过的新闻。
9. 二叉树,给出根节点和目标节点,找出从根节点到目标节点的路径。手写算法
10. 模式MVP,MVC介绍
11. 断点续传的实现
**三面**
1. 集合的接口和具体实现类,介绍
2. TreeMap具体实现
3. synchronized与ReentrantLock
4. 手写生产者/消费者模式
5. 逻辑地址与物理地址,为什么使用逻辑地址
6. volatile
7. 一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法
8. Android进程分类
9. 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法。
10. Activity的启动模式
# 腾讯
> 腾讯大家都知道互联网巨头,我是通过实习僧上简历投递获得的这次面试机会,一共进行了两轮电话面试,挂在了二面。
**一面**
1. 自我介绍
2. APP的启动流程
3. APP的安装流程
4. Rxjava的源码
5. 事件分发机制和多点触控
6. https和非对称加密
7. Retrofit的动态代理
8. 几种IPC方式的优劣,以及Binder的原理
9. 本地持久化储存的方法
10. parcelable和serializable
**二面**
1. 自我介绍
2. 笔试题1:删除无序链表中的重复结点(能否优化)
3. 笔试题2:先说一下二叉树的有哪些遍历方法。写一个二叉树前序遍历的非递归形式。
4. 讲一下Java的内存。
5. 创建一个字符串对象,这个对象分配在哪里?
6. String str = “123” + “456”;会创建几个对象。
7. 问了操作系统的问题,没学过,所以也忘了问了什么。
8. 数据存储有学过吗?数据库和文件保存有什么区别?
9. Activity有哪些启动模式?
10. 有什么要问的?
### 总结
**其实要轻松掌握很简单,要点就两个:**
1. 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
2. 多练。 (视频优势是互动感强,容易集中注意力)
**你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。**
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。**下面资料部分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。**
> * **自行下载直达领取链接:【[点击我即可获得!](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)】**
> * **以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,【[点这里可以看到全部内容](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)】。**
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625437870556219.jpg)