记一次阿里巴巴电话面试题

前几天投了阿里巴巴校招简历,今天晚上突然来了阿里的面试电话,有点紧张又有点激动,面试的问题问的挺全面,但是有些准备不足,因此回答的并不算太满意,现在整理一下分享给大家,希望进阿里的小伙伴可以来踩踩。

1.自我介绍(打电话时我刚吃完饭,上来就介绍自己,简单的介绍自己学的专业,以后的发展方向和目标,在学校参加过实验室并参加比赛获得过荣誉),我准备的仓促,下次吸取教训。

2.实验室参加的项目主要做了些什么,用了什么技术?

   这个有过项目实战经历的自己总结吧。

3.说说java内存模型?

java内存模型也叫JMM,由工作内存和主存构成,主存用来存储数据,工作内存再程序读取数据时将主存中要读取的数据copy一份到工作内存,然后程序读取数据进行运算。

我在说JMM的时候讲了一下计算机的内存模型,计算机的cpu运算速度很快,计算机内存存储cpu运算需要的数据,但是cpu直接从内存读取数据太慢,效率太低,所以cpu内置了高速缓存器Cache,cpu需要读取数据时,将内存中数据copy一份到Cache中,然后cpu从Cache读取数据,大大提高了执行效率和速度。

4.我的项目用到了多线程,所以问到了线程的问题,首先问的线程安全机制怎样实现的?

   主要回答了两个关键字,一个synchronized关键字修饰方法或者语句块实现线程的同步,还有volatile关键字修饰共享变量。

5.说说volatile关键字可见性的实现原理?

volatile关键字主要功能是为了共享变量的在线程间实现可见性,我们在多线程并发编程中,每个线程读取的变量都是存贮在虚拟机的主存中,这里要说一下java虚拟机的内存模型,java内存模型主要有部分组成,一个是主存,用来存贮数据,类似计算机的内存,一个是工作内存,类似cpu中的高速缓存Cache,线程读取数据需要将主存的数据copy一份存储到工作内存,然后线程再从工作内存读取数据进行运算,之后再将运算结果返回工作内存,工作内存再返回到主存。那么存在这样一种情况,一个线程刚进行完数据的运算a++,还没有返回运算结果,这是另外一个线程抢到cpu进行运行,并且一直完成了对数据的读取和运算并且将结果返回到主存的操作,这样主存中的数据就增加了一次,这时第一个线程接着运行,将执行结果返回到主存,但是返回值和第二个线程是一样的,这样本来共享变量应该增加两次,可是只增加了一次,就会出现问题,这就是缓存不一致问题,而使用volatile关键字修饰的共享变量就能解决这个问题,被修饰的共享变量一旦被修改,修改结果直接存储到主存中,其他线程再次读取这个变量发现被volatile关键字修饰,会导致工作内存中用来缓存该变量的变量行失效,直接从主存中读取变量的值。

可以参考这篇文章:https://blog.csdn.net/eff666/article/details/67640648

 

6.说说集合框架

这个这要讲一下集合框架的构成就行了。

 

7.你经常用哪个集合类?

我说的ArrayList,他说这个线程安全吗?我说不安全,安全的只有Vector,但是他又问我除了Vector还有其他的集合类安全吗?我真想不起来了,查了资料有Stack,继承自Vector。但是我实在没想起来,只能说我还知道Map集合中有一个hashtable类线程安全。。。

 

8.你用的什么java版本?

我说的jdk8,我一听就想坏了,我对jdk8的新特性不知道啊,果然他又问我jdk8比jdk7新增了哪些新特性?我只能说不知道。

 

9.平常用过什么数据库?除了mysql和oracle外你还知道什么数据库?

我说我用mysql,oracle没用过但是学过,除此之外还看过redis,然后说了一下redis的存储原理。

 

10.说说mysql和oracle两者区别?

说实话,不知道,但是还是说mysql适合轻量级,oracle适用于大型的项目,mysql开源免费,oracle收费,但是oracle出现问题能够问客服,让别人解决问题,mysql都是小项目用的,出问题自己解决。。。。说的很勉强。

 

11.java方向做过什么项目?印象最深的是哪个?

基本每个技术阶段都会做一个项目,我说了一个用springboot做的项目,并提前告诉他我目前不知道这些框架原理如何实现的!免得问我我也不会,他就问我使用了什么技术让我印象最深刻,为什么这个项目用了springboot框架。我只能照实说我第一次用mybatis技术,并被它深深的高效快捷的功能所吸引,用它实现了底层数据库的操作,并且能够节省很大的代码量,能够自动生成对底层数据库的操作代码,但是只限于单表操作,又说了用mybatis如何处理表与表之间的关系。

 

12.spring了解多少?

我说了spring的面相切面和依赖注入,原理没说,就过去了。

 

13.说说类的加载机制。

我忘了。。。

可以参考这篇文章:https://www.cnblogs.com/ITtangtang/p/3978102.html

14.读过什么类型的书?

最近正好在读java并发编程和深入理解java虚拟机,说了一下书中的内容。

 

15.有没有想过考研?

我坚定的说没有。

我也不知道为啥问这个。

 

16.有什么要问他的?

我主要问了一些学习的方法。

 

 

大概就这么多内容,面试了50分钟,以上解答若有问题,欢迎指出!

posted @ 2018-07-31 23:24  执棋手  阅读(1695)  评论(0编辑  收藏  举报