职友集java面试题_Java基础面试题

2015-11-19 06:30:04

阅读( 180 )

1)请说出你所知道的线程同步的方法。

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

2)Start和run,Thread和Runnable

Thread是一个类,Runnable是一个接口。类里面有实现的方法,而Runnable只有抽象的接口而已没有实现的方法。其实Thread也是继承Runnable. start方法:用来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体, 它包含了要执行的这个线程的内容, run方法运行结束, 此线程终止, 而CPU再运行其它线程, 直接用run方法: 这只是调用一个方法而已, 程序中依然只有主线程–这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。

3)常见的七种排序:

冒择插希快归堆;

冒泡:

选择:

插入:

快速:

4)java中实现多态的机制是什么?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。

5)面向对象的特征有哪些方面

1.抽象:

抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

2.继承:

继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

3.封装:

封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

4. 多态性:

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

6)抽象类和接口有什么区别

接口可以多重继承 ,抽象类不可以

接口定义方法,不给实现;而抽象类可以实现部分方法

接口中基本数据类型的数据成员,都默认为static和final,抽象类则不是

7)error和exception有什么区别

error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

8)给我一个你最常见到的runtimeexception

9)Overload和Override的区别

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

10)sleep()和wait()有什么区别?

搞线程的最爱sleep()方法是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻塞。wait()是线程交互时,如果线程对一个同步对象x发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

11)GC是什么?为什么要有GC

GC是垃圾收集器。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc()Runtime.getRuntime()。gc()

12)HashMap和Hashtable的区别

都属于Map接口的类,实现了将惟一键映射到特定的值上。HashMap类没有分类或者排序。它允许一个null键和多个null值。Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的。

13)&和&&的区别

&是位运算符。&&是布尔逻辑运算符。

14)AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

15)谈谈final,finally,finalize的区别。

16)类型转换(变态题)

int x=4;

System.out.println(“value is ” +((x>4)?99.9:9));

答案 9.0 ,问号表达式的后面两个条件有要求,因为前面的是float,所以后面转为float.

short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答案 1错2对,1因为向上转型了,最后导致类型不匹配错误 ,

因为s1的+=是一个操作符,能够自动转型,

short s1 = 1;

s1 = s1+1;这句话在c++里面可以的

System.out.println(5.0942*1000);

System.out.println(5.0943*1000);

System.out.println(5.0944*1000);的结果

答案 :5094.2 5094.299999999999 5094.400000000001

Int count=1;count+=count++;输出count=2;

Try{

System.exit(0);

}catch(Exception){

}finally{

System.out.println(“ok”);

}

——

Main(){

System.out.println(test());

}

Static void test(){

Try{

Return 0;

}catch(Exception e){

}finally{

System.out.println(“ddd”);

}

Return 1;

}

输出0;

17)Boolean类型

boolean a = false;

if (a = true){

System.out.println(true);

} else {

System.out.println(false);

}

结果为 true

18)常见修饰符

1.访问修饰符public,private.protected,缺省

2.Static,final,abstract,native,sychronized,transient,volatile,package

a)Sychronized:多线程的支持,当一个此方法被调用时,没有其它线程能够调用该方法,其它的synchronized方法也不能调用该方法,直到该方法返回

b)Transient:告诉编译器,在类对象序列化的时候,此变量不需要持久保存,主要是因为改变量可以通过其它变量来得到,使用它是为了性能的问题

c)Volatile:指出可能有多个线程修改此变量,要求编译器优化以保证对此变量的修改能够被正确的处理

d)Native:用该修饰符定义的方法在类中没有实现,而大多数情况下该方法的实现是用C、C++编写的。参见Sun的Java Native接口(JNI),JNI提供了运行时加载一个native方法的实现,并将其于一个Java类关联的功能

19)常见集合类的区别

2.ArrayList: 元素单个,效率高,多用于查询

2.Vector: 元素单个,线程安全,多用于查询

3.LinkedList:元素单个,多用于插入和删除

4.HashMap: 元素成对,元素可为空

5.HashTable: 元素成对,线程安全,元素不可为空

集合 : 集合对象:用于管理其他若干对象的对象

数组:长度不可变

List: 有顺序的,元素可以重复

遍历:for 迭代

排序:Comparable Comparator Collections.sort()

ArrayList:底层用数组实现的List

特点:查询效率高,增删效率低 轻量级 线程不安全

LinkedList:底层用双向循环链表 实现的List

特点:查询效率低,增删效率高

Vector: 底层用数组实现List接口的另一个类

特点:重量级,占据更多的系统开销 线程安全

Set:无顺序的,元素不可重复(值不相同)

遍历:迭代

排序:SortedSet

HashSet:采用哈希算法来实现Set接口

唯一性保证:重复对象equals方法返回为true

重复对象hashCode方法返回相同的整数

不同对象 哈希码 尽量保证不同(提高效率)

SortedSet:对一个Set排序

TreeSet:在元素添加的同时,进行排序。也要给出排序规则

唯一性保证:根据排序规则,compareTo方法返回为0,就可以认定两个对象中有一个是重复对象。

Map:元素是键值对 key:唯一,不可重复 value:可重复

遍历:先迭代遍历key的集合,再根据key得到value

HashMap:轻量级 线程不安全 允许key或者value是null

Hashtable:重量级 线程安全 不允许key或者value是null

Properties:Hashtable的子类,key和value都是String

20)链表的实现

2.package ChapterFive;

3.class Link {

4. public E data;

5. public Link next;

6. public Link(E data) {

7. this.data = data;

8. }

9.}

10.class LinkList {

11. public Link first;

12. //链表中数据项的个数

13. public int size;

14. public LinkList() {

15. first = null;

16. size = 0;

17. }

18. //在表头插入新的数据

19. public void insertFirst(E value) {

20. Link link = new Link(value);

21. link.next = first;

22. first = link;

23. size++;

24. }

25. //判断链表是否为空

26. public boolean isEmpty() {

27. return size == 0;

28. }

29. //删除表头

30. public Link deleteFirst() {

31. Link temp = first;

32. first = first.next;

33. size–;

34. return temp;

35. }

36. //输出链表中的所有数据

37. public void display() {

38. Link curr = first;

39. while (curr != null) {

40. System.out.print(curr.data + ” “);

41. curr = curr.next;

42. }

43. System.out.println();

44. }

45. //返回链表中数据项的个数

46. public int size() {

47. return size;

48. }

49. //获取从头至尾的第i个数据项

50. public Link get(int i) {

51. if (i > size() – 1 || i < 0)

52. try {

53. throw new IndexOutOfBoundsException();

54. } catch (Exception e) {

55. e.printStackTrace();

56. }

57. Link curr = first;

58. for (int n = 0; n < size(); n++) {

59. if (n == i)

60. return curr;

61. else

62. curr = curr.next;

63. }

64. return null;

65. }

66. //输出从头至尾的第i个数据项

67. public void remove(int i) {

68. if (i == 0)

69. deleteFirst();

70. else if (i == size() - 1)

71. get(i - 1).next = null;

72. else {

73. get(i - 1).next = get(i + 1);

74. }

75. size--;

76. }

77.}

78.

79.public class Link_list {

80. public static void main(String[] args) {

81. LinkList ll = new LinkList();

82. for (int i = 0; i < 10; i++) {

83. Long value = (long) (Math.random() * 100);

84. ll.insertFirst(value);

85. }

86. ll.display();

87. while (!ll.isEmpty()) {

88. ll.deleteFirst();

89. ll.display();

90. }

91. System.out.println(“Ok”);

92. }

93.}

分享给朋友:

亲~ 如果您有更好的答案 可在评论区发表您独到的见解。

您想查看更多的信息:

面试题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值