面试总结

面试总结

一、 springmvc配置文件要配置哪些内容

1.web.xml

1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 5          version="3.0">
 6     <!-- 加载applicationContext.xml配置文件 -->
 7     <context-param>
 8         <param-name>contextConfigLocation</param-name>
 9         <param-value>classpath:applicationContext.xml</param-value>
10     </context-param>
11     <!-- 设置编码为UTF-8 -->
12     <filter>
13         <description>字符集过滤器</description>
14         <filter-name>encodingFilter</filter-name>
15         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
16         <init-param>
17             <description>字符集编码</description>
18             <param-name>encoding</param-name>
19             <param-value>UTF-8</param-value>
20         </init-param>
21     </filter>
22     <filter-mapping>
23         <filter-name>encodingFilter</filter-name>
24         <url-pattern>/*</url-pattern>
25     </filter-mapping>
26 
27     <!-- spring监听器 -->
28     <listener>
29         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
30     </listener>
31 
32     <listener>
33         <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
34     </listener>
35 
36     <!-- 配置Servlet -->
37     <servlet>
38         <servlet-name>DispatcherServlet</servlet-name>
39         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
40         <init-param>
41             <param-name>contextConfigLocation</param-name>
42             <param-value>classpath:springmvc.xml</param-value>
43         </init-param>
44         <load-on-startup>1</load-on-startup>
45     </servlet>
46 
47     <servlet-mapping>
48         <servlet-name>DispatcherServlet</servlet-name>
49         <url-pattern>/</url-pattern>
50     </servlet-mapping>
51 
52 
53     <!-- 程序加载时的页面 -->
54     <welcome-file-list>
55         <welcome-file>/index.jsp</welcome-file>
56     </welcome-file-list>
57 
58 </web-app>

2.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
						http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd 
						http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
						http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <context:annotation-config/>
    <!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
    <!-- 自动扫描controller包下所有的类,使其认为是spring mvc的控制器 -->
    <context:component-scan base-package="com.keman.eomfront.services"></context:component-scan>

    <!--读取jdbc配置文件-->
    <bean id="propertyConfigure"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"/>
    </bean>

    <!-- 声明一个数据源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="${jdbc.initialSize}"/>
        <property name="minIdle" value="${jdbc.minIdle}"/>
        <property name="maxActive" value="${jdbc.maxActive}"/>

        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${jdbc.maxWait}"/>

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>

        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>

        <property name="validationQuery" value="SELECT 1+1 from dual"/>
        <property name="testWhileIdle" value="true"/>
        <property name="testOnBorrow" value="false"/>
        <property name="testOnReturn" value="false"/>

        <!--如果用Oracle,则把poolPreparedStatements配置为true-->
        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <property name="poolPreparedStatements" value="true"/>
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>

    </bean>

    <!--声明 SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="mapperLocations" value="classpath:com/keman/eomfront/xml/*.xml"/>
    </bean>
<!-- 配置mybatis映射接口扫描器 -->
    <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.keman.eomfront.mapper"/>
        <property name="markerInterface" value="com.keman.eomfront.mapper.BaseMapper"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="properties">
            <value>
                mappers=tk.mybatis.mapper.common.Mapper
                ORDER=BEFORE
            </value>
        </property>
    </bean>

    <!--================事务相关控制===================-->
    <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="insert*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
            <tx:method name="add*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
            <tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
            <tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
            <tx:method name="modify*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
            <tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
            <tx:method name="remove*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
            <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="load*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="*" propagation="SUPPORTS" read-only="true"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <!--把事务控制在Service层-->
        <aop:pointcut id="txPointcut" expression="execution(* com.keman.eomfront.services..*.*(..))"/>
        <aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice"/>
    </aop:config>

</beans>

3.springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
						http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
						http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
    <context:component-scan base-package="com.keman.eomfront.controller"/>

     <context:annotation-config /> 

    <mvc:default-servlet-handler  />
    <!-- 支持spring3.0以上新的mvc注解 -->
    <mvc:annotation-driven/>
    <!-- 多个拦截器,顺序执行 -->
    <mvc:interceptors>
         <!--登陆拦截器 -->
         <mvc:interceptor>
             <mvc:mapping path="/**"/>
             <mvc:exclude-mapping path="/login/loginon"/>
             <mvc:exclude-mapping path="/login/testConn"/>
             <mvc:exclude-mapping path="/login/loginout"/>
             <mvc:exclude-mapping path="/login/loginindex"/>
             <mvc:exclude-mapping path="/pages/login.jsp"/>
             <!-- 基础功能不用拦截 -->
             <mvc:exclude-mapping path="/base/*"/>
             <bean class="com.keman.eomfront.controller.UserLoginInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
    <!--全局异常-->
   <!--    <bean class="com.keman.eomfront.lib.ExceptionResolver"/> -->
    <bean class="com.keman.eomfront.exception.DefaultExceptionHandler" />
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/pages/"/>
        <property name="suffix" value=".jsp"/>
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    </bean>

    <!--  文件上件上传解析器 -->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8"/>
        <property name="maxInMemorySize" value="240"/>
        <!--<property name="maxInMemorySize" value="10240"/>-->
        <property name="uploadTempDir" value="/upload/"/>
        <property name="maxUploadSize" value="-1"/> <!-- 最大文件大小,-1为无限止(-1) ;-->
    </bean>

    <!-- 全局异常处理 -->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception, jsp可以访问这个变量${ex.message} -->
        <property name="exceptionAttribute" value="ex"/>
        <!-- 默认错误页面,当找不到上面mappings中指定的异常对应视图时,使用本默认配置 -->
        <property name="defaultErrorView" value="error"/>
        <!-- 默认HTTP状态码 -->
        <property name="defaultStatusCode" value="500"/>
        <!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常页面名作为值 -->
       <property name="exceptionMappings">
           <props>
               <prop key="java.sql.SQLException">error_sql</prop>
               <prop key="java.lang.Exception">error_ex</prop>
           </props>
       </property>

       <property name="statusCodes">
           <props>
               <prop key="error">500</prop>
               <prop key="404">404</prop>
           </props>
       </property>
    </bean>
</beans>

4.mybatis-config.xml

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

<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	
	<settings>
		<setting name="cacheEnabled" value="true"/>
		<!--<setting name="logImpl" value="LOG4J"/>-->
		<!--控制台打印sql语句-->
		<setting name="logImpl" value="STDOUT_LOGGING"/>

	</settings>

	<!-- 为所有的POJO起别名,规则为POJO类的的简单类名首字母变为小写 -->
	<typeAliases>
		<package name="com.keman.eomfront.entity"/>
	</typeAliases>
	
	 
</configuration>

二、mysql和Oracle怎么实现分页

1.mysql

一般情况下,客户端通过传递 pageNo(页码)、pageSize(每页条数)两个参数去分页查询数据库中的数据,在数据量较小(元组百/千级)时使用 MySQL自带的 limit 来解决这个问题:

//LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
//收到客户端{pageNo:1,pagesize:10} 
select * from table limit (pageNo-1)*pageSize, pageSize;

//收到客户端{pageNo:5,pageSize:30} 
select * from table limit (pageNo-1)*pageSize,pageSize;

在数据量较小的时候简单的使用 limit 进行数据分页在性能上面不会有明显的缓慢,但是数据量达到了 万级到百万级 sql语句的性能将会影响数据的返回。这时需要利用主键或者唯一索引进行数据分页;

假设主键或者唯一索引为 good_id
收到客户端{pageNo:5,pagesize:10}
select * from table where good_id > (pageNo-1)*pageSize limit pageSize;
--返回good_id为40到50之间的数据

2.Oracle

1.无ORDER BY排序的写法。(效率最高)

SELECT *
  FROM (SELECT ROWNUM AS rowno, t.* FROM emp t where ROWNUM <= M+N) table_alias
 WHERE table_alias.rowno >= M;

2.有ORDER BY排序的写法。(效率较高)

SELECT *
  FROM (SELECT tt.*, ROWNUM AS rowno
          FROM (  SELECT t.*  FROM emp t WHERE hire_date BETWEEN TO_DATE('20060501','yyyymmdd') AND TO_DATE ('20060731', 'yyyymmdd') ORDER BY create_time DESC, emp_no) tt
         WHERE ROWNUM <= 20) table_alias
 WHERE table_alias.rowno >= 10;

三、事务是什么?

事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。可以通俗理解为:就是把多件事情当做一件事情来处理,好比大家同在一条船上,要活一起活,要完一起完 。

事物的四个特性(ACID

原子性(Atomicity)
  操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。
eg:拿转账来说,假设用户A和用户B两者的钱加起来一共是20000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是20000,这就是事务的一致性。
● 一致性(Consistency):
  事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
● 隔离性(Isolation):
  隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
  即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
● 持久性(Durability):
  当事务正确完成后,它对于数据的改变是永久性的。
eg: 例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。

四、Spring容器和springmvc容器的区别联系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值