java工程师笔试面试题

1. J2EE 是什么?它包括哪些技术?
解答:从整体上讲,J2EE 是使用 Java 技术开发企业级应用的工业标准,它是 Java 技术不断适应和促进企业级应用过程中的产物.适用于企业级应用的 J2EE,提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。J2EE 是一个标准,而不是一个现成的产品。
主要包括以下这些技术:
1) Servlet
Servlet 是 Java 平台上的 CGI 技术。Servlet 在服务器端运行,动态地生成 Web 页面。与传统的 CGI和许多其它类似 CGI 的技术相比,Java Servlet 具有更高的效率并更容易使用。对于 Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问的。
2)JSP
JSP(Java Server Page)是一种实现普通静态 HTML 和动态页面输出混合编码的技术。从这一点来看,非常类似 MicrosoftASP、PHP 等技术。借助形式上的内容和外观表现的分离,Web 页面制作的任务可以比较方便地划分给页面设计人员和程序员,并方便地通过JSP 来合成。在运行时态,JSP 将会被首先转换成 Servlet,并以 Servlet 的形态编译运行,因此它的效率和功能与 Servlet 相比没有差别,一样具有很高的效率。
3) EJB
EJB 定义了一组可重用的组件:Enterprise Beans。开发人员可以利用这些组件,像搭积木一样建立分布式应用。
4)JDBC
JDBC(Java Database Connectivity , Java 数据库连接)API 是 一 个 标 准 SQL(Structured QueryLanguage,结构化查询语言)数据库访问接口,它使数据库开发人员能够用标准 Java API 编写数据库应用程序。JDBC API 主要用来连接数据库和直接调用 SQL 命令执行各种 SQL 语句。利用 JDBC API 可以执行一般的 SQL 语句、 动态 SQL 语句及带 IN 和 OUT 参数的存储过程。 Java 中的 JDBC 相当于 Microsoft平台中的 ODBC(Open DatabaseConnectivity)。
2.测试生命周期、测试过程分为几个阶段,以及各阶段的含义?
解答:软件测试生命周期一般包括 6 个阶段:1)计划 2)分析,3)设计,4)构建,5)测试周期,6)最后测试和实施,1) 计划:产品定义阶段2). 分析:外部文档阶段3). 设计:文档架构阶段4). 构建:单元测试阶段5). 测试周期:错误修正,重复系统测试阶段6). 最后的测试和实施:代码冻结阶段
4. 什么是 Web 容器?
解答:容器就是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如 JAVA 中的 Tomcat 容器,ASP 的 IIS 或 PWS 都是这样的容器。
5. 运行时异常与一般异常有何异同?
解答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
9.试述数据库完整保护的主要任务和措施。
解答:数据库的完整性保护也就是数据库中数据正确性的维护。数据库完整性包括三个内容:实体完整性规则,参照物完整性规则以及用户定义完整性规则。前两个是有 DBMS 自动处理。实体完整性规则是说针对于基表中的关键字中属性值不能为空值,是数据库完整性的基本要求,主关键字和元组的唯一性对应。参照物完整性规则是不允许引用不存在的元组:即基表中的外关键字要么为空,要么关联基表中必存在元组。用户定义完整性规则针对具体的数据环境由用户具体设置的规则,它反应了具体应用中的语义要求。一个完整性规则一般由下面三部分组成:完整性约束条件设置,完整性约束条件的检查以及完整性约束条件的处理.后两部分在数据库中一般有相应的模块处理。另外触发器也可以做完整性的保护,但触发器大量用于主动性领域。
12. 类有哪三个基本特性?各特性的优点?
解答:类具有封装性、继承性和多态性。
封装性:类的封装性为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。
继承性:类的继承性提供从已存在的类创建新类的机制,继承(inheritance)使一个新类自动拥有被继承类(父类)的全部可继承的成员。
多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。
13.谈谈对 XML 的理解?说明 Web 应用中 Web.xml 文件的作用?
解答:XML(Extensible Markup Language)即可扩展标记语言,它与 HTML 一样,都是 SGML(Standard GeneralizedMarkup Language,标准通用标记语言)。Xml 是 Internet 环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言 XML 是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然 XML 占用的空间比二进制数据要占用更多的空间,但 XML 极其简单易于掌握和使用。web.xml的作用是配置欢迎页,servlet,filter,listener 等的。
14.jsp 有哪些内置对象?作用分别是什么?(至少三个)
解答:1)request 表示 HttpServletRequest 对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header 和 session 数据的有用的方法。
2)response 表示 HttpServletResponse 对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)。
3) out 对象是javax.jsp.JspWriter 的一个实例,    并提供了几个方法使你能用于向浏览器回送输出结果。
4) pageContext 表示一个 javax.servlet.jsp.PageContext 对象。它是用于方便存取各种范围的名字空间、servlet 相关的对象的 API,并且包装了通用的servlet 相关功能的方法。
5)session 表示一个请求的 javax.servlet.http.HttpSession 对象。Session 可以存贮用户的状态信息。
6)application 表示一个 javax.servle.ServletContext 对象。这有助于查找有关 servlet 引擎和servlet 环境的信息。
7)config 表示一个 javax.servlet.ServletConfig 对象。该对象用于存取 servlet 实例的初始化参数。
8)page 表示从该页面产生的一个servlet 实例。9)exception 针对错误网页,未捕捉的例外
15.事务是什么?有哪些属性,并简要说明这些属性的含义。
解答:事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如 SQL,C++或 Java)书写的用户程序的执行所引起,并用形如 begin transaction 和 end transaction 语句(或函数调用)来界定。事务由事务开始(begintransaction)和事务结束(end transaction)之间执行的全体操作组成。事务应该具有 4 个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为 ACID 特性。
(atomicity)  。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
 一致性(consistency)  。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
    隔离性(isolation)  。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)  。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
19、HashMap 和 Hashtable 的区别?
解答:HashMap 是 Hashtable 的轻量级实现(非线程安全的实现)        ,他们都实现了 Map 接口,主要区别在于HashMap 允许空(null)键值(key),由于非线程安全,效率上高于 Hashtable。HashMap 允许将 null 作为一个 entry 的 key 或者 value, Hashtable 不允许HashMap 把 Hashtable 的 contains方法去掉了,改成 containsvalue 和 containsKey。因为 contains 方法容易让人引起误解Hashtable继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的 Map interface 的一个实现。最大的不同是,Hastable 的方法是 synchronize 的,而 HashMap 不是,在多个线程访问 Hashtable 时,不需要自己为s它的方法实现同步,而 HashMap 就必须为之提供同步。
20.请说出 ArrayList,Vector, LinkedList 的存储性能和特性
解答: ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了 synchronized 方法(线程安全),通常性能上较ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
21. 描述 J2EE 框架的多层结构,并简要说明各层的作用。
解答:1)Presentation layer(表示层)a. 表示逻辑(生成界面代码)b. 接收请求 c. 处理业务层抛出的异常 d. 负责规则验证(数据格式,数据非空等)e. 流程控制
2) Service layer(服务层/业务层)a.封装业务逻辑处理,并且对外暴露接口b.负责事务,安全等服务
3) Persistence layer(持久层) a 封装数据访问的逻辑,暴露接口 b.提供方便的数据访问的方案(查询语言,API,映射机制等)
4)Domain layer(域层) a. 业务对象以及业务关系的表示b. 处理简单的业务逻辑c. 域层的对象可以穿越表示层,业务层,持久层软件分层结构使得代码维护非常方便,设计明确,各层独立,专注自己擅长的领域。
23.简要描述如何结合 struts、hibernate、spring 开发 Web 应用?
解答:Struts 可以将 jsp 页面的表单关联起来,就是把 JSP 页面的表单数据封装成 javaBean,这样的话,在 action 中你再也不需要使用传统的 request.getParameter("name");还有 struts 有一个控制器,你在 struts 编程中的控制器(XxxAction)都是继承总的 ActionServlet,它能集中处理请求,然后转到相关的页面。还有 struts 的表单验证组件,不用你写 js 验证了,只需要你配置一下文件就可以了。另外 struts 的令牌机制可以防表单重复提交。
 Spring 是一个轻量级容器,非侵入性.包含依赖注入,AOP 等。它是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架。
    Hibernate:它可以让我们以 OO 的方式操作数据库,这让我们看到了 hibernate 的强大之处,体验到操作数据的方便。但 hibernate 最耀眼之处是 hibernate 的缓存机制,而不是以 OO 的方式操作数据库。Hibernate 的缓存机制不外乎是一级缓存 session,二级缓存 sessionFactory,和第三方缓存 如 ehcache 。 也就 是 hibernate 的 最 强大 的地 方 是 它的 缓存 , 理解了 这 个 才能 真正 的 理解hibernate,Hibernate 的命名查询/命名参数查询,    就是将 hql 语句放在一个单独的 xml 文件之中,    它仍然让人们以面向对象的方式去操纵数据,而不用在以 OO 的方式写着代码的同时,然后再转变思维,用面向关系的方式去写那些 sql 语句。但 hibernate不仅做了这些,它的native sql 查询方式,完
全满足 sql 语句的偏爱者,它像 ibatis 一样,将 sql 语句放在配置文件之中
27.列出自己常用的 jdk 包.
解答:JDK 常用的 package
java.lang:这个是系统的基础类,比如 String 等都是这里面的,这个 package 是唯一一个可以不用 import 就可以使用的 Package
java.io: 这里面是所有输入输出有关的类,比如文件操作等
java.net: 这里面是与网络有关的类,比如 URL,URLConnection 等。
java.util : 这个是系统辅助类,特别是集合类 Collection,List,Map 等。
java.sql: 这个是数据库操作的类,Connection, Statememt,ResultSet 等
28.列出自己常用的 jdk 中的数据结构
解答:线性表,链表,哈希表是常用的数据结构。
32、abstract class 和 interface 有什么区别?
解答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建 abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。新型多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,所有成员变量都是 public static final 的。一个类可以实现多个接口,当类实现接口时,必须实现接口的所有方法。抽象类在 Java 语言中表示的是一种单继承的关系,对于 interface 来说则不然,并不要求 interface 的实现者和 interface 定义在概念本质上是一致的,仅仅是实现了interface 定义的契约而已;抽象类中可以定义自己的成员变量,也可以包含非抽象的方法,而在接口中只能有静态的常量,所有方法必须是抽象的;实现抽象类时可以只实现其中的部分方法,而要是实现一个接口的话就必须实现这个接口中的所有抽象方法
35.JSP 页面之间传递参数的方法有哪些?
解答:  1)request2)session 3)application 4)提交表单5)超链接
36.fowrard 和 redirect 的区别
1、转发与重定向的区别
1)地址
       转发的地址必须是同一个应用内部的各个组件。重定向的地址没有限制。
2)能否共享request
       转发可以 重定向不行
3)浏览器地址栏的地址是否变化
       转发不变   重定向会变
4)事件是否处理完毕
       转发是一件事未做完  重定向是一件事已经做完
forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,并且从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,    在前者可以满足需要时,尽量使用 forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下比如,需要跳转到一个其它服务器上的资源,则必须使用 sendRedirect()方法。
37.Java 反射机制的作用?
解答:Java 反射机制的作用是:
1)在运行时判断任意一个对象所属的类。2)在运行时构造任意一个类的对象。3)在运行时判断任意一个类所具有的成员变量和方法。4)在运行时调用任意一个对象的方法
38.你是怎么理解 java 的泛型的?
解答: 在1.5 之前,没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
     泛型是 Java SE 1.5 的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
40.在一个千万级的数据库查寻中,如何提高查询效率?分别说出在数据库设计、SQL 语句、java 等
1)数据库设计方面:
a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select idfrom t where num is null可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询:select id from t wherenum=0
c. 并不是所有索引对查询都有效,SQL 是根据表中数据来进行查询优化的 当索引列有大量数据重复时,查询可能不会去利用索引,如一表中有字段 sex,male、female 几乎各一半,那么即使在 sex 上建了索引也对查询效率起不了作用。
d. 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过 6 个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
3)java 方面:
a.尽可能的少造对象。b.合理摆正系统设计的位置。大量数据操作,和少量数据操作一定是分开的。大量的数据操作,肯定不是 ORM 框架搞定的。,
c.使用 jDBC 链接数据库操作数据d.控制好内存,让数据流起来,而不是全部读到内存再处理,而是边读取边处理;e.合理利用内存,有的数据要缓存
43.请写出一个超链接,点击链接后可以向 zhangsan@d-heaven.com 发送电子邮件。
  <a href=”mailto: zhangsan@d-heaven.com”>发邮件</a>
44.请说明 meta 标签的作用。
解答:meta 是用来在 HTML 文档中模拟 HTTP 协议的响应头报文。meta 标签用于网页的<head>与</head>中,meta 标签的用处很多。meta 的属性有两种:name 和 http-equiv。name 属性主要用于描述网页,对应于 content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所索引擎都使用网上机器人自动查找 meta 值来给网页分类)           。这其中最重要的是 description(站点在搜索引擎上的描述)和 keywords(分类关键词)    ,所以应该给每页加一个 meta 值。比较常用的有以下几个:
name 属性
1).<meta name="Generator" contect="">用以说明生成工具(如 Microsoft FrontPage 4.0)
2).<meta name="KEYWords" contect="">向搜索引擎说明你的网页的关键词;
3).<meta name="DEscription" contect="">告诉搜索引擎你的站点的主要内容;
4).<meta name="Author" contect="你的姓名">告诉搜索引擎你的站点的制作的作者;
5).<meta name="Robots" contect= "all|none|index|noindex|follow|nofollow">
    其中的属性说明如下:
    设定为 all:文件将被检索,且页面上的链接可以被查询;设定为 none:文件将不被检索,且页面上的链接不可以被查询; 设定为 index:文件将被检索;设定为follow:页面上的链接可以被查询;设定为 noindex:文件将不被检索,但页面上的链接可以被查询设定为 nofollow:文件将不被检索,页面上的链接可以被查询。
6).http-equiv 属性
    a、<meta http-equiv="Content-Type"contect="text/html";charset=gbk">
    和 <meta http-equiv="Content-Language"contect="zh-CN">用以说明主页制作所使用的文字以及语言;
    b、<metahttp-equiv="Refresh" contect="n;url=http://yourlink">定时让网页在指定的时
间 n 内,跳转到页面 http;//yourlink;
    c、<metahttp-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用 GMT 时间格式;
    d、<meta http-equiv="Pragma"contect="no-cache">是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从 Cache 中再调出;
    e、<metahttp-equiv="set-cookie" contect="Mon,12 May 2001 00:20:00GMT">cookie 设定,如果网页过期,存盘的 cookie 将被删除。需要注意的也是必须使用 GMT 时间格式;
    f、<metahttp-equiv="Pics-label" contect="">网页等级评定,在 IE 的 internet 选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过 meta 属性来设置的;
    g、<metahttp-equiv="windows-Target" contect="_top">强制页面在当前窗口中以独立页面显示,可以防止自己的网页被别人当作一个frame 页调用;
    h、<metahttp-equiv="Page-Enter"contect="revealTrans(duration=10,transtion=
   50)">和<metahttp-equiv="Page-Exit" contect="revealTrans(duration=20,transtion
   =6)">设定进入和离开页面时的特殊效果,这个功能即 FrontPage 中的“格式/网页过渡”,不过所加的页面不能够是一个 frame 页面。
48.请写出一段 JavaScript 代码,要求页面有一个按钮,点击按钮弹出确认框。程序可以判断出用户点击的是“确认”还是“取消”              。
解答:
<HTML>
<HEAD>
    <TITLE>click</TITLE>
    <Script >
        function validateForm()
        {
            if(confirm("你确认提交这个表单么?"))
            {
                alert(“确定”);
            }else{
           alert(“取消”);
        }
        }
    </Script>
</HEAD>
<BODY>
    <FORM NAME="TEST"action="FirstJS.htm">
        <INPUT TYPE="button"NAME="SUB" VALUE="提交"onClick="JavaScript:validateForm()">
    </FORM>
</BODY>
</HTML>
51.JavaScript 能否操作 cookie 和 session?
解答:JavaScript 可以操作 cookie,但是不能操作 session
52.请写出如下正则表达式的含义;
com︱cn︱net
^http://www.d-heaven.com/$
^http://www.sina.com.cn/new/newid=\d+
解答:com︱cn︱net 表示匹配 com 或是 cn 或是 net 中一个
    ^http://www.d-heaven.com/$ 表示匹配:http://www.d-heaven.com/
     ^http://www.sina.com.cn/new/newid=\d+
表示匹配http://www.sina.com.cn/new/newid=其后可以出现 1 到多个数字
53.请用正则表达式匹配出 QQ 号(假设 QQ 号码为 5—10 位)           ;
解答: ^\d{5,10}$
54. String, StringBuffer  StringBuilder 的区别。
解答:String 的长度是不可变的;StringBuffer 的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用 StringBuffer,如果最后需要 String,那么使用 StringBuffer 的 toString()方法;线程安全;
StringBuilder 是从 JDK 5 开始,为 StringBuffer 该类补充了一个单个线程使用的等价类;通常应该优先使用StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
55.请写出 5 种常见到的 runtimeexception。
解答:NullPointerException:当操作一个空引用时会出现此错误。
NumberFormatException:数据格式转换出现问题时出现此异常。
ClassCastException:强制类型转换类型不匹配时出现此异常。
ArrayIndexOutOfBoundsException:数组下标越界,当使用一个不存在的数组下标时出现此异常。ArithmeticException:数学运行错误时出现此异常
57.请写出一个单例模式。
解答:单例模式(Singletonpattern):确保一个类只有一个实例,并提供一个全局的访问点
public class EagerSingleton
{
private static final EagerSingletonm_instance =
new EagerSingleton();
/**
* 私有的默认构造子
*/
private EagerSingleton() { }
/**
* 静态工厂方法
*/
public static EagerSingleton getInstance()
{
return m_instance;
}
}
58.在 java 中,List 是个接口,那实现 List 接口的类有哪些,有什么区别?
解答: ArrayList 是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,LinkedList 使用双向链表实现存储按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
64.Java 异常处理中,try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code会不会被执行,什么时候被执行,在 return 前还是后?
解答:会执行,在return 前执行。
66.Class.forName(String className)这个方法的作用
解答:通过类的全名获得该类的类对象
67.你认为在表上建立索引可以提高数据库系统的效率吗,为什么?
解答:不一定建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的 where 子句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。
68.hibernate 中的 java 对象有几种状态,其相互关系如何(区别和相互转换)              。
解答:在 Hibernate中,对象有三种状态:临时状态、持久状态和游离状态。
临时状态:当 new 一个实体对象后,这个对象处于临时状态,即这个对象只是一个保存临时数据的内存区域,如果没有变量引用这个对象,则会被 jre 垃圾回收机制回收。这个对象所保存的数据与数据库没有任何关系,除非通过 Session 的 save 或者SaveOrUpdate 把临时对象与数据库关联,并把数据插入或者更新到数据库,这个对象才转换为持久对象;
持久状态:持久化对象的实例在数据库中有对应的记录,并拥有一个持久化表示(ID)。对持久化对象进行 delete 操作后,数据库中对应的记录将被删除,那么持久化对象与数据库记录不再存在对应关系,持久化对象变成临时状态。持久化对象被修改变更后,不会马上同步到数据库,直到数据库事务提交。在同步之前,持久化对象是脏的(Dirty)    。
游离状态:当 Session进行了 Close、Clear 或者 evict 后,持久化对象虽然拥有持久化标识符和与数据库对应记录一致的值 但是因为会话已经消失 对象不在持久化管理之内,        所以处于游离状态(也叫:脱管状态)。游离状态的对象与临时状态对象是十分相似的,只是它还含有持久化标识。
69.对 hibernate 的延迟加载如何理解,在实际应用中,延迟加载与 session 关闭的矛盾是如何处理
的?
解答:  延迟加载就是并不是在读取的时候就把数据加载进来而是等到使用时再加载。那么 Hibernate是怎么知识用户在什么时候使用数据了呢?又是如何加载数据呢?其实很简单,它使用了代理机制。返回给用户的并不是实体本身,而是实体对象的代理。代理对象在用户调用 getter 方法时就会去数据库加载数据。但加载数据就需要数据库连接。而当我们把会话关闭时,数据库连接就同时关闭了。这种情况就叫做未初始化的关系。
延迟加载与 session 关闭的矛盾一般可以这样处理:
1)、关闭延迟加载特性。
操作起来比较简单,因为hibernate 的延迟加载特性是在 hbm 配置里面可控制的。 默认 lazy="true",具体配置可以查看一下相关文档,就不详细叙述了。但使用这个解决办法带来的隐患是十分大的。首先,出现 no session or session was closed 就证明了您已经在使用外键关联表,如果去掉延迟加载的话,则表示每次查询的开销都会变得十分的大,如果关联表越多,后果也可以想象得到。所以不建议使用这个方法解决。
2)、在 session 关闭之前把我们想要查询的数据先获取了。
首先需要了解一下session 什么时候关闭,也就是它的生命周期。通常情况下 hibernate 会在查询数据关闭 session,   而使用 getHibernateTemplate().get 方法查询后会延迟关闭的时间。 会在事务结束后才关闭。使用拦截器(Interceptor)或过滤器(Filter)控制 session。
spring 为解决 hibernate 这一特性提供的解决方案,可以有效的控制 session 生命周期。
70.什么是 AOP 和 OOP,IOC 和 DI 有什么不同?
解答:
1)面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。AOP 是 OOP 的延续,是 Aspect Oriented Programming 的缩写,意思是面向方面编程。 将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。AOP 就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中
2)控制反转 IOC(Inversion of Control) 控制指的就是程序相关类之间的依赖关系.传统观念设计中,通常由调用者来创建被调用者的实例, 在 Spring 里,创建被调用者的工作不再由调用者来完成,而是由 Spring 容器完成,依赖关系被反转了,称为控制反转,目的是为了获得更好的扩展性和良好的可维护性。依赖注入(Dependency injection)创建被调用者的工作由 Spring 容器完成,然后注入调用者,因此也称依赖注入。控制反转和依赖注入是同一个概念。
71.Struts1 中 actionform 和 action 属于 MVC 哪一层,为什么?
解答:actionform 和 action 属于 MVC 的 Model 层,Action 用来处理业务逻辑,actionform 保存用户表单数据以便于在不同页面间传递。而 MVC 中的 model 层就是业务逻辑层,该层用于实现具体的业务逻辑、状态维护及管理。
73.error 和 exception 有什么区别?
解答:error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。
74.Log4J 是 Apache 组织的开源一个开源项目,通过 Log4J,可以指定日志信息输出的目的地,如console、file 等。Log4J 采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别。
解答:Log4J 分 为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了 INFO 级别, 则应用程序中所有 DEBUG 级别的日志信息将不被打印出来。
75.说出几个与 spring 同类型的开源框架,说出几个与 hibernate 同类型的开源框架,说出几个与struts 同类型的开源框架
解答:
1)与 spring 同类型的开源框架:JUIDE、EJB3.0、picoContainer
2)与 hibernate 同类型的开源框架 :ibatis,jdo,JPA
3)几个与 struts 同类型的开源框架:webwork,tapestry,JSF
76、Struts2 包含哪些标签?
解答:
A:
<s:ahref=""></s:a>-----超链接,类似于 html 里的<a></a>
<s:actionname=""></s:action>-----执行一个 view 里面的一个 action
<s:actionerror/>-----如果 action 的 errors 有值那么显示出来
<s:actionmessage/>-----如果 action 的 message 有值那么显示出来
<s:append></s:append>-----添加一个值到 list,类似于 list.add();
<s:autocompleter></s:autocompleter>-----自动完成<s:combobox>标签的内容,这个是 ajax
B:
<s:beanname=""></s:bean>-----类似于 struts1.x 中的,JavaBean 的值
C:
<s:checkbox></s:checkbox>-----复选框
<s:checkboxlistlist=""></s:checkboxlist>-----多选框
<s:comboboxlist=""></s:combobox>-----下拉框
<s:component></s:component>-----图像符号
D:
<s:date/>-----获取日期格式
<s:datetimepicker></s:datetimepicker>-----日期输入框
<s:debug></s:debug>-----显示错误信息
<s:div></s:div>-----表示一个块,类似于 html 的<div></div>
<s:doubleselect list=""doubleName="" doubleList=""></s:doubleselect>-----双下拉框
E:
<s:if test=""></s:if>
<s:elseiftest=""></s:elseif>
<s:else></s:else>-----这 3 个标签一起使用,表示条件判断
F:
<s:fielderror></s:fielderror>-----显示文件错误信息
<s:file></s:file>-----文件上传
<s:formaction=""></s:form>-----获取相应 form 的值
G:
<s:generator separator=""val=""></s:generator>----和<s:iterator>标签一起使用
H:
<s:head/>-----在<head></head>里使用,表示头文件结束
<s:hidden></s:hidden>-----隐藏值
I:
<s:i18nname=""></s:i18n>-----加载资源包到值堆栈
<s:includevalue=""></s:include>-----包含一个输出,servlet 或 jsp 页面
<s:inputtransferselectlist=""></s:inputtransferselect>-----获取 form 的一个输入
<s:iterator></s:iterator>-----用于遍历集合
L:
<s:label></s:label>-----只读的标签
M:
<s:merge></s:merge>-----合并遍历集合出来的值
O:
<s:optgroup></s:optgroup>-----获取标签组
<s:optiontransferselect                      doubleList=""                list=""
doubleName=""></s:optiontransferselect>-----左右选择框
P:
<s:param></s:param>-----为其他标签提供参数
<s:password></s:password>-----密码输入框
<s:property/>-----得到'value'的属性
<s:pushvalue=""></s:push>-----value 的值 push 到栈中,从而使 property 标签的能够获取 value
的属性
R:
<s:radiolist=""></s:radio>-----单选按钮
<s:reset></s:reset>-----重置按钮
S:
<s:selectlist=""></s:select>-----单选框
<s:setname=""></s:set>-----赋予变量一个特定范围内的值
<s:sortcomparator=""></s:sort>-----通过属性给 list 分类
<s:submit></s:submit>-----提交按钮
<s:subset></s:subset>-----为遍历集合输出子集
T:
<s:tabbedPanelid=""></s:tabbedPanel>-----表格框
<s:table></s:table>-----表格
<s:textname=""></s:text>-----I18n 文本信息
<s:textarea></s:textarea>-----文本域输入框
<s:textfield></s:textfield>-----文本输入框
<s:token></s:token>-----拦截器
<s:tree></s:tree>-----树
<s:treenodelabel=""></s:treenode>-----树的结构
U:
<s:updownselectlist=""></s:updownselect>-----多选择框
<s:url></s:url>-----创建 url
77、struts2 中,OGNL 访问值栈的时候查找的顺序是什么?请排序:模型对象、临时对象、固定名称的对象、Action 对象
解答:struts2 的值栈排列顺序为:1).临时对象;2).模型对象;3).Action 对象;4).固定名称对象(如#application, #session,#request 等对象)     
78、struts2 中,Action 通过什么方式获得用户从页面输入的数据,又是通过什么方式把其自身的数据传给视图的?
解答:1)可以直接通过与表单元素相同名称的数据成员(需要存在符合命名规范 set和 get 方法)获取页面表单数据。
2)会把处理好的数据成员放入值栈中,到页面可以使用 struts2 标签取值就可以了。
79.常用的设计模式有哪些?说明工厂模式。
解答:Java 中的 23 种设计模式:
Factory(工厂模式) Builder(建造模式),Factory Method(工厂方法模式),
Prototype(原始模型模式)       ,Singleton(单例模式),Facade(门面模式)      ,
Adapter(适配器模式)      ,Bridge(桥梁模式),Composite(合成模式)        ,
Decorator(装饰模式)     ,Flyweight(享元模式)      ,Proxy(代理模式)  ,
Command(命令模式)     ,Interpreter(解释器模式)       ,Visitor(访问者模式) ,
Iterator(迭代子模式)      ,Mediator(调停者模式)       ,Memento(备忘录模式) ,
Observer(观察者模式)      ,State(状态模式)      ,Strategy(策略模式)  ,
Template Method(模板方法模式) Chain Of Responsibleity(责任链模式)
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
80.什么是数据库的参照完整性?
解答:数据库的参照完整性是指表与表之间的一种对应关系,通常情况下可以通过设置两表之间的主键、外键关系,或者编写两表的触发器来实现。有对应参照完整性的两张表格,在对他们进行数据插入、更新、删除的过程中,系统都会将被修改表格与另一张对应表格进行对照,从而阻止一些不正确的数据的操作。
81.如何优化数据库,如何提高数据库的性能?
解答:
1)硬件调整性能
最有可能影响性能的是磁盘和网络吞吐量,解决办法扩大虚拟内存,并保证有足够可以扩充的空间;
把数据库服务器上的不必要服务关闭掉;把数据库服务器和主域服务器分开;把 SQL 数据库服务器的
吞吐量调为最大;在具有一个以上处理器的机器上运行 SQL。
2)调整数据库
若对该表的查询频率比较高,则建立索引;建立索引时,想尽对该表的所有查询搜索操作,               按照
where 选择条件建立索引,尽量为整型键建立为有且只有一个簇集索引,数据在物理上按顺序在数据
页上,缩短查找范围,为在查询经常使用的全部列建立非簇集索引,能最大地覆盖查询;但是索引不
可太多,执行 UPDATEDELETE INSERT 语句需要用于维护这些索引的开销量急剧增加;避免在索引中
有太多的索引键;避免使用大型数据类型的列为索引;保证每个索引键值有少数行。
3)使用存储过程
应用程序的实现过程中,能够采用存储过程实现的对数据库的操作尽量通过存储过程来实现,因为存
储过程是存放在数据库服务器上的一次性被设计、编码、测试,并被再次使用,需要执行该任务的应
用可以简单地执行存储过程,并且只返回结果集或者数值,这样不仅可以使程序模块化,同时提高响
应速度,减少网络流量,并且通过输入参数接受输入,使得在应用中完成逻辑的一致性实现。
4)应用程序结构和算法
建立查询条件索引仅仅是提高速度的前提条件,响应速度的提高还依赖于对索引的使用。因为人们在使用 SQL 时往往会陷入一个误区,即太关注于所得的结果是否正确,特别是对数据量不是特别大的数据库操作时,是否建立索引和使用索引的好坏对程序的响应速度并不大,因此程序员在书写程序时就忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在数据量特别大时或者大型的或是复杂的数据库环境中(如联机事务处理 OLTP 或决策支持系统 DSS)中表现得尤为明显。在工作实践中发现,不良的 SQL 往往来自于不恰当的索引设计、不充份的连接条件和不可优化的 where 子句。在对它们进行适当的优化后,其运行速度有了明显地提高!
82.JS 中的三种弹出式消息提醒(警告窗口、确认窗口、信息输入窗口)的命令是什么?
解答:alert      confirm  prompt
83.描述 JSP 和 Servlet 的区别、共同点、各自应用的范围
解答:JSP 在本质上就是 SERVLET,但是两者的创建方式不一样.Servlet 完全是 JAVA 程序代码构成,擅长于流程控制和事务处理,通过 Servlet 来生成动态网页很不直观.JSP 由 HTML 代码和 JSP 标签构成,可以方便地编写动态网页.因此在实际应用中采用 Servlet 来控制业务流程,而采用 JSP 来生成动态网页.
84.在 java 语言中 int 和       Integer 有什么区别
解答:int 是基本数据类型,Integer 是 int 的包装类,属于引用类型
85.如何获得<div id=”div1”>This isfirst layer</div>中的值?
解答:<script>
  var div1=Document.getElementById(“div1”);
  alert(div1.innerHTML)
</script>
86.JDK1.5 中支持的 for 循环的语法
解答:for(typeelement : array) {
 System.out.println(element)
}
type 集合(不仅仅指Collection,也包含普通的数组)中元素的数据类型
element遍历到  的元素array 集合对象本身(当然不只是 Collection)
87.简述 synchronized 和 java.util.concurrent.locks.Lock 的异同?
解答:主要相同点:Lock 能完成 synchronized 所实现的所有功能
主要不同点Lock 有比 synchronized 更精确的线程语义和更好的性能。              synchronized 会自动释放锁,而 Lock 一定要求程序员手工释放,并且必须在 finally 从句中释放
88.如何格式化日期
解答:
Date now=new Date();
SimpleDateFormat sdf=newSimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
String formatNow=sdf.format(now);
变量 formatNow 就是格式化好的日期。
89.将字符“12345”转换成 long 型
解答: Strings="12345";
 longnum=Long.valueOf(s).longValue();
90.struts 中如何实现国际化,涉及哪些文件?
解答:“国际化”是指一个应用程序在运行时能够根据客户端请求所来自的国家/地区、语言的不同而显示不同的用户界面。 Struts 框架通过使用<bean:message>标记以及使用 java.util 数据包中定义的 Locale 和 ResourceBundle 类来支持国际化。java.text.MessageFormat 类定义的技术可以支持消息的格式。利用此功能,开发人员不需了解这些类的细节就可进行国际化和设置消息的格式。会涉及到资源文件,不需了解这些类的细节就可进行国际化和设置消息的格式。会涉及到资源文件,struts-config.xml 配置文件,web.xml 配置文件。
91.例举在诊断 Oracle 性能问题时,常用的工具、方法
解答:
1)简单一点的可以用 toad 及 dbartisan 这样的工具。
2)纯做性能监测,比较出色的有 spolight 和 emc 的 I3,这两个软件都比较贵。
3)一些网管系统这方面也不错,如 hp 的 openview。不过定制起来不太容易,且很贵。
4)不用花钱又好用的就是 Oracle 的 statpack 了。
5)再有就是自己写脚本了,大多数有经验的 DBA 都喜欢这样的方式。优点是实用灵活。缺点是如果想出一个性能变化的曲线图等图表,且做的美观就需要些 delphi,c++builder 或是 pb 的开发功底了。
92.Oracle 启动中,startup nomount、 startup mount 有什么差别?
解答:startup nomount:启动实例,读取参数文件,分配内存空间,启动后台进程,打开跟踪文件和报警文件。startup mount:装载数据库,打开控制文件。nomount 方式下还没有读取控制文件,该选项用于在数据库的控制文件全部损坏,需要重新创建数据库控制文件或创建一个新的数据库时使用。mount 选项下并没有打开数据文件,该选项可以用来修改数据库的运行模式或进行数据库恢复。
93.Oracle 启动中,spfile.ora、init<SID>.ora、spfile<SID>.ora 这三个文件正确的先后顺序是
什么?
解答:启动数据库,使用startup 命令,Oralce 将会按照以下顺序在缺省目录中搜索参数文件:spfile<SID>.ora, spfile.ora ,init<SID>.ora a
94.说明 Oracle 数据库逻辑备份和物理备份的方式。
解答:Oracle 备份包括逻辑备份和物理备份。
1).逻辑备份
数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件。
a.输出(Export)输出可以是整个数据库、指定用户或指定表。
b.输入(Import)输入将输出建立的二进制转储文件读入并执行其命令。
2).物理备份
物理备份包含拷贝构成数据库的文件而不管其逻辑内容。
Oracle 支持两种不同类型的物理文件备份脱机备份    (offline backup)和联机备份(online b。a.脱机备份: 脱机备份用在当数据库已正常关闭,数据库处于"offline"时,要备份下列文件:所有数据文件所有控制文件所有联机日志init.ora(可选的)
b 联机备份:联机备份可用来备份任何运作在ARCHIVELOG 方式下的数据库。在这种方式下,联机日志被归档,在数据库内部建立一个所有作业的完整记录。联机备份过程具备强有力的功能。第一,提供了完全的时间点(point-in-time)恢复。第二,在文件系统备份时允许数据库保持打开状态。
102、查看下面的代码,写出可以使程序正常执行的修改方法
1.public class MyClass {
2.static String s1;
3. String s2;
4. public static void main(String args[]) {
5.      String s3;
6.      System.out.println("s1 =" + s1);
7.      System.out.println("s2 =" + s2);
8.      System.out.println("s3 =" + s3);
9. }
10.}
解答:删除第 8 行或者将第 6 行改为 String s3 = "";
103、为了显示 myStr = 23 这样的结果,写出在控制台输入的命令
 public class MyClass {
    public static void main(String args[]) {
        String s1 = args[0];
        String s2 = args[1];
        String myStr = args[2];
        System.out.printin("myStr =" + s2 + myStr);
    }
}
解答:javaMyClass 1 2 3 4
104、写出下面代码的执行结果
public class MyClass {
    static void aMethod(StringBuffer sf1, StringBuffer sf2) {
        sf1.append(sf2);
        sf2 = sf1;
    }
    public static void main(String[] args){
        StringBuffer sf1 = new StringBuffer("A");
        StringBuffer sf2 = new StringBuffer("B");
        aMethod(sf1,sf2);
        System.out .println(sf1+ ":"+sf2);
    }
}
解答:AB:B
105、第 3 行中生成的 object 在第几行执行后成为 garbage collection 的对象?
1.public class MyClass {
2. public StringBuffer aMethod() {
3.      StringBuffer sf = new StringBuffer("Hello");
4.      StringBuffer[] sf_arr = new StringBuffer[1];
5.      sf_arr[0] = sf;
6.      sf = null;
7.      sf_arr[0] = null;
8.      return sf;
9. }
10.}
解答:第 7 行
106、写出执行下面的代码后的结果
  public class MyClass {
    public static void main(String args[]) {
        java.util.Vector v1 = new java.util.Vector();
        v1.addElement("Hello");
        v1.addElement(new Float(3.14f));
        v1.addElement(10);
        System.out.println(v1.elementAt(0) + ":" + v1.elementAt(1) +":"+ v1.elementAt(2));
    }
}
解答:Hello :3.14 : 10
107、写出执行下面代码后的正确结果
interface MyDB {
public void getConnection();
}
class MyDBDriver implements MyDB {
        public void getConnection() {
           System.out.println("getConnection()");
       }
}
public class MyClass {
       public static void aMethod(MyDB db) {
           db.getConnection();
       }
       public static void main(String args[]) {
           MyDBDriver db_driver = new MyDBDriver();
           aMethod(db_driver);
       }
}
解答:getConnection()
108、下列程序运行的结果是
 class A {
   class Dog {
       private String name;
       private int age;
       private int step;
       Dog(String s, int a) {
           name = s;
           age = a;
           step = 0;
       }
       public void run(Dog fast) {
           fast.step++;
       }
    }
   public static void main(String args[]) {
       A a = new A();
       Dog d = a.new Dog("Tom", 3);
       d.step = 25;
       d.run(d);
       System.out.println(d.step);
    }
}
解答:26
109、请看下列程序,运行结果是
class Super{
int i=10;
Super(){
print();
i=20;
}
void print(){
System.out.print(i);
}
}
public class Sub extends Super{
int j=30;
Sub(){
print();
j=40;
}
void print(){
System.out.print(j);
}
public static void main(String[] args){
System.out.print(new Sub().j);
}
}
解答:03040
110、getSomething ()执行时发生 IllegalArgumentException 会出现什么样的结果?
   void makeConnection(String url) {
       try {
           getSomething();
       }catch(NullPointerException e) {
           System.out.printin("Invalid URL") ;
           return;
       }catch(Exception e) {
           System.out.println("Exception");
       }
    }
解答:Exception
111.Tomcat 服务器的默认端口是多少?怎样修改 tomcat 的端口?
解答:默认端口为 8080,可以通过 service.xml 的 Connector 元素的 port 属性来修改端口。
112.多线程有几种实现方法,都是什么?同步的方法有几种,都是什么?
解答:多线程有两种实现方法:继承 Thread 类或者实现 Runnable 接口。
实现同步也有两种方法:一种是同步方法,另一种是同步代码块。
同步方法是在方法返回类型前面加上 synchronized 关键字
同步代码块是synchronized (这里写需要同步的对象){...}
113.谈一下聚簇索引和非聚簇索引的区别以及各自的优缺点。
解答:
聚集索引,表中存储的数据按照索引的顺序存储,检索效率比普通索引高,但对数据新增/修改/删除的
影响比较大
非聚集索引,不影响表中的数据存储顺序,检索效率比聚集索引低,对数据新增/修改/删除的影响很小
114. 死锁的必要条件?怎么克服?
解答:产生死锁的四个必要条件:
互斥条件:一个资源每次只能被一个进程使用。
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。这四个条件是死锁的必要条件只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
死锁的解决方法:a 撤消陷于死锁的全部进程 b 逐个撤消陷于死锁的进程,直到死锁不存在;c 从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。 d 从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态
115.描述重做与回滚的认识;
解答:重做日志生成日志文件,是为将来恢复数据库使用的.
回滚段保存未提交数据,是为支持事务而起作用的。
116.索引组织表,聚蔟表的用途;
解答:
索引组织表:数据按主码存储和排序,同索引结构一样,不过数据直接存储于主码后面。适用于信息.检索、空间和 OLAP 程序。索引组织表的适用情况:
a.代码查找表。b.经常通过主码访问的表。c.构建自己的索引结构。d.加强数据的共同定位,要数据按特定顺序物理存储。e.经常用 between„and„对主码或唯一码进行查询。数据物理上分类查询。如一张订单表,按日期装载数据,想查单个客户不同时期的订货和统计情况。
索引聚簇表:索引聚簇表是表相关的表共享同一数据块中的相同列,并把相关数据存储中同一个数据块上。创建索引聚簇表中最重要的是对 SIZE 参数有很好的估量,否则聚簇将会降低空间利用,降低效率。

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值