| Z's profileCoolinZ故事还要继续PhotosBlogLists | Help |
|
|
9/2/2009 [ZT]数据库执行效率低原因分析 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。 9、返回了不必要的行和列 10、查询语句不好,没有优化 ●可以通过如下方法来优化查询 : 1)把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要. 2)纵向、横向分割表,减少表的尺寸(sp_spaceuse) 3)升级硬件 4)根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段 5)提高网速; 6)扩大服务器的内存,Windows 2000和SQL server 2000能支持4-8G的内存。配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置。运行 Microsoft SQL Server? 2000 时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的 1.5 倍。如果另外安装了全文检索功能,并打算运行 Microsoft 搜索服务以便执行全文索引和查询,可考虑:将虚拟内存大小配置为至少是计算机中安装的物理内存的 3 倍。将 SQL Server max server memory 服务器配置选项配置为物理内存的 1.5 倍(虚拟内存大小设置的一半)。 12/10/2006 hibernate关联jar包cglib-asm.jar: CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必须使用的jar包 dom4j.jar: dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。我早在将近两年之前就开始使用dom4j,直到现在。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包,Hibernate用它来读写配置文件。 odmg.jar: ODMG是一个ORM的规范,Hibernate实现了ODMG规范,这是一个核心的库,必须使用的jar包。 commons-pool.jar, commons-dbcp.jar: DBCP数据库连接池,Apache的Jakarta组织开发的,Tomcat4的连接池也是DBCP。 jaas.jar: JAAS是用来进行权限验证的,已经包含在JDK1.4里面了。所以实际上是多余的包。 jcs.jar: 如果你准备在Hibernate中使用JCS的话,那么必须包括它,否则就不用。 jta.jar: JTA规范,当Hibernate使用JTA的时候需要,不过App Server都会带上,所以也是多余的。 xalan.jar, xerces.jar, xml-apis.jar: Xerces是XML解析器,Xalan是格式化器,xml-apis实际上是JAXP。一般App Server都会带上,JDK1.4也包含了解析器,不过不是Xerces,是Crimson,效率比较差,不过Hibernate用XML只不过是读取配置文件,性能没什么紧要的,所以也是多余的。 11/10/2006 java和js交互1.Java Script调用java可以在网页里使用 <script language=javascript> document.applet_name.method_name(); </script> 可以对applet进行控制,也可以从applet返回值. 2.Java调用Java Script 当点击链接MakeCall时,会触发Java Script函数 function makeCall(s) { window.document.ctiApplet.testJavascript(s); alert("call maked!"); } 在这个Java Script函数中,ctiApplet是一个Applet,这样完成了java script调用 Applet. 以下是ctiApplet中的testJavascript函数和运行结果,其中又调用了Java Script. public void testJavascript(String msg) { try { // create JSObject JSObject.getWindow (this).eval ("javascript:alert('Java Script in Applet!')") ; } catch (Exception ex) { // Error on create JSObject showStatus( "Error call javascript err=" + ex ); } System.out.println(msg); } 9/28/2006 java性能优化最近都在用java 总听到外面说java的效率多么低,执行速度多么慢 不得不承认 相对c这样的编译执行语言 java稍显逊色 但对于开发人员来说 如果不能改变语言那就要改变使用语言的习惯 让它达到最的效率 1使用非阻塞I/O 版本较低的JDK不支持非阻塞I/O API。为避免I/O阻塞,一些应用采用了创建大量线程的办法(在较好的情况下,会使用一个缓冲池)。这种技术可以在许多必须支持并发I/O流的应用中见到,如Web服务器、报价和拍卖应用等。然而,创建Java线程需要相当可观的开销。 JDK 1.4引入了非阻塞的I/O库(java.nio)。如果应用要求使用版本较早的JDK,在这里有一个支持非阻塞I/O的软件包。 请参见Sun中国网站的《调整Java的I/O性能》。 2 慎用异常 异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。 异常只能用于错误处理,不应该用来控制程序流程。 3 不要重复初始化变量 默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和double变量设置成0.0,逻辑值设置成false。当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。 4 尽量指定类的final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。 另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。 5 尽量使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。 6内存数据库 许多应用需要以用户为单位在会话对象中保存相当数量的数据,典型的应用如购物篮和目录等。由于这类数据可以按照行/列的形式组织,因此,许多应用创建了庞大的Vector或HashMap。在会话中保存这类数据极大地限制了应用的可伸缩性,因为服务器拥有的内存至少必须达到每个会话占用的内存数量乘以并发用户最大数量,它不仅使服务器价格昂贵,而且垃圾收集的时间间隔也可能延长到难以忍受的程度。 一些人把购物篮/目录功能转移到数据库层,在一定程度上提高了可伸缩性。然而,把这部分功能放到数据库层也存在问题,且问题的根源与大多数关系数据库系统的体系结构有关。对于关系数据库来说,运行时的重要原则之一是确保所有的写入操作稳定、可靠,因而,所有的性能问题都与物理上把数据写入磁盘的能力有关。关系数据库力图减少I/O操作,特别是对于读操作,但实现该目标的主要途径只是执行一套实现缓冲机制的复杂算法,而这正是数据库层第一号性能瓶颈通常总是CPU的主要原因。 一种替代传统关系数据库的方案是,使用在内存中运行的数据库(In-memory Database),例如TimesTen。内存数据库的出发点是允许数据临时地写入,但这些数据不必永久地保存到磁盘上,所有的操作都在内存中进行。这样,内存数据库不需要复杂的算法来减少I/O操作,而且可以采用比较简单的加锁机制,因而速度很快。 9/9/2006 i & h连做两个项目都是用ibatis,也就顺便学习了下 感觉确实不错 之前DB的操作用hibernate比较多 可小日本偏偏喜欢ibatis 也不知道脑子是怎么想的 总用一个也不腻 简单从自身感受上比较下hibernate和ibatis的异同吧 完全的主观感受 相同:1.都是开源项目free 2.集成开发框架convenience 3.和spring结合密切 差异:1.h更擅长crud操作i对query的处理更加灵活,尤其是复合查询简直太无敌了 2.i的动态sql超级高效,h的hsql引入了面向对象的概念 总结,这两套东西都是精品 只是但专长稍有不同 在数据库大行其道时代 不掌握这两个中的一个 是难以混的开的 随手找到了动态sql的些关键字,很实用希望能有帮助
8/5/2006 JSTL初步学习1.<c:out> 没有Body时的语法 <c:out value=”value” [escapeXml=”{true|false}”] [default=”defaultValue”]/> 有Body时的语法 <c:out value=”value” [escapeXml=”{true|false}”]> 这里是Body部分 </c:out> 名字 类型 描述 value Object 将要输出的表达式 escapeXml boolean 确定以下字符:<,>,&,’,”在字符串中是否被除数,默认为true default Object 如果vaule计算后的结果是null,那么输出这个默认值 2.<c:set> 这个标签用于在某个范围(page、request、session、application等)中使用某个名字设定特定的值,或者设定某个已经存在的javabean对象的属性。他类似于<%request.setAttrbute(“name”,”value”);%> 语法1:使用value属性设定一个特定范围中的属性。 <c:set value=”value” var=”varName” [scope=”{page|request|session|application}”]/> 语法2:使用value属性设定一个特定范围中的属性,并带有一个Body。 <c:set var=”varName” [scope=”{page|request|session|application}”]> Body部分 </c:set> 语法3:设置某个特定对象的一个属性。 <c:set value=”value” target=”target” property=”propertyName”/> 语法4:设置某个特定对象的一个属性,并带有一个Body。 <c:set target=”target” property=”propertyName”> Body部分 </c:set> 名字 类型 描述 value Object 将要计算的表到式。 var String 用于表示value 值的属性,如果要在其他标签中使用,就是通过这 个var指定的值来进行的。它相当于在标签定义了一个变量,并且这个变量只能在标签中的一个。 scope String var的有效范围,可以是page|request|session|application中的一个 target String 将要设置属性的对象,它必须是javabean或则java.util.Map对象 property Object 待设定的Target对象中的属性名字,比如在javabean中有个name属性,提供了setUserId方法,那么这里填userId。 3.<c:remove> <c:remove var=”varName” [scope=”{page|request|session|application}”]/> 4.<c:catch> 这个标签相当于捕获在它里边的标签抛出的异常对象 <c:catch [var=”varName”]> 内容 </c:catch> 7/22/2006 保重身体 从今天开始青山松影几千秋,云锁高峰水自流。 万里长河漂玉带,一轮明月滚金球。 远望塞北三千里,近视江南十六洲。 美景一地赏不尽,天缘有分再来游。 哎 今天公司组织足球比赛 不幸的 我也被安排上场了 呵呵 大家也都知道了 哥哥根本就不是巴西的水平 技术是相当的不尽如人意了 但领导都在场上拼抢我也不能躲了 就上去玩了几下 别的是没看出来 不但寸功未立而且还发现哥哥的体力是越来越差了 跑了5分钟就上气不接下气了 最后体力不支还摔了一下 虽然塑胶的场地 但也给我疼屁了 这个惨劲就别提啦 平时不觉得 总认为自己还是身强力壮 血气方刚的年轻人 哎 真是错觉啊 比赛之后作了重大决定 以后每周都去健身房几次拉拉杠铃跑跑步之类的 不为身材魔鬼 但也要健康第一 不能再这样堕落下去 身体是还是自己的 自己不珍惜就没人珍惜了 也提醒各位 同行的哥哥姐姐 舒适的办公环境是将康的杀手 在写字间一天的运动量少的可怜 走的路都可以用100以内的加减法算出来 单纯的脑力劳动只能消耗我们的健康 还是多活动下四肢吧 如果没了健康 开篇那首诗的最后一句就要换成[美景一地赏不了,天缘无分不能游]了 7/18/2006 万里长征第一步在合作开发的环境下 是有团队性的 合理的利用的团队的资源 发挥自己和团队的优势 这样才能事半功倍 1吸收别人的优点 相当重要 但切忌盲目 人多了想法也多 但好的想法并没有随人数的增加增加 所以一定仔细分析新做法的可行性,效率,难易度等多方面因素 先动脑再动手 不能看别人实现了目标就跟从 因为可能有多种实现的手段 我们要找出最优的而不是谁最先实现的 可以在条件和时间允许的情况下尝试 但要合理把握 2项目中没有个人英雄主义 项目的开发成功是合作的结果 不能以自我为中心 要学会服从 可能自己认为高效的做法不一定就符合工程化开发的要求,[标准]这个词是在大项目中是远远比[效率]能打动人心的 并且在多数的时候标准的也是最高效的 3合理使用时间 在可能的情况下节省体力 项目不是100赛跑,谁第一到就是胜利,恰恰相反大的项目都像是马拉松赛跑,只有合理的分配体力和资源才能达到最优效果.最大限度避免反工,才会用最少的时间,争取走一步对一步.需求改变是不可抗拒的外力,除此之外尽量减少无用功. 到这周 也算是参与设计和开发完成了第一个比较大型的项目,从整体的角度感受了下软件开发的过程,总结以上几点 以便日后改进与大家共同进步. 5/29/2006 [ZT]数据库操作1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。
2、开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。 3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点: a)SQL的使用规范: i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。 ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。 iii. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。 iv. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。 v. 不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。 vi. 尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。 vii. 尽量使用“>=”,不要使用“>”。 viii. 注意一些or子句和union子句之间的替换 b)索引的使用规范: i. 索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。 ii. 尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要时可以通过index index_name来强制指定索引 5/21/2006 [ZT]Struts常见错误1 异常 javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login (/Login是你的action名字) 可 能原因:action没有再struts-config.xml 中定义,或没有找到匹配的action,例如在JSP文件中使用 处理:如果出现上述异常,请查看struts-config.xml中的定义部分,有时可能是打错地址可以用Struts console工具来检查。 2 异常 org.apache.jasper.JasperException: Cannot retrieve definition for form bean null 可 能原因: 这个异常是因为Struts根据struts-config.xml中的mapping没有找到action期望的form bean。大部分的情况可能是因为在form-bean中设置的name属性和action中设置的name属性不匹配所致。换句话说,action和 form都应该各自有一个name属性,并且要精确匹配,包括大小写。这个错误当没有name属性和action关联时也会发生,如果没有在action 中指定name属性,那么就没有name属性和action相关联。当然当action制作某些控制时,譬如根据参数值跳转到相应的jsp页面,而不是处 理表单数据,这是就不用name属性,这也是action的使用方法之一。 3 异常 No action instance for path /xxxx could be created 可能原因 特别提示:因为有很多中情况会导致这个错误的发生,所以推荐大家调高你的web服务器的日志/调试级别,这样可以从更多的信息中看到潜在的、在试图创建 action类时发生的错误,这个action类你已经在struts-config.xml中设置了关联(即添加了标签)。 在struts-config.xml中通过action标签的class属性指定的action类不能被找到有很多种原因,例如: 定 位编译后的.class文件失败。Failure to place compiled .class file for the action in the classpath (在web开发中,class的的位置在r WEB-INF/classes,所以你的action class必须要在这个目录下。例如你的action类位于WEB-INF/classes/action/Login.class,那么在struts -config.xml中设置action的属性type时就是action.Login). 拼写错误,这个也时有发生,并且不易找到,特别注意第一个字母的大小写和包的名称。 在struts-config.xml中指定的action类没有继承自Stuts的Action类,或者你自定义的Action类没有继承自Struts提供的Action类。 你的action类必须继承自Struts提供的Action类。 你的classpath的问题。例如web server没有发现你的资源文件,资源文件必须在WEB-INF/classes/目录下。 4 异常 javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN 可能原因 没有位form bean中的某个变量定义getter 方法 这个错误主要发生在表单提交的FormBean中,用struts标记时,在FormBean中必须有一个getUsername()方法。注意字母“U”。 5 Exception javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection 可能原因 不是标识Struts actionServlet的标记就是映射.do扩展名的标记或者两者都没有在web.xml中声明。 在struts-config.xml中的打字或者拼写错误也可导致这个异常的发生。例如缺少一个标记的关闭符号/>。最好使用struts console工具检查一下。 另外,load-on-startup必须在web.xml中声明,这要么是一个空标记,要么指定一个数值,这个数值用来表servlet运行的优先级,数值越大优先级越低。 还有一个和使用load-on-startup有关的是使用Struts预编译JSP文件时也可能导致这个异常。 6 Exception javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope Probable Causes 试图在Struts的form标记外使用form的子元素。这常常发生在你在后面使用Struts的html标记。 另外要注意可能你不经意使用的无主体的标记,如,这样web 服务器解析时就当作一个无主体的标记,随后使用的所有标记都被认为是在这个标记之外的,如又使用了 还有就是在使用taglib引入HTML标记库时,你使用的prefix的值不是html。 3/23/2006 [ZT]解决sql-server无法安装问题安装SQL Server2000的时候,安装程序提示安装程序被挂起 无法继续安装 应该让无数英雄叹息不止 呵呵 现在哥哥找到了解决办法了 可以挽救一次系统重装的浩劫
解决办法:
修改注册表删除子键HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager下的PendingFileRenameOperations
猜测解释: 按照名称来理解,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager应该存放的是当前系统会话的快照,而PendingFileRenameOperations记录的是一个未成功进行的文件更名操作,SQL Server2000在安装时可能会使用这个键值,记录在安装过程中对临时文件的操作,如果SQL Server2000在安装进程启动时就发现这个键值存在,它就认为上一个安装程序没有完成,从而拒绝继续自身的安装进程。而按照道理,任何一个改写过此键值的程序都应当在结束或者系统重新启动的时候将这个键值删除,但如果由于种种原因这个操作没有被进行的话,那么SQL Server2000自然会得出错误的结论。 3/15/2006 用心写下你的名字--vc设置字体程序固然要写 但对你从未放弃.对你的思念给我了无限的灵感 快乐的期待与你再次相遇
要改变其字体首先要CFont::CreateFont创建一个字体,然后用CWnd::SetFont选择此字体,赋给控件. BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename );
参数说明: nHeight :字体高度.>0:字体的高度值;=0:字体采用缺省直.<0:此值的绝对值为高度. nWidth :字体宽度. nEscapement :文本行的倾斜度. nOrientation :字符基线的倾斜度. nWeight :字体的粗细.如下: .FW_DONTCARE .FW_THIN .FW_EXTRALIGHT ..... bItalic :字体是否为斜体 bUnderline :字体是否带下划线 cStrikeOut :字体是否带删除线 nCharSet :字体的字符集 .ANSI_CHARSET .DEFAULT_CHARSET .SYMBOL_CHARSET ...... nOutPrecision :字符的输出精度 nClipPrecision :字符裁剪的精度 nQuality :字符的输出质量 nPitchAndFamily :字符间距和字体族(低位说明间距,高位说明字符族) lpszFacename :字体名称 2/17/2006 MYSQL可不是那么简单(1)、back_log:
back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。默认数值是50,我把它改为500。 (2)、interactive_timeout:
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800,我把它改为7200。 (3)、key_buffer_size:
索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存,所以我把它改为402649088(400MB)。 (4)、max_connections:
允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100,我把它改为1024 。 (5)、record_buffer:
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128K),我把它改为16773120 (16M) (6)、sort_buffer:
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M),我把它改为 16777208 (16M)。 (7)、table_cache:
为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。 (8)thread_cache_size:
可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。我把它设置为 80。 (9)、wait_timeout:
服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为7200。 毕业设计不是那么是人生的最后一次作业 我不想让他没有亮点.... 1/25/2006 小jsp中的包涵关系JSP中动态INCLUDE与静态INCLUDE 哈哈这个是老生长谈了 但经常看看以免阴沟翻船
1.动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
<jsp:include page="included.jsp" flush="true" />
2.静态INCLUDE用include伪码实现, 它不会检查所含文件的变化,适用于包含静态页面
<%@ include file="included.htm" %> 1/24/2006 数据的的3重范式第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值 都是不可再分的最小数据单位,则称R是第一范式的关系.例:如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话 和一个家里电话号码) 规范成为1NF有三种方法:
一是重复存储职工号和姓名.这样,关键字只能是电话号码. 二是职工号为关键字,电话号码分为单位电话和住宅电话两个属性 三是职工号为关键字,但强制每条记录只能有一个电话号码. 以上三个方法,第一种方法最不可取,按实际情况选取后两种情况. 第二范式(2NF):如果关系模式R(U,F)中的所有非主属性都完全依赖于任意一个候选关键字,则称关系R 是属于第二范式的.
例:选课关系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO为学号, CNO为课程号,GRADEGE 为成绩,CREDIT 为学分. 由以上条件,关键字为组合关键字(SNO,CNO) 在应用中使用以上关系模式有以下问题: a.数据冗余,假设同一门课由40个学生选修,学分就 重复40次. b.更新异常,若调整了某课程的学分,相应的元组CREDIT值都要更新,有可能会出现同一门课学分不同. c.插入异常,如计划开新课,由于没人选修,没有学号关键字,只能等有人选修才能把课程和学分存入. d.删除异常,若学生已经结业,从当前数据库删除选修记录.某些门课程新生尚未选修,则此门课程及学分记录无法保存. 原因:非关键字属性CREDIT仅函数依赖于CNO,也就是CREDIT部分依赖组合关键字(SNO,CNO)而不是完全依赖. 解决方法:分成两个关系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT).新关系包括两个关系模式,它们之间通过SC1中的外关键字CNO相联系,需要时再进行自然联接,恢复了原来的关系 第三范式(3NF):如果关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递信赖,则称关系R是属于第三范式的. 1/18/2006 J2EE相关名词1、 J2EE (Java 2 Enterprise Edition)Java2 企业版 概念:J2EE是开放的、基于标准的平台,用以开发、部署和管理N层结构、面向web的,以服务器为中心的企业级的应用。 2、 EJB (Enterprise JavaBean)企业JavaBean 概念:JavaBean(不同于EJB)是一种Java组件(类)。 3、 JDBC(Java Database Connectivity)Java标准的数据库连接技术。 4、 JTA (Java Transaction API)Java事务API 5、 API (Application Programming Interface) 应用编程接口. 6、 JNDI (Java Naming and Directory Interface)Java名字和目录接口 7、 RMI (Remote Method Invocation)远程方法调用。 8、 JMS (Java Message Service)Java消息服务。 9、 JAAS (Java Authentication and Authorization Service)Java认证与授权服务。 10、 MVC(Model View Controller)模型视图控制器。 11、 URL (Uniform Resource Locator)统一资源定位器。 12、 WAR (Web Archive)Web档案文件。 13、 DTD (Document Type Description)文档类型描述。 14、 JSP (Java Server Pages)Java服务器页面。 15、 ODBC(Open Database Connectivity)开放数据库连接。 16、 OCI (Oracle Client Iinterface)Oracle客户机接口。 17、 JVM (Java Virtual Machine)Java虚拟机。 18、 JDK (Java Development Kit)Java开发工具集。 19、 DBMS (Database Management System)数据库管理系统。 20、 DTP (Distributed Transaction Processing)分布式处理标准。 21、 BLOB(Binary Large Object)二进制大对象。 22、 CLOB (Character Large Object)字符大对象。 23、 CMP (Container Managed Persistence)容器管理持久性。 24、 PTP(Point-To-Point)JMS的点对点。 25、 Pub/sub (Publish/Subscribe)JMS的发布/订阅消息处理模型。 1/1/2006 10自动运行的注册表位置一、当前用户专有的启动文件夹
这是许多应用软件自动启动的常用位置,Windows自动启动放入该文件夹的所有快捷方式。用户启动文件夹一般在:\Documents and Settings\<用户名字>\“开始”菜单\程序\启动,其中“<用户名字>”是当前登录的用户帐户名称。 二、对所有用户有效的启动文件夹 这是寻找自动启动程序的第二个重要位置,不管用户用什么身份登录系统,放入该文件夹的快捷方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。该文件夹一般在:\Documents and Settings\All Users\“开始”菜单\程序\启动。 三、Load注册键 介绍该注册键的资料不多,实际上它也能够自动启动程序。位置:HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load。 四、Userinit注册键 位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit。这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个userinit.exe,如图一,但这个键允许指定用逗号分隔的多个程序,例如“userinit.exe,OSA.exe”(不含引号)。 和load、Userinit不同,Explorer\Run键在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具体位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run。 六、RunServicesOnce注册键 RunServicesOnce注册键用来启动服务程序,启动时间在用户登录之前,而且先于其他通过注册键启动的程序。RunServicesOnce注册键的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce。 七、RunServices注册键 RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录之前。RunServices的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices。 八、RunOnce\Setup注册键 RunOnce\Setup指定了用户登录之后运行的程序,它的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup。 九、RunOnce注册键 安装程序通常用RunOnce键自动运行程序,它的位置在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce和HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序,运行时机在其他Run键指定的程序之前。HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动”文件夹的内容之后运行。如果是XP,你还需要检查一下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx。 十、Run注册键 Run是自动运行程序最常用的注册键,位置在:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行,但两者都在处理“启动”文件夹之前一、当前用户专有的启动文件夹 这是许多应用软件自动启动的常用位置,Windows自动启动放入该文件夹的所有快捷方式。用户启动文件夹一般在:\Documents and Settings\<用户名字>\“开始”菜单\程序\启动,其中“<用户名字>”是当前登录的用户帐户名称。 二、对所有用户有效的启动文件夹 这是寻找自动启动程序的第二个重要位置,不管用户用什么身份登录系统,放入该文件夹的快捷方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。该文件夹一般在:\Documents and Settings\All Users\“开始”菜单\程序\启动。 三、Load注册键 介绍该注册键的资料不多,实际上它也能够自动启动程序。位置:HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load。 四、Userinit注册键 位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit。这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个userinit.exe,如图一,但这个键允许指定用逗号分隔的多个程序,例如“userinit.exe,OSA.exe”(不含引号)。 和load、Userinit不同,Explorer\Run键在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具体位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run。 六、RunServicesOnce注册键 RunServicesOnce注册键用来启动服务程序,启动时间在用户登录之前,而且先于其他通过注册键启动的程序。RunServicesOnce注册键的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce。 七、RunServices注册键 RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录之前。RunServices的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices。 八、RunOnce\Setup注册键 RunOnce\Setup指定了用户登录之后运行的程序,它的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup。 九、RunOnce注册键 安装程序通常用RunOnce键自动运行程序,它的位置在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce和HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序,运行时机在其他Run键指定的程序之前。HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动”文件夹的内容之后运行。如果是XP,你还需要检查一下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx。 十、Run注册键 Run是自动运行程序最常用的注册键,位置在:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行,但两者都在处理“启动”文件夹之前 vc中执行 其他应用程序 1、Winexec 这个函数最简单,只有两个参数,原型如下: UINT WinExec( LPCSTR lpCmdLine, // address of command line UINT uCmdShow // window style for new application ); 使用方法如下: WinExec(_T("D:\\Program Files\\zeecalls\\zeecalls.exe"),SW_SHOWMAXIMIZED); 这句话将会以最大化的方式打开zeecalls.exe,需要注意的是,在VC中,‘/’需要以‘//’来写。 2、ShellExecute shellExecute比WinExex灵活一点,所以参数就要多一点,原型如下: HINSTANCE ShellExecute( HWND hwnd, //父窗口句柄 LPCTSTR lpOperation,//打开方式 LPCTSTR lpFile, //待打开的文件名 LPCTSTR lpParameters, LPCTSTR lpDirectory,//文件路径 INT nShowCmd ); 同样,我们也可以通过这个函数来打开我们需要的文件: ShellExecute(NULL,_T("open"),_T("zeecalls.exe"),NULL,_T("D:\\Program Files\\zeecalls\\"),SW_SHOWNORMAL); |
|
|