`
djvc2008
  • 浏览: 7806 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

面试题总结

阅读更多
1. Spring Bean的范围
如何使用spring的作用域:
Java代码
<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/> 
这里的scope就是用来配置spring bean的作用域,它标识bean的作用域。在spring2.0之前bean只有2种作用域即:singleton(单例)、non- singleton(也称prototype), Spring2.0以后,增加了session、request、global session三种专用于Web应用程序上下文的Bean。因此,默认情况下Spring2.0现在有五种类型的Bean。
当然,Spring2.0对Bean的类型的设计进行了重构,并设计出灵活的Bean类型支持,理论上可以有无数多种类型的Bean,用户可以根据自己的需要,增加新的Bean类型,满足实际应用需求。

1、singleton作用域当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是 完全不同的,单例设计模式表示一个ClassLoader中只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是 说当一个bean被标识为singleton时候,spring的IOC容器中只会存在一个该bean。配置实例:
Java代码
1. <bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/> 
或者 Java代码
1. <bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/> 
<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>


2、prototype 作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的 getBean()方法)都会产生一个新的bean实例,相当与一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不 能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不 闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调 用。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用bean的后置处理器,该处理器持有要被清除的bean的引用。)
配置实例:
Java代码
1. <bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/> 
<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>

或者
Java代码
1. <beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/> 
<beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/>


3、request request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,配置实例:request、session、global session使用的时候首先要在初始化web的web.xml中做如下配置:如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可:
Java代码
1. <web-app> 
2.     <listener> 
3.         <listener-class> 
4. org.springframework.web.context.request.RequestContextListener</listener-class> 
5.     </listener> 
6. </web-app>, 
<web-app>
    <listener>
        <listener-class>
org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
</web-app>,

如果是Servlet2.4以前的web容器,那么你要使用一个javax.servlet.Filter的实现:
Java代码
1. <web-app> 
2.     <filter> 
3.         <filter-name>requestContextFilter</filter-name> 
4.         <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class> 
5.     </filter> 
6.     <filter-mapping> 
7.         <filter-name>requestContextFilter</filter-name> 
8.         <url-pattern>/*</url-pattern> 
9.     </filter-mapping> 
10. </web-app> 
<web-app>
    <filter>
        <filter-name>requestContextFilter</filter-name>
        <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>requestContextFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>



接着既可以配置bean的作用域了:
Java代码
1. <bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/> 
<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>


4、session   session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效,配置实例:配置实例:和request配置实例的前提一样,配置好web启动文件就可以如下配置:
Java代码
1. <bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/> 
<bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/>


5、global sessionglobal session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。配置实例:和request配置实例的前提一样,配置好web启动 文件就可以如下配置:
Java代码
1. <bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/> 
<bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/>


6、自定义bean装配作用域在spring2.0中作用域是可以任意扩展的,你可以自定义作用域,甚至你也可以重新定义已有的作用域(但是你不能覆盖singleton和prototype),spring的作用域由接口org.springframework.beans.factory.config.Scope来定义,自定义自己的作用域只要实现该接口即可,下面给个实例:我们建立一个线程的scope,该scope在表示一个线程中有效,代码如下:
Java代码
1. publicclass MyScope implements Scope { 
2.      private final ThreadLocal threadScope = new ThreadLocal(){ 
3.           protected Object initialValue() { 
4.               returnnew HashMap(); 
5.           } 
6.      }; 
7.  
8.      public Object get(String name, ObjectFactory objectFactory) { 
9.          Map scope = (Map) threadScope.get(); 
10.          Object object = scope.get(name); 
11.          if(object==null) { 
12.            object = objectFactory.getObject(); 
13.            scope.put(name, object); 
14.          } 
15.          return object; 
16.      } 
17.  
18.      public Object remove(String name) {  
19.         Map scope = (Map) threadScope.get(); 
20.          return scope.remove(name); 
21.      } 
22.  
23.     public void registerDestructionCallback(String name, Runnable callback) { 
24.      } 
25.  
26.     public String getConversationId() { 
27.        // TODO Auto-generated method stub 
28.        return null; 
29.     }  


2. 有两张表:
Record(recNumber <主键>学号, recScore分数)
Student(stuNumber <主键>学号, stuName姓名, stuClass班级)
用SQL语句实现以下查询:
查询每一个班级中第二名的同学的姓名。

Go

If Object_id('Record','U') Is Not null

    Drop Table Record

If Object_id('Student','U') Is Not null

    Drop Table Student



Go

Create Table Student(stuNumber int Identity(1,1) not null,stuName nvarchar(50),stuClass nvarchar(50),Constraint PK_Student Primary Key(stuNumber Asc))

Create Table Record(id int Identity(1,1) not null,recNumber int not null,recScore int,Constraint PK_Record Primary Key(ID Asc),Constraint FK_Record_recNumber Foreign Key(recNumber) References Student(stuNumber))

Go

Insert Into Student (stuName,stuClass)

    Select N'Name1',N'A' Union All

    Select N'Name2',N'A' Union All

    Select N'Name3',N'A' Union All

    Select N'Name4',N'B' Union All

    Select N'Name5',N'B' Union All

    Select N'Name6',N'B'

Insert Into Record(recNumber,recScore)

    Select 1,89 Union All

    Select 2,76 Union All

    Select 3,100 Union All

    Select 4,67 Union All

    Select 5,88 Union All

    Select 6,84

--2000

Select a.*

    From Student a

    inner Join Record b On b.recNumber=a.stuNumber

    Where a.stuNumber In (Select Top 2 x.stuNumber

                            From Student x

                            inner Join Record y On y.recNumber=x.stuNumber And x.stuClass=a.stuClass  Order By y.recScore Desc)

        And a.stuNumber <>(Select Top 1 x.stuNumber

                            From Student x

                            inner Join Record y On y.recNumber=x.stuNumber And x.stuClass=a.stuClass  Order By y.recScore Desc)

3.JSP 九大内内置对象
request request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。

response response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)

out out 对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。

session session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息

application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息

config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。

page page表示从该页面产生的一个servlet实例


4. abstract class和interface有什么区别
  声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
  接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics