您的位置:首页 > 职场人生

Java面试知识点整理

2017-09-03 09:17 543 查看
今天看了Java程序员面试,基础真的很重要这篇文章,忽然想将前面的小知识点整理下,自己学过的忘得差不多了。

J2SE基础

1. 九种基本数据类型的大小,以及他们的封装类。

2. Switch能否用string做参数?

3. equals与==的区别。

4. Object有哪些公用方法?

5. Java的四种引用,强弱软虚,用到的场景。

6. Hashcode的作用。

7. ArrayList、LinkedList、Vector的区别。

8. String、StringBuffer与StringBuilder的区别。

9. Map、Set、List、Queue、Stack的特点与用法。

10. HashMap和HashTable的区别。

11. HashMap和ConcurrentHashMap的区别,HashMap的底层源码。

12. TreeMap、HashMap、LindedHashMap的区别。

13. Collection包结构,与Collections的区别。

14. try catch finally,try里有return,finally还执行么?

15. Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况。

16. Java面向对象的三个特征与含义。

17. Override和Overload的含义去区别。

18. Interface与abstract类的区别。

19. Static class 与non static class的区别。

20. java多态的实现原理。

21. 实现多线程的两种方法:Thread与Runable。

22. 线程同步的方法:sychronized、lock、reentrantLock等。

23. 锁的等级:方法锁、对象锁、类锁。

24. 写出生产者消费者模式。

25. ThreadLocal的设计理念与作用。

26. ThreadPool用法与优势。

27. Concurrent包里的其他东西:ArrayBlockingQueue、CountDownLatch等等。

28. wait()和sleep()的区别。

29. foreach与正常for循环效率对比。

30. Java IO与NIO。

31. 反射的作用于原理。

32. 泛型常用特点,List能否转为List。

33. 解析XML的几种方式的原理与特点:DOM、SAX、PULL。

34. Java与C++对比。

35. Java1.7与1.8新特性。

36. 设计模式:单例、工厂、适配器、责任链、观察者等等。

37. JNI的使用。

1.

到底void算不算第九种,待定

基本类型字节大小最大存储数据量数据范围封装类
void---Void
boolean1(sure?)2true/falseBoolean
byte1255-2^7~2^7-1Byte
short265536-2^15~2^15-1Short
char265536(Unicode编码)0~2^16-1Character
int42^32-1-2^31~2^31-1Integer
long82^64-1-2^63~2^63-1Long
float4-3.4e-45~1.4e38(精度)Float
double8-4.9e-324~1.8e308(精度)Double
2.

jdk1.7后可以用string类型作为switch参数

jdk1.7 String switch的实现

3.

“equals”:

确定两个对象的引用是否相同(原意)

两个对象是否同类且同内容(jdk中很多类覆盖了equals方法)

“==”:

基本数据类型的值是否相等

引用是否指向内存中的同一对象

4.

Object的公用方法(摘自here):

Object是所有类的父类,任何类都默认继承Object。

clone

保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常

equals

在Object中与==是一样的,子类一般需要重写该方法

hashCode

该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到

getClass

final方法,获得运行时类型

wait

使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生:
1. 其他线程调用了该对象的notify方法
2. 其他线程调用了该对象的notifyAll方法
3. 其他线程调用了interrupt中断该线程
4. 时间间隔到了
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常

notify

唤醒在该对象上等待的某个线程

notifyAll

唤醒在该对象上等待的所有线程

toString

转换成字符串,一般子类都有重写,否则打印句柄


5.

Java的四种引用:

强引用:普通变量的使用是强引用,强引用有引用变量指向时永远不会被垃圾回收

弱引用:进行垃圾回收时,会回收弱引用关联的对象

软引用:进行垃圾回收时,如果内存不足,会回收软引用关联的对象

虚引用:虚引用不会决定对象的生命周期,就和没有引用一样,随时可能会被垃圾回收

(引用队列……)

6.

Hashcode的作用(摘自冯立彬的博客讲解的很清楚):

以上这段官方文档的定义,我们可以抽出成以下几个关键点:

1、hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;

2、如果两个对象相同,就是适用于equals(Java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;

3、如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;

4、两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”。

7.

1.

String:不可变类

StringBuffer、StringBuilder:可变类

String类型的字符串是字符串常量,我们平常对于String类型的操作都是创建了新的String对象;而StringBuffer、StringBuilder类型的字符串是字符串变量,单纯操作字符串的时候没有新的对象生成

2.

StringBuffer:线程安全(synchronized关键字修饰)

StringBuilder:非线程安全

关于synchronized关键字,可以查看http://blog.csdn.net/luoweifu/article/details/46613015

3.

StringBuilder比StringBuffer快,而且大多数情况都是用在单线程情况,所以还是用StringBuilder比较多

8.

1.

HashMap:非线程安全

HashTable:线程安全(synchronized关键字修饰)

2.

HashMap允许有null的键、值,而HashTable键、值都不允许为null

3.

HashMap比HashTable快

9.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: