源越通面试题

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

该日志未加标签
此条目发表在java/j2ee分类目录。将固定链接加入收藏夹。

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据