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月:深入了解數據挖掘技術,綜合前面報表開發流程整理出一份數據挖掘中模型創建、數據流轉、數據加工、及產出的自己的理解感悟
結束語:珍惜現在
另外留下教訓------------------重要的文檔筆記呢一定要記錄到網絡或者是云服務上,在本機上保存都極不安全