以前上課時就有學過,不過最近在和工程師聊天時,一時傳來 pseudo code ,還真的不知這是啥!下面這是從網路上找到的資料,簡單來說,虛擬程式碼就是一種有基本邏輯及流程的句子,可以讓人快速瞭解它代表的事情,方便溝通及傳達;另一種講法就是這種是不用debug的程式碼啦~哈~哈!
虛擬程式碼可以用在SD上,不過和客戶溝通時還是少用或是要更口語話及簡化,因為客戶不想懂這麼底層的東東或許可以將層級往上拉一點或許也可以用在與客戶溝通上
虛擬程式碼 (pseudo code)
提供足夠詳細的程式執行流程以描述程式的每一個執行步驟,藉以提供程式設計師在接下來把程式以特定的程式語言完成 (如: C 或 JAVA)。為了維持可讀性,虛擬程式碼是以我們平時講話的方式來表達而不需受限於特定某一種程式語言 (如: C 或 JAVA)。簡言之,虛擬程式碼是一種類似程式碼的程式流程表達方式,用來描述電腦程式或是演算法所要執行的工作內容。
範例:從1加到10演算法的虛擬程式碼,如下所示:
counter = 1
total = 0
while counter <= 10
{
total = total + counter
add 1 to counter
}
output total
由此可知,其實虛擬程式碼跟一般程式碼有點類似,只是虛擬程式碼強調的重點在於程式的執行過程,並且試著把演算法流程以平時講話的方式描述,進而增加可讀性。
資料來源: http://nthucad.cs.nthu.edu.tw/~yyliu/personal/nou/05ct/pseudo_code.html
目前除了一個一個參數轉碼外,想要省功夫的作法有以下二種
1.實作一個servlet filter攔截Action 並設定request.setCharacterEncoding(“big5”); 這樣所有進來都會先調整編碼
2.實作一個Struts的controller 在其中調整語系編碼即可,以下在JavaWorld的文章有不錯的範例程式可參考
http://www.javaworld.com.tw/jute/post/view?bid=11&id=35142&tpg=1&ppg=1&sty=1&age=0#35142
不過如果案子一多,不同語系在處理上就很麻煩,所以小弟再調整了一下將charset參數抽出來放到web.xml裡
從web.xml就可以設定語系參數為何,這樣就可以依照案子的需要調整語系
以下是程式的調整,為了取得web.xml 的參數值,所以使用了ServletContext ,因為在實作的controller只有 request
所以從request 取出的session就可以再叫出servletContext了,用法如下:
charset=request.getSession().getServletContext().getInitParameter(“charset”);
而在web.xml就要設定
<context-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</context-param>
再來就是在struts-config.xml之中,設定好使用剛實作出來的controller 即可解決中文問題
最近看了一些技術論壇,常提到CRUD 原本以為是個技術名詞
但看了文章的前後文後,用猜測就可以知道它是在說 新刪改查 的功能
去查了一下 一般是在說 Create ,Read (Rtrieve) ,Update ,Delete (Destory)
有不同的英文說法,但意思是完全一樣,都在講同一事情
以下這裡有人有寫詳細完整的說明,還不錯節錄給大家
而Wiki 也有詳細的說明,如有需要請點以下連結
http://en.wikipedia.org/wiki/Create,_read,_update_and_delete
最近在try 時發現Date 型態如果default not null 那存入default value 會為'0000-00-00'
但在JAVA 透過JDBC取得data 時會出現以下錯誤訊息
Caused by: java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date
我想問題是出現因為 java.sql.Date: since January 1, 1970 00:00:00.000 GMT 所以無法解析轉換吧!!
找了一下解法,在http://twpug.net/docs/mysql-5.1/connectors.html 這篇文章有提到
具有全0組分的Datetimes(0000-00-00 …):在Java中,無法可靠地資料表示這些值。從結果集讀取它們時,Connector/J 3.0.x總是會將其轉換為NULL。
預設情況下,遇到這類值時,Connector/J 3.1將拋出異常,這是因為,根據JDBC和SQL標準,這是最正確的行為方式。可以使用「zeroDateTimeBehavior」配置屬性改變該行為。允許的值包括:「exception」,(預設值),用代碼為「S1009」的SQLState拋出SQLException;「convertToNull」,返回NULL而不是數據;以及「round」,對日期進行捨入處理,使之成為最接近的值,即「0001-01-01」。
從Connector/J 3.1.7開始,能夠使用「noDatetimeStringSync=true」(預設值為「假」),將ResultSet.getString()與該行為分離開,從而能夠以字串的形式提取未被改變的全0值。請注意,這也會阻止使用任何時區轉換功能,因此,驅動程式將禁止同時啟用noDatetimeStringSync和useTimezone。
所以在連線參數加上zeroDateTimeBehavior=convertToNull&noDatetimeStringSync=true就可以排除啦!!
參考資料來源:http://twpug.net/docs/mysql-5.1/connectors.html
在網路上如何確認你下載的檔案是原作者的版本
或是在傳輸的過程中沒有遺失封包或被hacker從中加入什麼
所以可以用檢驗碼的方式來確認
目前最常在網路上被使用的就是MD5的檔案驗證機制,因為MD5加密後只要不同的data就會產生不同的驗證碼及不可逆的特性 不過近來已經有人稱可破解及找到碰撞可能,雖然出現了小瑕疵,不過因為使用方便及安全性還是足夠(破解可能性還是不普及)所以還是可以使用
以下是MD5的說明:
http://zh.wikipedia.org/wiki/MD5
http://a-010.cyut.edu.tw/~vote/md5.php
以下是Java的程式碼,傳入檔案進行MD5的驗證
File file = new File(“d:/1.dat”);
FileInputStream fs = new FileInputStream(file);
BufferedInputStream bi = new BufferedInputStream(fs);
ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte[] b = new byte[bi.available()];
int i;
while ((i = bi.read(b, 0, b.length)) != -1)
{
bo.write(b, 0, i);
}
bo.close();
System.out.print(Md5.MD5(new String(bo.toByteArray())));
public final static String MD5(String s)
{
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
try
{
byte[] strTemp = s.getBytes();
MessageDigest mdTemp = MessageDigest.getInstance(“MD5”);
mdTemp.update(strTemp);
byte[] md = mdTemp.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++)
{
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
}
catch (Exception e)
{
return null;
}
}
程式來源:
http://www.j2megame.org/index.php/content/view/749/125.html
原作者的程式產出的MD5好像與網路上有提供的好像有差異
暫時先不去深入瞭解
反正功用達到就好~^^
近期留言