1、表user有字段(ID, 姓名, 部門編號),ID是主鍵; 表department有字段(部門編號, 部門名稱),部門編號是主鍵。表user 與表department是N-1的關系,也就是說一個user一定屬于唯一的一個部門,一個部門可以有多個人員。
a.請寫出一個SQL語句,查詢出user表中所有人員的(ID,姓名,部門名稱)。
b.如果希望一次性插入一個user(‘001’, ‘tom’,’101’)記錄,和他所屬的department(‘101’, ‘Develop Dept.’),要么全失敗,要么全成功,應該怎么做呢?(只需要寫出示意性的語句就可以了)
a:
SELECT u.id , u.name , d.name FROM user AS u , department AS d WHERE u. departmentid = d.id;
b:
SET AUTOCOMMIT = 0;
BEGIN;
INSERT INTO user VALUES(‘001’, ‘tom’, ‘101’);
INSERT INTO department VALUES(‘101’, ‘Develop Dept’);
COMMIT;
失敗的話:
ROLLBACK;
2、請簡單解釋一下DTD在XML語言中的主要作用,以及SOAP協議的用途。
DTD是Document type Definition(文檔類型定義)的縮寫,它規定了XML文檔的構建方式。
SOAP的全稱是Simple Object Access Protocol,即簡單對象訪問協議。SOAP是在分散或分布的環境中交換信息的簡單協議,他以XML作為數據傳送的方式。SOAP對于實現基于Web的無縫集成系統發揮著非常重要的作用。SOAP有助于實現松散耦合的、跨平臺的、于語言無關的、與特定接口無關的分布式系統。
3、盡管SQL92標準已經被公認為標準的SQL語言規范,但是通常不同數據庫服務器所能夠接受的SQL語句都會有一些區別。假如一套軟件需要支持多種不同的數據庫,而源代碼中的SQL語句只希望有一套,從學過的課程,你會聯想到什么解決方法呢?(簡單敘述一下思路)
對于大部分的應用系統來說,SQL92標準已經夠用了,很多時候我們只是使用這些數據庫之間功能的公共子集。對于復雜的應用系統可以采用類似Hibernate的做法,提供一套自定義的SQL文法,然后將其轉換為不同數據庫特定的SQL。這樣在業務邏輯層上只有一套多數據庫共用的’SQL’語句。或者直接采用Hibernate,使用其所提供的HQL,這樣多數據庫可以共用一套HQL語句。
4、假如有集合A、B,A與B之間為一一影射關系,并且這一影射是無固定規律的。現在需要在程序中每當給定A中的一個元素時,迅速的找到B中對應的一個元素。你認為選擇什么樣的數據結構比較合適呢?(不需要寫程序)
Map
5、在一個汽車模擬游戲中,各種不同汽車由于性能參數不同,在同一個跑道上奔跑時姿態的算法各不相同。當你用C++語言設計這個程序時,會想到利用C++的什么特性呢?
函數重載。
以下編程題目如無特殊要求,可以使用JAVA、C、C++、C#、PASCAL語言。
6、寫出一個函數,將人民幣的小寫數字,轉換成大寫。
如:2084.52 —》貳仟零八十四圓五角貳分
要求考慮全面,算法精練,書寫規范。
public static String moneyConvert(double input) {
String[] faceVal = new String[] { “零”, “壹”, “貳”, “叁”, “肆”, “伍”, “陸”, “柒”, “捌”, “玖” };
String[] level = new String[] { “圓”, “拾”, “佰”, “仟”, “萬”, “億” };
String[] parts = String.valueOf(input).split(“\\.”);
String faceInt = new StringBuffer(parts[0]).reverse().toString();
StringBuffer tempSb = new StringBuffer();
for (int i = 0; i < faceInt.length(); i++) {
tempSb.append(faceVal[Integer.valueOf(faceInt.substring(i, i + 1)).intValue()]);
}
faceInt = tempSb.toString();
String faceDecimal = parts[1];
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < faceInt.length(); i++) {
if (i == 0) {
resultSb.append(level[0]);
} else {
if ((i + 4) % 8 == 0) {
resultSb.append(level[4]);
} else if (i % 8 == 0) {
resultSb.append(level[5]);
} else {
resultSb.append(level[i % 4]);
}
}
String temp = faceInt.substring(i, i + 1);
resultSb.append(temp);
}
String result = resultSb.reverse().toString();
if(faceDecimal.equals("00")){
return result+"整";
}else{
return result+
faceVal[Integer.parseInt(faceDecimal.substring(0,1))]+"角"+
faceVal[Integer.parseInt(faceDecimal.substring(1,2))]+"分";
}
}
7. 寫出一個函數將給定的一個數字串補足成10位長度,如:
567 —》 0000000567
23456 —》 0000023456
要求寫出一個耗費CPU時間片較少的算法和一個耗費內存資源較少的算法。
/**
* 耗費時間片較少
*/
public static String fillString(long input){
String inputStr = String.valueOf(input);
if(inputStr.length() > 10){
return “”;
}
if(inputStr.length() == 10){
return String.valueOf(input);
}
char[] retValue = new char[10];
for(int i = 0; i < 10; i++){
retValue[i] = '0';
}
int temp = inputStr.length() - 1;
for(int i = 9; i >= 10 – inputStr.length(); i– ){
retValue[i] = inputStr.charAt(temp–);
}
return new String(retValue);
}
/**
* 耗費內存較少
*/
public static String fillString2(long input){
if(input > 9999999999L){
return “”;
}
if(input >= 1000000000L && input <= 9999999999L){
return String.valueOf(input);
}
long tempValue = 1000000000L + input;
StringBuilder retValue = new StringBuilder(String.valueOf(tempValue));
retValue.replace(0,1,"0");
return retValue.toString();
}
|