当前位置 : IT培训网 > Java开发 > Java培训 > Java程序员经验之谈 聊聊阿里巴巴的面试题

Java程序员经验之谈 聊聊阿里巴巴的面试题

时间:2019-03-01 14:45:05  来源:编程网  作者:IT培训网  已有:名学员访问该课程
阿里巴巴是很多程序员都企盼进入的公司,这里待遇好是出了名的,但是象这样的公司,没有两把刷子,确实真的不好进,今天,我就给大家讲述一下我在阿里巴巴面试中都经历了什么,一定要好好关注哟,里面有很多的程序员面

阿里巴巴是很多程序员都企盼进入的公司,这里待遇好是出了名的,但是象这样的公司,没有两把刷子,确实真的不好进,今天,我就给大家讲述一下我在阿里巴巴面试中都经历了什么,一定要好好关注哟,里面有很多的程序员面试题与大家分享。

Java程序员经验之谈 聊聊阿里巴巴的面试题_www.itpxw.cn

程序员鸟阿里巴巴的面试之旅

1、Spring

大佬:我看你用过这个Spring啊,你来聊聊为什么我们要使用Spring呢?

我:(因为大家都说好啊)首先呢,Spring是一个庞大的框架,它封装了很多成熟的功能能够让我们无需重复造轮子。其次呢,它使用IOC进行依赖管理,我们就不用自己初始化实例啦。

大佬:(我就知道你会说IOC啦)那你解释一下IOC吧。

我:IOC就是依赖控制转化,利用JAVA的反射机制,将实例的初始化交给Spring。Spring可以通过配置文件管理实例。

大佬:那我们可以直接使用工厂模式呀。工厂模式也可以管理实例的初始化呀,为什么一定要使用Spring呢?

我:啊........因为.......方便?(仿佛看到大佬凝固的表情,为了不那么尴尬,我决定转移话题)。而且spring的IOC是单例模式呢。

大佬:默认的是实现是单例模式吗?

我:对的。

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

2、数据库

大佬:你使用过哪些数据库呀?

我:Mysql还有SQLight。(被遗忘的MongoDB在角落里无声哭泣)

大佬:那你使用的ORM框架除了Hibernate还有哪些,比如IBatis?

我:我用过MyBatis。

大佬:那你能讲一下你对两个框架使用后的感受吗?

我:当时使用Mybaits的时候,也有去社区了解了一下两个框架的口碑,发现大家的战队都坚定而对立。对Hibernate的不满通常是因为它在复杂关联中往往会带来严重的性能问题,也就是N+1的问题。但是它是面向对象支持的最好的框架了。而Mybatis则相对而言比较易于使用,只需要会SQL语句就行了。但是也意味着会破坏一些面向对象的规则。

大佬:(似乎有点认可)那你了解数据库的事务吗?能讲一下数据库的事务级别吗?

我:(忘得一干二净)不好意思,我记不太清楚了。

大佬:那你还记得数据库的加锁吗?比如乐观锁、悲观锁?

我:(求您别问了)

大佬:(锲而不舍)那我现在假设有一张用户表,你也知道,正常的表只能存放大概一千万或是两千万左右的数据。但是阿里巴巴有上亿的用户?你会怎么存储呢?

我:可以纵向分割与横向分割。

大佬:那你觉得这里应该纵向还是横向呢?

我:纵向(载入史册的嘴瓢)

大佬:(很有耐心)可是这样我的数据库还是放不下啊。

我:(仿佛突然睡醒)应该是横向分割,把表拆分成多个表然后分布式存储。

大佬:那你觉得我们怎样分割比较合适呢?

我:(还能再问?)可以根据地域,但是根据用户分布的情况来说,还是会有某些地域访问稠密而有些地域比较稀疏的问题。难道按照用户等级?

大佬:不,用户等级会变动,不合适。你这个阶段暂时没有考虑这个问题。

我:(谢谢您的台阶啊!)

3、Linux

大佬:你们服务器用的是什么操作系统啊?

我:(呀,送命题)我们用的是阿里云上的centos系统

大佬:那你对Linux熟练吗?

我:不是很熟悉,仅仅是入门,能够敲一点指令。

大佬:好,那你知道库函数和内核调用吗?

我:内核调用是指进入内核态然后执行指令然后再回到用户态吗?我知道的大概就这么多了,只了解一些概念上的内容。(凉凉送给自己)

大佬:那你知道如何查看进程吗?

我:啊...记不得了,我一般都查一下指令

4、JVM&线程

大佬:你了解Java虚拟机吗?能解释一下底层的模块吗?

我:(如果你通知我明天面试,我就了解了)不好意思,这一块知识我不熟悉,但是我很愿意去了解(赶紧表忠心啊!)

大佬:你知道什么是线程安全吗?

我:(乌鲁乌鲁说了一堆)就是比如如果同时有两个线程访问同一个变量,那么它们对变量造成的修改所带来的结果可能是不确定的。

大佬:那你知道Java有什么方法来实现线程安全吗?

我:(前几天还翻译了博客,但是一问起来忘得比啥都快)首先是synchronized修饰词,然后Java还自己实现了一些封装好的类比如LatchDown,Atomic系列(后来查是CountDownLatch!还有大明湖畔的final关键字呢?还有小明湖畔的Lock呢?还有那些实现线程的collections比如ConcurrentHashMap呢?)

5、分布式

大佬:你有写过分布式的业务吗?

我:我写过一个基于HDFS分布式存储的KVStore,上层使用Hadoop的API实现。

大佬:那个是分布式存储,我想了解一下分布式业务?

我:(赶紧纠正)那Dubbo算吗?(于是介绍了一下自己了解的dubbo)

大佬:那你觉得分布式的话会遇到什么问题呢?

我:那就是经典的CAP问题了。没有数据库能够同时满足这三个问题

大佬:那你能具体解释一下CAP代表什么吗?

我:(紧张到一片空白)Consistency?Atomic?P...Persistency?

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

6、设计模式

大佬:你了解过设计模式吗?

我:了解了解。

大佬:那你了解过哪些设计模式呢?

我:blablabla

大佬:那你解释一下指令模式吧。

我:这个有点像函数式编程的思想。指令模式就是指将各个操作封装为统一的接口,并且提供各个操作的实现类。这样我们只需要面向command接口编程,解除了调用类和指令之间的强耦合。

最后,经过这次面试,虽然过程很艰难和尴尬,但是总结了一些相关的java技术经验,在这里和大家分享一下,要想成功进行一次阿里巴巴的面试,你需要了解甚至掌握以下内容:

JAVA语言,尤其是线程

JVM原理

数据库(事务,加锁,ORM)

Linux

Spring(重点!)

分布式

设计模式

最后,提醒大家做好充分准备,祝愿大家在这场面试中都能够成功!

顶一下
(0)
0%
踩一下
(0)
0%

IT培训0元试听 每期开班座位有限.0元试听抢座开始! IT培训0元试听

  • 姓名 : *
  • 电话 : *
  • QQ : *
  • 留言 :
  • 验证码 : 看不清?点击更换请输入正确的验证码

在线咨询在线咨询

温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。

------分隔线----------------------------
------分隔线----------------------------

推荐内容