Java面试知识点整理

来源:互联网 发布:js中input设置默认值 编辑:程序博客网 时间:2024/05/17 05:20

今天看了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 boolean 1(sure?) 2 true/false Boolean byte 1 255 -2^7~2^7-1 Byte short 2 65536 -2^15~2^15-1 Short char 2 65536(Unicode编码) 0~2^16-1 Character int 4 2^32-1 -2^31~2^31-1 Integer long 8 2^64-1 -2^63~2^63-1 Long float 4 - 3.4e-45~1.4e38(精度) Float double 8 - 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异常equalsObject中与==是一样的,子类一般需要重写该方法hashCode该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到getClassfinal方法,获得运行时类型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.

原创粉丝点击