Java面试题收录

来源:互联网 发布:淘宝商城weimeixiaowu 编辑:程序博客网 时间:2024/05/01 01:16
一.SpringMVC的工作流程

这里写图片描述
工作流程 :
1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet调用HandlerAdapter处理器适配器
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户

二.http请求中文乱码解决
(1)post请求中文参数乱码
在项目下的web.xml文件中添加字符集过滤器,代码如下

<filter>    <filter-name>CharacterEncodingFilter</filter-name>    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>    <init-param>        <param-name>encoding</param-name>        <param-value>utf-8</param-value>    </init-param></filter><filter-mapping>    <filter-name>CharacterEncodingFilter</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>

(2)get请求中文参数乱码
修改tomcat目录下的conf/server.xml的Connector节点,添加URIEncoding=”utf-8”参数

<Connector  URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

三.进程与线程的区别
定义:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
特点:
1.一个进程可以拥有很多个线程,但每个线程只属于一个进程。
2.线程相对进程而言,划分尺度更小,并发性能更高。
3.进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而及大地提高了小程序的运行效率。
4.线程必须依赖应用,在应用中调度,每个线程必须执行的入口、出口、执行序列,线程是不能独立存在运行的。
5、精彩是资源分配的基本单位,线程是处理机调度的基本单位,所有的线程共享其所属进程的所有资源和代码。
6、多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

四、为什么要重写hashcode()和equal() 方法
在hashset中不允许出现重复对象,元素的位置也是不确定的。在hashset中又是怎样判定元素是否重复的呢?判断两个对象是否相等的规则是:
. 1),判断两个对象的hashCode是否相等
如果不相等,认为两个对象也不相等,完毕,如果相等,转入2
.2),判断两个对象用equals运算是否相等
如果不相等,认为两个对象也不相等 ,则把对象散列到其他位置
如果相等,认为两个对象相等(equals()是判断两个对象是否相等的关键)

五:sql执行顺序
逻辑查询处理阶段简介

FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1
ON:对VT1应用ON筛选器。只有那些使为真的行才被插入VT2。
OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
WHERE:对VT3应用WHERE筛选器。只有使为true的行才被插入VT4.
GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.
CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.
HAVING:对VT6应用HAVING筛选器。只有使为true的组才会被插入VT7.
SELECT:处理SELECT列表,产生VT8.
DISTINCT:将重复的行从VT8中移除,产生VT9.
ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).
TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。

原创粉丝点击