- wait/notify
- NIO
- 垃圾收集器
- Activity生命周期
- AlertDialog,popupWindow,Activity区别
斗鱼
斗鱼是一家直播公司,给出的实习待遇是相当好,经室友推荐就投了简历。最后流程走完,得知挂在了二面上,大概原因就是没有拿得出手的项目,实际项目经验不足。
一面
- 线程同步(五个线程如何顺序执行)
- GC
- 内部类特点
- 四大引用范式
- 新建线程的方式(三个)
- arraylist和linkedlist
- 线程池(使用,种类,参数)
- hashmap(底层实现,冲突解决方式,扩容方式,线程安全?LinkedHashmap)
- 自定义VIew(View的绘制,自定义View的方法)
- 性能优化(布局和代码)
- sp、dp和px的区别(适配问题)
- handler(基本原理,ThreadLocal原理和使用)
- 四大组件(问了生命周期和特点和基本使用)* 计网
- TCP和UDP
- HTTP建立过程
二面
- 问的都是一些项目问题,比较宽泛,没问具体技术点
今日头条
今日头条是在三月底投的,当时找了一个月,都没拿到拿得出手的offer,有点心烦意乱,就又海投了一波。3.24做了今日头条的面试,3.29进行的视频面试。一共进行了3轮视频面试,头条的面试官很好,看得出来头条的技术是很强的,也很注重算法。最终拿到offer。
一面
- 数据结构中堆的概念,堆排序
- 死锁的概念,怎么避免死锁
- ReentrantLock
- synchronized
- volatile
- HashMap
- singleTask启动模式
- 用到的一些开源框架,介绍一个看过源码的,内部实现过程。
- 消息机制实现
二面
- synchronized与ReentrantLock
- ReentrantLock的内部实现
- 用到的一些开源框架,介绍一个看过源码的,内部实现过程。
- Java中异常
- App启动崩溃异常捕捉
- 事件传递机制的介绍
- ListView的优化
- 今日头条推荐新闻去重,推荐的时候去掉用户已经看过的新闻。
- 二叉树,给出根节点和目标节点,找出从根节点到目标节点的路径。手写算法
- 模式MVP,MVC介绍
- 断点续传的实现
三面
- 集合的接口和具体实现类,介绍
- TreeMap具体实现
- synchronized与ReentrantLock
- 手写生产者/消费者模式
- 逻辑地址与物理地址,为什么使用逻辑地址
- volatile
- 一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法
- Android进程分类
- 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法。
- Activity的启动模式
腾讯
腾讯大家都知道互联网巨头,我是通过实习僧上简历投递获得的这次面试机会,一共进行了两轮电话面试,挂在了二面。
一面
- 自我介绍
- APP的启动流程
- APP的安装流程
- Rxjava的源码
- 事件分发机制和多点触控
- https和非对称加密
- Retrofit的动态代理
- 几种IPC方式的优劣,以及Binder的原理
- 本地持久化储存的方法
- parcelable和serializable
二面
- 自我介绍
- 笔试题1:删除无序链表中的重复结点(能否优化)
- 笔试题2:先说一下二叉树的有哪些遍历方法。写一个二叉树前序遍历的非递归形式。
- 讲一下Java的内存。
- 创建一个字符串对象,这个对象分配在哪里?
- String str = “123” + “456”;会创建几个对象。
- 问了操作系统的问题,没学过,所以也忘了问了什么。
- 数据存储有学过吗?数据库和文件保存有什么区别?
- Activity有哪些启动模式?
- 有什么要问的?
爱奇艺
爱奇艺也是通过实习僧上简历投递获得的机会,本来不抱希望,结果过了10天左右约我面试。面了大概一个小时,聊得还不错,最后第二天通知我挂了,有点不知所措,可能是实习时间达不到要求吧(只能这样安慰自己了)。
一面
- RxJava的功能与原理实现
- RecycleView的使用,原理,RecycleView优化
- ANR的原因
- 四大组件
- Service的开启方式
- Activity与Service通信的方式
- Activity之间的通信方式
- HashMap的实现,与HashSet的区别
- JVM内存模型,内存区域
- Java中同步使用的关键字,死锁
- MVP模式
- Java设计模式,观察者模式
- Activity与Fragment之间生命周期比较
- 广播的使用场景
携程
携程是3月份投的内推,结果挂掉了,后来通过笔试又获得的机会,笔试完快一个月才收到的通知,本来都快忘记了。既然通知了,就去面了。经过2轮技术面,1轮hr面,第二轮技术面是总监面,主要聊了聊项目上的问题。最终拿到offer。
一面
- Activity启动模式
- 广播的使用方式,场景
- App中唤醒其他进程的实现方式
- AndroidManifest的作用与理解
- List,Set,Map的区别
- HashSet与HashMap怎么判断集合元素重复
- Java中内存区域与垃圾回收机制
二面
- EventBus作用,实现方式,代替EventBus的方式
- Android中开启摄像头的主要步骤
- Github上传了哪些东西,代码量
学习资料
从Android开发工程师的角度来讲,我自己主要准备了以下几个方面的内容:
Java
- Java基础,如集合,反射,注解,IO,NIO,其中集合很重要,面试常问。
- JVM,如内存区域,内存模型,垃圾回收机制的算法,收集器,类加载机制。
- Java并发,如sychronized,lock,volatile,生产者/消费者模式,线程池,死锁。
Android
- Android基础,如四大组件,Binder机制,消息机制,事件分发机制,自定义View过程。
- Android开源库,如Retrofit,RxJava等原理实现,优缺点,以及使用。
数据结构
- 链表
- 栈
- 队列
- 排序
- 树
- 图
设计模式
- 单例模式
- 观察者模式
- 建造者模式
- 工厂模式
- 装饰者模式
操作系统
- 进程与线程
- 进程通信
- 进程调度
- 分页存储
- 分段存储
- 虚拟内存
必看书籍
《深入理解Java虚拟机》
《Head First 设计模式》
《Android开发艺术探索》
《剑指offer》
总结
找工作是个很辛苦的事情,而且一般周期都比较长,有时候既看个人技术,也看运气。第一次找工作,最后的结果虽然不尽如人意,不过收获远比offer大。接下来就是针对自己的不足,好好努力了。
文末
初级工程师拿到需求会直接开始做,然后做着做着发现有问题了,要么技术实现不了,要么逻辑有问题。
而高级工程师拿到需求会考虑很多,技术的可行性?对现有业务有没有帮助?对现有技术架构的影响?扩展性如何?等等…之后才会再进行设计编码阶段。
而现在随着跨平台开发,混合式开发,前端开发之类的热门,Android开发者需要学习和掌握的技术也在不断的增加。
通过和一些行业里的朋友交流讨论,以及参考现在大厂面试的要求。我们花了差不多一个月时间整理出了这份Android高级工程师需要掌握的所有知识体系。你可以看下掌握了多少。
混合式开发,微信小程序。都是得学会并且熟练的
这些是Android相关技术的内核,还有Java进阶
高级进阶必备的一些技术。像移动开发架构项目实战等
Android前沿技术;包括了组件化,热升级和热修复,以及各种架构跟框架的详细技术体系
以上即是我们整理的Android高级工程师需要掌握的技术体系了。可能很多朋友觉得很多技术自己都会了,只是一些新的技术不清楚而已。应该没什么太大的问题。
而这恰恰是问题所在!为什么别人高级工程师能年限突破30万,而你只有十几万呢?
就因为你只需补充你自己认为需要的,但并不知道企业需要的。这个就特别容易造成差距。因为你的技术体系并不系统,是零碎的,散乱的。那么你凭什么突破30万年薪呢?
我这些话比较直接,可能会戳到一些人的玻璃心,但是我知道肯定会对一些人起到点醒的效果的。而但凡只要有人因为我的这份高级系统大纲以及这些话找到了方向,并且付出行动去提升自我,为了成功变得更加努力。那么我做的这些就都有了意义。
喜欢的话请帮忙转发点赞一下能让更多有需要的人看到吧。谢谢!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
直接,可能会戳到一些人的玻璃心,但是我知道肯定会对一些人起到点醒的效果的。而但凡只要有人因为我的这份高级系统大纲以及这些话找到了方向,并且付出行动去提升自我,为了成功变得更加努力。那么我做的这些就都有了意义。
喜欢的话请帮忙转发点赞一下能让更多有需要的人看到吧。谢谢!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!