【JavaWeb项目实现】+【经常使用框架】(待整理)

1. 开发必备工具:前端

1. Maven java

    Maven 核心功能就是合理叙述项目间的依赖关系,经过pom.xml配置jar包信息。通常使用三种方式:本地仓库、第三方仓库、中央仓库。git

2. Svn/git面试

 

 

2. SSM:  Spring + SpringMVC + MyBatisspring

一、Spring:是一个开源的Java/ Java EE全功能栈应用程序框架。轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。可经过AOP和log4j实现自定义日志系统。sql

①、基于JavaBeans 的采用控制反转的配置管理,使得应用程序的组建更加快捷简易。数据库

②、一个可用于从applet到JavaEE不一样运行环境的核心Bean工厂。编程

Spring:后端

 

依赖注入是一种思想,或者说是一种设计模式,在java中经过反射机制实现,与具体框架无关,依赖注入(DI)有三种方式:接口注入、Setter注入、构造方法注入。  设计模式

依赖注入 是为了减小目的组件之间的 耦合度,使开发变得简单。

Spring: 基于xml文件配置

<!--配置事务管理器-->
    <Property name=”transactionManger”>
 <!--配置事务属性>
    <Property name=”transactionAttributes”>
<Prosp>

声明式事务管理创建在AOP上,其本质是对方法先后进行拦截。在目标方法开始以前建立或者加入一个事务,在执行完目标方法以后根据执行状况提交或者回滚事务。

 优势:不须要经过编程的方式管理事务,只须要在配置文件中作相关的事务规则声明(或经过@Transactional注解方式将事务应用到逻辑中)。

 

二、SpringMVC:分离了控制器、模型对象、分派器以及程序对象的角色。易于其余的view框架,采用IoC便于测试。MVC做为WEB项目开发的核心环节,C(控制器)、V(视图、用户客户端)、M(模型、业务)。

  MVC的功能实现 图示:

 

DispatcherServlet 做为SpringMVC的前端控制器,负责接收用户请求并根据请求返回视图给用户,业务操做在service层。

 

三、MyBatis

MyBatis:是一个基于Java的持久层框架,支持定制化SQL、存储过程以及高级映射。避免了几乎全部的JDBC代码和手动设置参数以及获取结果集。MyBatis可使用简单的XMl或注解来配置和映射原生信息,将接口和Java的POJOs(普通Java对象)映射成数据库中的记录。

MyBatis的功能:

 

 

四、JavaWeb项目:

天猫商城项目梳理:

  总体的架构,springMVC的实现,三个重要的功能实现,三个主要的难点。

SSM框架的通常实现流程图: 

 

面试题:

1.Spring中AOP的应用场景、Aop原理、好处?

答:AOP--Aspect Oriented Programming面向切面编程;用来封装横切关注点,具体能够在下面的场景中使用:

Authentication 权限、Caching 缓存、Context passing 内容传递、Error handling 错误处理、Lazy loading懒加载、Debugging调试、logging, tracing, profiling and monitoring 记录跟踪优化 校准、Performance optimization 性能优化、Persistence 持久化、Resource pooling 资源池、Synchronization 同步、Transactions 事务

原理:AOP是面向切面编程,是经过动态代理的方式为程序添加统一功能,集中解决一些公共问题。

优势:1.各个步骤之间的良好隔离性耦合性大大下降 
           2.源代码无关性,再扩展功能的同时不对源码进行修改操做 

2.Spring中IOC的做用与原理?对象建立的过程。

答:IOC--Inversion of Control控制反转。当某个角色须要另一个角色协助的时候,在传统的程序设计过程当中,一般由调用者来建立被调用者的实例对象。但在spring中建立被调用者的工做再也不由调用者来完成,所以称为控制反转。建立被调用者的工做由spring来完成,而后注入调用者 直接使用。

3.介绍spring框架

   它是一个一站式(full-stack全栈式)框架,提供了从表现层-springMVC到业务层-spring再到持久层-springdata的一套完整的解决方案。咱们在项目中能够只使用spring一个框架,它就能够提供表现层的mvc框架,持久层的Dao框架。它的两大核心IoC和AOP更是为咱们程序解耦和代码简洁易维护提供了支持。

4.Spring常见建立对象的注解?

答:

@Component=>将这个类交给 spring管理

 @Controller =>标注 这是个 控制层  

@ Service => 标注 这是个 服务层

@ Repository =>标注数据访问对象,例如Dao对象

5.Spring中用到的设计模式

答:简单工厂、工厂方法、单例模式、适配器、包装器、代理、观察者、策略、模板方法

详细介绍:请参考本微博的:开发经常使用设计模式

6.Spring的优势?

 

答:

1.下降了组件之间的耦合性 ,实现了软件各层之间的解耦 

2.可使用容易提供的众多服务,如事务管理,消息服务等 

3.容器提供单例模式支持 
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 
5.容器提供了众多的辅助类,能加快应用的开发 
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 
7.spring属于低侵入式设计,代码的污染极低 
8.独立于各类应用服务器 
9.spring的DI机制下降了业务对象替换的复杂性 
10.Spring的高度开放性,并不强制应用彻底依赖于Spring,开发者能够自由选择spring 的部分或所有 

7.Spring Bean的做用域之间有什么区别?

Spring容器中的bean能够分为5个范围。全部范围的名称都是自说明的,可是为了不混淆,仍是让咱们来解释一下:

singleton:这种bean范围是默认的,这种范围确保无论接受到多少个请求,每一个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。

prototype:原形范围与单例范围相反,为每个bean请求提供一个实例。

request:在请求bean范围内会每个来自客户端的网络请求建立一个实例,在请求完成之后,bean会失效并被垃圾回收器回收。

Session:与请求范围相似,确保每一个session中有一个bean的实例,在session过时后,bean会随之失效。

global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工做时,它包含不少portlet。若是你想要声明让全部的portlet共用全局的存储变量的话,那么这全局变量须要存储在global-session中。

全局做用域与Servlet中的session做用域效果相同。

8.Spring管理事务有几种方式?

答:有两种方式:

一、编程式事务,在代码中硬编码。(不推荐使用)

二、声明式事务,在配置文件中配置(推荐使用)

声明式事务又分为两种:

a、基于XML的声明式事务

b、基于注解的声明式事务

9.spring中自动装配的方式有哪些?

答:一、 No:即不启用自动装配。

二、 byName:经过属性的名字的方式查找JavaBean依赖的对象并为其注入。好比说类Computer有个属性printer,指定其autowire属性为byName后,Spring IoC容器会在配置文件中查找id/name属性为printer的bean,而后使用Seter方法为其注入。

三、 byType:经过属性的类型查找JavaBean依赖的对象并为其注入。好比类Computer有个属性printer,类型为Printer,那么,指定其autowire属性为byType后,Spring IoC容器会查找Class属性为Printer的bean,使用Seter方法为其注入。

四、 constructor:通byType同样,也是经过类型查找依赖对象。与byType的区别在于它不是使用Seter方法注入,而是使用构造子注入。

五、 autodetect:在byType和constructor之间自动的选择注入方式。

六、 default:由上级标签<beans>的default-autowire属性肯定。

10.spring中的核心类有那些,各有什么做用?

答:BeanFactory:产生一个新的实例,能够实现单例模式

BeanWrapper:提供统一的get及set方法

ApplicationContext:提供框架的实现,包括BeanFactory的全部功能

11.Bean的调用方式有哪些?

答:有三种方式能够获得Bean并进行调用: 
一、使用BeanWrapper 
    HelloWorld hw=new HelloWorld(); 
    BeanWrapper bw=new BeanWrapperImpl(hw); 
    bw.setPropertyvalue(”msg”,”HelloWorld”); 
    system.out.println(bw.getPropertyCalue(”msg”)); 
二、使用BeanFactory 
    InputStream is=new FileInputStream(”config.xml”); 
    XmlBeanFactory factory=new XmlBeanFactory(is); 
    HelloWorld hw=(HelloWorld) factory.getBean(”HelloWorld”); 
    system.out.println(hw.getMsg()); 
三、使用ApplicationConttext 
    ApplicationContext actx=new FleSystemXmlApplicationContext(”config.xml”); 
    HelloWorld hw=(HelloWorld) actx.getBean(”HelloWorld”); 
    System.out.println(hw.getMsg());

12.什么是IOC,什么又是DI,他们有什么区别?

答:依赖注入DI是一个程序设计模式和架构模型, 一些时候也称做控制反转,尽管在技术上来说,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另一个对象来提供一个特殊的能力,例如:把一个 数据库链接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行建立一个链接。控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外 部以减小依赖

应用控制反转,对象在被建立的时候,由一个调控系统内全部对象的外界实体,将其所依赖的对象的引用,传递给它。也能够说,依赖被注入到对象中。所 以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。

13.spring有两种代理方式:

答: 若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。

      优势:由于有接口,因此使系统更加松耦合

      缺点:为每个目标类建立接口

若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。

      优势:由于代理类与目标类是继承关系,因此不须要有接口的存在。

      缺点:由于没有使用接口,因此系统的耦合性没有使用JDK的动态代理好。

14.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响应用户

15.Springmvc的优势

答:1.它是基于组件技术的.所有的应用对象,不管控制器和视图,仍是业务对象之类的都是 java组件.而且和Spring提供的其余基础结构紧密集成.

2.不依赖于Servlet API(目标虽是如此,可是在实现的时候确实是依赖于Servlet的)

3. 能够任意使用各类视图技术,而不只仅局限于JSP

4 . 支持各类请求资源的映射策略

5 .它应是易于扩展的

 

 

 

备用知识:

 

五、Hibernate

Hibernate使用了Java反射机制实现透明性。

Hibernate鼓励使用双向一对多关联,不使用单向一对多关联。

优化Hibernate 的七大举措:

1)尽可能使用many--to--one,避免使用单向one--to--many

2)灵活使用单向one--to--one

3)多对一代替一对一

4)配置对象缓存,不使用集合缓存

5)一对多使用Bag,多对一使用Set

6)继承使用显式多态HQL: from Object polymorphism=”exlicit” 避免查处全部对象

7)消除大表,使用二级缓存

Hibernate 中的Get和load的区别:

 一、get()采用当即加载方式,而load()采用延迟加载。

  get()方法,当即向数据库发出查询语句,而load()方法返回的是一个代理(只有id属性)只有真正使用属性时,才会执行查询。

一、若是数据库没有响应的记录,get()方法会返回null,而load()方法会抛出异常ObjectNotFoundException。

hibernate2 和 Hibernate3 的区别:

Hibernate2延迟加载实现:a)实体对象,b)集合(Collection)

Hibernate3提供了属性的延迟加载功能,只有真正使用时,才执行sql查询,节省了服务器的内存开销,从而提升了服务器的性能,它是一个基于JDBC的主流持久层框架,是一个优秀的ORM实现,它很大程度简化了DAO层的编码工做。