01
有位朋友去阿里巴巴java工程师岗位,面试完后,感触很深,不愧是大公司,发现公司对于面试者的知识结构考核非常严谨,虽然只是一场面试,但可以作为我们工作学习的指导,有人说面试问到的东西在实际工作中很少用到,譬如数据结构、算法等,甚至有的人还倜傥,面试造火箭,工作拧螺丝。但从一场正规的面试我们可以看得出规模较大的公司对于求职者的知识体系要求是相当高的。如果我们能在平时工作中就按着这样的要求不断要求自己,提升自己,相信在下一次面试的时候定能做到游刃有余。
阿里的面试一般会有两轮电话技术面试,分别交叉检验求职者的基础知识是否扎实。两轮现场技术面试,一般是考核求职者的项目经验。从这个角度分析,阿里对于人才招聘大概可以考核可以分为三个层次:基础知识的考核、项目深度的考核。
基础知识的考核
基础知识的考核,主要考核求职者对编程J语言本身原理的理解以及框架原理的理解。对于Java开发岗位上来说,一般考察的知识点有:
集合HashMap的原理,与Hashtable、ConcurrentHashMap的区别?线程池的核心属性以及处理流程、Synchronized关键字、锁线程的生命周期JVM类加载机制、内存模型、垃圾回收机制SpringBean容器生命周期SpringAOP原理数据库SQL优化、数据库索引、索引原理等看到这一系列的知识点,可能有的一下子就慌了,当然,这只是一小部分而已。面试官喜欢针对求职者掌握的知识点刨根问底。如果你能吼住的话,进入下一轮面试的几率就大大提高了。
阿里更倾向深度挖掘,针对你掌握的知识点进行深度挖掘。比如前面提到的java知识点,垃圾回收机制Garbagecollection,我们知道要,准确理解Java的垃圾回收机制,我们可以从:“什么时候”,“对什么东西”,“做了什么事情”这三个方面来分析。
要是在面试时,面试官问“对什么东西”,有的求职者回答没有用的对象,按道理来说,这并没有错,只是这并不是理想的答案。要是能更进一步分析,那就更好了,GC操作的对象分为:通过可达性分析法无法搜索到的对象和可以搜索到的对象。对于搜索不到的方法进行标记。从root搜索不到,而且经过第一次标记、清理后,仍然没有复活的对象。
阿里巴巴对于用可达性分析法搜索不到的对象,GC并不一定会回收该对象。要完全回收一个对象,至少需要经过两次标记的过程。把问题具体化了一些,对类似这样的对象进行回收,相信能给你这次面试加分。
项目思考深度
要是你通过基础知识的考核,恭喜你,你离拿offer不远了。接下来面试官一般会让你说说你的项目经验,譬如项目的架构图,既然有了架构图,你需要清楚理解每个模块的作用,每个框架的原理以及与其他框架的优势和不足。
在这个层次上,你不仅要对项目本身理解足够深刻,还要跳出项目本身,思考开源框架本身的问题。进一步思考这些开源框架好不好,有什么可以改进的地方。作为一名的程序员,有必要掌握为什么要用这些框架?它有什么不足,能不能做得更好?只有往深度的方向去思考,才能促进我们有所成长。
02
作为一名Android开发人员,如何在面试中脱颖而出,找到心仪的工作?就个人观点看,一般需要这样的技能:技术扎实,有技术追求和工作激情;良好的沟通和协作。
简单点,就是技术水平和沟通能力。其中技术始终是面试成败的决定因素,技术掌握到什么程度才能相对轻松地通过面试呢?
一般来说,一场Android面试内容不太可能全是Android的问题,应该也会与编程基础相关的问题。譬如数据结构、算法和常见的设计模式要熟悉,比如单例模式、工程模式、观察者模式等。至于数据结构工作中不常用到,但还是要稍微了解下,能熟练掌握更好。
每一次面试来之不易,不可忽视,面试时,有些细节不容忽视。面试前,做一些准备是很有必要的,这里给几点建议。
1、梳理专业知识要点
毋庸置疑,专业知识点基础要做好充分准备,如果时间紧,来不及做充分准备,最少也要大致浏览一下,温故而知新,如果你是大神,请忽略。笔者有次面试时,没有做好准备,一些基本的笔试题都没有做好,最好的结果可想而知,而心仪的公司擦肩而过。
2、回答面试官的问题时要抓重点
一般程序员的口才能力相对比较薄弱,如果是这样,建议你在面试过程中要学会扬长避短,针对面试官提出的问题,无论是技术问题还是谈人生,都要做到有的放矢,抓重点。
3、平时要培养独立思考,独自解决问题能力
有的开发者,一碰到问题,喜欢立马通过搜索引擎找到答案,认为这样效率高,其实不然,独立思考问题是一项很有意思的活。
在实际开发过程中,难免会遇到各种各样的问题,这时,建议你先思考,实在不清楚的在通过搜索引擎或是其他方法解决。
相信你身边有不少这样的人:他们学习更倾向于被动接受知识,习惯人云亦云,遇到问题了,总是求助于他人,认为他们都有道理。
还有这样的人,相信你身边也不少:他们看问题总有自己的观点,而且观点新颖,想法深刻。能独立思考问题的人,解决问题往往更实在,这就是独立思考的魅力了。
我们平时如何积累面试中需要的技术,阅读源码是一个不错的选择,因为面试中的很多问题我们都可以从源码中找答案,其次要主动学习平时工作中遇不到的一些技术,由于工作的原因,我们不可能通过公司的项目来解除到Android中所有的重要技术,尤其是一些规模不大的项目来说,这个时候需要我们主动去学习。比如AIDL原理、Binder机制、多进程、View的绘制流程、事件分发、消息队列等。这类知识点,需要我们不断去探索实践,运用才能更好的解决问题。
当我们回过头来总结,你会发现大多数正规的面试每个环节都是层层递进的,而且逐步深入。并不是每次面试结果都能如愿拿到offer,但我们可以从面试中总结出来的经验,也是一个很好的学习指引,我们可以自己自查,看看自己现在是处于哪个层次,这样在工作中也可以不断地向更高层次迈进。
[END]