求职复习系列10 面试题

HashMap和HashTable、ConcurrentHashMap区别?

相同点:

  1. HashMap和Hashtable都实现了Map接口
  2. 都可以存储key-value数据

不同点:

  1. HashMap可以把null作为key或value,HashTable不可以
  2. HashMap线程不安全,效率高。HashTable线程安全,效率低。
  3. HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。

ConcurrentModificationException异常出现的原因

public class Test {

public static void main(String[] args) {

ArrayList<integer> list = new ArrayList<integer>();/<integer>/<integer>

list.add(2);

Iterator<integer> iterator = list.iterator();/<integer>

while(iterator.hasNext()){

Integer integer = iterator.next();

if(integer==2)

list.remove(integer);

}

}

}

执行上段代码是有问题的,会抛出ConcurrentModificationException异常。

原因:调用list.remove()方法导致modCount和expectedModCount的值不一致。

final void checkForComodification() {

if (modCount != expectedModCount)

throw new ConcurrentModificationException();

}

解决办法:在迭代器中如果要删除元素的话,需要调用Iterator类的remove方法。

public class Test {

public static void main(String[] args) {

ArrayList<integer> list = new ArrayList<integer>();/<integer>/<integer>

list.add(2);

Iterator<integer> iterator = list.iterator();/<integer>

while(iterator.hasNext()){

Integer integer = iterator.next();

if(integer==2)

iterator.remove(); //注意这个地方

}

}

}

2. java线程池用过没有?

Executors提供了四种方法来创建线程池。

  1. newFixedThreadPool() :创建固定大小的线程池。
  2. newCachedThreadPool(): 创建无限大小的线程池,线程池中线程数量不固定,可根据需求自动更改。
  3. newSingleThreadPool() : 创建单个线程池,线程池中只有一个线程。
  4. newScheduledThreadPool() 创建固定大小的线程池,可以延迟或定时的执行任务。

、Servlet API中forward()与redirect()的区别?

1.从地址栏显示来说

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。

2.从数据共享来说

forward:转发页面和转发到的页面可以共享request里面的数据.

redirect:不能共享数据.

redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源.

forward方法只能在同一个Web应用程序内的资源之间转发请求.forward 是服务器内部的一种操作.

redirect 是服务器通知客户端,让客户端重新发起请求.

所以,你可以说 redirect 是一种间接的请求, 但是你不能说"一个请求是属于forward还是redirect "

3.从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

4.从效率来说

forward:高.

redirect:低.

request.getAttribute()和 request.getParameter()有何区别?

1,request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据。

request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。

2,getAttribute是返回对象,getParameter返回字符串

3,getAttribute()一向是和setAttribute()一起使用的,只有先用setAttribute()设置之后,才能够通过getAttribute()来获得值,它们传递的是Object类型的数据。而且必须在同一个request对象中使用才有效。,而getParameter()是接收表单的get或者post提交过来的参数

jsp有哪些内置对象?作用分别是什么?

JSP共有以下9个内置的对象:

1,request 用户端请求,此请求会包含来自GET/POST请求的参数

2,response 网页传回用户端的回应

3,pageContext 网页的属性是在这里管理

4,session 与请求有关的会话期

5,application servlet 正在执行的内容

6,out 用来传送回应的输出

7,config servlet的构架部件

8,page JSP网页本身

9,exception 针对错误网页,未捕捉的例外

jsp和servlet的区别、共同点、各自应用的范围?

JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。

Servlet和JSP最主要的不同点在于:Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。

JSP侧重于视图,Servlet主要用于控制逻辑。在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.

SQL查询出来的结果分页展示一般怎么做?

Oracle:

select * from

(select *,rownum as tempid from student ) t

where t.tempid between ” + pageSize*(pageNumber-1) + ” and ” + pageSize*pageNumber

MySQL:

select * from students limit ” + pageSize*(pageNumber-1) + “,” + pageSize;

sql server:

select top ” + pageSize + ” * from students where id not in +

(select top ” + pageSize * (pageNumber-1) + id from students order by id) +

“order by id;

谈谈你对Spring的理解。

1.Spring是实现了工厂模式的工厂类(在这里有必要解释清楚什么是工厂模式),这个类名为BeanFactory(实际上是一个接口),在程序中通常BeanFactory的子类ApplicationContext。Spring相当于一个大的工厂类,在其配置文件中通过<bean>元素配置用于创建实例对象的类名和实例对象的属性。/<bean>

2. Spring提供了对IOC良好支持,IOC是一种编程思想,是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦,IOC也称为DI(Depency Injection)。

3. Spring提供了对AOP技术的良好封装, AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码,例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP。


分享到:


相關文章: