支付宝内推面经

趁现在脑子里面还记得一些问题,赶紧记录一下,给以后的人做个参考!排版有点乱,见谅!


  刚才收到支付宝的面试电话时候,还在实验室里面写代码,赶紧出去找个楼梯坐下来,开始面试




1,开始时候问你主要实习的时间,这个各自情况不同,自己说自己就行

2,然后正式开始考语言特性:



1,final关键字有什么作用

可以参考 http://blog.csdn.net/cq340321/article/details/61618189

关键点:不可变性,线程安全性


2,序列化问题  实现哪些方法

这个知识点当时属于盲区,回答的不好

可以参考:

http://blog.csdn.net/endlu/article/details/51178143

http://blog.csdn.net/cq340321/article/details/58597807



3. 集合类有哪些

http://blog.csdn.net/pistolove/article/details/41453705



4,  集合类中有哪些是序列化的?

这题又跪了。。。实在不记得。。




5,volatile关键字

主要考虑三点:

可见性

禁止jvm指令重排

不能保证原子性


6,Enumeration,iterator区别



1.Enumeration 枚举接口其实是一个比 Iterator 迭代器接口更早期的枚举集合中的元素的接口。
2.Enumeration 虽然可能过时而被 Iterator 替代,但很多 servlet 还用到,所以还有学习的必要。
3.迭代器允许调用方利用定义良好的语义在迭代期间从迭代器所指向的集合移除元素。
4.方法名称得到了改进。

枚举(Enumeration)接口是从以前版本遗留下来。在下面依次介绍Enumeration 和每一种从以前版本遗留下来的类。
Enumeration接口定义了可以对一个对象的类集中的元素进行枚举(一次获得一个)的方法。这个接口尽管没有被摈弃,但已经被Iterator所替 代。Enumeration对新程序来说是过时的。然而它仍被几种从以前版本遗留下来的类(例如Vector和Properties)所定义的方法使用, 被几种其他的API类所使用以及被目前广泛使用的应用程序所使用。
Enumeration指定下面的两个方法:
boolean hasMoreElements()
Object nextElement()
执行后,当仍有更多的元素可提取时,hasMoreElements()方法一定返回true。当所有元素都被枚举了,则返回false。 nextElement()方法将枚举中的下一个对象做为一个类属 Object的引用而返回。也就是每次调用nextElement()方法获得枚举中的下一个对象。调用例程必须将那个对象置为包含在枚举内的对象类型。
另外还有个Iterator接口,和Enumeration是差不多的,不过名称比较短,通常推荐用 Iterator
对集合进行迭代的迭代器。迭代器代替了 Java Collections Framework 中的 Enumeration。Collections 接口中定义了 iterator 方法,用于返回在此 collection 的元素上进行迭代的迭代器。

Iterator是一个集合的迭代器,通过Iterator访问接口就就不用关心集合的实现.
Iterator接口中定义了三个方法:
1.hasNext()
是否还有下一个元素.
2.next()
返回下一个元素.
3.remove()
删除当前元素.
只定义了简单的三个方法,这里要注意几点:
1)Iterator和Enumeration的区别
Iterator是用来替代Enumeration的,Enumeration中只定义了两个方法,不具备删除功能.
2)调用next()方法后才可以调用remove()方法,而且每次调用next()后最多只能调用一次remove()方法,否则抛出IllegalStateException异常.



7,多线程下使用hashmap.

我直接反问为什么要在多线程下使用hashmap,因为hashmap是非安全的,非同步的,这样做没办法保证线程安全性。



8,hashcode与equals

重写了hashcode,没有重写equals会怎样?

主要是在一些情况下没办法判断是否相等了,hashcode相同时会产生碰撞,、


9,hashmap数据结构

hash表,注意问的是数据结构,所以应该回答是数组和以数组为头结点链表的结构



10,compare与comparator

参考:http://www.cnblogs.com/szlbm/p/5504634.html

Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。

Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。




11,final与volatile合并出题

考察的还是线程安全性。


12.什么情况下使用GC

引用消失或者弱引用,衍生回答。。。。(省略几百字)


13,jvm内存组成模型(可能不准确)


总结看来大公司问的最多的还是多线程,并发以及jvm相关知识,平时接触的不太多,但是这些往往在工作中使用的不少,所以要花一番功夫了。


教训:打好基础是关键,对于一些概念和关键字只是知道基本用法,面试用实例的形式询问就不是很清晰了。但是,加油努力,我还有时间!时间会给你想要的。


你可能感兴趣的:(Java语言基础)