好久没有来更新了,今天正好有空更新一篇,不知道正在准备面试的小伙伴有没有错过啊?肯定是没有,因为金三银四还没有来,今年开开心心过年,明年工作来一个大丰收!
1、SpringMVC的工作流程?
(1) 用户发送请求至前端控制器DispatcherServlet
(2) DispatcherServlet收到请求调用HandlerMapping处理器映射器。
(3) 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
(4) DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
(5) 执行处理器(Controller,也叫后端控制器)。
(6) Controller执行完成返回ModelAndView
(7) HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
(8) DispatcherServlet将ModelAndView传给ViewReslover视图解析器
(9) ViewReslover解析后返回具体View
(10) DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11) DispatcherServlet响应用户
2、垃圾回收的优点和原理。并考虑2 种回收机制。
答:Java 语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java 程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java 中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
3、jsp 有哪些动作?作用分别是什么?
答:JSP 共有以下6 种基本动作:
jsp:include:在页面被请求的时候引入一个文件;
jsp:useBean:寻找或者实例化一个JavaBean。;
jsp:setProperty:设置JavaBean 的属性。;
jsp:getProperty:输出某个JavaBean 的属性;
jsp:forward:把请求转到一个新的页面;
jsp:plugin:根据浏览器类型为Java 插件生成OBJECT 或EMBED 标记。
4、如何用Java实现阻塞队列?
首先,我们要明确阻塞队列的定义:
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。
阻塞队列的一个简单实现:
```
public class BlockingQueue {
private List queue = new LinkedList();
private int limit = 10;
public BlockingQueue(int limit){
this.limit = limit;
}
public synchronized void enqueue(Object item)throws InterruptedException {
while(this.queue.size() == this.limit) {
wait();
}
if(this.queue.size() == 0) {
notifyAll();
}
this.queue.add(item);
}
public synchronized Object dequeue() throws InterruptedException{
while(this.queue.size() == 0){
wait();
}
if(this.queue.size() == this.limit){
notifyAll();
}
return this.queue.remove(0);
}
}
```
在enqueue和dequeue方法内部,只有队列的大小等于上限(limit)或者下限(0)时,才调用notifyAll方法。如果队列的大小既不等于上限,也不等于下限,任何线程调用enqueue或者dequeue方法时,都不会阻塞,都能够正常的往队列中添加或者移除元素。