2011年6月9日
#
1、判断是否为空
function isEmpty(s)
{
return ((s == undefined || s == null ||s == '' || s.replace(/(^\s*)|(\s*$)/g, "")=='') ? true : false);
} 2、判断数组中是否有相等元素
function checkEqual(arr){
for(i=0;i<arr.length;i++){
for(j=i+1;j<arr.length;j++){
if(arr[i].value==arr[j].value){
return true;
}
}
}
return false;
} 3、对HTML标签注册click事件,并获取该元素的父标签,及子标签
Event.on(Dom.getElementsByClassName('check','a'),'click',function(evt){
Event.preventDefault(evt);
var target = Event.getTarget(evt);
var td = Dom.getAncestorByTagName(target,'tr');
ar title = td.getElementsByTagName("input")[0].value;}); 4、对button注册click事件,并提交表单
Event.on("j_add","click",function(evt){
**********
document.form1.event_submit_do_add.value="submit";
document.form1.submit();
}
}); 5、在父元素下创建子元素,动态添加页面元素
var tab =document.getElementById("guanlian");
var newRow = tab.insertRow(0);//添加了一行
var newTd1 = newRow.insertCell(0);
newTd1.innerHTML="关联词名"; 6、借助YUI进行Ajax异步交互
var callback ={
success:function(o) {
var result = o.responseText;
document.getElementById('chk_thesaurus').innerHTML=result;
},
failure: function(o) {
alert("验证请求,链接服务器失败!");
}
}
;
var sUrl = '请求的页面地址及参数';
YAHOO.util.Connect.asyncRequest('GET',sUrl,callback); 7、div样式的两种写法(.divforcheck{ width:500px; height:300px; background-color:#f00; color:#fff; }
<div style="border: 1px dotted black;background-color:#FFFFFF;width:500px ">)
8、confirm的用法
if(confirm("您修改了关联词,请确定在提交前进行了验证")){
document.form1.event_submit_do_add.value="submit";
document.form1.submit();
}
9、webX下AJAX服务器端编码:
1、在反馈ajax请求的页面(Vm页面)中填写符合HTML标准的反馈InnerHTML
2、通过 rundata.getResponse().getWriter().print("var ajaxRequestData_bizType = "+JSONObject.fromObject(tree).toString());
context.put("result", net.sf.json.JSONArray.fromObject(tree).toString());(打成JSON串)
上周五开始一项开发工作,将树形的数据结构放到关系型数据库,并提供页面进行数据的维护,遇到的问题:1、需求不清晰;2、表结构不清晰;3;前端开发技术非常不熟悉;
结果就是开发缓慢,系统交互效果差,做出来的页面自己都不满意,开发慢导致上线压力大,心里压力也大,很严重的加班。。。。。。。
总结下用到的页面技术:1、CSS+DIV样式定义的两种写法(.divforcheck{ width:500px; height:300px; background-color:#f00; color:#fff; }
<div style="border: 1px dotted black;background-color:#FFFFFF;width:500px ">)
2、JS:动态的添加页面元素var tab =document.getElementById("guanlian");
var newRow = tab.insertRow(0);//添加了一行
var newTd1 = newRow.insertCell(0);
var newTdName = newRow.insertCell(1); ;
判断为空function isEmpty(s) { return ((s == undefined || s == null || s == "") ? true : false); }
弹出选择框:if(confirm("您修改了关联词,请确定在提交前进行了验证")){
document.form1.event_submit_do_add.value="submit";
document.form1.submit();}
Ajax交互:
var callback ={
success:function(o) {
var result = o.responseText;
document.getElementById('chk_thesaurus').style.display="";
document.getElementById('chk_thesaurus').innerHTML=result;
document.getElementById('chk_thesaurus').display = "block";
},
failure: function(o) {
alert("验证请求,链接服务器失败!");
}
}
;
var sUrl = 'ajax/checkThesaurus.htm?relName='+encodeURIComponent(encodeURIComponent(title));
YAHOO.util.Connect.asyncRequest('GET',sUrl,callback); 服务器段java代码两种写法:1、在反馈ajax请求的页面中填写符合HTML标准的反馈InnerHTML
2、通过
rundata.getResponse().getWriter().print("var ajaxRequestData_bizType = "+JSONObject.fromObject(tree).toString());
context.put("result", net.sf.json.JSONArray.fromObject(tree).toString());(打成JSON串)
3、表单提交处理(JS提交表单)document.form1.event_submit_do_add_treeWordProperty.value="submit";
document.form1.submit();
java代码的Exception控制、异常处理
之前正则一直不支持嵌套循环的验证即类似于html的格式较验,昨天晚上无聊就考虑了一下这个的可实现方式:通过维护特征“符号”队列来实现
如在有特定格式的文件中(标签成对出现的情况下)顺序读入待验证标签放入队列中,较验对应的下一个输入如果为与该标签对应的标签那么将该标签从队列中弹出,如果不对应则将下一个标签也放入队列中,进行下一次的验证直到该文件结束时如果队列恰好为空那么证明文件较验通过
记录点常识:
1、
为实现全表扫描,Oracle读取表中所有的行,并检查每一行是否满足语句的WHERE限制条件一个多块读操作可以使一次I/O能读取多块数据块 (db_block_multiblock_read_count参数设定),而不是只读取一个数据块,这极大的减 少了I/O总次数,提高了系统的吞吐量,所以利用多块读的方法可以十分高效地实现全表扫描,而且只有在全表扫描的情况下才能使用多块读操作。在这种访问模 式下,每个数据块只被读一次。
2、先通过index查找到数据对应的rowid值(对于非唯一索引可能返回多个rowid值),然后根据rowid直接从表中得到具体的数据,这 种查找方式称为索引扫描或索引查找(index lookup)。一个rowid唯一的表示一行数据,该行对应的数据块是通过一次i/o得到的,在此情况下该次i/o只会读取一个数据库块。
在索引中,除了存储每个索引的值外,索引还存储具有此值的行对应的ROWID值。
索引扫描可以由2步组成:
(1) 扫描索引得到对应的rowid值。
(2) 通过找到的rowid从表中读出具体的数据。
每步都是单独的一次I/O,但是对于索引,由于经常使用,绝大多数都已经CACHE到内存中,所以第1步的 I/O经常是逻辑I/O,即数据可以从内存中得到。但是对于第2步来说,如果表比较大,则其数据不可能全在内存中,所以其I/O很有可能是物理I/O,这 是一个机械操作,相对逻辑I/O来说,是极其费时间的。所以如果多大表进行索引扫描,取出的数据如果大于总量的5% —— 10%,使用索引扫描会效率下降很多
然后对于特殊的业务场景要先做数据的筛选,然后再做查询 关于查询筛选出来的结果集能不能走到索引这个问题需要再测试一下
通过vmware或者virtualBox安装虚拟机后,希望能够不用在程序窗口切来切去,所以通过ssh连接到虚拟机就好了,有的人按步骤安下来就很好用,但是我这边遇到了问题,首先上虚拟机设置网络连接这里需要设置成桥接(bridged adapter)原因如是:虚拟机接网络连接方式一般分为四种NAT、bridged adapter(桥接)、网络、host-only adapter;其中桥接的时候主机和虚拟机是可以互相访问的,其它方式都有限制,然后就是防火墙的设置了 可以通过chkconfig --list 查看每个服务的启动,自己设定就好;最后就是连接了,当然还有其它的一些小设置可以通过google。。。
虚拟机网络连接的详细介绍如下网址:
http://pengranxiang.iteye.com/blog/715829
天网dataX节点可“灵活配置点”:应用库《——》hdfs上的时候是可以进行较灵活的配置(字段顺序调整、字段数目不一致)即此处是一个非常灵活的连接点,具体使用方式咨询(数据平台)或者查看预发节点209050
天网节点父子依赖关系显示不全:是由于在子节点上线前父节点不存在造成的,这个可以由数据平台那边的童鞋的发布信息截图中获得,parentNode为空的话即说明缺少依赖关系,如果已经上线的话就通过重新编辑下子节点,保存然后发布最新的依赖关系即可
预发运行ok,但是天网始终跑不通且无明确错误信息时需要查当前job_id的详细错误即可(这时候比较大的可能是dataX程序的location位置不正确)
Hivesql问题
在开发机运行时容易出现error in load data to ‘hdfs地址’,通用的解决办法是到预发上删除掉这个表,同时也删除本机上的表,再重建一下
剩下的就是hivesql对标准Sql的支持问题了,这个主要是经验,没有通用教程;hivesql排序、查询、插入都和标准sql略有不同的
遇到过几次表单提交前做验证的需求,在这里整理一下:
web开发前端的话表单验证非常常见,当存在<input type='submit' name=""></> 的时候不论你把事件注册到click还是注册到form的submit上在拦截提交请求后无法中断form的提交;可以用<input type='button' name=''></> 来替换<input type='submit' name=""></> 在JS验证后用document.form.submit()完成提交
完整代码如下(调用的yahooYUI):
<form name="templateForm" method="POST">
<input type="hidden" name="event_submit_do_add" value=""/>
<input type="hidden" name="event_submit_do_update" value=""/>
------------------------
#if("$templateId"=="0")
<input type="button" name="J_Add" id="J_Add" class="J_Submit" value="保存" style="margin:0 10px;padding:0 5px;"/>
#else
<input type="button" name="J_Update" id="J_Update" class="J_Submit" value="修改" style="margin:0 10px;padding:0 5px;"/>
#end
</form>
<script language='text/javascript'>
var Y = YAHOO.util, D = Y.Dom, E = Y.Event;
E.on("J_Add","click",function(evt){
if(“验证条件")
{
alter("提示内容");
return;
}
document.templateForm.event_submit_do_add.value="submit";
document.templateForm.submit();
});
E.on("J_Update","click",function(evt){
if(“验证条件")
{
alter("提示内容");
return;
}
document.templateForm.event_submit_do_update.value="submit";
document.templateForm.submit();
});
</script>
转眼间离开学校四个月,同时也是在淘宝实习四个月;昨天做系统不小心把整个磁盘格式化故在此留念
初来淘宝比较新鲜但是没有太大的陌生感,熟悉常用的开发技术,然后就开始做一些小日常,其实在一个公司里面开发语言、开发技术这些都是比较基础的东西,换言之能来到淘宝并不是因为我比其他被筛选掉的优秀只是运气好一些吧
每一个公司都会有自己的一套开发规则,有一些成文或者不成文的流程,淘宝的流程应该算是比较全面的吧,开发、测试、预发、测试、上线;流程发起、转交、状态转变、结束流程可以算的上是有据可循;
技术上面的话:语言不是问题,性能不是问题,前提是有足够的时间和清晰的需求,虽然现在来说也许自己在技术上还是个菜鸟吧,但是面对任何开发任务都有信心可以完成,要说技术的提高的话应该主要还是有了具体应用之后加深了一些理解吧,但是作为一个非底层的开发人员很难感觉到自己技术的明显提升(这是一个悲剧),都是借助语言本身的特性来完成开发需求
前期是做web的开发需求,最近则是在做报表开发(在hadoop搭建的云梯上通过运行hivesql脚步来完成简单的报表分析工作) 说它简单是因为通过sql无法完成复杂的模型,只能做简单的统计工作,不过通过hivesql做报表开发速度真的很快,基本上两天三天一个报表就ok了,
也做了有三四个月了,感觉比较有收获的就是系统流程上面的东西,之前我们开发系统,只要系统开始之后就走下去了,我们没有跟踪,这是不太满足现实世界中的流程的概念的,如果说我们要优化什么步骤,我们无法从数据上得到直接的支持,这是很低效的优化方式,我们的期望系统是可持续改进和优化的,那么在设计的时候就需要多一点考虑(系统流程的完整性)---这部分描述的不好,忘记的话就回想一下报表开发的初衷吧
从十一回来之后状态就不好,我不喜欢为什么争执,更不喜欢自己都不会主动选择的人,没有人能够在时间的流逝中永远保持不变,或许是他累了,或许是他变了,或许会出现更好的选择,希望大家在该出手的时候就出手,在该做什么的年纪就做什么,现在我20岁,是学习、积累的过程,然而我累了,所以大家都好自为之吧
顺便做一下后面两个月的规划吧:预计上元旦离职
11月:完成日常开发任务,熟悉搜索引擎,原理和常见开源搜索引擎的搭建调优(整理出纪实文档)
12月:深入了解数据挖掘技术,综合前面报表开发流程整理出一份数据挖掘中模型创建、数据流转、数据加工、及产出的自己的理解感悟
结束语:珍惜现在
另外留下教训------------------重要的文档笔记呢一定要记录到网络或者是云服务上,在本机上保存都极不安全
今天是这段时间以来最累的一天了,各种各样的问题啊:
a、数据库
1、数据库的远程连接---SQL2005时需要手动打开远程连接
2、数据库角色---创建完数据库角色之后需要改变角色的权限之后才能正常登陆
3、C#连接数据库字符串写法----localhost(数据库实例名)还有Ip
4、复习了一些SQL语句
b、vs2005 怎么可以有这么多bug...
命名空间在修改之后不会自动在程序中更新(需要先从项目中排除然后再引入再生成)、打开项目时有时可能需要转换
c、C#发射机制和工厂方法...转那么多圈真费劲---调试的时候各种困难
--------------其中最讨厌的就是命名空间了...你永远不知道什么时候命名空间会出错
不过今天也看了一些Webx的资料还好有些收获;当然还有一本UML的书籍也还好啦....
蛮累 蛮充实
思路:为每一个人建立起自己的知识字典(英语),按照索引的方式录入自己的知识量(单词量)。
一下是转为英语应用而设计:
复制一篇英语文章到该网站的文本框中,通过让该系统通过比对单词字典计算出该文章的生词量,做出统计信息进而判断该文章是否合适阅读,当然在最初字典是空的这时可以批量添加一些常用的单词也可以手动添加,是一个不算太大的工程(最多4000-5000单词),当比对结束之后会对单词通过不同的颜色显示出来,绿色表示字典中存在的单词即认识的单词,而红色表示不认识的单词;单击某一单词可以添加或者维护该单词的信息
基本上一个自制英语虚席词典就OK了
下面列出技术难点:1、高效的字典匹配
2、怎么样捕捉鼠标移动到某一单词的事件(在做统计的时候将所有的单词打断为label---不太成熟的思想)
3、多用户时数据怎么样存储(单用户时可以是只有一个字典,但是多用户时怎么设计)