如何拿到阿里技术offer:从《阿里巴巴面试总结与感悟》体味阿里社会招聘

简介: 不知道各位童鞋知不知道,淘宝、天猫等阿里产品的架构的底层都是Java,可以说阿里在Java领域是技术的“光明顶”,各路大神齐聚与此,如果你想成为Java方向的技术攻城狮,那么阿里一定是最好的选择。今天分享的文章就与Java研究方向有关咯。
我们在学习Java Web开发技术的时候,老师告诉我们淘宝的架构都是使用Java写的,我怀着好奇心就开始搜索相关的问题,在知乎上看到这样一篇帖子《淘宝主要是用 Java 实现的,这是真的吗?》( 链接),其中回答者中有一位是支付宝核心域高可用架构师,他的回答可以说算是半官方的了,的确不光是淘宝,整个阿里系基本也是全线Java,而且水平在国际上也是一流的,世界上很少有Java的系统可以面对像淘宝支付宝这样的高并发,大数据的挑战,这里已经把Java技术发挥到了极致,比如自定制GC,编写针对CPU优化JVM等老外想做也没机会做的事,如果真想玩转Java,那就来阿里吧。

随着阿里全线Java的发展,阿里对于Java工程师的需求也越来越多,但是面试阿里的Java工程师需要什么样的技术能力和知识水平呢?什么样的技术人员才能面试阿里的Java工程师呢?

阿里的Java工程师招聘信息多达57页(果然多…),我找了阿里云方向的招聘要求和大家分享一下,大家参照这个可以有一个更加明确的努力方向:


好了接下来就为大家分享一篇阿里社招Java工程师的面试经历:

《阿里巴巴面试总结与感悟》

今天面试了阿里巴巴Java研发工程师,战况只能用一个字形容:惨,惨不忍睹! 昨天接到阿里巴巴面试通知的时候就已经没信心了,今天果真印证了 。

上午9点到了裕宁酒店在等待区没等多久就被领去面试了。阿里的一面是在大厅中分组一对一单面的。面试我的是一个二十七八岁的帅哥,面试过程也很友善。进去后,他首先看了我的简历,然后问我能不能说一下自己的特长优势什么的(都没有让自我介绍)。我简单的把在校三年来自己学习的技术和参加的项目介绍了下,然后拿出了自己准备好的《项目回顾表》以及自己做的《作品回顾》光盘和已经出版发行的两张光盘给他看。他看了说不错,然后就问我项目的事儿。

他说自己对3D开发不太了解,然后问我感觉在做《山海关虚拟博物馆》的时候有没有什么技术难点和重点。我说重点是在寻路上( 囧,说完我心里就哇凉哇凉的了,不应该说这个),然后他就问我是怎么实现寻路的,我给他画了下场景地图,然后解释了下我的做法(主要是用状态机)他可能不太满意,然后问我能不能用算法来描述。我没太明白他想要什么,然后他开始引导我回答这个问题,先问我学没学过图论,我说在数据结构和离散数学中学过,然后我明白了他想要什么了,我说可以用图存储各个目标点,然后通过判断各点之间的连通性来判断点是否可以到达,可以通过深度优先搜索来完成(说完我心里又是哇凉的,根本就没准备图这一块儿的数据结构)。然后他说让我写下深度优先搜索程序(= =,这个鄙视我吧,我真忘记了)。我想了会儿说记不清楚了,他问我图是怎么存储的,我说用临接表和临接矩阵,然后他让我给他画下,我就画完(这些还是会的)。他说再试试呢,我思考了下说记不清了(我怕写完他在让我写广度程序的和优化查找,这块儿真心没准备 )。

然后他让我写下自己用过的设计模式,我说有策略模式、单例模式、工厂模式、状态模式、适配器模式。然后他让我写下单例模式,我用了最简单的方式,static变量new自身对象。他说有没什么问题,比如变量被赋值呢。我说在C#中可以用访问控制符禁止set,在java中也可以用静态方法来屏蔽。他又问那你的类被别的类实例化,我说构造方法我用private的。(总之是没写全,写全他就不会问了)

设计模式谈完,他说来说下你的网站项目吧,我的简历里有写“系统架构”,他让我解释下,我就画了下MVC图,jsp页面作为视图,servelt作为控制层,然后建立model,建立service和dao,以及他们的作用。他说SSH和这些有什么不同吗?我说Struts2代替了servlet,hibernate代替了dao,spring贯穿他们,注入对象。他说那你说下spring的核心思想吧。我说主要是IoC,AOP,DI。他说说下IoC和AOP吧,我提到了IoC控制反转,通过配置文件将对象注入到程序中,他说你写下配置文件吧(又要写,= =,Spring半年没搞了早忘了)我说平时都是copy,忘记了。他可能以为我不会spring,然后问我那你都知道各个元素的作用吗,我说知道。(但是真心的忘记bean标签中都有哪些了,我发誓看见之后都知道有什么用,抓狂啊)

SSH告一段落(回答的太烂了,这些初级的学者都会,最主要的是很多都没记住),我有一个项目写的是已经上线了,他让我写下那个URL,我有点蒙,就写了域名,他说你们就用这个吗,我不知道他想要什么,我就又写了127.0.0.1:port,他问我用户可以访问?(当我是小白了- - ,哎前面回答的太烂了)我说当然不可以,我们的申请的IP是172.168.XX.XX:80这个是给用户的。他说服务器用的什么,我说tomcat,他问tomcat的端口号在哪里配置,我说在web.xml(说顺嘴了,其实我知道在server.xml中配置)。他说都可以配置什么,我说可以配置端口号,虚拟主机。他说还有吗,我说还可以配置一个监听端口号。他说默认的都多少,我说8080,他问我另外一个,我说不记得了。然后他让我写下JSP页面的标准头部是什么。我把page标签写上去了,我提到了页面编码,他问我用什么编码我说UTF-8,他说还知道其他的编码吗,我说还有GBK。然后他问我UTF-8和GBK的区别,我只说了表面的,他让我从计算机组成原理的角度说下GBK和UTF-8,我说我们专业没开计算机组成原理,然后他看了下我的简历。然后让我写下平时都看什么书,我大概写了下。最后他问我有什么要问他的吗,我让他点评了下。点评了啥就不说了,反正都在意料之中。

总结:今天阿里的面试非常烂,问题很简单,但是因为很久没搞Java了(有半年多了)所以很多都忘记了。基础太不扎实,这也是很多应届生的缺点吧。想要进大中型公司应该具备以下素质,留给各位准备面试和将来面试的人吧。

1.数据结构,这个不是懂了就行,刚学完数据结构,各种算法自己也可以很快写出来的,但是很久没写了都忘记了。数据结构这个东西必须能信手拈来,随手就能写出各种树、图的遍历以及排序、查找等算法,以及二叉树,B-树、堆的概念和程序(最好做到能当场写程序)。

2.明白Java API的源代码实现,比如LinkedList和ArrayList,不只是数据结构的区别(这个大家都清楚)还要能从源代码的角度,比如线程安全性,内部扩充方式,每次扩充的长度等等来表达。(你可以想想自己能不能说出String、StringBuffer、StringBuilder的区别;HashTable、HashMap、TreeMap的区别呢?属性类的安全性?等等,别查文档,也别说你知道,面试的时候不会听你啰嗦的,就说重点区别)。


3.设计模式,要明白各个设计模式的优缺点,应用场景,最好能说出哪些框架应用了这些设计模式。对于简单的设计模式,如单例等可能会被现场写。

4.SSH框架,只要搞Java的都会被问这三个框架的很多东西,Spring的IoC,DI,AOP,配置;Struts2的创建过程,Filter,配置;Hibernate的O/R Mapping,映射的配置,乐观锁、悲观锁等等。紧紧在项目中用还不行,最好要明白内部原理。


5.操作系统的一些知识,笔试的时候有考到LRU算法(差一点就忘了)。
总之大公司考的范围很广,绝大部分都学过,但是很多我们在学校中学一次就很可能不会再用(比如页面置换算法,存储过程等,学生项目不会涉及这么复杂底层的东西)。还有就是平时我们依赖IDE惯了,很多我们知道的东西,比如标签都有哪些属性什么的,当场写我们可能就写不出来了(比如各种配置文件,使用自动提示惯了,让自己写都不会了,这是平时注意自己敲吧)。

感想:其实阿里巴巴的技术面反映出来的最主要的问题不是自己的技术问题,而是自己真正想要做什么。

今天问的这些问题,如果放在大三上学期问的话,我能很自如的答出来,但是从专业实习之后自己一直就在研究Unity3D和Photon,这些很久都没看了,忘了很自然。自己现在真正应该思考的是到底想不想要做Java开发,做Java开发的话就要用SSH框架,自己又不太喜欢基于SSH框架的网站开发。(= =真是个纠结的问题,男怕入错行,如果你了解的也比较多还是慎重考虑吧,虽然招聘Java的很多,但是面试Java的比招聘的还多,Java发展了这么多年,想要说你精通Java要有一定实力哦,要不然随便一个细节问题,比如Java反射、序列化、反序列化等都可能问死你,不是你不行,是这个太细了)有侧重的复习面试很重要。想要深入游戏开发,又怕自己没学过C++和图像处理算法和别人差距太大。这几天要反思下。


正文完

有话要说:从这位学长面试失败的经历中可以看出一个问题,对于我们在大学中“学过”的技术知识,我们是不是真正地学到了、学懂了、学透了。回顾我们大学学过的东西有太多,有什么是我们融进自己技术中的,我们都应该及时反思自己的学习,我们是不是真的学到了东西,还是我们学的东西只是浮于表面,没有抓住知识的根基。还是“功夫用在平时”,努力和勤奋不会没有回报的。

相关文章
|
2月前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
3天前
|
存储 NoSQL 架构师
阿里面试:聊聊 CAP 定理?哪些中间件是AP?为什么?
本文深入探讨了分布式系统中的“不可能三角”——CAP定理,即一致性(C)、可用性(A)和分区容错性(P)三者无法兼得。通过实例分析了不同场景下如何权衡CAP,并介绍了几种典型分布式中间件的CAP策略,强调了理解CAP定理对于架构设计的重要性。
25 4
|
25天前
|
SQL 关系型数据库 MySQL
阿里面试:1000万级大表, 如何 加索引?
45岁老架构师尼恩在其读者交流群中分享了如何在生产环境中给大表加索引的方法。文章详细介绍了两种索引构建方式:在线模式(Online DDL)和离线模式(Offline DDL),并深入探讨了 MySQL 5.6.7 之前的“影子策略”和 pt-online-schema-change 方案,以及 MySQL 5.6.7 之后的内部 Online DDL 特性。通过这些方法,可以有效地减少 DDL 操作对业务的影响,确保数据的一致性和完整性。尼恩还提供了大量面试题和解决方案,帮助读者在面试中充分展示技术实力。
|
1月前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
65 1
|
2月前
|
消息中间件 架构师 Java
阿里面试:秒杀的分布式事务, 是如何设计的?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试阿里、滴滴、极兔等一线互联网企业时,遇到了许多关于分布式事务的重要面试题。为了帮助大家更好地应对这些面试题,尼恩进行了系统化的梳理,详细介绍了Seata和RocketMQ事务消息的结合,以及如何实现强弱结合型事务。文章还提供了分布式事务的标准面试答案,并推荐了《尼恩Java面试宝典PDF》等资源,帮助大家在面试中脱颖而出。
|
4月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
28天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
52 4
|
2月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
85 2
|
2月前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
32 0