JAVA面试题第一阶段总结
1、描述Servlet调用过程
答:1、在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址。
2、浏览器根据ip地址和端口号访问服务器,组织http请求信息发送给服务器。
3、服务器收到请求后首先根据Host请求头判断当前访问的是哪台虚拟主机。
4、服务器根据http请求头中的请求URI判断当前访问的是哪个web应用。
5、服务器根据http请求头的请求URI判断当前访问的是web应用中的那个web资源
6、检查web应用的web.xml文件,如果根据路径找到具体的servlet处理类的全路径类名交给该servlet处理,如果找不到就交给默认servlet处理。
7、这个过程中浏览器只知道自己发出来http请求,不久就收到了http响应,浏览器不知道也不关心服务器内部是如何处理的。浏览器和服务器之间的关系是非常单纯的,只有HTTP协议。
8、解析请求、封装RequestResponse对象、创建servlet、调用service方法都是服务器自动进行的,开发人员只需要写好servlet配置进容器中即可,无需操心具体的底层实现。
2、简述Servlet生命周期(重)
答:1、Servlet第一次被访问到时创建对象,创建出来之后立即执行init方法执行初始化操作。
2、从此以后该对象一直驻留在内存中为后续的对这个Servlet的请求进行服务。
3、知道服务器关闭或web应用移除出容器,随着web应用的销毁Servlet对象销毁掉,在销毁之前调用destory方法执行善后工作。
4、在存活期间,每次对Servlet的调用都会导致Service方法执行。
3、什么是HTTP协议?
答:http协议就是一套基于tcp/ip协议的应用层协议。简单来说,就是一个基层应用层的通信规范,双发要进行通信,大家都要遵守一个规范,这个规范就是http协议。它规定了客户端(通常是浏览器)和服务器之间的通信方式。
4、HTTP协议工作原理?
答:HTTP协议基于请求响应模型。一次请求对应一次响应。首先客户端发送一个请求(request),服务器在接收到这个请求后生成一个响应(response)返回给客户端。
5、HTTP协议的特点是什么?
答:1、他是一个无状态的协议,服务器端在处理响应请求后不会保留任何客户端的信息,每次请求都是独立的。
2、客户端与服务器端的每一次数据交互,都要经过一次请求响应的过程
3、服务器端无法识别能够触发客户端请求的方法。
4、一个典型的HTTP请求分为 一个请求行 若干请求头 一个空行 实体内容
6、get和post请求的区别?(重)
答:1、get请求用来从服务器上获得资源,而post是用来想服务器提交数据
2、get将表单中的数据按照name=value的形式添加到action所执行的地址后面,用?连接,而各个 变量之间使用&连接,post将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所执行的地址
3、get传输的数据要收到URL长度限制1024字节;而post可以传输大量的数据,post数据没有限制,上传文件通常使用post方式
4、使用get时参数会显示在地址栏上,如果不是敏感数据可以使用get,对于敏感数据应该使用post
5、get使用MIME类型application/x-www-form-urlencoded的URL编码文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是%20
6、jsp页面中的form标签里的method属性为get是调用doGet(),为post时调用doPost()
7、请求乱码产生的原因?(重)
答:浏览器用什么码表来打开表单页面就用什么编码来发送数据。当前我们的注册页面指定了用utf-8来打开。这就决定了浏览器是用utf-8打开的页面,浏览器在提交表单时使用utf-8编码的。而tomcat默认情况下会使用iso8859-1来进行解码。全世界的码表都兼容iso8859-1所以英文处理没有问题但是iso8859-1不支持中文无法处理的字节都用?代替,所以会出现乱码。
8、如何来处理get请求产生的乱码?
答:由于客户端发送来使用的是utf-8编码而服务器用iso8859-1解码造成了乱码,虽然字符已经乱掉了,但底层的字节仍然是正确的,我们只要将乱码字符getBytes(“iso8859-1”)转换为字节,就是正确的字节,再将这些字节new String(bytes,“utf-8”)按照正确的码表编码,就可以转换成正确的字符,从而解决乱码。
9、request生命周期(重)
答:request对象的生命周期是针对一个客户端的一次请求,当请求完毕之后,request里面的内容也将被释放,一个请求开始时创建,请求结束会销毁。
10、如何处理响应乱码?(重)
答:通过response.setHeader(“Content-Type”,“text/html;charset=utf-8”)方法,通知服务器发送数据时的码表;通过response.setCharacterEncoding(“utf-8”)方法,通知浏览器解析时使用的码表,两码相同就不会有乱码了。
11、简述ServletContext生命周期?
答:ServletContext对象代表当前web应用。当服务器启动时,服务器在启动时会一次加载web应用,每一个web应用加载完成后都会创建一个ServletContext对象唯一代表该web应用,这个对象一直存活,直到web应用移除出容器或服务器关闭时,随着应用的销毁ServletContext对象跟着销毁。
12、转发与重定向的比较?(重)
答:转发是服务器内部资源跳转,重定向是浏览器跳转访问。
转发一次请求一次响应,重定向两次请求两次响应。
转发地址栏不发生变化,重定向地址栏会发生变化。
转发之前和转发之后request是一个,重定向之前和之后不是一个request。
13、Session生命周期?(重)
答:当程序第一次调用到request.getSession()代码时,服务器明确知道了需要用到session,因此创建session。如果session超过30分钟没人使用,服务器认为这个session超时了,销毁session。明确的调用session.invalidate(),session立即销毁。
服务器被非正常关闭或web应用被移除出容器,此时随着web应用的销毁session销毁。如果是正常关闭,session会被钝化,当下次服务器正常启动时,没有超时的session还会被活化回来。
14、session的原理?
答:session的原理:在服务器第一次调用request.getSession()方法的时候,会在内存中创建一个session对象,此对象具有一个独一无二的id值,此id值会以cookie的形式发送给浏览器,浏览器每次访问都会带着这个cookie,服务器就利用此cookie区分浏览器找到对应的session空间。
15、cookie和session的区别?(重)
答:cookie数据存放在客户的浏览器上,session的数据存放在服务器上。
cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能,考虑到减轻服务器压力,应当使用cookie。
16、JSP和Servlet是什么关系?
答:Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容。JSP本质上是Servlet的一种简易形式,JSP会被服务器处理成一个类似Servlet的Java程序,可以简化页面内容的生成。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。有人说Servlet就是在Java中写HTML,而JSP就是在HTML中写Java代码,当然这个说法不够准确,JSP侧重于视图,Servlet更侧重于控制逻辑。
17、JSP的九大隐式对象是哪九个?(重)
答:1.request:请求对象在javax.servlet.ServletRequest作用域为Request来自客户端的请求如form表单中的信息,常用的方法有getParameter,getParamterName,getParameterValue通过调用获取请求对象中的参数值。
2.response表示服务端的响应。
3.pageContext独享为页面的上下文对象,代表当前运行页面的一些属性。
4.session:对象代码服务器与客户端所建立的会话
5.application对象负责提供应用程序在服务端运行时的一些全局信息
6.out:与response不同,通过out对象发送的内容是浏览器需要显示的内容,还可以直接向客户端编写一个有程序动态生成的HTML文件。
7.page:page里的变量没法从index.jsp传递到test.jsp只要页面跳转了,就不见了
8.exception:他是一个例外的对象,当页面发生了列外,就会创建该对象
9.config是在servlet初始化的时候JSP引擎向他传递信息用的,此消息包括servlet初始化时所需要的参数。
18、如何防止SQL注入攻击?(重)
答:SQL注入就是通过把SQL命令插入到web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它就是利用现有应用程序,将恶意的sql语句注入到后台数据库引擎执行的能力,它可以通过在web表单中输入恶意sql语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
防止的方法:1.对用户的输入进行校验,可以通过正则表达式或者限制长度,对单引号和双–进行转换
2.不要使用动态拼接sql语句,使用参数化的申请了或者直接使用存储过程进行数据查询存取。
3.不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接
19、MYSQL数据库优化(重)
答:1.查询时,能不用* 就不用,尽量写全字段名
2.索引不是越多越好,每个表控制在6个索引以内,。范围where条件的情况下,索引不起作用
3.大部分情况连接效率远大于子查询,但是有例外。当你对连接查询的效率都感到不能接受的时候可以试试子查询。
4.多用explain和profile分析查询语句
5.有时候可以1条大的SQL可以分成几个小的SQL顺序执行
6.连接时注意 小表 join 大表的规则
7.每隔一段时间用 alter table table_name engine=innodb 优化表
8.查看慢查询日志,找出执行时间长的SQL进行优化
9.尽量避免使用order by
10.因为where子句后面的条件执行顺序是从右到左,所以尽量把能过滤掉大部分数据的条件放在最后
20、Filter的作用是什么?
答:init为初始化方法,在Filter对象被创建出来时,Servlet容器会调用该方法对filter进行初始化
destory为销毁方法,在过滤器对象被销毁之前,服务器会调用这个方法执行善后工作
doFilter为过滤器最核心的方法,对访问的请求和响应进行拦截,当过滤器拦截到对资源访问时,服务器会自动调用该方法执行过滤代码,我们只需要在这个方法中涉及过滤器的逻辑代码即可。
21、Filter的生命周期
答:当服务器启动,web应用加载后,立即创建出这个web应用中的所有过滤器对象,创建出来后立即调用过滤器的init方法执行初始化操作。从此这些过滤器对象驻留在内存中为后续的拦截进行服务,每当拦截到资源时,都会导致dofilter方法执行。最终直到服务器关闭或web应用移除出容器时,随着web应用的销毁,过滤器对象销毁,销毁之前调用destory方法执行善后工作。
22、什么是数据库的连接池及其工作原理
答:对于共享资源,有一个很著名的设计模式:资源池。该模式正是为了解决资源的频繁分配,释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从缓冲池中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量,使用情况,为系统开发、测试及性能调整提供依据。
23、如何自己实现一个数据库连接池
答:思路如下:1.利用class实现DataSource接口
2.在class的构造器一次性创建指定的连接将连接保存LinkedList中
3.实现getConnection从LinkedList返回一个链接
4.提供将连接返回方法
Public class MyDataSource inplements DataSource{
Private LinkedList<Connection> dataSource=new LinkedList<>();
Public MyDataSource(){
For( int a=0;a<1000;a++){
Try{
DriverManager.registerDriver(new SQLServerDriver());
Connection con=DriverManager.getConnection(“jdbc:sqlserver://localhost:1443;DatabaseName=liming”,”root”,”liming”
}catch(Exception e){}
}
}
Public Connection getConnetion(){
Final Connection conn=dataSource.removeFirst();
}
Public void releasConnection(Connection conn){
dataSource.add(conn);
}
}
}
24、http和https的区别?(重)
答:http协议传输的数据都是未加密的,也就是明文的,因此使用http协议传输隐私信息非常不安全,为了保证这些隐私数据能够加密传输,于是网景公司设计了SSL协议用于对http协议传输的数据进行加密,从而就诞生了https。简单来说,https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
25、Servlet的单例问题
答:Servlet是一个供其他Java程序调用的类,它不能独立运行,针对客户端的多次请求,通常情况下,Servlet只会创建一个Servlet实例对象,一旦创建它就会驻留在内存中,为后续的请求提供服务,直至退出web应用为止,也就是当我们关闭了浏览器之后我们的Servlet就终止了。
当Servlet第一次访问的时候,就被加载到内存中,以后该实例对各个请求服务,每次情况会调用一次service方法。因为Servlet是单例的,所以会出现线程安全问题。
26、“”和null的区别?(重)
答:null是内存根本没创建对象,不能调用方法。空串表示存在一个字符串对象,只是是空串长度是0。
27、Servlet的多线程同步问题
答:Servlet本身是单实例的,这样当多个用户同时访问某个Servlet时,会访问唯一的Servlet实例中的成员变量,如果对成员变量进行写入操作,那就会导致Servlet的多线程问题,即数据不一致。
1.解决Servlet多线程同步问题的最好方式:去除实例变量,使用局部变量。不使用成员变量,从而使用局部变量,因为局部变量在每个线程中都有各自的实例。
2.使用同步代码块synchronized{}
3.Servlet实现javax.servlet.SingleThreadModel,Servlet2.4中已经废弃了该接口,此时Servlet容器将保证Servlet实例以单线程方式运行,也就是说,同一时刻,只会有一个线程执行Servlet 的service()方法。
28、request.getParameter()和request.getAttribute()的区别?(重)
答:request.getParameter()获取的类型是String,request.getAttribute()获取的类型是Object
request.getParameter获取到的是post、get传递的参数值和URL中的参数request.getAttribute获取的是对象容器中的数据值、对象。
29、JSP中动态include和静态include的区别?
答:静态include:<%@include file=“文件名” %>相当于赋值,编辑时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护。
动态include:<jsp:include page=“文件名”>,能够自动检查被包含文件,当客户端对JSP文件进行请求时,会重新将对应的文件包含进来,进行实时的更新。
30、详细描述MVC
答:基于Java的web应用系统采用MVC设计模型,即Model模型,view视图和Controller控制成立设计,这是web应用服务系统的主流设置方向。
Model是处理业务逻辑模块。View负责页面显示,显示Model的处理结果给用户,主要实现数据到页面的转换过程。Controller负责每个请求的分发,把Form数据传递给Model进行处理,处理完成后,把结果返回给相应的View显示给用户。
31、EL表达式的功能,为什么要用EL表达式?(重)
答:功能:从域对象中取出数据并显示。从请求参数取出数据并显示。
原因:在页面中使用JSP脚本和JSP表达式来获取数据显示比较麻烦。
32、如何防止表单重复提交?
答:使用session技术:
1.在页面中生成一个随机值,将其保存到session中,同时将其保存为表单的隐藏域的值。
2.在处理注册的请求时,获取session中的值,获取请求参数的值,比较两者是否相同,如果相同说明不是重复提交,请求通过同时删除session中保存的值,如果不相同则是重复提交,不能通过。
33、什么是web容器?
答:web容器时一种服务程序,给处于其中的应用程序组件提供一个环境,使其中组件直接跟容器中的变量交互,不必关注其他系统问题。
34、J2EE常用的设计模式?说明工厂模式(重)
答:Java中一共有23种设计模式:
Factory工厂模式,Builder建造模式,Factory Method工厂方法模式,Singleton单例模式
Bridge桥梁模式,FlyWeight享元模式,Proxy代理模式,Visitor访问者模式
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某个类的实例,通常一组类中有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后定义一个工厂类,工厂类可以根据条件生成不同的子类实例,当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪个子类的实例。
35、什么是事务?
答:事务是作为一个逻辑单元执行的一系列操作,一个逻辑单元必须具有四个属性,称为ACID原子性、一致性、隔离性、持久性。
原子性:事务必须是原子工作单元,对于其数据修改,要么执行,要么全部不执行。
一致性:事务在完成时,必须使所有的数据保持一致的状态,在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构都必须是正确的。
隔离性:由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一并发事务修改它之后的状态,事务不会查看中间状态的数据,这称之为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性:事务完成后,它对于系统的影响是永久性的。该修改即使穿线系统故障也将一直保持。
36、数据库几种隔离级别?(重)
答:四种:
1、Serializable(串行性):可避免脏读,不可重复读,幻读的发生
2、Repeatable read(可重复度):可避免藏独,不可重复的的发生
3、Read committed(读已提交):可避免脏读的发生
4、Read uncommitted(读未提交):最低级别,任何情况都无法保证
37、简述web.xml的作用
答:属于部署描述符,在整个Java中只要是容器都会存在部署描述符,此部署描述符可以控制整个WEB中各个组件的运行状态,也可以配置整个窗口的状态。
38、sql优化:(索引、范式)
答:三范式:
第一范式:确保每列保持原子性,最基本范式,数据库表中所有字段值都是不可分解的原子性,就满足了第一范式。
第二范式:确保表中的每列都和主键相关,在第一范式上更近一层。确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关,也就是说一个表中只能保存一种数据,不可以把多种数据保存在一张表中。
第三范式:确保每列都和主键列直接相关,不是间接相关。
索引:避免对索引字段进行计算、避免索引在字段上使用not <> !=,避免在索引上使用is null 和not null 避免在索引上出现数据类型转换、避免索引字段使用函数、避免简历索引的列出现空值。
39、Ajax原理
答:Ajax的工作原理相当于在用户和服务器之间加了一个中间层,使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像一些数据验证和数据处理等都交给Ajax引擎自己来做,只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。
Ajax其核心只有JavaScript、XMLHTTPRequest和DOM,在旧的交互方式中,由用户触发一个HTTP请求到服务器,服务器对其进行处理后,再返回一个新的HTML页到客户端,每当服务器处理客户端提交的请求时,客户都只能空闲等待,并且哪怕只是一次很小的交互、只需从服务器端得到很简单的一个数据,都要返回一个完整的HTML也,而使用Ajax后用户从感觉上几乎所有的操作都会很快响应没有页面重载的等待。
40、JDBC的原理
36、SQL注入攻击(重)
答:SQL注入是一种将SQL代码添加到输入参数中,传递到服务器解析并执行的一种攻击手法。SQL注入攻击是输入参数未经过滤,然后直接拼接到SQL语句中解析,执行达到预想之外的一种行为,称之为SQL注入攻击。
37、如何防止SQL注入攻击(重)
答:利用新对象PreparedStatement对象完成,先将SQL骨架发送给数据库服务器,然后再将参数单独发给服务器,并将参数中的关键字当做一个普通字符串来处理,进而起到防止SQL注入的问题。
43、对连接池的理解
答:用来提高程序的效率,创建一个容器,容器中存放已经获取到了的数据库连接对象,对外提供获取连接和还回连接的方法,外界需要时就从容器中获取,用完就还回容器中。
44、HTML和XML的区别
答:XML是可扩展标记语言,而HTML是超文本标记语言,不同之处:
1.语法有所不同,XML语法较为严谨而HTML语法比较松散。
2.用途不同,XML主要用于数据格式化存储而HTML主要用于网页的编辑。
45、在JS中"= =“和”==="的区别
答:简单来说:==代表相同,= = =代表严格相同,为啥这么说呢
当进行= =比较的时候先检查两个操作数的数据类型,如果类型相同再进行= = =比较,如果不同,自动帮你进行一次类型转换在进行= = =的比较,而= = = 比较时,如果类型不同直接false。
46、SQL优化(重)
答:1.Select子句中避免使用 *
2.SQL语句用大写的
3.用IN来代替OR
4.减少子查询,使用关联查询
5.较少使用IN 或者NOT IN使用exists,not exists或者关联查询语句代替
6.OR的查询尽量用UNION或者UNION ALL代替
7.合理的增加冗余的字段(减少表的连接查询)
8.增加中间表进行优化(这个主要是在统计报表的场景)
47、Tomcat配置,部署优化
答:1、内存优化:Tomcat依赖于JVM,可以配置JVM的内存配置
2、最大连接数配置(并发能力)
通常搭配Nginx提升Tomcat的并发性能
48、自动刷新,定时刷新(重)
答:自动刷新不仅可以实现一段时间之后自动跳转到另一个页面,还可以实现一段时间之后自动刷新本页面。Servlet中通过HttpServletResponse对象配置Header属性实现自动刷新,例如:
Response.setHeader(“Refresh”,“1000;URL=http://localhost:8080/servlet/example.html”);
其中1000为时间,单位为毫秒,URL指定要跳转的页面。
49、BS和CS的区别(重)
答:1.CS用户固定需要有固定的操作系统,BS有操作系统和浏览器就行与操作系统平台无关
2.CS客户端的计算机电脑配置要求较高。BS对计算机配置要求较低。
3.CS每一个客户端都必须安装和配置软件,客户端不必安装,使用浏览器访问,已推广
BS架构最大的优点就是可以在任何地方进行操作而不用安装专门的软件。
4.CS客户端需要升级程序,BS不用安装和维护
5.CS一般面向相对固定的用户群,程序更加注重流程,它可以对权限进行多层次校验,提供了更安全的存取模式,对信息安全的控制能力很强。一般高度机密的信息系统采用CS架构更好。
50、事务有哪些特性(重)
答:事务的特性ACID
原子性:Atomic 数据操作的最小单元是事务,而不是sql语句
一致性:Consistency 转账前后总额不变
隔离性:Isolation 一个事务进行中时,另一个事务不能操作数据
持久性:Durancy 事务提交之后,数据持久生效
51、html和jsp的区别及优缺点
答:HTML文本标记语言,他是静态页面和javaSeript一样是解释性语言,为什么说是解释性语言呢?因为,只要你有一个浏览器name它就可以正常显示出来,而不需要指定的编译工具。
JSP是Java服务端的页面,所以它是动态的,它是需要经过JDK编译后把内容发给客户端去显示,Java文件编译后会产生一个class文件,最终执行这个class文件,JSP先转译成一个Servlet文件,然后再编译成class文件。
1.HTML能直接打开,jsp只能发布到Tomcat等服务器才能打开
2.HTML页面是静态的可以直接运行,JSP是动态页面运行时需要转换成servlet
3表头不同,jsp表头:<%@ page language=“java” import=“java.util.*” pageEncoding=“gbk”%>在表头有编码格式和导入包等。
4.在jsp中用<%%>可以写java代码,而html不能。
52、HTML和Servlet的异同
答:不同:HTML是静态,Servlet是动态,HTML页面由服务器直接返回,Servlet是用来处理客户请求,并返回html页面,Servlet需要服务器调用servlet方法生成动态html页面,且需要在web.xml中配置url路径。
53、request,response,session和application是怎么用的
答:1.request是客户端向服务端发送请求
2.response是服务器对客户端请求作出响应
3.session在servlet中不能直接使用,需要通过getSession()创建,如果没有设定它的生命周期,或者通过iinvildate()方法销毁,关闭浏览器session就会消失
4.application不能直接创建,存在于服务器的内存中,由服务器创建和销毁。
54、request和session的取值区别,以及出现乱码的解决方法(不能在java代码中设置)
答:1.request可以通过getAttribute方法直接取值,也可通过getParameter方法取值
2.session需要通过request.getSession().getAttribute()才能取值
3.request是针对一次请求,session是针对整个会话
4.在页面通过contentType,pageEncoding,content设置编码格式,必须要一致
55、Spring在ssm中起什么作用?(重)
答:Spring:轻量级框架,
作用:Bean工厂,用来管理Bean的生命周期和框架集成
两大核心:1.IOC/DI(控制反转/依赖注入)把dao依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory。
2.AOP面向切面编程。
56、Spring的配置文件中的内容?(重)
答:开启事务注解驱动
事务管理器
开启注解功能,并配置扫描包
配置数据库
配置sql会话工厂,别名,映射文件
不用编写Dao层的实现类
57、Spring主要使用了什么模式(重)
答:工厂模式:每个Bean的创建通过方法
单例模式:默认的每个Bean的作用域都是单例
代理模式:关于AOP的实现通过代理模式
58、Struts2和SpringMvc的区别?
答:入口不同:
Struts2:filter过滤器
SpringMvc:前端控制器
开发方式不同:
Struts2:基于类开发,传递参数通过类的属性,只能设置为多例
SpringMvc:基于方法开发,请求参数传递到方法形参,可以为单例也可以为多例
请求方式不同:
Struts2:栈存储请求和响应的数据,通过OGNL存取数据
SpringMvc:通过参数解析器将request请求内容解析,给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面,jsp视图解析器默认使用jstl。
59、Mybatis的好处
答:把sql语句从java中独立出来
封装了底层的JDBC,API的调用,并且能够将结果集自动转换成JavaBean对象,简化了Java数据库编程的重复工作。自己编写Sql语句,更加灵活。入参无需用对象封装或Map封装,使用@Param注解