6、用过mvp框架么?mvvm是什么?mvp是什么?为什么会出现mvvm?
7、说下View,ViewGroup事件分发机制?
8、做过哪些性能优化?
(1)渲染优化,(2)内存优化,(3)耗电优化
9、内存泄漏原因?如何避免内存泄漏?
10、Android内存管理是怎样的?
11、Java内存模型,介绍下?
12、TCP握手协议是怎样的?
13、Service 是否在 main thread 中执行, service 里面是否能执行耗时的操作?
14、Serializable 和 Parcelable 的区别
15、String,Stringbuffer,Stringbuilder 区别
16、Binder机制原理,Android为什么要采用 Binder 作为 IPC 机制?
17、Android中的几种动画介绍下
18、加载大图,你是怎么做的?
19、ANR是什么?怎么避免ANR?
20、为什么要用 ContentProvider?它和 sql 的实现上有什么差别?
21、SurfaceView和View的区别是什么?
22、Dalvik虚拟机与JVM有什么区别?
23、线程间的通信方式?不是进程间。
以上这些只是抛出问题,真正面试中,尤其是大公司中面试,没有固守成规的问法:
举例:抛出一个问题。
是否使用过volatile?你觉得它是线程安全,还是不安全的?如果你答安全的,我会继续问你,为什么?然后我再问你是否使用过synchronized?
它和volatile区别是什么?如果你答不安全,我依然继续问你,为什么?
再抛出一个问题。
有用过Java哪些并发容器,如CopyOnWriteArrayList、ConcurrentHashMap等,如果你答第一个,我会问你使用时需不需要加锁,你说要?我会问为什么?
不要,也会问为什么?然后再问它的原理是怎样?当然还可以持续问很多。如果你答第二个,我会问,ConcurrentHashMap的内部结构是怎样?如果你能说到链表,我会继续问,什么时候链表会变成红黑树?或者什么时候用的是链表,什么时候用的是红黑树?
如果一面,10个问题答对6个以上,基本上就过了。二面的话。会持续再深挖,抛出一个问题,或是你项目中遇到了的一些问题。如果你不了解,那么就再问其他方面问题。持续深挖。看能掏出多少满意的东西。三面会从更小细节去问。基本要答对80%的问题,才会过,否则还是没过。
因为关系能否到HR面。通常来说一轮过了,2-3天会有人继续面你,否则就是没过。也不会有通知。可以选择考虑其他公司了。不是能力不行,只能说双方不适合,或者候选人没有呈现自己牛逼的地方。
面试前的准备
大公司既然重基础,那么面试前一定要好好学习和准备一下这方面的知识。干什么事之前,一定要充分了解情况,古人说的话,还是挺对的,毕竟是 2000 多年来总结出来的经验,面试就是战场,知己知彼才能百战不殆。
举个例子:
小猿在一家创业公司从事了两年的 Android 开发,能够独立开发一款软件,技术还是可以的,效率挺高的,总能快速完成经理交给的任务,平时也会在 GitHub 上提交一些开源代码,分享了一些开源库,star 数五六百,好的上千,熟悉使用 RxJava,Retrofit 等网络框架,还会 MVP,MVVM 这样的架构。感觉自己去 BAT 这样的公司面试没问题,可是,还是被打击到了。
人家回复说:学习能力,开源精神都挺好的,就是基础太差。
看到了吗?会使用框架,封装个简单的库,能够做出产品来并不是多大的能力,做好是需要基础的。
上面的例子的问题,典型就是不了解自己,也不了解大公司的套路,准备不足,所以才失败的。平时学习的时候,应该要知其然知其所以然才行,然后再多学学算法,原理和一些计算机基础就更完美了。并不是会做就行,基础扎实,才能做得更好。
你只要在面试前,认真准备,充足准备,应该不会有多大的困难。其实大部分程序员面试大公司失败的原因是自己准备不足。大公司去校招成功率比较大的原因是大学学的一些基础没有忘掉,而现在的你,只注重实战,而不注重基础。但是在拼技术的时代,基础很重要,基础和原理懂得的更多,做的东西才会更加牢固。
积累才是根本
前面说了,通过了解面试准则,面试准备,那都是一种临时抱佛脚的方法,让你快速面试成功的一种捷径罢了。其实平时的学习和积累才是根本。通过了解大公司的要求,我们在小公司也应该时刻严格要求自己,不要只注重实战,不要不在乎性能而仅仅去说我实现了就好。
几点建议:
1、简历要如实写,相关的知识点一定要烂熟于心。
2、基础扎实,android和java相关的知识树网上有很多资料,看过但让你讲出来未必能说的好。
3、提前总结,你还擅长什么其他技术?这种开放问题要看知识面了。
4、学会提问,你有什么问题要问我吗?这种礼貌性问题也是一个了解对方的好机会。
5、良好的心里素质,无论遇到什么情况,面试官迟到、面试官态度冰冷说话不客气、质疑你的回答等等各种问题都不要慌也不要排斥,一定要沉住气,耐心积极的思考并回答对方的提问。
小结
有了这么多优秀的开发工具,可以做出更高质量的Android应用。
当然了,“打铁还需自身硬”,想要写出优秀的代码,最重要的一点还是自身的技术水平,不然用再好的工具也不能发挥出它的全部实力。
在这里我也分享一份大佬自己收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。
总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!