前言
2017年进大学开始接触Android,从刚开始接触就不断地听到Android市场饱和,工作难找等消息。虽然当时也非常迷茫,不过由于第一次深入接触编程语言,再加上自己的一点兴趣,就一直坚持下来了。
到现在要毕业了,通过两个月的面试经历,确实发现Android岗位比较少,而且通常要求比较高,不仅需要Android开发经验,往往还需要会React Native,JavaScript等,甚至还期望你能具有IOS开发经验。
不过作为应届生还是有些优势的,那就是一些一线的互联网公司还是比较看中个人基础 以及发展潜力的,所以如果能在自己的专业方向上具有扎实的基础,1-2个实际开发项目以及个人的兴趣,还是能够找到一个满意的Android岗位的工作的。目前这些素质,自己也很欠缺,通过下面的面试经历就可以看出来,不过最起码有个努力的目标,可以好好准备为秋招做准备。
面试经验
自己大大小小投了也有20多家公司,不过经历简历筛选以及笔试淘汰,最终就经历了7家公司的面试。下面我就把自己面试中问到的问题贴出来供大家参考,一些具体项目相关的就不贴了。
阿里巴巴
阿里是3月初开始投的,是自己第一次面试大型的互联网公司,当时自己的准备也不够充分,表现不是很好,经历了三次技术面,最后挂了。
一面
- 自我介绍
- hashmap和hashtable
- jdbc
- 三次握手
- http状态码
- HTTPS加密:对称,非对称,CA证书
- handler
- 线程池的使用
- sychonized,volatile
- binder
- activity绘制流程
- 事件响应流程
- activity周期,启动模式
二面
- 自我介绍
- 对自己项目的介绍,架构图呈现
- 对MVP和MVVM的理解。
- 四大启动模式,以及场景对应
- Handler的机制介绍,为什么不能在子线程初始化问题
- 设计模式中的单例介绍,使用场景(Okhttp的Seesion存储等等),在线编写
- 快排算法
- OkHttp的源码分析,及整体架构的流程图绘制
- 四大引用的问题和MVP框架相结合进行回答
- View绘制流程问题,如何不使用xml,来实现中间位置的定位
- 事件分发机制流程讲解,以及如何实现单击事件和长按事件的判定
- 关于为什么选用mqtt协议的问题,优势,原理
三面
- 自我介绍
- abstract和interface区别
- int和Integer区别
- 四种引用
- Java里面int、char、long的字节数
- 线程的创建方式
- RxJava的优缺点
- EventBus
- 从网络上加载一个10M的图片,要考虑哪些
- http与https
- http 1.0 和 http 2.0之间的区别
- 设计模式准则
- Handler机制
- 算法:判断一个链表是否回文算法,给定一个数组,将数组里面的每一位向后移动k位
携程
携程当时投的时候就没抱希望,招聘信息上明确指定只招固定的那几所985高校,就随便投了,没想到笔试都没做就直接打电话面试了,不过问的问题确实很深入,结果显然,一面就挂了。
一面
- 集合
- concurrenthashmap
- volatile
- synchronized与Lock
- Java线程池
- 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大。接下来就是针对自己的不足,好好努力了。
最后为了节约大家的时间,我把我学习所用的资料和面试遇到的问题和答案都整理成了PDF文档,都可以分享给有需要的朋友,如有需要私信我【资料】或者【点这里】免费领取
喜欢文章的话请关注、点赞、转发 谢谢!
网友评论