1、依赖注入时如何实现集合属性?
可以在定义Bean属性时,通过<list> <set> <map> <props> 分别为其注入列表、集合、映射、和键值都是字符串的映射属性。
2、在Web项目中如何获得Spring的IOC容器?
WebApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(servletContext)
3、网站前端优化的技术
浏览器访问优化:
a.减少HTTP请求数量:合并CSS、合并javaScript、合并图片(CSS Sprite)
b.使用浏览器缓存:通过设置HTTP响应头中的Cache-Control和Expires属性,将CSS、JavaScript、图片等在浏览器中缓存
c.CSS前置,JavaScript后置
d.CDN加速:CDN本质是缓存
e.反向代理
4、应用服务器优化技术
分布式缓存、异步操作、使用集群、代码优化:多线程(将对象设计成无状态对象、在方法内部创建对象、ThreadLocal将对象 线程绑定、并发访问合理加锁)、资源复用:单例模式、对象池(使用数据库连接池)
5、Spring框架中Bean的生命周期?
Sping ioc容器找到关于bean的定义并实例化该bean
对bean进行依赖注入,执行bean相关的操作、销毁(最好自己去百度更详细)
6、Spring中自动装配的方式
手动设置bean的依赖关系,不进行自动装配
byName进行自动装配
byType进行自动装配
constructor应用构造器的参数类型进行自动装配
7、Spring中如何用注解来配置bean,有哪些注解?
Spring配置文件:<context:component-scan base-package="org.example" />
使用@Component、@Controller、@Service、@Repository
8、如何在Web项目中配置Spring的IoC容器
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
9、Spring MVC的工作原理
客户端的所有请求都交给前端控制器DispatcherServlet来请求,收到请求后,将根据请求的信息包括URL、HTTP协议方法
请求头、请求参数、Cookie等以及HandleMapping的配置找到处理请求的Handler(对象) ,HandlerAdapter适配器对各种 Handler中的方法进行调用,Handler处理用户请求后,会返回一个ModelAndView对象给DispatcherServlet,它借助 ViewResolver完成视图解析工作然后利用视图对象对模型数据进行渲染响应给客户端。
10、使用Spring 框架的原因
非侵入式:支持POJO编程模式;
IoC容器:帮助应用程序管理对象以及对象之间的依赖关系,程序员不需要自己编写工厂、单例,对象之间的依赖关系发生变化
只需要修改配置文件不需要修改代码;
AOP面向切面编程:实现业务逻辑和系统服务之间的分离,不需要自己去写代理类,
通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术可以用在日志,加权限, 事物,异常管理等方面。
MVC、事务管理等
11、MyBatis中使用#和$占位符的区别
#将传入的数据当成字符串,会对传入的数据自动加上引号;$会将传入的数值直接给SQL语句中。
注意:使用$可能导致SQL注射攻击,能用#就用#,写order by 的时候用$。
12、Spring中Bean的作用域有哪些?
早期:singleton(单例)、prototype(每次从容器调用Bean时,都会返回一个新的实例)
增加的:request(每次HTTP请求都会创建一个新的Bean)、session(同一个HttpSession共享同一个Bean)
globalSession(同一个全局Session共享一个Bean)
13、AOP的连接点、切点、增强、引介、织入、切面概念 (自己百度)
14、Hibernate Session加载实体对象的过程?
一级缓存通过实体的类型和主键进行查找,命中合法直接返回;
一级缓存中没命中,会在当前的NonExists记录中查询;
一级缓存失败则在二级缓存中查找
一级二级缓存都失败直接发出SQL语句
根据映射配置和SQL语句得到ResultSet,并创建对应的实体对象
将对象纳入一级缓存的管理,如果有对应的拦截器,执行拦截器的OnLoad方法
如果开启了二级缓存,则纳入二级缓存中
返回数据对象;
15、锁机制,hibernate的悲观锁和乐观锁?
业务逻辑执行过程中对数据的访问,通过一些机制保证此过程中数据被锁住不会被外界修改,这就是锁机制
悲观锁和乐观锁自己百度
16、实体对象的三种状态以及转化关系?
Hibernate:瞬时态、持久态、游状态、移除态(最新Hibernate的四种状态)
瞬时态:当一个实体对象new后,对象就处于瞬时态,一个保存临时数据的内存区域,如果没有变量引用这个对象则被JVM
垃圾回收机制回收。这个对象保存的数据和数据库没有任何关系,通过Session的save() saveorUpdate()等方法把瞬时态
对象与数据库关联,并把数据更新到数据库中,这个对象才转换为持久态对象。
持久态:对象的实例在数据库中有对应的记录,拥有一个持久化标识ID,对持久态对象进行删除后,数据库中对应的记录
也会删除,那持久态对象与数据库记录不存在对应关系,持久态对象变成移除态(瞬时态)
游离态:当Session进行close() clear()等后,实体对象从持久态变成游离态,对象虽然拥有与数据库对应记录的标识,但是
因为对象已经从会话中清除,对象不在持久化管理内,所以处于游离态(托管态)
17、Hibernate常见的优化策略
制定合理的缓存策略(二级缓存、查询缓存)
查询缓存:将HQL和SQL语句查询的结果作为键值对 进行缓存,默认关闭。
尽量使用延迟加载
开启hibernate.show_sql查看SQL语句,开发后关闭此选项
数据库本身优化,合理的索引
乐观锁代替悲观锁
18、什么是WebService?(不想写,自己去百度)
表面说是一个应用程序,调用这个应用程序不需要了解它的细节,跟调用者使用的编程语言没有关系,它是基于HTTP协议传 输数 据。
SOA概念:面向服务的架构思想,将应用程序的不同功能单元通过中立的锲约联系起来,独立于硬件平台、操作系统和编程
语言,使得各种形式的功能单元能够更好的集成。Web Service是SOA的一种较好解决方案。
19、java领域的Web Service框架
CXF 、JBoss SOA、Jersey、Axis2、Hessian、Turmeric等
20、ORM
对象关系映射,是一种为了解决程序的面向对象模型与数据库的关系模型匹配问题的技术,在XML文件或者注解使用,将
对象自动持久化到关系数据库中,关系数据库表中的行转化成Java对象。
21、Hibernate中的SessionFactory和Session线程安全问题
SessionFactory对应hibernate的一个数据存储概念,线程安全,可以多个线程并发访问。一般启动的时候构建。
Session是一个轻量级非线程安全的对象,线程间不能共享session。
22、EL表达式的隐式对象及作用
pageContext、initParam(访问上下文参数)、param(访问请求参数)、paramValues、header、headerValues、cookie
applicationscope、sessionScope、requestScope、pageScope
23、JSP页面的动态包含和静态包含
静态包含是通过JSP的include指令包含页面,
动态包含是通过JSP标准动作<jsp:forward>包含页面。
静态包含是编译时包含,如果包含的页面不存在则会产生编译错误,
而且两个页面的"contentType"属性应保持一致,因为两个页面会合二为一,
只产生一个class文件,因此被包含页面发生的变动再包含它的页面更新前不会得到更新。
动态包含是运行时包含,可以向被包含的页面传递参数,
包含页面和被包含页面是独立的,会编译出两个class文件,
如果被包含的页面不存在,不会产生编译错误,也不影响页面其他部分的执行。
代码如下所示:
<%-- 静态包含 --%>
<%@ include file="..." %>
<%-- 动态包含 --%>
<jsp:include page="...">
<jsp:param name="..." value="..." />
</jsp:include>
24、JSP和Servlet是什么关系?
Servlet是一个java程序,运行在服务器的JVM中,依靠服务器的支持向浏览器提供显示内容。
JSP本质是一个Servlet的一种简易形式,JSP会被服务器处理成一个类似于Servlet的java程序,可以简化页面内容的生成。
Servlet应用于控制逻辑,JSP侧重于视图。