框架面试笔试问答题

框架面试笔试问答题
1.应用服务器有哪些?
答:Weblogic、Websphere、Jboss
2.说出数据连接池的工作机制是什么?
答:J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

3.Hibernate工作原理
答:1.通过Configuration config = new Configuration().configure();//读取并解析 hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的读取并解析映射信息
3.通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory
4.Session session = sf.openSession();//打开Sesssion
5.Transaction tx = session.beginTransaction();//创建并启动事务Transation
6.persistent operate操作数据,持久化操作
7.tx.commit();//提交事务
8.关闭Session
9.关闭SesstionFactory
4.Hibernate的查询方式有几种,请分别写出来。
答:hql查询,sql查询,QBC条件查询
HQL: Hibernate Query Language. 面向对象的写法:
Query query = session.createQuery(“from Customer where name = ?”);
query.setParameter(0, “苍老师”);
Query.list();
QBC: Query By Criteria.(条件查询)
Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.eq(“name”, “花姐”));
List list = criteria.list();
SQL:
SQLQuery query = session.createSQLQuery(“select * from customer”);
List<Object[]> list = query.list();
SQLQuery query = session.createSQLQuery(“select * from customer”);
query.addEntity(Customer.class);
List list = query.list();
5.Strut2的工作原理。
答:客户端初始化一个指向Servlet容器(例如Tomcat)的请求
这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);
接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请求是否需要调用某个Action;
如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy;
ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类;
ActionProxy创建一个ActionInvocation的实例。
ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。
6.Spring的AOP和IOC的实现原理。
答:
IoC(Inversion of Control)
(1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。 对于Spring而言,就是由Spring来控制对象的生命周期和对象之间的关系;IoC还有另外一个名字——“依赖注入(Dependency Injection)”。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,即由容器动态地将某种依赖关系注入到组件之中。
(2). 在Spring的工作方式中,所有的类都会在spring容器中登记,告诉spring这是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
(3). 在系统运行中,动态的向某个对象提供它所需要的其他对象。
(4). 依赖注入的思想是通过反射机制实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。 总而言之,在传统的对象创建方式中,通常由调用者来创建被调用者的实例,而在Spring中创建被调用者的工作由Spring来完成,然后注入调用者,即所谓的依赖注入or控制反转。 注入方式有两种:依赖注入和设置注入; IoC的优点:降低了组件之间的耦合,降低了业务对象之间替换的复杂性,使之能够灵活的管理对象。
AOP(Aspect Oriented Programming)
(1). AOP面向方面编程基于IoC,是对OOP的有益补充;
(2). AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了 多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的 逻辑或责任封装起来,比如日志记录,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
(3). AOP代表的是一个横向的关 系,将“对象”比作一个空心的圆柱体,其中封装的是对象的属性和行为;则面向方面编程的方法,就是将这个圆柱体以切面形式剖开,选择性的提供业务逻辑。而 剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹,但完成了效果。
(4). 实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
(5). Spring实现AOP:JDK动态代理和CGLIB代理 JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成对目标对象的代理;其核心的两个类是InvocationHandler和Proxy。 CGLIB代理:实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类。CGLIB是高效的代码生成包,底层是依靠ASM(开源的java字节码编辑类库)操作字节码实现的,性能比JDK强;需要引入包asm.jar和cglib.jar。 使用AspectJ注入式切面和@AspectJ注解驱动的切面实际上底层也是通过动态代理实现的。
7.请描述或者代码示例JDBC查询某个表的过程,并描述Hibernate与iBatis的作用以及它们之间的区别。
答:构建JDBC应用程序涉及以下六个步骤
1)加载数据库驱动,通常使用Class类的forName()静态方法来加载驱动。
2)获取数据库连接。
3)通过Connection对象创建预编译语句对象PrepareStatement对象并设置参数
4)执行查询、更新语句,执行后返回结果
5)如果执行的SQL语句是查询语句,则遍历结果集
6) 回收数据库资源,包括关闭ResultSet、Statement和Connection等资源。

ibatis和hibernate框架的作用和区别
MyBatis是一个数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现
Hibernate是一个基于jdbc的开源的持久化框架,是一个全自动化的ORM实现,它很大程度的简化了dao层编码工作。Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

ibatis
1、是一个SQL语句映射的框架(工具)
2、注重POJO与SQL之间的映射关系。不会为程序员在运行期自动生成 SQL
3、自动化程度低、手工映射SQL,灵活程度高.
4、需要开发人员熟炼掌据SQL语句

Hibernate

1、主流的ORM框架、提供了从 POJO 到数据库表的全套映射机制
2、会自动生成全套SQL语句。
3、因为自动化程度高、映射配置复杂,api也相对复杂,灵活性低.
4、开发人同不必关注SQL底层语句开发

  1. 请描述Spring整合myBatis的主要过程。
    答:
    一:导入jar包
    二:创建实体类及数据库对应的表
    public class User {

    private int id;
    private String name;
    private Date birthday;
    private double salary;

    //set,get方法
    }

    CREATE TABLE user(
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    user_name VARCHAR(30),
    user_birthday DATE,
    user_salary DOUBLE
    )

三:mapper接口及对应的映射文件
UserMapper接口实现基本的crud功能
import com.mybatis.beans.User;
public interface UserMapper {
void save(User user);
void update(User user);
void delete(int id);
User findById(int id);
List findAll();
}

对应实体类的userMapper.xml文件

<?xml version="1.0" encoding="UTF-8"?>             
                   

  
                                            
                               
    
  
               
                                          
        insert into user(name, birth, salary) values(#{name},#{birth},#{salary}) 
                                                                        
                                                                        
                                                                            
四:Spring的配置文件:beans.xml
<?xml version="1.0" encoding="UTF-8"?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
    
    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
        
    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
        
    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
    
    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
    
    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
五:测试
@RunWith(SpringJUnit4ClassRunner.class) //启用spring的测试框架    
@ContextConfiguration("/beans.xml") //加载spring配置文件          
public class MbtSpTest {                                          
                                                                  
    @Autowired  //自动注入mapper接口                              
    private UserMapper userMapper;                                
                                                                  
    @Test                                                         
    public void test() {                                          
        User user = new User(-1, "Luxi", new Date(), 2000.00);    
        userMapper.save(user);                                    
    }                                                             
                                                                  
}      

9.简述你在项目中如何实现图片上传。
	答:可以使用Apache的common-fileupload组件进行上传。当然也可以使用其他方式,如ftp上传等,可以用Apache下的common-net工具包。剩下的就是在servlet、spring等框架中如何使用这些上传工具包。这些框架都有接口实现在那里。调用就可以。

10.简述你在项目中如何实现文件下载。
	答:我们要将Web应用系统中的文件资源提供给用户进行下载,首先我们要有一个页面列出上传文件目录下的所有文件,当用户点击文件下载超链接时就进行下载操作,下载的时候根据文件路径用字符流的方式打开文件,  然后不断的读取内容不断的输出,写到客户端(浏览器)。

11.简述你在项目中如何实现分页。
答:每页10条数据,当前是第10页,当前条目ID的最大值是109,最小值是100.那么跳到第9页:select * from dept where deptno<100 order by desc limit 0,10;那么跳到第8页:select * from dept where deptno<100 order by desc limit 10,10

12.一个项目中使用了Spring框架,有什么作用?
	答:Spring的好处包括
1)Spring能有效地组织你的中间层对象;
    2)Spring能消除在许多工程中常见的对Singleton的过多使用;
    3)通过一种在不同应用程序和项目间一致的方法来处理配置文件,消除各种自定义格式的属性文件的需要,仅仅需要看看类的JavaBean属性。Inversion of Control的使用帮助完成了这种简化;(使用的是type2的IoC)
   4)能够很容易培养你面向接口而不是面向类的编程习惯。(这也算。。。)
   5)Spring的设计会让使用它创建的应用尽可能少的依赖于它的APIs,在Spring应用中的大多数业务对象没有依赖于Spring。
   6)使用Spring构建的应用程序易于单元测试;
   7)Spring使EJB成为一个实现选择,而不是必需的选择。你可以用POJOs或local EJBs来实现业务接口,却不会影响到调用代码。
  8)Spring提供一些web应用上的EJB的替代方案,比如用AOP提供声明性事务管理;
  9), Spring为数据存取提供了一个一致的框架,不论是使用JDBC还是O/R mapping的产品(Hibernate,JDO)。
13.DAO层的作用是什么。
	答:DAO层,Data Access Object,专门用来封装我们对于实体类的数据库的访问,就是增删改查,不加业务逻辑。
	当我们有了DAO层之后,UserManager就不要再去用Hibernate实现或者用XML实现或者用JDBC实现,我们应该调UserDAO。也就是说在Service层里,我们应该去调用UserDAO。可以保留一个UserDAO的实例对象,然后调用error()的时候,可以通过UserDAO的方法去查,调用别的什么方法的时候,可以通过UserDAO的方法去查等等。
	因为Service层实现连接数据库可以用好几种方法,如Hibernate、XML、JDBC。。。所以我们的UserDAO不能够写死。如果写死了,就意味着在Service层里调的UserDAO就是死的,UserDAO还是访问数据库的,也就是访问数据库的方式被写死了。白话讲,就是连接数据库的那部分代码如果想换,就得重写!!!为了防止麻烦,将UserDAO写成接口。接口可以有多种多样的实现,比如用Hibernate、用XML、用JDBC。。。。
	这就是DAO层的作用,将连接数据库的业务逻辑进行封装,如果换了一种连接数据库的方式,可以直接换,不用再重写代码了。

14.DAO层、业务层,分层的意义是什么?
	答:我们开发程序的目的是为了完成业务功能, 理想的情况下程序中的每一条语句都应该是与业务直接相关的, 例如程序中不应该出现连接数据库, 读取某个字段等纯技术性的操作, 而应该是得到用户A的基本信息等具有业务含义的操作. dao(data access object)层存在的意义在于将与数据持久化相关的函数调用剥离出去, 提供一个具有业务含义的封装层. 原则上说, dao层与utils等帮助类的功能非常类似, 只是更加复杂一些, 需要依赖更多的对象(如DataSource, SessionFactory)等. 如果不需要在程序中屏蔽我们对于特定数据持久层技术的依赖, 例如屏蔽对于Hibernate的依赖, 在dao层我们没有必要采用接口设计. 一些简单的情况下我们甚至可以取消整个dao层, 而直接调用封装好的一些通用dao操作函数, 或者调用通用的EntityDao类等。
程序开发的过程应该是从业务对象层开始的, 并逐步将纯技术性的函数调用剥离到外部的帮助类中, 同时我们会逐渐发现一些业务操作的特定组合也具有明确的含义, 为了调用的方便, 我们会把它们逐步补充到service层中。在一般的应用中, 业务逻辑很难稳定到可以抽象出接口的地步, 即一个service接口不会对应于两个不同的实现, 在这种情况下使用接口往往也是没有必要的。

15.什么是Spring?SpringMVC又是什么,和Spring有什么区别?
答:
spring是一个开源框架,功能主要是依赖注入和控制反转。
依赖注入有三种形式
1、构造注入(bytype)
2、setter注入
3、接口注入(byname) 而控制反转则主要是起到操控作用,把对象的创建,初始化,销毁交给spring容器来处理。面向切面(把功能分离出来)实现共用。
spring MVC类似于struts是负责前台和后台的交互,在MVC模型里面充当控制层,负责接收前端的请求,并调用模型层,并根据模型层返回不同的结果返回到不同页面及把数据给前端渲染展示,还有就是spring可以集成许多工具,像数据库配置,缓存配置,定时器配置等等都是在spring中完成的,而spring MVC是做不到的,spring MVC是spring的子框架。
16.请简述下Hibernate、Mybatis、JDBC之间的区别?
答:
从层次上看,JDBC是较底层的持久层操作方式,而Hibernate和MyBatis都是在JDBC的基础上进行了封装使其更加方便程序员对持久层的操作。
从功能上看,JDBC就是简单的建立数据库连接,然后创建statement,将sql语句传给statement去执行,如果是有返回结果的查询语句,会将查询结果放到ResultSet对象中,通过对ResultSet对象的遍历操作来获取数据;Hibernate是将数据库中的数据表映射为持久层的java对象,实现数据表的完整性控制;MyBatis是将sql语句中的输入参数和输出参数映射为java对象,放弃了对数据表的完整性控制,但是获得了更灵活和响应性能更快的优势。
从使用上看,如果进行底层编程,而且对性能要求极高的话,应该采用JDBC的方式;如果要对数据库进行完整性控制的话建议使用Hibernate;如果要灵活使用sql语句的话建议采用MyBatis框架。
17.什么是事务?在项目中有使用过事务吗?有什么作用?
答:
通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示。
当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。
通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。
18.在MyBatis中,${…}和#{…}的区别是什么?
答:
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
3. #方式能够很大程度防止sql注入。 
4.$方式无法防止Sql注入。
5.$方式一般用于传入数据库对象,例如传入表名.
6.一般能用#的就别用$.
MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
19.谈谈你熟悉的集中ORM框架,并进行比较。
答:mybatis和hibernate
MyBatis是一个数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现
Hibernate是一个基于jdbc的开源的持久化框架,是一个全自动化的ORM实现,它很大程度的简化了dao层编码工作。Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
对比:
mybatis
1、是一个SQL语句映射的框架(工具)                                   
2、注重POJO与SQL之间的映射关系。不会为程序员在运行期自动生成 SQL     
3、自动化程度低、手工映射SQL,灵活程度高.                             
4、需要开发人员熟炼掌据SQL语句                                       
                                                                     
    Hibernate
1、主流的ORM框架、提供了从 POJO 到数据库表的全套映射机制
2、会自动生成全套SQL语句。
3、因为自动化程度高、映射配置复杂,api也相对复杂,灵活性低.
4、开发人同不必关注SQL底层语句开发
20.写出SpringMVC的五个注解,并说出他的含义及实际中你使用的情况。
答:
1、@Controller
     @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了	@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用		@RequestMapping 注解的方法才是真正处理请求的处理器。
@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。这个时候就需要我们把这个控制器类交给Spring 来管理。有两种方式可以管理
2、@RequestMapping
 RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。返回值会通过视图解析器解析为实际的物理视图,对于 InternalResourceViewResolver 视图解析器,会做如下的解析:通过 prefix + returnVal + suffix 这样的方式得到实际的物理视图,然后做转发操作;
3、@Resource和@Autowired
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。
1、共同点
  两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
2、不同点
 (1)@Autowired
    @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
4、@PathVariable
 用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。
5、@CookieValue
  作用:用来获取Cookie中的值;
  参数: value:参数名称   required:是否必须  defaultValue:默认值
21.@Resource和@Autowired的区别?
答:共同点:
  装配bean. 写在字段上,或写在setter方法
不同点:
@Autowired  默认按类型装配 ,依赖对象必须存在,如果要允许null值,可以设置它的required属性为false   
@Autowired(required=false)也可以使用名称装配,配合@Qualifier注解
publicclass TestServiceImpl {
		@Autowired@Qualifier("userDao")
		privateUserDaouserDao; 
		
	 }  
@Resource  默认按名称进行装配,通过name属性进行指定
publicclass TestServiceImpl {
	// 下面两种@Resource只要使用一种即可
	@Resource(name="userDao")
	privateUserDaouserDao; // 用于字段上    
	@Resource(name="userDao")
	publicvoid setUserDao(UserDao userDao) { // 用于属性的setter方法上
	this.userDao = userDao;
	    }
	}
22.WEB应用中存在哪些安全性泄露?该怎么防止?

答:根据2010年OWASP发布的Web应用程序安全风险主要是SQL注入攻击、跨网站脚本、伪造客户端请求、Cookie盗取,传输层保护不足。 
1 SQL注入攻击 
  随着B/S框架结构在系统开发中的广泛应用,恶意攻击者利用SQL命令在Web表单中输入合法的字符或查询字符串来欺骗服务器执行SQL命令。当注入攻击得逞后,Web程序将泄露大量用户隐私数据和数据库中数据结构。攻击者能够获得系统较高的访问权限,进行破坏操作。 
    解决方法:
    数据库安全通信包括SQL注入攻击的防范、安全设置、异常信息处理三个方面。
    1.服务端Filter对访问者输入的字符进行过滤检验,但是攻击者经常把危险字符潜藏在用户输入的有效字符中完成过滤检验。
    2.通过正则表达式对页面的文本框输入的数据进行限制可以减少过滤检验存在的漏洞。
    3.使用prepareStatment预编译sql语句
2 跨网站脚本 
 跨网站脚本(简称XSS)是当前恶意破坏者主要选择的攻击手段之一。XSS通过网页开发时留下的安全漏洞,注入恶意的指令代码,影响其他用户对网站的访问,同时获得用户的合法信息。受XSS攻击的网站通常是由JavaScript、ActiveX和普通的HTML设计的。 
    解决方法:
    1.输入过滤。对用户的所有输入数据进行检测,比如过滤其中的“<”、“>”、“/”等可能导致脚本注入的特殊字符,或者过滤“script”、“javascript”等脚本关键字,或者对输入数据的长度进行限制等等。同时,我们也要考虑用户可能绕开ASCII码,使用十六进制编码来输入脚本。因此,对用户输入的十六进制编码,我们也要进行相应的过滤。只要能够严格检测每一处交互点,保证对所有用户可能的输入都进行检测和XSS过滤,就能够有效地阻止XSS攻击。
    2.输出编码。通过前面对XSS攻击的分析,我们可以看到,之所以会产生XSS攻击,就是因为Web应用程序将用户的输入直接嵌入到某个页面当中,作为该页面的HTML代码的一部分。因此,当Web应用程序将用户的输入数据输出到目标页面中时,只要用HtmlEncoder等工具先对这些数据进行编码,然后再输出到目标页面中。这样,如果用户输入一些HTML的脚本,也会被当成普通的文字,而不会成为目标页面HTML代码的一部分得到执行。
3 伪造客户端请求(Cross-site request forgery)
 伪造客户端请求(简称为CSRF)是通过用户浏览器向存在安全漏洞的Web服务器发送带有Cookie信息的请求,来替换文件地址达到自动链接的目的。 
解决方法:
    1.验证码。几乎所有人都知道验证码,但验证码不单单用来防止注册机的暴力破解,还可以有效防止CSRF的攻击。验证码算是对抗CSRF攻击最简洁有效的方法。但使用验证码的问题在于,不可能在用户的所有操作上都需要输入验证码.只有一些关键的操作,才能要求输入验证码。不过随着HTML5的发展。利用canvas标签,前端也能识别验证码的字符,让CSRF生效。
 2.Token。CSRF能攻击成功,根本原因是:操作所带的参数均被攻击者猜测到。既然知道根本原因,我们就对症下药,利用Token。当向服务器传参数时,带上Token。这个Token是一个随机值,并且由服务器和用户同时持有。当用户提交表单时带上Token值,服务器就能验证表单和session中的Token是否一致。 
4 Cookie盗取
     通过XSS攻击,由于注入代码是在受害者的浏览器上执行,因此能够很方便地窃取到受害者的Cookie信息。比如,我们只要注入类似如下的代码:
    

当受害者的浏览器执行这段脚本的时候,就会自动访问攻击者建立的网站www.attackpage.com,打开其中的recourd.asp,将受害者浏览器的Cookie信息给记录下来。这样,攻击者就得到了用户的Cookie信息。得到受害者的Cookie信息后,攻击者可以很方便地冒充受害者,从而拥有其在目标服务器上的所有权限,相当于受害者的身份认证被窃取了。
解决方法:
1.我们要尽可能地避免在Cookie中泄露隐私,如用户名、密码等;其次,我们可以将Cookie信息利用MD5等Hash算法进行多次散列后存放
2.为了防止重放攻击,我们也可以将Cookie和IP进行绑定,这样也可以阻止攻击者冒充正常用户的身份。
5 传输层保护不足
 当数据在传输层进行网络传输时,由于采用了简单或传统的加密算法,数据保密性和完整性很容易被破坏。攻击者利用密码、密钥、会话令牌等进行非法操作。
解决方法:
1.使用https替换http协议
2.保证SSL的提供商只支持强大的算法,这样就不能够被轻易破解。(使用标准的强算法)
3.确保您的证书是有效的,不过期,不被撤销,并匹配这个网站使用的所有域。
23. 讲述Springmvc的执行流程?
答:1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作。
2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
3.DispatcherServlet请请求提交到目标Controller
4.Controller进行业务逻辑处理后,会返回一个ModelAndView
5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
6.视图对象负责渲染返回给客户端。
24.讲述下你所理解的事务是什么?在SSM框架中是怎么实现事务的?
答:事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
在SSM框架中,使用的是Spring的事务管理机制。Spring可以使用编程式实现事务,声明式实现事务以及注解式实现事务。
25.写出mybatis批量插入代码。
答://获取sqlsession
//从spring注入原有的sqlSessionTemplate
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
// 新获取一个模式为BATCH,自动提交为false的session
// 如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false);
//通过新的session获取mapper
fooMapper = session.getMapper(FooMapper.class);
int size = 10000;
try{
for(int i = 0; i < size; i++) {
Foo foo = new Foo();
foo.setName(String.valueOf(System.currentTimeMillis()));
fooMapper.insert(foo);
if(i % 1000 == 0 || i == size - 1) {
//手动每1000个一提交,提交后无法回滚
session.commit();
//清理缓存,防止溢出
session.clearCache();
}
}
} catch (Exception e) {
//没有提交的数据可以回滚
session.rollback();
} finally{
session.close();
}
spring+mybatis
26.说明Spring中定时的使用。
答:Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,使用Quartz,这是一个功能比较强大的的调度器每隔指定时间则触发一次,在Quartz中对应的触发器为:org.springframework.scheduling.quartz.SimpleTriggerBean
每到指定时间则触发一次,在Quartz中对应的调度器为:org.springframework.scheduling.quartz.CronTriggerBean
注:并非每种任务都可以使用这两种触发器,如java.util.TimerTask任务就只能使用第一种。Quartz和spring task都可以支持这两种触发条件。
27.描述常用的Spring中的AOP注解。
答:AOP主要用于日志记录,性能统计,安全控制(权限控制),事务处理,异常处理等。将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
  Spring AOP织入增强(Advice)的方式有两种 如果连接点实现了接口采用jdk自带的动态代理的形式实现织入,如果连接点没有实现接口则采用动态字节码生成技术(CGLIB)实现织入。
AOP常用术语:
连接点(Joinpoint)
  增强程序执行的某个特定位置(要在哪个地方做增强操作)。Spring仅支持方法的连接点,既仅能在方法调用前,方法调用后,方法抛出异常时等这些程序执行点进行织入增强。
切点(Pointcut)
  切点是一组连接点的集合。AOP通过“切点”定位特定的连接点。通过数据库查询的概念来理解切点和连接点的关系再适合不过了:连接点相当于数据库中的记录,而切点相当于查询条件。
增强(Advice)
  增强是织入到目标类连接点上的一段程序代码。表示要在连接点上做的操作。
切面(Aspect)
  切面由切点和增强(引介)组成(可以包含多个切点和多个增强),它既包括了横切逻辑的定义,也包括了连接点的定义,SpringAOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的链接点中。
28.什么是SQL注入,如何避免。
答:所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。
避免:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。
29.有没有使用过日志,日志分几个级别,简单描述。
答:日志记录器(Logger)是日志处理的核心组件。log4j具有5种正常级别(Level)。日志记录器(Logger)的可用级别Level (不包括自定义级别 Level),
static Level WARN
WARN level表明会出现潜在错误的情形。
static Level ERROR
ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。
static Level FATAL
FATAL level指出每个严重的错误事件将会导致应用程序的退出。
另外,还有两个可用的特别的日志记录级别: (以下描述来自log4j APIhttp://jakarta.apache.org/log4j/docs/api/index.html):
static Level ALL
ALL Level是最低等级的,用于打开所有日志记录。
static Level OFF
OFF Level是最高等级的,用于关闭所有日志记录。
日志记录器(Logger)的行为是分等级的。如下表所示:
分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来,也是说大于等于的级别的日志才输出。
日志记录的级别有继承性,子类会记录父类的所有的日志级别。
30.简要描述Maven的作用,Maven项目与普通项目的区别。
答:maven项目和普通web项目的区别主要有定义和作用的不同,分别是:
定义不同:
maven是一个项目管理工具,maven项目通常指的是通过maven来管理项目的方式;
普通web项目是网页的编码项目,需要在服务器上运行。
作用不同:
maven由项目对象模型、标准集合、项目生命周期和依赖关系管理系统构成,可以经过项目对象模型描述信息来管理项目的构建、报告和文档,还可以生成站点和管理JAR文件;
web是建立在Internet上的一种网络服务,包含了超文本、超媒体和超文本传输协议,可以提供图形化的直观的网页浏览界面,信息可以实时更新。
31.说明SpringMVC有哪些重要的注解,描述其作用。
@Controller 用于标注一个类是Controller类,是处理请求逻辑的类,该类会被DispatcherServlet所识别,并完成相应的依赖注入。@RequestMapping 分为类和方法上两种,类上的该注解将表明该类处理的根URL方法上的该注解将和类上的注解一起构成该方法要处理的URL路径@RequestParam 用于方法中的方法参数签名,用于自动完成参数的传递,将请求参数自动传递到参数中。
@ResponseBody:处理器功能处理方法的返回值作为响应体(通过HttpMessageConverter进行类型转换);
@PathVariable:请求URI中的模板变量部分到处理器功能处理方法的方法参数上的绑定
32.Mybatis实现一对多有几种方式,怎么操作?
有两种方式
第一种可以通过resultMap的方式
比如人和地址的关系,是1:n的关系,1个人可以有多个收件地址
在animal的实体类里面,会有多个地址
List

list=new ArrayList
();
2.在Address实体里面,一个地址有对应所属的一个人
现在在查询人的时候,希望可以查出 每个人的所有地址信息
这个过程是我们手动的去映射结果到Animal对象的过程
property 表示的是实体类里面的属性,column表示的是查询语句select后面的字段名,如果是ID就用ID,其他的用result,对于集合,就用collection

ofType 表示的是集合里面的实体类类型









select a.aid as aid1,a.aname,a.sexid,a.age,ad.addressId,ad.addressInfo from animal a,address ad where a.aid=ad.aid

/***
* 查询动物及关联的地址信息
* @return
*/
public List findAllByCon();

/打开连接
SqlSession session = sqlSessionFactory.openSession();
//创建接口的实现类对象
AnimalMapper animalMapper = session.getMapper(AnimalMapper.class);
List animals = animalMapper.findAllByCon();
for (Animal animal : animals) {
System.out.println(animal);
List

list = animal.getList();
for (Address address : list) {
System.out.println(address);
}
}

	session.close();

第二种可以通过返回hashmap的方式
基于接口的方式:
public List<Map<String, Object>> findAllTotalTest();

select a.aid,a.aname,a.age,ad.id,ad.`name` from animal a,address ad where a.aid=ad.aaid; 基于接口的方式: AnimalMapper mapper = session.getMapper(AnimalMapper.class); List

基于配置的方式;
List<Map<String, Object>> list = session.selectList(“com.etc.dao.AnimalMapper.findAllTotalTest”);
for(Map<String, Object> an:list){
System.out.println(an.get(“aname”)+","+an.get(“aid”));

		System.out.println("============================");
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值