JAVA题库(三)

1.java常用的数据结构有哪些?哪些是线程安全的?是怎么保证线程安全的?

答:

什么时候需要使用线程安全的数据结构?什么时候不需要?

1.常量,不需要线程安全。因为常量不会被修改。大家读取到的值一直都是不变的。大家无所谓先后或同时使用。

2.方法的局部变量,不需要线程安全。因为局部变量运行在每个线程自己专属的栈空间里。每个线程自己用自己的。

3.类的成员变量,分情况,如果是单例模式,则它的成员变量就会被多线程访问,则需要线程安全。否则一般不需要。

4.静态变量,需要线程安全。

1.ArrayList(内部实现是一个数组):

对应的线程安全的结构是Vector。它是利用synchronized同步锁机制进行实现,其实现方式与HashTable类似。
使用场景:
①.快速随机访问元素,比如不按顺序的,随机添加删除元素则不适合它。
②.需要一个不同步的基于索引的数据访问时,请尽量使用ArrayList。

2.LinkedList(内部实现是一个双向链表):

对应的线程安全的结构是ConcurrentLinkedQueue。
使用场景:插入和删除元素。
ConcurrentLinkedQueue应该算是在高并发环境中性能最好的队列;在多线程的队列应用场景中,强烈推荐使用。

3.HashMap(内部实现基于数组):

对应的线程安全的结构是HashTable和ConcurrentHashMap,HashTable通过对其方法函数进行synchronized修饰实现其特性,效率低下,目前已被jdk废弃,不再推荐使用。

4.LinkedHashMap:

在HashMap的基础上另外加一个链表把元素排上序。对应的线程安全的结构为ConcurrentLinkedHashMap。
使用场景:在需要按访问顺序或者插入顺序排序的时候可以用它,比如LRU算法。

5.TreeMap:

对应的线程安全的结构为ConcurrentSkipListMap。
使用场景:需要排序的map。

6.HashBasedTable(本质上是用HashMap>实现的)。

使用场景:当你用多个键做索引的时候,比如(x,y)这样一个坐标作为key就可以用它。

2.什么是java的反射机制?

答:Java反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象,都能够调用该对象的方法和属性,这种在运行时动态的获取信息以及动态调用对象的方法的功能称为Java的反射机制。

3.Cookie 和 Session的区别。

答:
1.cookie数据存放在客户的浏览器上,session数据放在服务器上。

2.cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

3.session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4.单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5.将登陆信息等重要信息存放在session中,其他信息如果需要保留,可以放在cookie中。

4.get 和 post请求的区别。

答:1.get在浏览器回退时是无影响的,而post会再次提交请求;
2.get请求在url中传递的参数是有长度限制的,而post没有;
3.get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息;
4.get请求只能进行url编码,而post支持多种编码模式;
5.get产生的url可以被添加到书签,而post不可以;
6.get请求参数会被完整保留在浏览器历史记录里,而post中的参数不会被保留;
7.对参数类型,get只接受ASCII字符,而post没有限制;
8.get参数通过url传递,post放在request body中;

4.IOC的优点是什么?

答:实现组件之间的解耦,提高程序的灵活性和可维护性。

5.为什么需要重写equals和hashCode方法?

答:在我们的业务系统中判断对象时有时候需要的不是一种严格意义上的相等,而是一种业务上的对象相等。在这种情况下,原生的equals方法就不能满足我们的需求了。
如果重写了equals方法而没有重写hashCode方法的话,则会违反相等的对象必须具有相等的散列码(hashCode)。

你可能感兴趣的:(JAVA题库(三))