来到了上海安置下来之后,我便开始投简历,找工作,写好自己的简历,海投!一股劲投了300多家公司,心想:上海那么大,公司那么多,总有我这个菜鸟的容身之处!。
投了简历后连续接到了几十家面试通知,当时由于面试电话太多接电话都手忙脚乱,后续的半个月时间被面试排的满满当当。
刚来上海,人生地不熟,赶往面试公司唯有查地图,记得那时候面试,一天跑三家公司,从早上8点出门到晚上9点回来,一天一顿饭,回到住处基本倒头就睡。7月份底,那太阳火辣到不行不行的!
面试的时候,当面试官说要看我做的东西的时候,手机上唯一能显示的作品也就只有在书中学习到的飞机大战的游戏了,在凭借着自己的运气和一点点实力,花了三天的时间面试了7家公司,想换个工作,换个环境,现在将面试内容整理与大家分享。
拿到了4个offer(感觉自己十分的幸运!)
某知名在线教育公司
- VideoView、ExoPlayer、IjkPlayer和Vitamio这几种主流播放器的比较;
- 垃圾回收机制,JVM内存分配、如何判定对象可回收;
- 算法:n(很大)个无序数中找最大的10个数;
- 谈谈内存优化;
- 如何反编译,对代码逆向分析;
- 自定义View流程,主要的方法及各自作用;
- 如何防止过度绘制;
- LruCache原理;
- 事件分发及举例说明;
- 混合开发用过哪些框架,自己又是如何处理、封装的;
- 介绍一个你所了解的开源框架及原理;
- 谈谈对http缓存的了解。
某知名网络问答社区
- 安卓中方法数不能超过64k的原因,及如何处理;
- Intent传值有大小限制吗,为什么,如何处理;
- 如何实现圆形ImageView;
- 说说动态代理的作用;
- 注解;
- 对数字进行或计算;
- 对View中的onMesurse方法的详细介绍和使用;
- 如何自己实现RecyclerView的侧滑删除;
- TabLayout中如何让当前标签永远位于屏幕中间;
- 垃圾回收机制;
- Activity跳转时的生命周期问题;
- LruCache和DisLruCache的原理;
- EventBus原理;
- 线程池的参数和工作原理;
- 对js互调如何使用,做过什么优化;
- 算法:归并排序
某知名直播平台
- 手写代码:遍历文件目录;
- 电梯运行的算法分析;
- 谈谈自己项目的架构,如何优化;
- 算法:手写冒泡排序;
- ijkPlayer播放器源码;
- 视频播放器的手势控制如何处理;
- ArrayList、Vector、LinkedList的区别;
- 遇到过哪些关于Fragment的问题;
- 图片的处理和优化;
- Android实现异步的几种方式;
- JVM垃圾回收机制;
- 如何对Android应用进行性能分析;
- 介绍一个你比较欣赏的app或者开源框架。
某知名视频播放公司
- 自定义View流程;
- MVP的优点与确点;
- ClassLoader的双亲委派;
- 手写实现单链表的get操作;
- 用过哪些插件化方案;
- 图片处理和缓存;
- 生产者、消费者模式;
- 如何对应用进行性能优化;
- 64k出现的原因及如何解决;
- 对ART的认识;
- 动态代理的作用;
- Retrofit和EventBus的源码分析;
- EventBus如何做到黏性发送的;
- TextView调用setText方法的内部执行流程;
- 对线程池的认识和它的几个子类;
阿里菜鸟
一面
- 自我介绍(处女面,跑上楼时候已经气喘吁吁,甚至都不知道如何自我介绍,介绍了一分钟我尬场了)
- RxJava、EventBus底层原理(一定程度是自己挖坑用过这些,然后让我跳的)
- 如何自我实现一个网络请求框架
- 用过React Native没。(自己用过Ionic,但是面试官没听过,Ionic在2015年相对较火)
- 平时如何自我学习,2017 Google I/O大会讨论内容有哪些
- MVP框架,如何用,怎么用。怎么解耦。跟MVC的差别
二面(莫名其妙的交叉面):
- 直接省略了自我介绍,问专业方向(GIS),问如何处理地理围栏
- 如何省电又能实时跟服务器端交互(我说的是AlarmManager+Service),一直传输位置信息给服务器。用了什么协议
- 由上面的扯到OkHttp底层原理
- Http2.0与1.1有啥区别(由这里开始就炸了,完全没复习计算机网络,尤其还是偏背诵的知识的) 5. 有哪些二进制传输协议
拼多多(现场面。笔试4过3 )
一面:
- 把笔试的题拿出来,问代码思路逻辑,比如为什么用TreeMap不用HashMap
- 如何对APP进行内存优化
- 项目的并发度多大,如何处理crash后的信息回传
- 计算机网络相关
二面
- 聊了下涉及到OpenGL的项目。以及OpenGL3.0与2.0的差别。
- 手撕代码:多叉树的后续遍历
其实感觉越是像拼多多这种有点无厘头的面试,虽然面试过程轻松,但是结果往往也都别在意。不是学霸批,HR说现在说最早校招时候出结果,估计就是没结果.(最近几天发来消息说offer通过了,手动捂脸)
网易
一面(明显大佬级别):
- 你搞android应该也很了解Java的多线程吧,讲讲通过Handler为什么能够更新UI。(一开始我以为是谈谈Handler的原理,讲了一通,面试官
对我说你讲的我都知道,然后一步步诱导,终于我说到了ThreadLocal,然后他说对。之后就稍微扯了下ThreadLocal) - 根据简历,问自己要实现一个地图容器的话怎么实现。然后一步一步延伸下去聊到了View与SurfaceView
- JNI/NDK开发如何使用,如何定义java文件与cpp文件中的方法(主要看是不是真的用过吧)
- 四种启动模式,用过哪些,出过什么问题。(包括聊到了onSaveInstanceState跟onRestoreInstanceState的场景与时机,然后在一个点跟面试官
看法不同,我说我调试时候遇到过相关问题,面试官让我回去再确认下) - 如何处理内存泄漏。也提到了简历中20000*20000大小的图片如何加载的
- socket与Http区别,socket长连接断开了怎么办
- 在socket传输文件中链接断开了,怎么继续传输文件。引申到了如何断点续传
- 涉及到自己项目中用到的优化方案与策略,尤其针对图片的
- 看到用过GreenDao,问有没有在一个事务中提交两种不同的操作。(觉得应该是说一个事务中,比如更新一张表中的一个Person记录,新增一条Dog记录)
- MVP框架,混合开发相关
面试官对我的总体评价:用过的开源库不少,为什么不自己写呢(哎,尴尬)。问了能不能实习,然后留了简历做了个记录就下面一轮面试了
二面(是个帅小伙,我当时以为自己一面跟二面顺序反了):
- 自我介绍
- Handler机制
- 如何自己实现线程池。线程池内的队列如何管理。线程池大小N的话,连续push进来M个的任务(M>>N),如何处理,比如20大小的线程池扔进来10000个任务
- 个人方向偏移动GIS,跟地图打交道比较多,谈到了遥感影像(也就是稍微大点的图片啦)缓存置换、回收策略。面试官让详细讲了一遍,涉及到 的点是LRU跟Java的几种引用,一些数据结构。问内存缓存怎么做的,K-V对设定,提到了类似Picasso中,需要本地处理旋转,但是URL一样的 时候,K值的设定方式
- OkHttp底层原理,TCP的三次握手四次挥手全流程(画了每次握手挥手时候的报文内容与控制位设定)
- 还看过哪些源码(我说看过EventBus,貌似面试官也不想问了,笑眯眯的说你去等HR面吧)
通过这几天的面试经历,有几点感想:
-
大厂面试,一般不会问某一个具体功能如何实现;
-
大厂更重视基础;
-
数据结构和算法真的是非常重要,是日常工作和面试的基础;
-
我们应该多看源码,了解内部流程,而不只是停留在会使用上;
记性不好,想起来的也就这么多,大概只有二分之一左右吧,都相对偏基础,发散性的问题不多。
所以,个人目前这么点经验来看,必须要知道的是android基础+计算机网络(计算机网络必问),然后项目涉及方向多点也有好处,比如混合开发,JNI/NDK,二维三维,至少看起来比较全面。然后自己简历上写的东西一定要熟,会用也不行,得知道原理!
前段时间刷的面试题以及面试被问到的一些我认为一定要掌握的知识我都上传到Gihub上面了,有需要的小伙伴可以查看下方蓝色字体直达。
Android面试笔记
本次的面试分享到这里就结束了,耐心看完的小伙伴记得一键三连哦~