背景
时间过的真快,16年毕业到现在也有好几年了,最近面试试着投了几十家Android framework工程师的岗位,也面试了好几家,其中包括滴滴出行、小米、合众新能源、网易、最终收到了网易和滴滴offer,小米二面挂掉,合众一个月了还在走流程,最终有幸成功入职去了网易。但是要特别感觉滴滴的领导及hr,真的非常非常好,很感谢他们一直的关照和指导。
面试时的注意事项
简历要准备好,联系方式一定要正确清晰醒目,项目经历按照时间倒序阐述,注意描述自己在项目中承担的职责,简历的模板尽量选择简洁的,毕竟程序员大部分还是喜欢简单明了的。
像我们这种工作3-5年的老程序员,面试流程一般都是电面->现场面->HR面->等着。
不要觉得HR说让你回去等消息就是GG了,他们也要跟你之前的面试官讨论,再向领导汇报,如果说不急可能还要和其他候选人比较,所以HR让你回去等消息绝对不是说明你完蛋了。
面试前准备好自我介绍,1分钟左右就可以,可以写在纸上,电面可以照着念,等你到了现场面了基本也都快背下来你的自我介绍了。
准备好扎实的基础,这是一切的根源,没实力怎么都没用的。
面试中你可以把你的面试官往你会的知识上引导(我遇到过你会什么他不问什么的)。
遇到了设计类题目不要着急,面试官不是为了让你几分钟设计一个高并发高可用设计模式完美的架构,只是想看看你的思路,看看你应变的能力,然后给你些提示看看你能否迅速的调整。
offer都会有的,不要着急,把面试当成一个交流的过程。
需要准备的知识
下面是我在近期面试中整理出来的问题,也就不分公司了,因为没什么意义,大致分类记录一下,目前只想起这么多,不过一定要知道这些问题只是冰山一角,就算都会了也不能怎么样,最最重要的,还是坚实的基础,清醒的头脑。
java面试题:
基础知识
-
请手写equal方法【String类】,讲讲具体的原理?Object类的equla方法是怎样的?
-
请说下String与StringBuffer区别,StringBuffer底部如何实现?String类可以被继承吗,为什么?
-
String a=““和String a=new String(””)的的关系和异同?String的创建机制如何理解?
-
为什么Java中的 String 是不可变的(Immutable)?字符串设计和实现考量?String不可变的好处?
-
…
面向对象知识点 -
面向对象编程的四大特性及其含义?封装、继承、多态分别是什么?为何要封装?为什么是单继承而不能多继承呢?
-
重载和重写的区别?重载和重写绑定机制有何区别?父类的静态方法能否被子类重写?重写是动态绑定,如何理解机制?
-
什么是绑定?静态和动态绑定如何区别?动态绑定编译原理是什么?动态绑定运行原理是什么?
-
接口和抽象类的区别是什么?接口的意义是什么?抽象类的意义是什么?如何选择抽象类和接口?
-
…
java数据结构
- 在arrayList中System.arraycopy()和Arrays.copyOf()方法区别联系?System.arraycopy()和Arrays.copyOf()代码说明?
- Collection集合和Map集合的区别?Map集合的特点?说下Map集合整体结构?
- Java集合框架中有哪些类?都有什么特点?集合框架用到Collection接口,这个接口有何特点?
- ArrayList添加元素时如何扩容?如何添加元素到指定位置,该操作复制是深拷贝还是浅拷贝?
- …
Android面试题:
基础知识点
- 说下Activity的生命周期?屏幕旋转时生命周期?异常条件会调用什么方法?
- 后台的Activity被系统回收怎么办?说一下onSaveInstanceState()和onRestoreInstanceState()方法特点?
- 如何避免配置改变时Activity重建?优先级低的Activity在内存不足被回收后怎样做可以恢复到销毁前状态?
- …
高级知识点
- 谈谈消息机制Hander作用?有哪些要素?流程是怎样的?简单说一下你的看法!
- Handler的post方法和view的post方法有什么区别?为什么说要避免在子线程中手动创建looper?
- 可以在子线程直接new一个Handler吗?会出现什么问题,那该怎么做?
- …
性能优化面试题:
- App启动时候存在白屏或者黑屏是什么造成的?解决的方案有哪些?为何最后要设置setBackgroundDrawable为null?
- SharePreference性能优化,可以做进程同步吗?具体是怎么优化的呢?
Framework 面试题:
- 什么是Binder?为什么要使用Binder?Binder中是如何进行线程管理的?总结binder讲的是什么?
- Android中进程和线程的关系?什么是IPC?为何需要进行IPC?多进程通信可能会出现什么问题?
- Binder的工作流程是怎样的?Binder主要能提供哪些功能?Binder通信机制原理是怎样的?
- Android中为何新增Binder来作为主要的IPC方式?Binder运行机制是怎样的?Binder机制有什么优势?
- Android中跨进程通讯的几种方式?实际开发中,有哪些场景使用Binder进行数据传输?
Android架构面试题:
1.谈谈MVC、MVP和MVVM的使用区别,优势分析?
2. 是否能从Android中举几个例子说说用到了什么设计模式?
3. Retrofit的实现与原理?什么叫做动态代理?
4.谈谈你对Glide和Picasso他们的对比的优缺点?
音视频面试:
- SurfaceView是做什么?SurfaceView和View的本质区别?SurfaceView优缺点有哪些?
- SurfaceView如何保证UI界面的流畅性?如何理解双缓冲机制?
- SurfaceView在新的线程中更新画面为何不会阻塞UI主线程?是否跟在子线程中不能操作UI矛盾?
总结
无论是哪家公司,都很重视高并发高可用的技术,重视性能优化,重视Android framework。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。如果这些文字能够帮到你,那就最好了,帮不到就当是我自己的一个记录。最后,希望大家都能找到适合自己的公司,开开心心的撸代码。最后,祝大家能找到心仪的工作,拿到满意的offer!
由于篇幅限制,pdf 文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的可以点击私信获取。