• 面试题1


    面试题:

    1.Oracle,MySQL数据库,面试官基本都会问,大家要重视,有的会问有没有了解过mangodb。

    2.存储过程

      SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

    存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。

             存储过程根据需要可能会有输入、输出、输入输出参数,共有三种参数类型,IN,OUT,INOUT

    DELIMITER //
      CREATE PROCEDURE in_param(IN p_in int)
        BEGIN
        SELECT p_in;
        SET p_in=2;
        SELECT p_in;
        END;
        //
    DELIMITER ;

    #调用
    SET @p_in=1;
    CALL in_param(@p_in);

    SELECT @p_in;

    执行结果:

     

     

     

    3.Mysql连接数据库方式

    1、  利用DriverManager连接数据库

    2、 public  static Connection getConnection() throws ClassNotFoundException{  

    3、         String url="jdbc:mysql:///jdbc";//我连的数据库是MySQL中的jdbc数据库  

    4、         String username="root";  

    5、         String password="";//我的MySQL数据库的密码是空字符串  

    6、         String driverClass="com.mysql.jdbc.Driver";  

    7、         Connection ct=null;  

    8、         Class.forName(driverClass);  

    9、         try {  

    10、                 ct=DriverManager.getConnection(url, username, password);  

    11、             } catch (SQLException e) {   

    12、                 e.printStackTrace();  

    13、             }  

    14、             return ct;  

    15、         } 

    2、利用io流读取文件的方式;

    1. // 读取类路径下的jdbc.propreties文件(配置文件)  
    2.         InputStream in = JDBCtool.class.getClassLoader().getResourceAsStream("jdbc.properties");  
    3.         // 以上为输入流  
    4.         Properties pt = new Properties();// 创建properties  
    5.         pt.load(in);// 取键值对(加载对应的输入流)  
    6.         driver = pt.getProperty("driver");  
    7.         jdbcurl = pt.getProperty("jdbcurl");  
    8.         user = pt.getProperty("user");  
    9.         password = pt.getProperty("password");  
    10. 10.         Connection ct = null;  

    将diver、jdbcurl、user、password这些信息存储到类路径下的jdbc.propreties文件中

    3、利用c3p0连接池连接数据库

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <c3p0-config>   
    3.     <named-config name="helloc3p0">   
    4. <!--     连接数据源的基本属性 -->  
    5.     <property name="user">root</property>   
    6.      <property name="password"></property>   
    7.      <property name="driverClass">com.mysql.jdbc.Driver</property>   
    8.      <property name="jdbcUrl">jdbc:mysql:///jdbc</property>   
    9.       

    10. <!--     若数据库中连接数不足时,一次向数据库服务器申请多少个连接  -->  

    1. 11.     <property name="acquireIncrement">5</property>   

    12. <!--         初始化数据库连接池时连接的数量 -->  

    1. 13.     <property name="initialPoolSize">5</property>   

    14. <!--     数据库连接池中的最小的数据库连接数 -->  

    1. 15.     <property name="minPoolSize">5</property>   
    2. 16.     <!--     数据库连接池中的最大的数据库连接数 -->  
    3. 17.     <property name="maxPoolSize">10</property>   

    18. <!--     c3p0数据库连接可以维护的statement的个数 -->  

    1. 19.     <property name="maxStatements">20</property>   

    20. <!--     每个连接同时可以使用的statement对象的个数 -->  

    1. 21.     <property name="maxStatementsPerConnection">5</property>   
    2. 22.     </named-config>   

    23. </c3p0-config>   

    获取数据库连接的代码如下:

    [java] view plain copy

    1. private static DataSource ds=null;  
    2.     //数据库连接池应只被初始化一次  
    3.     static{  
    4.         ds=new ComboPooledDataSource("helloc3p0");  
    5.     }  
    6.     //获取数据库连接  
    7.     public static  Connection getConnection() throws ClassNotFoundException, SQLException, IOException{  
    8.         return ds.getConnection();  
    9.           
    10. 10.       
    11. 11.     }  

    4、利用mybatis-config.xml配置文件形式,利用MyBatis连接数据库

    1配置文件:mybatis-config.xml

    <configuration>   

        <environmentsdefault="environment"> 

            <environmentid="environment"> 

                <transactionManager type="JDBC"/> 

                <dataSourcetype="POOLED"> 

                    <propertyname="driver" value="com.mysql.jdbc.Driver" /> 

                    <propertyname="url"value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=utf8"/> 

                   <property name="username" value="root" /> 

                    <propertyname="password" value="root" /> 

                </dataSource> 

            </environment> 

        </environments> 

    </configuration>

    2.源代码:

    public class JDBCUtilsDemo5{

           private static SqlSession session=null;

           public static SqlSession getSession(){

                  try {

                         session= newSqlSessionFactoryBuilder().build(JDBCUtilsDemo5.class.getClassLoader().getResourceAsStream("mybatis-config.xml")).openSession();

    关闭资源并在main方法中调用

    4.左连接右链接内连接的区别

    1、内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符)。包括相等联接和自然联接。     
    内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。   
        
    2、外联接。外联接可以是左向外联接、右向外联接或完整外部联接。     
    在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     
    1)LEFT  JOIN或LEFT OUTER JOIN     
    左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。       
    2)RIGHT  JOIN 或 RIGHT  OUTER  JOIN     
    右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。       
    3)FULL  JOIN 或 FULL OUTER JOIN
    完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。   

    例子:   
    -------------------------------------------------
      a表     id   name     b表     id   job   parent_id   
                  1   张3                   1     23     1   
                  2   李四                 2     34     2   
                  3   王武                 3     34     4       
      a.id同parent_id   存在关系   
    --------------------------------------------------    
     1) 内连接   
      select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id       
      结果是     
      1   张3                   1     23     1   
      2   李四                  2     34     2   

      2)左连接   
      select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id       
      结果是     
      1   张3                   1     23     1   
      2   李四                  2     34     2   
      3   王武                  null   

     3) 右连接   
      select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id       
      结果是     
      1   张3                   1     23     1   
      2   李四                  2     34     2   
      null                       3     34     4   

     4) 完全连接   
      select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id   
      结果是     
      1   张3                  1     23     1   
      2   李四                 2     34     2   
      null                   3     34     4   
      3   王武                 null

    5.对各个框架的理解,基本原理

    传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用<%%>符号嵌入很多的Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等;

    Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个Servlet),针对不同的业务,我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面负责数据的输入和输出显示,还有一个Form类负责传递Action和JSP中间的数据。JSP中可以使用Struts框架提供的一组标签,就像使用HTML标签一样简单,但是可以完成非常复杂的逻辑。从此JSP页面中不需要出现一行<%%>包围的Java代码了
      可是所有的运算逻辑都放在Struts的Action里将使得Action类复用度低和逻辑混乱,所以通常人们会把整个Web应用程序分为三层,Struts负责显示层,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写;

    Hibernate框架,它需要你创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。当我们需要相关操作是,不用再关注数据库表。我们不用再去一行行的查询数据库,只需要持久化类就可以完成增删改查的功能。使我们的软件开发真正面向对象,而不是面向混乱的代码。我的感受是,使用Hibernate比JDBC方式减少了80%的编程量。

    显示层的Struts需要调用一个业务类,就需要new一个业务类出来,然后使用;业务层需要调用持久层的类,也需要new一个持久层类出来用。通过这种new的方式互相调用就是软件开发中最糟糕设计的体现;

    Spring的作用就是完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,这都不重要了。只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。所以Spring框架最核心的就是所谓的依赖注射和控制反转

    现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层,这个结构是目前国内最流行的Java Web应用程序架构了。另外,由于Spring使用的依赖注射以及AOP(面向方面编程),所以它的这种内部模式非常优秀,以至于Spring自己也实现了一个使用依赖注射的MVC框架,叫做Spring MVC,同时为了很好的处理事物,Spring集成了Hibernate,使事物管理从Hibernate的持久层提升到了业务层,使用更加方便和强大。

    SpringMVC原理:

    Springmvc就是spring框架的一个模块,所以它可以和spring框架可以进行无缝整合,它是一个基于mvc设计思想的前端web框架,主要作用就是对前端请求进行处理。他的前端控制器是一个servlet.它的请求拦截是基于方法级别的.他的执行流程是

    ---》Spring的MVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成

    1. 客户端请求提交到DispatcherServlet

    2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller

    3. DispatcherServlet将请求提交到Controller

    4. Controller调用业务逻辑处理后,返回ModelAndView

    5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图

    6. 视图负责将结果显示到客户端

    mvc指的就是Model(业务模型)、View(视图)、Controller(控制器)

    ----》Mybatis是一个优秀的ORM框架.应用在持久层. 它对jdbc的 操作数据库过程 进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、等jdbc繁杂的过程代码.一般使用mapper代理的方式开发.直接在xml里面写sql

    Mybatis的工作流程:

    1、  mybatis配置

    SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

    mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

    2、  通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

    3、  由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession(DefaultSqlSession)进行。

    4、  mybatis底层自定义了Executor(BaseExecutor)执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

    5、  Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

    6、  Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

    7、  Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

     

    6.对Aop,ioc的理解

    (1)aop:面向切面编程将跟业务逻辑没有关系的代码提取出来,在调用目标方法之前或者之后执行。常用的场景,事务,日志,权限控制,异常处理等方面。

    (2)ioc:创建对象的权利,交给spring容器创建。

    (3)di如果一个对象A需要使用另一个对象B才能实现某个功能,这时就可以说A对象依赖于B对象,而Spring容器在创建A对象时,会自动将A对象需要的B对象注入到A对象中,此过程就是依赖注入。

    核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

    7.对Session共享的理解

     Java Servlet API引入session 机制来跟踪客户的状态,session指的是在一段时间内,单个客户和web服务器之间一连串的交互过程,在一个session中,一个客户可能会多次请求同一个网页,也可能请求多个不同服务器资源,例如:在一个邮件系统应用中,从一个客户登录到邮件系统,到写信,收信和发信等,到最后退出邮件系统,整个过程为一个session;再例如:大家在网上购物的时候,从购物到最后的付款,整个过程也是一个session 。

       session对像是jsp中的内置对象,可以直接使用;在Servlet中使用session时,必须先创建出该对象,Servlet中创建session的方法:

    HttpSession session=request.getSession();或   HttpSession session=request.getSession(boolean value);

       在服务器上,通过session ID来区分每一个请求服务器的用户,用户只要一连接到服务器,服务器就会为之分配一个唯一的不会重复的session ID,session ID由服务器统一管理,人为不能控制。

              session中的主要方法:sesson.setAttribute(String key,Object value);//将对象存到session中   

    session.getAttribute(String key);//获取session中存的Object对象 

    session.invalidate();方法,强制session死亡

    8.高并发的处理

      之前我将高并发的解决方法误认为是线程或者是队列可以解决,因为高并发的时候是有很多用户在访问,导致出现系统数据不正确、丢失数据现象,所以想到 的是用队列解决,其实队列解决的方式也可以处理,比如我们在竞拍商品、转发评论微博或者是秒杀商品等,同一时间访问量特别大,队列在此起到特别的作用,将 所有请求放入队列,以毫秒计时单位,有序的进行,从而不会出现数据丢失系统数据不正确的情况。

    今天我经过查资料,高并发的解决方法有俩种,一种是使用缓存、另一种是使用生成静态页面;还有就是从最基础的地方优化我们写代码减少不必要的资源浪费:

    1.不要频繁的new对象,对于在整个应用中只需要存在一个实例的类使用单例模式.对于String的连接操作,使用StringBuffer或者StringBuilder.对于utility类型的类通过静态方法来访问。

    2. 避免使用错误的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做条件判断,尽量使用比的条件判断方式.使用JAVA中效率高的类,比如ArrayList比Vector性能好。)

    首先缓存技术我一直没有使用过,我觉得应该是在用户请求时将数据保存在缓存中,下次请求时会检测缓存中是否有数据存在,防止多次请求服务器,导致服务器性能降低,严重导致服务器崩溃,这只是我自己的理解;

    处理并发和同同步问题主要是通过锁机制

       我们需要明白,锁机制有两个层面。

       一种是代码层次上的,如java中的同步锁,典型的就是同步关键字synchronized,这里我不在做过多的讲解,

       另外一种是数据库层次上的,比较典型的就是悲观锁和乐观锁。这里我们重点讲解的就是悲观锁(传统的物理锁)和乐观锁。

      悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自 外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。一个典型的倚赖数据库的悲观锁调用: 

           select * from account where name=”Erica” for update

           这条 sql 语句锁定了 account 表中所有符合检索条件( name=”Erica” )的记录。本次事务提交之前(事务提交时会释放事务过程中的锁),外界无法修改这些记录。

              乐观锁,大多是基于数据版本   Version )记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来 实现。 读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提 交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据 版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

            尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。

    用jprofiler等工具找出性能瓶颈,减少额外的开销。

    优化数据库查询语句,减少直接使用hibernate等工具的直接生成语句(仅耗时较长的查询做优化)。

    优化数据库结构,多做索引,提高查询效率。

    统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。

    能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态html来显示)。

     

    9.Redis缓存的存储方式

    RDB方式

    RDB方式的持久化是通过快照的方式完成的。当符合某种规则时,会将内存中的数据全量生成一份副本存储到硬盘上,这个过程称作”快照”,Redis会在以下几种情况下对数据进行快照:

    根据配置规则进行自动快照;用户执行SAVE, BGSAVE命令;执行FLUSHALL命令;执行复制(replication)时。

    AOF方式

    在使用Redis存储非临时数据时,一般都需要打开AOF持久化来降低进程终止导致的数据丢失,AOF可以将Redis执行的每一条写命令追加到硬盘文件中,这已过程显然会降低Redis的性能,但是大部分情况下这个影响是可以接受的,另外,使用较快的硬盘能提高AOF的性能。

    10.多线程相关知识

     

    11.Sturts2和SpringMVC比较

    注意:说出几点即可

    1、springmvc入口是一个servlet前端控制器,struts2入口是一个filter过虑器。

    2、struts2通过在action类中定义成员变量接收请求参数,struts2只能使用多例模式管理action

    springmvc通过在controller方法中定义形参接收请求参数,springmvc可以使用单例模式管理controller

    3、springmvc是基于方法开发的,注解开发中使用requestMapping将url和方法进行映射,如果根据url找到controller类的方法生成一个Handler处理器对象(只包括一个method)。

    struts2是基于类开发,每个请求过来创建一个action实例,实例对象中有若干的方法。

    开发中建议使用springmvc,springmvc方法更类似service业务方法。

    4、Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数绑定器是将request请求内容解析,并给方法形参赋值。

     

    12.Mybatis和hibernate比较

    1. 在移植性方面hibernate配置一下方言即可.而一般情况下mybatis则需要修改sql语句

    2. hibernate是一个完全的ORM框架.完全的面向对象.更符合我们开发者的思维模式.mybatis需要我们手动写sql语句

    3. hibernate的优化成本比较高.因为hibernate的sql语句是自动生成的,所以在优化方面一般的新手无从下手.而mybatis只要修改sql就可以了.更加容易上手

    (如果对某一个框架非常了解.这里话锋可以转向具体的详细介绍某一个框架)

    13.如何用aop实现事务管理

    事物特性:

      1.原子性。

    例如,转账,A账户减少,B账户增加。虽然是两条 DML语句,但是被当做是一个整体,一次事务。两条语句只能同时成功或者同时失败。

    2.一致性。

    账户A和B,要么都是转账前的状态,要么都是转账后的状态。(不能A账户的钱减少了但是B账户的钱没有增加)。

    3.隔离性。

    虽然在某个时间段很多人都在转账,但是每个人的转账都是在一个自己的事务中,彼此不会影响。

    4.持久性。

    事务提交成功后,数据修改永远生效。

    (1)配置事务管理类

    1.  <!-- 定义事务管理器 -->    
    2. <bean id="transactionManager"    
    3.     class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    
    4.     <property name="dataSource" ref="dataSource" />    
    5. </bean>    

    (2)配置事务属性

    <!-- 配置事务的属性 -->   

        <tx:advice id="TestAdvice" transaction-manager="transactionManager">   

            <!--配置事务传播性,隔离级别以及超时回滚等问题 -->   

            <tx:attributes>   

                <tx:method name="search*" propagation="REQUIRED" read-only="true" isolation="DEFAUT" TIMEOUT="-1" />   

                <tx:method name="del*" propagation="REQUIRED" />   

                <tx:method name="update*" propagation="REQUIRED" />   

                <tx:method name="add*" propagation="REQUIRED" />   

            </tx:attributes>   

    </tx:advice> 

    (3)配置事务的AOP切入点

    1. <aop:config>    
    2.         <!--配置事务切点 -->    
    3.         <aop:pointcut id="services"    
    4.             expression="execution(public* com.pb.service.*.*(..))" />    
    5.         <aop:advisor pointcut-ref="services" advice-ref="TestAdvice" />    
    6.     </aop:config>    

    14.User表

      

    写sql语句,查找表中名字相同的所有名字,还有数量

    select u1.* from user u1

    left join(select name,count(name)  c  from user

    group by name

    )  t2  on t1.name=t2.name

    where c>1

    order by c desc

    15.i++有几个步骤,是不是原子性操作

     i++的操作分三步:

    (1)栈中取出i

    (2)i自增1

    (3)将i存到栈

    所以i++不是原子操作,上面的三个步骤中任何一个步骤同时操作,都可能导致i的值不正确自增.

    16.在mapper.XML里面有大于号小于号的sql语句如何处理

      1、因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析 : 

    mapper文件示例代码<![CDATA[ when min(starttime)<='12:00' and max(endtime)<='12:00' ]]>     

      2、用了转义字符把>和<替换掉SELECT * FROM test WHERE 1 = 1 AND start_date  &lt;= CURRENT_DATE AND end_date &gt;= CURRENT_DATE

    XML转义字符

     &lt;

                         <

                         小于号

      &gt;

                         > 

                         大于号

    &amp;

                         &

                         和

    &apos;

                         ’

                         单引号

    &quot;

                         "

                         双引号



    17.、关于负责均衡的理解

    18.数据报表用什么方式实现

    19.Excel导出如何实现

    20.怎样用jQuery添加样式

    对css样式操作的方法:

    1、.css("样式"):获得样式值,比如$("input").css("color")  获得input中字体的颜色

    2、.css("样式","value"):为样式赋值,如$("input").css("color","red");

    3、.addClass("样式类1,样式类2,样式类3"):可以添加多个定义好的样式类

     

    21.多表连接,给我一个订单表一个商品表,通过订单表关联商品,要是商品表里面商品已经删除了,如何连接查询这个订单信息(有高人事后跟我说这是个坑,商品表不能关联订单表查询,不合法,主要是试试你到底是不是真的在公司做过项目)

    22.Oracle分页怎么写

    23.jQuery选择器有哪些

    一、基本选择器

    基本选择器是jQuery中最常用也是最简单的选择器,它通过元素的id、class和标签名等来查找DOM元素。

    1、ID选择器 #id

    描述:根据给定的id匹配一个元素, 返回单个元素(注:在网页中,id名称不能重复)

    示例:$("#test") 选取 id 为 test 的元素

    2、类选择器 .class

    描述:根据给定的类名匹配元素,返回元素集合

    示例:$(".test") 选取所有class为test的元素

    3、元素选择器 element

    描述:根据给定的元素名匹配元素,返回元素集合

    示例:$("p") 选取所有的<p>元素

    4、*

    描述:匹配所有元素,返回元素集合

    示例:$("*") 选取所有的元素

    高级选择器:交集、并集、后代、子元素、属性。。。。。

     

    24.Jsp页面怎样引入一个类

     <%@page import="com.ideal.dao.CommPayAppDao">

    其中,类CommPayAppDao为代码src中包com/ideal/dao下面的dao类,这样你在jsp页面就可以像java类中写代码一样使用该类中的public方法。

     

    25.Controller里面的数据通过什么方式返回到页面

     Spring MVC返回数据到页面有几种不同的方式,它们各自适用的情况也不同,下面简单总结一下。

    对于每种方式都给出Controller中的相应方法。

    首先还是页面user_add.jsp。它既是发出请求的页面,也是接收返回结果的页面:

    1. <%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8"%>  
    2. <html>  
    3.   <head>  
    4.     <title></title>  
    5.   </head>  
    6.   <body>  
    7.     <h1>添加用户信息4</h1>  
    8.     <form action="user/add4.do" method="post">  
    9.         <input type="submit" value="提交">  
    10.     </form>  
    11.     ${personId }  
    12.   </body>  
    13. </html>  

    1、通过request对象

    1. @RequestMapping("/add.do")  
    2. public String add(HttpServletRequest request){  
    3.     request.setAttribute("personId",12);  
    4.     return "user_add";  
    5. }  

    2、通过ModelAndView对象:

    1. @RequestMapping("/add.do")  
    2. public ModelAndView add(){  
    3.     ModelAndView mav = new ModelAndView("user_add");  
    4.     mav.addObject("personId", 12);  
    5.     return mav;  
    6. }  

    3、通过Model对象:

    1. @RequestMapping("/add.do")  
    2. public String add(Model model){  
    3.     model.addAttribute("personId", 12);  
    4.     return "user_add";  
    5. }  

    4、通过Map对象:

    1. @RequestMapping("/add.do")  
    2. public String add(Map<String,Object> map){  
    3.     map.put("personId", 12);  
    4.     return "user_add";  
    5. }  

    26.Mapper.XML里面要返回一个list集合怎么配,如果这个list集合里面是一个实体类对象又要怎么配

    1、 直接写resultType="实体类",这样返回列表的话就自动变成了List<实体类>

    2、 <resultMap type="HashMap" id="testMap"> 

    <result column="UA_INFO" property="key" /> 

    <association property="value" resultMap="com.xxx.xxx.BaseResultMap"></association>  

    </resultMap>

    27.你们的项目数据库数据量最大的一张表数据量有多少

    28.数据量大的表怎样提高查询效率

    1. 合理使用索引;
    2. 避免或简化排序;
    3. 消除对大型表行数据的顺序存取;
    4. 避免相关子查询
    5. 避免困难的正规表达式;
    6. 使用临时表加速查询.

  • 相关阅读:
    kibana x-pack 更新license
    elastic search集群请求超时
    angular4 angular/cli 版本升级
    windows 编写shell 脚本转化成unix
    spring boot 自定义HandlerMethodArgumentResolver做参数校验
    Fiddler 重定向BUG
    scoop
    acm每日刷题记录
    ccpc 2016 changchun 长春(4.12训练)
    cf 338E
  • 原文地址:https://www.cnblogs.com/yutianbao/p/9165117.html
Copyright © 2020-2023  润新知