记录一次壮烈牺牲的阿里巴巴面试!

作者 | raledong

一、前言

今天本是一个阳光明媚,鸟语花香的日子。于是我决定在逛街中感受春日的阳光~结果晚上七点的时候,蚂蚁金服后端大佬来了电话,要进行一轮的技术面试。我一脸黑人问号???现在的面试都流行突袭吗? 于是我的第一次面试之旅,就此壮烈的展开。

二、自我介绍

首先呢,大佬让我用两分钟自我介绍。我本以为自己能滔滔不绝,将对方视作相亲对象般全方位介绍自己。结果不到半分钟,我就介绍完了==。

五秒钟的沉默后,大佬嗯了一声。

感觉自己的脸上堆满了尴尬而不失礼貌的微笑。

三、最近的项目经历

这时大佬问我最近从事了什么项目,研究生阶段都进行了什么样的工作。 那必须吹一吹!从Java的起源到Spring的发展再到Jenkins的使用顺便提一嘴dva+antd,结果半分钟一到,又说不下去了==

大佬很有耐心的听我说了一堆语无伦次的话,开始进入正题。

四、Spring

大佬:我看你用过这个Spring啊,你来聊聊为什么我们要使用Spring呢? 我:(因为大家都说好啊)首先呢,Spring是一个庞大的框架,它封装了很多成熟的功能能够让我们无需重复造轮子。其次呢,它使用IOC进行依赖管理,我们就不用自己初始化实例啦。 大佬:(我就知道你会说IOC啦)那你解释一下IOC吧 我:IOC就是依赖控制转化,利用Java的反射机制,将实例的初始化交给Spring。Spring可以通过配置文件管理实例。 大佬:那我们可以直接使用工厂模式呀。工厂模式也可以管理实例的初始化呀,为什么一定要使用Spring呢? 我:啊........因为.......方便?(仿佛看到大佬凝固的表情,为了不那么尴尬,我决定转移话题)。而且Spring的IOC是单例模式呢。 大佬:默认的是实现是单例模式吗? 我:对的。

这里查了一下为什么不用工厂模式而使用IOC。其实本质上还是因为IOC是通过反射机制来实现的。当我们的需求出现变动时,工厂模式会需要进行相应的变化。但是IOC的反射机制允许我们不重新编译代码,因为它的对象都是动态生成的。

五、数据库

大佬:你使用过哪些数据库呀? 我:MySQL还有SqlLite。(被遗忘的MongoDB在角落里无声哭泣) 大佬:那你使用的ORM框架除了Hibernate还有哪些,比如iBatis? 我:我用过MyBatis 大佬:哦,那你能讲一下你对两个框架使用后的感受吗? 我:当时使用MyBatis的时候,也有去社区了解了一下两个框架的口碑,发现大家的战队都坚定而对立。对Hibernate的不满通常是因为它在复杂关联中往往会带来严重的性能问题,也就是N+1的问题。但是它是面向对象支持的最好的框架了。而MyBatis则相对而言比较易于使用,只需要会SQL语句就行了。但是也意味着会破坏一些面向对象的规则。 大佬:(似乎有点认可)那你了解数据库的事务吗?能讲一下数据库的事务级别吗? 我:(忘得一干二净)emmm不好意思我记不太清楚了。 大佬:那你还记得数据库的加锁吗?比如乐观锁,悲观锁? 我:(求您别问了T T) 大佬:(锲而不舍)那我现在假设有一张用户表,你也知道,正常的表只能存放大概一千万或是两千万左右的数据。但是阿里巴巴有上亿的用户?你会怎么存储呢? 我:可以纵向分割与横向分割。 大佬:那你觉得这里应该纵向还是横向呢? 我:纵向(载入史册的嘴瓢) 大佬:(很有耐心)可是这样我的数据库还是放不下啊 我:(仿佛突然睡醒)应该是横向分割,把表拆分成多个表然后分布式存储 大佬:那你觉得我们怎样分割比较合适呢? 我:(还能再问?)可以根据地域,但是根据用户分布的情况来说,还是会有某些地域访问稠密而有些地域比较稀疏的问题。难道按照用户等级? 大佬:不,用户等级会变动,不合适。你这个阶段暂时没有考虑这个问题 我:(谢谢您的台阶啊!)

七、Linux

大佬:你们服务器用的是什么操作系统啊? 我:(呀,送命题)我们用的是阿里云上的Cent OS系统 大佬:那你对Linux熟练吗? 我:不是很熟悉,仅仅是入门,能够敲一点指令。 大佬:好,那你知道库函数和内核调用吗? 我:内核调用是指进入内核态然后执行指令然后再回到用户态吗? 大佬:对 我:我知道的大概就这么多了,只了解一些概念上的内容。(凉凉送给自己) 大佬:那你知道如何查看进程吗? 我:啊...记不得了,我一般都查一下指令 (于是大佬果断放弃了其它Linux问题)

八、JVM

大佬:你了解JAVA虚拟机吗?能解释一下底层的模块吗? 我:(如果你通知我明天面试,我就了解了><)不好意思,这一块知识我不熟悉,但是我很愿意去了解(赶紧表忠心啊!)

九、线程

大佬:你知道什么是线程安全吗? 我:(乌鲁乌鲁说了一堆)就是比如如果同时有两个线程访问同一个变量,那么它们对变量造成的修改所带来的结果可能是不确定的。 大佬:那你知道JAVA有什么方法来实现线程安全吗? 我:(前几天还翻译了博客,但是一问起来忘得比啥都快)首先是synchronized修饰词,然后JAVA还自己实现了一些封装好的类比如LatchDown,Atomic系列(????????后来一查是CountDownLatch!还有大明湖畔的final关键字呢?还有小明湖畔的Lock呢?还有那些实现线程的Collections比如ConcurrentHashMap呢?) (大佬果然开启了下一个问题)

十、分布式

大佬:你有写过分布式的业务吗? 我:我写过一个基于HDFS分布式存储的KVStore,上层使用Hadoop的API实现。 大佬:那个是分布式存储,我想了解一下分布式业务? 我:(赶紧纠正)那Dubbo算吗?(于是介绍了一下自己了解的Dubbo) 大佬:ok。那你觉得分布式的话会遇到什么问题呢? 我:那就是经典的CAP问题了。没有数据库能够同时满足这三个问题 大佬:那你能具体解释一下CAP代表什么吗? 我:(紧张到一片空白)Consistency?Atomic?P...Persistency??? 大佬:.......

CAP: 是指Consistency一致性,Availability可用性,Partition Tolerance分区容忍性

十一、设计模式

大佬:你了解过设计模式吗? 我:了解了解 大佬:那你了解过哪些设计模式呢? 我:blablabla 大佬:那你解释一下指令模式吧 我:这个有点像函数式编程的思想。指令模式就是指将各个操作封装为统一的接口,并且提供各个操作的实现类。这样我们只需要面向command接口编程,解除了调用类和指令之间的强耦合。

十二、总结

最后当然和大佬话一话家常,进行最后的挣扎。总结来说,要想成功进行一次阿里巴巴的面试,你需要了解甚至掌握以下内容:

  • JAVA语言,尤其是线程
  • JVM原理
  • 数据库(事务,加锁,ORM)
  • Linux
  • Spring(重点!)
  • 分布式
  • 设计模式

可以说是涉及范围非常广了。不过其实要想成为一名优秀的后端开发,是需要这些知识面的,只能说自己还是太菜了。要继续深入学习!

原文发布于微信公众号 - Java后端技术(JavaITWork)

原文发表时间:2018-03-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构

Java就业指导

26820
来自专栏开发与安全

在腾讯实习的那段日子:不要在难受的时候选择 '逃避/离开'

时间过得很快,从2014.6.5入职实习到2015.1.5已经是7个月的时间了,在这边还是学到了很多东西,遇到的人大多数比较nice。中间拿到了留任offer,...

24500
来自专栏大数据和云计算技术

新数仓系列:MongoDB关键能力和特性梳理

最近看一本书,铃木敏文的《零售的哲学》,里面提到一个很有意思的观点,711核心使命是提供便利,围绕便利场景,提供一系列食品、ATM服务等,而不是和超市去PK货物...

31960
来自专栏Java技术栈

Java 面试就业指导,100 % 提高面试成功率!

想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?

18330
来自专栏nimomeng的自我进阶

Kiwi上手体验

听说Kiwi,是来自于我在进行模块化构建的时候,执行 pod lib create xxxPods 的时候会有一个问题:

13820
来自专栏Kirito的技术分享

给初中级JAVA准备的面试题

笔者作为一个今年刚毕业的初级JAVA,根据群里水友的讨论,也结合自己刚毕业时的一些面经,加上近期一点点在公司面试别人的经验,总结了如下的常见面试问题,适用于初级...

61680
来自专栏HansBug's Lab

【作业2.0】HansBug的5-7次OO作业分析与小结,以及一些个人体会

25840
来自专栏北京马哥教育

Python Web不知道怎么学?看这篇就够了!

Python的用处太多,前端、后端、数据、ML\AI、自动化等等等等。很多小白不知道学习方向导致学的东西太杂,技能范围很广但是没有高度,自己玩可以工作就完蛋。这...

443100
来自专栏养码场

一位资深Java的阿里系公司实战面试经验,套路还是面试官的多

占小狼:一位奋斗在魔都的资深Java开发。去年6月在简书上发第一篇技术文章,已坚持发表76篇技术文章,粉丝数突破4000。

24970
来自专栏编舟记

架构整洁之道导读(二)

我是《架构整洁之道》(Clean Architecture) 中文版的技术审校者,在审校的过程当中略有感悟,所以希望通过撰写导读的方式分享给大家。

13320

扫码关注云+社区

领取腾讯云代金券