Java面试常见问答

经常会看到一些零碎的知识点,不足以成文章却害怕自己忘记,因此在这里记录一下.

PS:本文只为零碎的记录,不保证严谨,如果有人不小心看到,切记多看多想,不要当真

Java基础

1. 反射的用途以及实现

Java反射框架提供以下功能:

在运行时判断任意一个对象所属的类。
在运行时构造任意一个类的对象。
在运行时判断任意一个类所具有的成员变量和方法(通过反射设置可以调用private)。
在运行时调用任意一个对象的方法。

总的来说,反射功能可以在运行时动态的获取某个对象的类,实例化某个类的对象,或者调用某个对象的方法,主要应用在编写框架的时候.

2. HTTP请求的GET与POST方式的区别

我认为,GET和POST没有本质的区别,或者说在语法上没有本地的区别,有的仅是语义的区别.

绝大多数的功能,两个方法都可以实现,只是实现方式不同.

在语义的区别上,主要是RESTful风格的问题.

大家默认遵守一个定义,GET方法是幂等的,幂等有多种表现形式,比如,浏览器可以返回,卡了可以多刷几下.之类的.但是本质都是这个借口遵守了规范,对服务端的数据只进行了查询而没有进行修改.

而POST方法,在RESTful风格里用来对数据进行create操作,这无疑不是幂等的.

语义的对应关系:

GET—查找
POST—创建
PUT —更新
DELETE – 删除

3. session和cookie的区别

  1. session数据存储在服务端,cookie数据存储在客户端。
  2. session的大小限制与服务器的内存大小有关,cookie有大小限制和个数限制。
  3. cookie有安全隐患,通过拦截或本地文件找到cookie后可以进行攻击。
  4. dsession在服务器端保存一段时间才会销毁,如果session过多会增加服务器端压力。

4.JDK8的新特性

  1. stream
  2. optional
  3. 接口的静态方法和默认方法
  4. localdatetime
  5. currentHashMap£分段锁换成了cas,hashmap从链表换成红黑树.

Java集合类

5.List 和 Set 区别

  1. List内可以有重复元素,Set不可以
  2. List有序,Set无序

6. Arraylist 与 LinkedList 区别

  1. ArrayList使用数组实现,LinkedList使用链表实现
  2. ArrayList查询快,LinkedList添加删除快.
  3. 都是线程不安全的

7. ArrayList 与 Vector 区别

  1. Vector可以大概看成同步版的Arraylist,使用synchronized来保证方法同步.

8.HashMap 和 Hashtable 的区别

  1. HashTable对整个对象加锁来保证线程安全,不建议继续使用.
  2. HashMap + 锁 = HashTab

9.HashSet 和 HashMap 区别

  1. HashMap放的是键值对,HashSet是单个的对象
  2. 计算hash的时候,HashMap用的是键,HashSet用的是值(他只有值.).

10.HashMap 和 ConcurrentHashMap 的区别

  1. 线程安全和不安全的区别
  2. ConcurrentHashMap的实现原理可以看一下
  3. 底层的存储两者都一样

11.HashMap 的工作原理及代码实现,什么时候用到红黑树

  1. 工作原理在博客里面有
  2. 当单个节点的链表长度大于6时,会转成红黑树

12.多线程情况下HashMap死循环的问题

  1. 扩容时会有多线程问题

13.ConcurrentHashMap 的工作原理及代码实现,如何统计所有的元素个数

  1. 见博客

14. 看过那些Java集合类的源码

  1. List接口的三个实现类,Arraylist,LinkedList,Vector
  2. HashMap,ConCurrentHashMap,LinkedHashMap

Java线程





ChangeLog

2018-01-25

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:huyanshi2580@gmail.com

更多学习笔记见个人博客——>呼延十