记录下面试的一些问题:有些问题具体解释篇幅太长,用链接来跳转。
1、稳定的排序有哪一些?什么时候用稳定排序,什么时候不用?
http://blog.csdn.net/fly_thewind/article/details/52203402
稳定的排序有冒泡排序,插入排序,基数排序,归并排序。
当时,我记得自己完全不知道在想什么,什么时候用稳定排序,我就说当不需要考虑相同元素的先后顺序的时候用稳定,不稳定则反之。现在想着感觉就是在扯淡。。网上查了点资料,基本没有这方面的讨论。我总结了大约2点:
1、不稳定排序效率普遍高于稳定排序,只有归并排序可以到达O(blogn),其他的O(n^2).
2、举个具体例子,比如:假设有一序列,需要先按第一关键字排序,第一关键字相同的可以按第二关键字排序。那么处理方法可以这样:先按第二关键字排序,再按第一关键字稳定排序,目的就达到了。
2、grep命令
http://blog.csdn.net/fly_thewind/article/details/52203529
虽然看过点Linux,但是只看了一点。。并没有用过grep命令,所以爆炸。
3、HashMap的底层实现,当Hash值有冲突时,怎么办?
HashMap中是数组和链表的结合,数组中的每一个元素都是链表的表头节点。
http://blog.csdn.net/fly_thewind/article/details/52204167
我估计是我没回答出来HashMap的底层实现,他想提示我。。所以让我回答这个问题。然而不知道上面的问题想下面的问题确实不容易。
如果发生冲突的话,可以使用
开放地址法和拉链法来解决冲突问题。当时,我只回答了重构hash函数。对前面2种方法有点印象但是想不起来。
开放地址法:就是通过探测算法,当当前key所对应的位置被占用是,继续找下一个可用位置。
拉链法:在同一个Key所在的位置,对应不同的value值。value以链表的形式存在。
4、抽象类与接口
1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
当时只回答了第一点和第四点。感觉还是基础不够扎实。
如果觉得有点陌生,可以看下下面的一篇文章,觉得有关门和报警器这段会让你对抽象类和接口有更深的理解。
http://www.cnblogs.com/dolphin0520/p/3811437.html
5、java1.8特性,lambda表达式是语法糖吗?
这个问题感觉是被自己坑进去的,上个问题中,我回答不同时,说了抽象类中可以具体实现的方法,而接口中不能,结果他开始问我使用java的版本是什么。而我这种新手当然一般每次重装JDK都用最新的,结果Java8中有一个对接口可以提供被实现的方法,只需要添加defeat前缀。
然后,我嘴贱,提了一嘴,Lambda表达式,他问我用法,我提了个排序比较的例子,他又问是不是语法糖。。
结果又是懵逼了。
答案应该是就是语法糖。
7、sychronized用来修饰类方法和方法有什么区别?
这个问题,我想先系统的看看多线程以后再进行补充。