| lhylj2's profile仓储室PhotosBlogLists | Help |
|
December 10 行使否决权,我拒绝了一个程序员 他的简历,是我们从一厚沓子中千挑万选出来的,密密麻麻的项目经验,使人不会怀疑他的开发能力,通过后来的面谈也印证了这点。 说一下我对写简历的想法。 July 07 AJAX基础教程[转]AJAX基础教程 http://www.cnblogs.com/eme/archive/2006/04/13/374260.html 什么是 AJAX? 这两项被忽视的性能是: 步骤 1 – "请!" --- 如何发送一个HTTP请求 为了用JavaScript向服务器发送一个HTTP请求, 需要一个具备这种功能的类实例. 这样的类首先由Internet Explorer以ActiveX对象引入, 被称为XMLHTTP. 后来Mozilla, Safari 和其他浏览器纷纷仿效, 提供了XMLHttpRequest类,它支持微软的ActiveX对象所提供的方法和属性. 因此, 为了创建一个跨浏览器的这样的类实例(对象), 可以应用如下代码: if (window.XMLHttpRequest) { // Mozilla, Safari, ... (上例对代码做了一定简化,这是为了解释如何创建XMLHTTP类实例. 实际的代码实例可参阅本篇步骤3.) 如果服务器的响应没有XML mime-type header,某些Mozilla浏览器可能无法正常工作. 为了解决这个问题, 如果服务器响应的header不是text/xml,可以调用其它方法修改该header. http_request = new XMLHttpRequest(); 接下来要决定当收到服务器的响应后,需要做什么.这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应.可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示: http_request.onreadystatechange = nameOfTheFunction; 注意:在函数名后没有括号,也无需传递参数.另外还有一种方法,可以在扉页(fly)中定义函数及其对响应要采取的行为,如下所示: http_request.onreadystatechange = function(){ 在定义了如何处理响应后,就要发送请求了.可以调用HTTP请求类的open()和send()方法, 如下所示: http_request.open('GET', 'http://www.example.org/some.file', true); open()的第一个参数是HTTP请求方式 – GET, POST, HEAD 或任何服务器所支持的您想调用的方式. 按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求.有关HTTP请求方法的详细信息可参考http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html W3C specs name=value&anothername=othervalue&so=on
当发送请求时,要提供指定处理响应的JavaScript函数名. http_request.onreadystatechange = nameOfTheFunction; 我们来看看这个函数的功能是什么.首先函数会检查请求的状态.如果状态值是4,就意味着一个完整的服务器响应已经收到了,您将可以处理该响应. if (http_request.readyState == 4) { readyState的取值如下: 接着,函数会检查HTTP服务器响应的状态值. 完整的状态取值可参见 W3C site. 我们着重看值为200 OK的响应. if (http_request.status == 200) { 在检查完请求的状态值和响应的HTTP状态值后, 您就可以处理从服务器得到的数据了.有两种方式可以得到这些数据: http_request.responseText – 以文本字符串的方式返回服务器的响应
我们现在将整个过程完整地做一次,发送一个简单的HTTP请求. 我们用JavaScript请求一个HTML文件, test.html, 文件的文本内容为"I'm a test.".然后我们"alert()"test.html文件的内容. <script type="text/javascript" language="javascript"> http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... if (!http_request) { } function alertContents() { if (http_request.readyState == 4) { }
步骤 4 – "X-文档" --- 处理XML响应 在前面的例子中,当服务器对HTTP请求的响应被收到后,我们会调用请求对象的reponseText属性.该属性包含了test.html文件的内容.现在我们来试试responseXML属性. 首先,我们新建一个有效的XML文件,后面我们将使用这个文件.该文件(test.xml)源代码如下所示: <?xml version="1.0" ?> 在该脚本中,我们只需修改请求部分: ... 接着,在alertContents()中,我们将alert()的代码alert(http_request.responseText);换成: var xmldoc = http_request.responseXML;
July 05 小璐熙四个半月 四个多月过去,璐熙已经13斤了。
最爱咋吧她妈妈那口奶,胃口不大,一次就吃一点,能吃些蛋黄、米粉类的辅食。
吃饭要上桌子,典型的馋猫儿。
最爱喝酸的果汁,尤其是樱桃汁,喂得慢了就哭闹。能报着桃子舔半天,其实基本上吃不着多少。
可以一晚上不起夜。隔一天玩个大的。
从来不早起,晚上睡得晚(跟他爹的作息时间有点像),白天还有好几觉。
喜欢侧身睡觉,像个小大人似的。尤其爱扒着睡觉,她姥姥正要给她改这个毛病。
翻身翻得特别利索,放到床上时要时刻盯住了。
小腿特别有劲,踹人可疼了。
会自娱自乐,没人陪着照样自己玩,每天都挺开心,见到人就笑,能跟大人哦啊的“对话”。
胆儿特别小,动静稍大点儿就把她吓一跳。
不喜欢玩具娃娃,一见面就开掐。
喜欢出去玩,见到汽车眼睛就发直。
系统启动不久,无法连接到网络的解决办法现象:系统启动一段时间后无法连接到网络;事件查看器报告适配器 xxx: 适配器链接处于关闭状态,来源:E100B;天网防火墙报
接收到 xxx.xx.xx.xxx 的 UDP 数据包,
本机端口: xxxx, 对方端口: xxxxx 该包被拦截。 我在网上找了几圈,遇见过相同问题的,没有写解决办法。
我的解决办法是:在天网中添加两条ip规则,允许其连接,不清楚会不会有其它风险。
规则一: 规则二:
名称:链接网络TCP(随便取) 连接网络UDP
数据包方向:接收 接收
对方IP地址:任何地址 任何地址
数据包协议类型:TCP UDP
本地端口:从1025到65535 从1025到65535
当满足上面条件时:通行 通行
Hessian的HelloWord 在一个集成项目接口的实现里用到了Hessian,类似以前用过的Burlap,整理了一下:
Hessian,Burlap是Caucho提供的两种基于Http的轻量级远程服务。
Hessian像RMI那样,使用二进制消息来建立客户端和服务端之间的交流。与其他二进制远程技术(想RMI)不同的是,它可以移植到其他非Java的语言。 Burlap是一种基于Xml的远程技术,这使得他可以移植到任何可以解析XML的语言中。比起Hessian,它的可读性更强。和其他基于Xml的远程技术(如SOAP和XML-RPC)不同,它的消息结构尽可能简单,不需要额外的外部定义语言(如WSDL或IDL). 按照文档中的步骤编写HelloWord例子,一个接口、一个实现、一个Client再配置一下web.xml就OK。需要注意的是实现接口时不要继承HessianServlet,否则会报错。
自己机器的环境:jdk1.5、Tomcat5.5
//BasicAPI.java
package app.demo;
public interface BasicAPI {
public String hello(); public User getUser(); } //BasicService.java
package app.demo;
public class BasicService implements BasicAPI { private String _greeting = "Hello, world"; public void setGreeting(String greeting) {
_greeting = greeting; } public String hello() {
return _greeting; } //BasicClient.java
package app.demo;
import com.caucho.hessian.client.HessianProxyFactory;
public class BasicClient {
public static void main(String[] args) throws Exception { String url = "http://192.168.0.89:8083/hessianweb/hello";//配置为自己机器的ip端口和应用名 HessianProxyFactory factory = new HessianProxyFactory();
BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url); System.out.println("Hello: " + basic.getUser().getPassword());
} } public User getUser(){ return new User("jerry","HelloWord"); } } //User.java
package app.demo;
public class User implements java.io.Serializable { String userName = "snoopy"; String password = "showme"; public User(String user, String pwd) { this.userName = user; this.password = pwd; } public String getUserName() { return userName; } public String getPassword() { return password; } } //web.xml
<web-app> <servlet><servlet-name>hello</servlet-name> <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class> <init-param> <param-name>home-class</param-name> <param-value>app.demo.BasicService</param-value> </init-param> <init-param> <param-name>home-api</param-name> <param-value>app.demo.BasicAPI</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app> April 26 连接Oracle RAC 遇到的问题Oracle版本:10.2.0.1.0 (RAC) 驱动版本:10.1.0.5、10.2.0.1、10.2.0.3 现象:时而可以取到连接,时而取不到,报错 Connection refused ... ERR=1153 ... VSNNUM=169869568 ... 原因:oracle驱动不匹配,导致不能保证每次都能取到连接 解决办法:换成 9.2.0.4 的jdbc驱动来连接10.2.0.1.0 RAC April 15 代码:Java通过FTP传文件 public static void main(String[] args) throws Exception{
String hostName = "221.186.184.68"; int prot = 21; String userName = "administrator"; String password = "111111"; String remoteDir = "/"; FTPClient ftpClient = new FTPClient(); ftpClient.connect(hostName,prot); System.out.println("连接到ftp服务器:" + hostName + " 成功..开始登录"); ftpClient.login(userName, password); System.out.println(ftpClient.isConnected()); ftpClient.changeWorkingDirectory("/"); FTPFile[] remoteFiles = ftpClient.listFiles(); System.out.println("目录" + remoteDir + "下的文件:"); if(remoteFiles != null) { for(int i=0;i<remoteFiles.length;i++){ String name = remoteFiles[i].getName(); name = new String(name.getBytes("ISO8859_1"),"GBK"); long length = remoteFiles[i].getSize(); String readableLength = FileUtils.byteCountToDisplaySize(length); System.out.println(name + ":\t\t" + readableLength); } }//if ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//无此句,传输非txt文件会变大 File file1 = new File("c:/sql.txt"); ftpClient.storeFile(file1.getName(), new FileInputStream(file1)); ftpClient.logout(); } April 05 CVSNT "No such file or directory" 的解决方法现象:架设好的外网CVSNT服务器,可以检出可共享,无法提交。
原因:CVS用户权限不足,无法写入 C:\WINNT\TEMP 目录。
解决方法:对 C:\WINNT\TEMP 目录给CVS用户授权为“完全控制”。 May 11 停用MyEclipse改换WTPApril 15 动态添加附件<table> <tbody id="tbOneFile"> <tr> <td height="39">电子附件:</td> <td><input type=file name='file0' size=30 "> </td> <td><!--input type=button name='rmAttach' size=2 value="移除附件" onclick="javascript:delAttach()"--> </td> </tr> </tbody> <tbody> <tr> <td height="39"></td> <td> <div onclick="javascript:addAttach()">增加附件</div> <div id="tbHref"> <div id="tbAttachHref" name="tbAttachHref" onclick="javascript:delAttach()" style="visibility:hidden">移除附件</div> </div> </td> <td colspan="2"> </td> </tr> </tbody> </table> <script> //增加 function addAttach(afterRowIndex){ var allFiles= document.all("tbOneFile").rows; var firstSelected; if(afterRowIndex==null){ firstSelected=allFiles.length-2; } else { firstSelected = -2; } var newRow = document.all("tbOneFile").rows[0].cloneNode(true); var refRow = allFiles[firstSelected+1]; refRow.parentElement.insertBefore(newRow,null ); //说明:在refRow代表的现有子节点的前面插入newRow节点。如果refChild为null,则把新节点插到资节点列表的末尾。 if(firstSelected==-1){//出来两个附件的时候出“移除附件” tbParent = document.getElementById("tbHref"); document.getElementById("tbAttachHref").style.visibility = "visible"; } } //删除 function delAttach(afterRowIndex){ var allFiles= document.all("tbOneFile").rows; var firstSelected; if(afterRowIndex==null){ firstSelected=allFiles.length-2; }else firstSelected = afterRowIndex; //var newRow = document.all("tbOneFile").rows[0].cloneNode(true); var refRow = allFiles[firstSelected+1]; refRow.parentElement.removeChild(refRow); if(firstSelected==0){//只剩一个附件的时候不出“移除附件” tbParent = document.getElementById("tbHref"); document.getElementById("tbAttachHref").style.visibility = "hidden"; } } </script> April 14 oracle text部分关于Oracle Text 的相关资料。测试Oracle版本9.2.0.1 字符集 GBK UTF-8 都能通过
Oracle Text是Oracle9i采用的新名称,在Oracle8/8i中它被称作Oracle interMedia Text,在Oracle8以前它的名称是Oracle ConText Cartridge。
create table DOCS(ID NUMBER not null, TEXT VARCHAR2(80));
alter table DOCS add primary key (ID); create index docs_text on docs(text) indextype is ctxsys.context; --此时如果监听没配置好,创建索引会失败。
select * from dr$docs_text$i
这些索引表都会占用用户表空间:DR$DOCS_TEXT$I DR$DOCS_TEXT$K DR$DOCS_TEXT$N DR$DOCS_TEXT$R
1.文本存储在数据库中,可以是 CLOB,BLOB,BFILE,VARCHAR2,CHAR 类型的文本数据。 2.文本列语言是数据库建立时默认的字符集。 3.使用数据库默认的终止目录stoplist,stoplist记录存在于文本列中但不对其索引的词。 4.允许模糊查询。 begin
ctx_ddl.create_preference('my_lexer','chinexe_vgram_lexer');--支持GBK UTF8,效率底chinese_lexer 效率高但是仅支持utf8 end; --drop index docs_text;--强制删除索引:drop index docs_text force;
create index docs_text on docs(text) indextype is ctxsys.context parameters('lexer my_lexer'); --使用愚蠢 lexer 的源表和维持索引表的控件对比,注意表空间大小的设置和磁盘分配 -- 6 M 80 M -- 80 M 900 M -- 230 M 2880 M --1344 M 15232 M --可以使用 stoplist stopwords 排除:的 地 得 是 等。。
--性能 扩大 DEFAULT_INDEX_MEMORY MAX_INDEX_MEMORY
--(注意:在少量内存中索引大量文档会导致出现碎片索引的情况。)
select * from ctx_parameters 索引失败会记录在系统表中:
CTX_USER_INDEX_ERRORS CTXSYS.CTX_INDEX_ERRORS select * from ctx_user_index_errors--可以清除表内记录 重建索引:用新的词法分析器替换现有的:
alter index docs_text rebuild parameters('replace lexer my_lexer'); 删除自定义参数:my_lexer begin ctx_ddl.drop_preference('my_lexer'); end; 源表数据变动后,并不能马上反映到dr$docs_text$i表,用下列看已经发生的变动
select * from ctx_user_pending 同步(sync):将新的term保存到I表
优化(optimize):清除I表的垃圾,主要是源表已经删除的数据从I表删除 可以使用Oracle提供的ctx_ddl包同步和优化索引,对于CTXCAT类型的索引来说, 进行DML时,oracle自动维护索引
手工更新索引:
alter index docs_text rebuild parameters('sync'); Oracle9i提供了新的专门用于更新索引的包:ctx_ddl.sync_index(...)
例如使用2M内存同步索引 docs_text
begin ctx_ddl.sync_index('docs_text','2M');--执行者如果是 CTXSYS 用户,索引名可以为null,这样默认优化全部的 CONTEXT 索引,如同那个不稳定的 CTXSRV 服务 end; 计算主题符合度
select id,score(1), text from docs where contains(text,'幅度撒',1)>0 order by score(1) desc; 可以优化索引(CTX_DDL.OPTIMIZE_INDEX),使用FULL或者FAST参数参数降低索引碎片,提高索引效率
当文本从表中delete时索引term并没有马上删除,这就占据了控件导致查询的额外开销,需要进行垃圾处理。注:更新删除后垃圾处理很有必要。 begin ctx_ddl.optimize_index('docs_text','full');--参数fast仅会使行紧凑,旧数据不从索引中删除 end; 对经常查询的单词进行专门优化--提高热词的查询效率。
begin ctx_ddl.optimize_index('docs_text','token',token=>'公文'); end; 使用job定时同步和优化(job跟表在用一个用户下面)--暂时还没调通,等仔细看看job再回来解决它 :)
--sync variable jobno number; begin dbms_job.submit(:jobno,'ctx_ddl.sync_index(''docs_text'');',sysdate,'sysdate+(1/24/4)'); --每隔15分钟同步一次
commit; end; --optimizer
variable jobno number; begin dbms_job.submit(:jobno,'ctx_ddl.optimize_index(''myindex'',''full'');',sysdate,'sysdate+1'); --每隔一天做一次全面优化
commit; end; SQL> create or replace procedure hsp_sync_index as
2 begin 3 ctx_ddl.sync_index('id_cont_msg'); 4 end; 5 / Procedure created. Elapsed: 00:00:00.08 SQL> VARIABLE jobno number;
SQL> BEGIN 2 DBMS_JOB.SUBMIT(:jobno,'hsp_sync_index();', 3 SYSDATE, 'SYSDATE + (1/24/4)'); 4 commit; 5 END; 6 / PL/SQL procedure successfully completed. Elapsed: 00:00:00.27 SQL> create or replace procedure hsp_optimize_index as
2 begin 3 ctx_ddl.optimize_index('id_cont_msg','FULL'); 4 end; 5 / SQL> VARIABLE jobno number;
SQL> BEGIN 2 DBMS_JOB.SUBMIT(:jobno,'hsp_optimize_index();', 3 SYSDATE, 'SYSDATE + 1'); 4 commit; 5 END; 6 / Procedure created. Elapsed: 00:00:00.03 PL/SQL procedure successfully completed. Elapsed: 00:00:00.02 |
|
|