面试被虐?不要慌,看懂这份 Android 面试真经大厂不是问题!
要想成就不败金身,那我们就一起来知己知彼一下。那大公司到底喜欢面试什么样的问题呢?我该如何准备呢?我通过朋友了解到,总结之后就两点:算法和原理。说这些都是概念,来点实际的,给大家举一些例子:
翻转一个单项链表
合并多个单有序链表(假设都是递增的)
堆排序过程,时间复杂度,空间复杂度
快速排序的时间复杂度,空间复杂度
HashSet 与 HashMap 怎么判断集合元素重复
逻辑地址与物理地址,为什么使用逻辑地址
一个无序,不重复数组,输出 N 个元素,使得 N 个元素的和相加为 M,给出时间复杂度、空间复杂度。手写算法
二叉树,给出根节点和目标节点,找出从根节点到目标节点的路径
数据结构中堆的概念,堆排序
图:有向无环图的解释
LRUCache 原理
ThreadLocal 原理
HashMap 源码, SpareArray 原理
Https 请求慢的解决办法,DNS,携带数据,直接访问 IP
https 相关,如何验证证书的合法性,https 中哪里用了对称加密,哪里用了非对称加密,对加密算法(如 RSA)等是否有了解
是否熟悉 Android jni 开发,jni 如何调用 java 层代码
Android 系统为什么会设计 ContentProvider,进程共享和线程安全问题
RxJava 的功能与原理实现
适配器模式,装饰者模式,外观模式的异同?
静态内部类的设计意图。
多线程:怎么用、有什么问题要注意;Android 线程有没有上限,然后提到线程池的上限
点击事件被拦截,但是想传到下面的 view,如何操作?
Android 中进程内存的分配,能不能自己分配定额内存
序列化的作用,以及 Android 两种序列化的区别。
前台切换到后台,然后再回到前台,Activity 生命周期回调方法。
弹出 Dialog,生命值周期回调方法。
好了,就先举这些例子,以上的问题来自于 BAT , 小米,滴滴,360,今日头条,爱奇艺等。你们先感受一下,是不是会被虐呢?通过上述面试题大家也基本看到了,有算法,有原理。
你只要在面试前,认真准备,充足准备,应该不会有多大的困难。其实大部分程序员面试大公司失败的原因是自己准备不足。大公司去校招成功率比较大的原因是大学学的一些基础没有忘掉,而现在的你,只注重实战,而不注重基础。但是在拼技术的时代,基础很重要,基础和原理懂得的更多,做的东西才会更加牢固。
积累才是根本
前面说了,通过了解面试准则,面试准备,那都是一种临时抱佛脚的方法,让你快速面试成功的一种捷径罢了。其实平时的学习和积累才是根本。通过了解大公司的要求,我们在小公司也应该时刻严格要求自己,不要只注重实战,不要不在乎性能而仅仅去说我实现了就好。
我们在平时的工作和学习的过程中,要时刻保持学习之心,不仅仅注重业务的实现,有时间拿起书来看看基础和原理,了解一些源码,多做一些思考,其实总会慢慢进步的。
再啰里啰嗦的举个例子吧,比如:你最近看到社区里流行使用 MVP 模式,你就会去看一下 MVP 后,找一个开源的模板,下载下来,自己也开始用,不要仅仅停留在使用上,你应该思考:为什么大家都喜欢使用 MVP 模式?这样做的好处是什么?我还能在这样的基础上做优化吗?举一反三的把自己问倒,打破砂锅问到底要用到自己身上。
总结
--
说一千道一万,不如自己去行动。要想在移动互联网的下半场是自己占有一席之地,那就得从现在开始,从今天开始,马上严格要求自己,既重视业务实现能力,也重视基础和原理。基础夯实好了,高楼才能够平地而起,稳如泰山。什么高并发导致的崩溃啊,什么明星绯闻啊,你的前端不怕,后端更不用怕。下次吹牛可以这么说:三对明星同时出轨,我的程序也不会瘫痪。
总之啊,家里没矿的同学们,如果你们想以后的日子过得好一些,多想想你们的业余时间怎么安排吧;
技术方面的提升肯定是重中之重,但是技术外的一些“软实力”也不能完全忽视,很多时候升职确实是因为你的技术足够强,但也与你的“软实力”密切相关
评论