作为一个双非渣硕,历经两个月的时间,面试了大大小小公司的Android实习生岗位,最近终于结束了面试状态,决定好好把面试问题以及相关经验整理下来,顺便附带自己的学习经验与准备过程,攒攒人品,为秋招再战。
2016年开始接触Android,从刚开始接触就不断地听到Android市场饱和,工作难找等消息。虽然当时也非常迷茫,不过由于第一次深入接触编程语言,再加上自己的一点兴趣,就一直坚持下来了。
通过两个月的面试经历,确实发现Android岗位比较少,而且通常要求比较高,不仅需要Android开发经验,往往还需要会React Native,JavaScript等,甚至还期望你能具有IOS开发经验。
不过作为应届生还是有些优势的,那就是一些一线的互联网公司还是比较看中个人基础 以及发展潜力的,所以如果能在自己的专业方向上具有扎实的基础,1-2个实际开发项目以及个人的兴趣,还是能够找到一个满意的Android岗位的工作的。目前这些素质,自己也很欠缺,通过下面的面试经历就可以看出来,不过最起码有个努力的目标,可以好好准备为秋招做准备。
自己大大小小投了也有20多家公司,不过经历简历筛选以及笔试淘汰,最终就经历了7家公司的面试。下面我就把自己面试中问到的问题贴出来供大家参考,一些具体项目相关的就不贴了。
阿里是3月初开始投的,是自己第一次面试大型的互联网公司,当时自己的准备也不够充分,表现不是很好,经历了三次技术面,最后挂了。
1.排序,快速排序的实现
2.树:B+树的介绍
3.图:有向无环图的解释
4.TCP/UDP的区别,滑动窗口,如何确保有效性
5.volatile
6.synchronized与Lock的区别
7.Java线程池
8.Java中对象的生命周期
9.类加载机制
10.双亲委派模型
11.Android事件分发机制
12.MVP模式
13.RxJava
1.抽象类和接口的区别
2.synchronized与lock
3.集合 Set实现 Hash 怎么防止碰撞
4.JVM 内存区域 开线程影响哪块内存
5.垃圾收集机制 对象创建,新生代与老年代
6.二叉树 深度遍历与广度遍历
7.B树、B+树
8.消息机制
1.项目介绍
2.项目中做了些什么?主要解决的问题
3.为什么选择Retrofit,RxJava
4.RxJava的特点
5.进程调度
6.进程与线程
7.死锁
8.进程状态
9.JVM内存模型
10.并发集合了解哪些
11.ConCurrentHashMap实现
12.CAS介绍
13.锁 synchronized,lock
14.开启线程的三种方式,run()和start()方法区别
15.线程池
16.常用数据结构简介
17.判断环
18.排序,堆排序实现
19.链表反转
20.海量数据 字典查找
21.平时看什么书
网易游戏当时投的时候就没抱希望,招聘信息上明确指定只招固定的那几所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.Android中数据存储方式
3.微信主页面的实现方式
4.微信上消息小红点的原理
5.做的项目,一个印象深刻的问题
6.看的技术博客,印象深刻的
1.两个不重复的数组集合中,求共同的元素。
2.上一问扩展,海量数据,内存中放不下,怎么求出。
3.Java中String的了解。
4.ArrayList与LinkedList区别
5.堆排序过程,时间复杂度,空间复杂度
6.快速排序的时间复杂度,空间复杂度
问的都是一些项目问题,比较宽泛,没问具体技术点
今日头条是在四月初投的,当时找了一个月,都没拿到拿得出手的offer,有点心烦意乱,就又海投了一波。4.18做了今日头条的面试,4.25进行的视频面试。一共进行了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的启动模式
触宝科技是一家上海的互联网公司,是通过实习僧上简历投递获得的这次面试机会,一共进行了两轮电话面试,最终获得了offer。触宝科技的hr人很好,时间观念很强,整个流程走的比较顺利。
1.RxJava的作用,与平时使用的异步操作来比,优势
2.Android消息机制原理
3.Binder机制介绍
4.为什么不能在子线程更新UI
1.JVM内存模型
2.Android中进程内存的分配,能不能自己分配定额内存
3.垃圾回收机制与调用System.gc()区别
4.Android事件分发机制
5.断点续传的实现
6..RxJava的作用,优缺点
爱奇艺也是通过实习僧上简历投递获得的机会,本来不抱希望,结果过了10天左右约我面试。面了大概一个小时,聊得还不错,最后第二天通知我挂了,有点不知所措,可能是实习时间达不到要求吧(只能这样安慰自己了)。
1.RxJava的功能与原理实现
2.RecycleView的使用,原理,RecycleView优化
3.ANR的原因
4.四大组件
5.Service的开启方式
6.Activity与Service通信的方式
7.Activity之间的通信方式
8.HashMap的实现,与HashSet的区别
9.JVM内存模型,内存区域
10.Java中同步使用的关键字,死锁
11.MVP模式
12.Java设计模式,观察者模式
13.Activity与Fragment之间生命周期比较
14.广播的使用场景
携程是3月份投的内推,结果挂掉了,后来通过笔试又获得的机会,笔试完快一个月才收到的通知,本来都快忘记了。既然通知了,就去面了。经过2轮技术面,1轮hr面,第二轮技术面是总监面,主要聊了聊项目上的问题。最终拿到offer。
1.Activity启动模式
2.广播的使用方式,场景
3.App中唤醒其他进程的实现方式
4.AndroidManifest的作用与理解
5.List,Set,Map的区别
6.HashSet与HashMap怎么判断集合元素重复
7.Java中内存区域与垃圾回收机制
1.EventBus作用,实现方式,代替EventBus的方式
2.Android中开启摄像头的主要步骤
3.Github上传了哪些东西,代码量
从Android开发工程师的角度来讲,我自己主要准备了以下几个方面的内容:
Java基础,如集合,反射,注解,IO,NIO,其中集合很重要,面试常问。
JVM,如内存区域,内存模型,垃圾回收机制的算法,收集器,类加载机制。
Java并发,如sychronized,lock,volatile,生产者/消费者模式,线程池,死锁。
Android基础,如四大组件,Binder机制,消息机制,事件分发机制,自定义View过程。
Android开源库,如Retrofit,RxJava等原理实现,优缺点,以及使用。
链表,栈,队列,排序,树,图,以及其中涉及到的一些算法题目。
单例模式,观察者模式,建造者模式,工厂模式,装饰者模式等。
进程与线程,进程通信,进程调度,分页存储,分段存储,虚拟内存等。
下面介绍以下我看过的一些书籍。
疯狂Java讲义(有些人说不好,自己看着还行吧,可以看核心卷,别人都推荐,我没看过)
Thinking in Java(看了一部分,没看完,建议有一定基础再看)
深入理解Java虚拟机(很好的一本书,必看)
Head First 设计模式(非常生动 的讲述设计模式)
Java多线程变成核心技术(讲述Java中多线程的一些问题,比较基础)
Effective Java(78条开发中会用到的实际经验,很好,还没看完)
Android群英传(很基础,通俗易懂)
Android开发艺术探索(面试必备,内容都深入浅出)
大话数据结构(讲述各种数据结构的概念,算法实现是C,可以作为入门书籍看)
剑指offer(面试必备,面试的时候好多 上面的题目)
其他的没看了,不过可以推荐一个网上视频课程,讲的很好——数据结构
现代操作系统(需要耐心的看,书也挺厚,暂时没看完)
推荐个网上课程——操作系统
找工作是个很辛苦的事情,而且一般周期都比较长,有时候即看个人技术,也看运气。第一次找工作,最后的结果虽然不尽如人意,不过收获远比offer大。接下来就是针对自己的不足,好好努力了。