我这位朋友有着近十年的Android开发经验,主要从事性能优化这一块,在上一家公司待了三年,对自己的薪资不满意,觉得薪资跟自己的能力不匹配,于是就辞职了。
按理说他有着近十年的Android开发经验和职场经验,找工作对他来说应该不是什么很困难的事情,可是偏偏事与愿违,他连续面了十几家公司都没有过,要不就是自己没看上的,找朋友内推过大厂,结果简历直接拒了,自己投了几个大厂,也都是石沉大海。
最后他静下心来总结了面试的问题,他分析几个面试不过的关键点:
-
基础知识点不牢固
-
对新的技术不是很了解
-
对自己的职业规划不是很明确
于是他花了一个多月的时间去巩固以前用过的知识,学习了解新技术,明确自己的职业规划,最后通过一过多月的时间拿到了自己心仪的offer
下面是他跳槽后的面试经历:
公司一:
-
dp是什么,sp呢,有什么区别
-
自定义View,ViewGroup注意哪些回调?
-
界面卡顿的原因以及解决方法
-
android中的存储类型
-
service用过么,基本调用方法
-
Handler机制
-
LinearLayout、FrameLayout、RelativeLayout性能对比,为什么
-
Activity的生命周期,finish调用后其他生命周期还会走么?
-
FW层熟悉么,源码看过么
公司二:
-
GC回收机制熟悉么,分代算法知道么
-
Java的类类加载原理
-
内存泄漏如何排查,MAT分析方法以及原理,各种泄漏的原因是什么比如
-
Handler为什么会泄漏
-
gradle熟悉么,自动打包知道么
-
介绍下先的app架构和通信
-
自己负责过哪些模块,跟同事相比自己的优势是什么
-
遇到过什么印象深刻的问题,怎么解决的
公司三:
-
Canvas的底层机制,绘制框架,硬件加速是什么原理,canvas lock的缓冲区是怎么回事
-
surfaceview, suface,surfacetexure等相关的,以及底层原理
-
android文件存储,各版本存储位置的权限控制的演进,外部存储,内部存储
-
上层业务activity和fragment的遇到什么坑??页面展示上的一些坑和优化经验
-
网络请求的开源框架:OKHttp介绍,写过拦截器么
-
微信跳一跳外挂怎么实现,检测怎么做的?
-
一张纯色背景下怎么有效检测各个矩形?
-
对接的so算法了解么,有接触过相关的库么?
-
三个算法题选一个并写出测试用例:打印n-m之间所有的素数;计算n-m之间1出现的次数;指定数字序列的排序;
-
android api层的源码熟悉哪些?解释一下
公司四:
-
进程间通信方式?Binder的构成有几部分?
-
HttpClient和HttpConnection的区别
-
View的事件传递机制
-
MVC,MVP,MVVM分别是什么?
-
Android中常用的设计模式,哪三个比较高级的?
-
内存优化,OOM的原因和排查方法
-
想改变listview的高度,怎么做
-
Https是怎么回事?
-
除了日常开发,其他有做过什么工作?比如持续化集成,自动化测试等等
公司五:
-
ActivityA跳转ActivityB然后B按back返回A,各自的生命周期顺序,A与B均不透明。
-
Synchronize关键字后面跟类或者对象有什么不同。
-
单例的DCL方式下,那个单例的私有变量要不要加volatile关键字,这个关键字有什么用
-
JVM的引用树,什么变量能作为GCRoot?GC垃圾回收的几种方法
-
ThreadLocal是什么?Looper中的消息死循环为什么没有ANR?
-
Android中main方法入口在哪里
-
jdk1.5?SparseArray和ArrayMap各自的数据结构,前者的查找是怎么
-
实现的,与HashMap的区别
-
Runnable与Callable、Future、FutureTask的区别,AsyncTask用到哪个?AsyncTask是顺序执行么,for循环中执行200次new AsyncTask并execute,会有异常吗
-
IntentService生命周期是怎样的,使用场合等
几点建议总结
在决定跳槽辞职前,一定要去巩固一下基础知识点,了解新的技术(因为Android开发发展迅速,隔一段时间就会有新的技术)提前为面试做准备。
找工作的时候要先面试一些小公司,了解一些面试的情况和行情。