zoukankan      html  css  js  c++  java
  • 面试题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. 使用临时表加速查询.

  • 相关阅读:
    1026 Table Tennis (30)
    1029 Median
    1025 PAT Ranking (25)
    1017 Queueing at Bank (25)
    1014 Waiting in Line (30)
    1057 Stack (30)
    1010 Radix (25)
    1008 Elevator (20)
    字母大小写转换
    Nmap的基础知识
  • 原文地址:https://www.cnblogs.com/yutianbao/p/9165117.html
Copyright © 2011-2022 走看看