转载自 拿到阿里巴巴的实习生Offer就是这么简单
一、个人简介及面试流程简介
本人本科就读于一个非985非211的一本高校,研究生就读于某985高校,目前研究方向为云计算与大数据。实习内推部门为菜鸟网络,所投的岗位为后台开发Java(包含大数据开发)。
这里以个人的面试流程为例进行介绍,本人在面试过程中总共经历了四次电话面试(技术面试)以及一次的现场面试,其中现场面试包含了一轮技术面试和一轮的HR面试。
这里不同的人电话面试次数可能不同,当时和我一起去参加面试的小伙伴也有电话面试只有一两轮的。一般现场面试结束后,如果通过了HR面,基本就会在后面给你实习offer(本人情况)。当然也有可能你会再次经历技术交叉面试(同学经历),不过这种情形一般是给你进行的定级面试,基本上没有太大问题。
二、技术面试问题总结
这里总结下本人整个技术面试过程中的被问到的技术问题。将从以下四个方面进行介绍:
基础知识问题、编程语言相关问题(Java),大数据相关问题以及编程问题。
基础知识问题
1、 冯诺依曼体系结构
2、 计算机网络七层模型。
3、 进程的状态转化(进程的三种状态间的基本转换)。
4、 UML图(UML图中的六种关系)。
5、 对象的理解以及面向对象在软件开发过程中的重要性。
6、 软件开发过程中的常用模型。
7、 常用的排序算法特点(时间,空间复杂度)
8、 TCP和UDP简述。
9、 数据库中的范式问题(一般到第三范式即可)。
10、哈希算法的冲突处理方法(可以结合Java中HashMap源码进行分析)。
11、MySQL中的索引(B+树索引)。
基础知识问题一般涉及的比较广泛,面试官主要是想考察你的知识面。这里我们不需要太过担心,因为知识点毕竟繁杂,能答出个百分之七十左右基本就没什么问题了。
由于基础知识涉及面较为广泛,不好给出详细的书籍,这里仅列出本人平时复习时所用书籍:高性能MySQL, 考研时所用书籍(如王道系列,包括操作系统,计算机网络等)。
编程语言相关问题(Java)
1、Python等脚本语言和Java相比的优缺点。
2、Java中线程安全的集合类(会涉及到相关实现原理,即源码问题)。
3、Java虚拟机中的内存划分。
4、Java虚拟集中的垃圾收集过程、垃圾收集算法以及垃圾收集器。
4、Java中的多线程相关(面试官会追问你在实际项目中有没有这种多线程的问题)。
5、Java中的类加载机制。
6、Java中的锁技术(synchronized,lock等)。
7、Java设计模式(可以说出集中自己熟悉的设计模式,面试官一般会追问你在项目中有没有运用到其中的一种或者若干种设计模式)。
8、线程执行start方法后变为什么状态?(就绪状态,这里会让你简述原因)
9、Java 8新特性(一般会询问你当前用的什么版本的JDK, 根据你的回答来询问你有没有了解该版本相对于以前版本所增加的特性)。
10、相关源码阅读问题(如果阅读过源码,这里可以简要和面试官说明一下,会作为加分项)。
在编程语言这块内容的问题会问的稍微深一点,面试官会根据你掌握的情况循序渐进。如问你Java中的线程安全集合类,你答出后,面试官可能会问你用过哪些以及有没有看过相关的源码。如果看过则会让你大致讲一下实现原理。编程语言这部分的问题其实比较集中,如Java虚拟机,Java多线程一般属于必问问题。
这里推荐使用以下书籍:
深入理解Java虚拟机,大话Java设计模式,Effective Java
这里建议大家可以上网看一下大牛的博客,进行总结。Java中的相关实现源码也可以上网看博客学习,如ConcurrentHashMap在Java 7 和Java 8中的实现区别等。
大数据相关问题
由于本人主要使用的大数据处理框架为Spark,因此这里所问问题也主要集中于Spark这块。对Spark不熟悉的同学可以跳过Spark的相关问题。
1、 简述Spark的工作原理。
2、 什么时候使用的Spark以及为什么要用Spark。
3、 描述Spark和Hadoop的区别。
4、 描述Spark中的Shuffle阶段。
5、 描述Spark的容错处理机制。
6、 描述Spark中的CheckPoint()以及使用场景。
7、 描述Spark对于倾斜数据的处理方法。
8、 数据库和数据仓库的区别(可能会根据你的回答来进一步问你业务上的问题,如支付宝上面的这种支付实时数据是存放在哪里的等等)。
9、 用过哪些其他的大数据框架。
10、自己设计分布式的软件框架,应该考虑哪些因素。
11、Spark源码简介(这里主要问你有没有看过源码,看过的话面试官会继续让你简述)。
大数据这块的主要问题都集中在Spark,这里介绍下本人阅读的相关书籍:
Spark快速大数据开发,图解Spark核心技术与案例实战
Spark大数据处理技术、应用与性能优化
如果有同学投的是大数据岗位,最好能熟悉某一个大数据计算框架,并且能够阅读相关源码。熟悉一门大数据计算框架可以让你在面试中加分很多,所以建议大家能够花时间来掌握一门大数据计算框架。
编程问题
本人整个面试过程中的编程问题不多,主要有以下四个编程问题。
1、 简述如何寻找一棵二叉树的最大子树。其中二叉树中的节点值有正有负,二叉树的最大子树定义为该子树中的节点值之和在所有子树中是最大的。(电话技术面)
2、 给你一篇博客,如何找出这篇博客中的违禁词。(本人当时答得是分词技术加哈希表。最后面试官追问如果某些词分不出来的话怎么做。由于本人对这块了解的不是很深,简要回答后面试官也没有继续追问下去。)(电话技术面)
3、 手写一个Java程序,使得执行该程序必然发生死锁(程序可以非常简单,写出大概的逻辑就行,最终需要向面试官解释为什么会发生死锁)。(现场技术面)
4、 给你一个实际业务需要,要求用Spark来解决。这里询问的问题比较简单,但是建议你最好能够全面考虑。
推荐书籍:剑指Offer、
推荐刷题网站:牛客网、LeetCode
项目问题
面试官一般对于我们所做的项目非常感兴趣,我在五轮技术面试过程中,面试官都针对我所做项目进行了询问。由于不同人的项目有所不同,这里不再详细说明项目问题。简单给出以下比较通用的问题。
1、 项目简介以及你在项目中的角色。
2、 项目中你所遇到的难点以及你是怎样解决的。
3、 如果让你再次优化项目的话,你将从哪些方面进行考虑(这里可以考虑代码整体的规范性,重用性等)。
4、 对于这种大数据开发项目,我们应当选择哪一种Java虚拟机以及为什么选择这种虚拟机。
5、 通过这个项目你学到了什么。
HR面试问题
有些同学以为过了技术面,到了HR面就万事大吉了,其实不然,HR面也是非常重要的。我身边也有一些小伙伴在HR面时被刷了的,因此小伙伴们一定要对HR面试引起重视。这里我列出本人HR面时所被问到的问题。
1、 为什么读研?读研给你带来的好处是什么?
2、 除了阿里,你还投了其他哪些公司?如果让你和阿里在这些公司里面选一个,你会选阿里吗?为什么?
3、 本科时拿到过offer吗?为什么不去?
4、 你觉得你最大的优势是什么?
5、 说一个至今为止让你印象最深的项目并谈谈原因。
6、 如果这次你被刷了,你觉得最大的原因是什么?
7、 如果你进入了阿里,你的职业规划是什么?并且你现在为你的规划做了哪些工作?
HR面时基本不会涉及到技术,大多都是和你谈一些生活或者以后的发展规划。这里大家在和HR沟通时尽量放轻松,不要太紧张。HR面结束后,HR也会让你询问他一些问题,这时大家可以询问一下和自己以后工作相关的问题以及自己所在部门的业务需要等。
个人面试心得总结
在面试过程中,我们应该保持谦虚,即时有些东西自己掌握的很清楚,也不要表现出那种恃才傲物的感觉。对于有些知识点自己如果确实不清楚或者掌握的不牢固时,不要不懂装懂,应和面试官表达清楚自己对这方面知识的欠缺并且要表现出自己以后会去弥补这些知识点。一般在面试结束后,面试官会问你有没有问题要询问他,这个时候建议大家一定要去和面试官沟通,询问自己面试过程中的不足。这样不仅会增加面试官对你的好感度同时也会让你在以后有更加针对性的复习。