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();
}