选择题:1.下面两段代码,输出为()public class A {{System.out.println("A");}static{System.out.println("B");}A(){System.out.println("C");}}public class B extends A{{System.out.println("D");}static{System.out.println("E");}B(){System.out.println("F");}public static void main(String [] args){B b = new B();System.out.println("G");}4.transient变量,在以下那几个类中使用?(serialization)参考答案: serialization选择题知识点:J2EE;EJB;JPA;SSH;IBatis;AIX;WAS;Statement;数据库日志满;CPU瓶颈;泳道图;静态类;事物;spring;游标稳定性;MVC;设计模式编程题1.编写一个人民币金额数字转换成大写的函数,无小数,最大999999999。
例如:12304 转为壹万两仟三佰零四元整40000 转为 4万元整参考答案:public class Num2Rmb {private String[] hanArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};private String[] unitArr={"拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"};private String toHanStr(String numStr){String result="";int numLen=numStr.length();for (int i=0;i<numLen; i++){int num=numStr.charAt(i)-48;if(i!=numLen-1 && num!=0){result+=hanArr[num]+unitArr[numLen-2-i];}else{result+=hanArr[num];}}return result;}public static void main(String[] args){Num2Rmb nr = new Num2Rmb();System.out.println(nr.toHanStr("633779433451"));}}2.字符串截取,中文不会被截取半个。
例如:我和你ABC 截取4位:我和你A我和你ABC 截取2位:我和参考答案:public static String subString(String str, int len) {if (str == null && "".equals(str)) {return null;}// 将字符串中的char数组转换成指定编码方式的byte数组的函数byte[] strBytes = null;try {strBytes = str.getBytes("GBK");} catch (UnsupportedEncodingException e) {e.printStackTrace();}// 得到字符串的长度,判断截取字符串的长度是否在判断的范围内,否则返回原串int strLen = strBytes.length;if (len >= strLen || len < 1) {return str;}System.out.println("strBytes.length=" + strBytes.length);System.out.println("len=" + len);int count = 0;for (int i = 0; i < len; i++) {// 将每个字节数组转换为整型数,以为后面根据值的正负来判断是否为汉字int value = strBytes[i];System.out.print(value + ","); // 我ABC你 -50,-46,65,66,67,-60,-29// 对于第一种情况:// 注,一个函数转换成整型数就为两个负整数,上面的”我ABC你“,// 转换成整型数就为-50,-46,65,66,67,-60,-29,但是len=6,所以截取下来的就是-50,-46,65,66,67,-60,count就为3// 如果是汉字(负),则统计截取字符串中的汉字所占字节数if (value < 0) {count++;}System.out.println("zh count=" + count);}// 依据判断给定的字符串是否含有汉字,利用String类的substring()方法来截取不同的长度// 根据所统计的字节数,判断截取到字符是否为半个汉字,奇数为半个汉字if (count % 2 != 0) {// 如果在截取长度为1时,则将该汉字取出,// 其他情况则不截取这里的截取长度则按字符长度截取(截取字节长度数-截取汉字字节数/2-截取到的半个汉字的字节数)len = (len == 1) ? len : len - count / 2 - 1; // len=6-3/2-1=4 我ABC// System.out.println("处理后的len="+len);} else {// 截取字符长度为字节长度-汉字所占字节长度/2(汉字占两个字节)len = len - (count / 2);}return str.substring(0, len);}3.个人所得税的计算,不同阶段的工资给出不同阶段的个人所得税的交付。
输入工资salary 计算出应付的税款tax。
计算公式:tax = n * ( salary – 850 ) n为税率税率表为:工资税率salary<850 0%850<salary<3000 5%3000<salary<5000 10%5000<salary<8000 15%8000<salary<10000 20%10000<salary 25%参考答案:Double cal(Double salary) {if (salary < 850) {//} else if (salary > 850 && salary < 3000) {salary = 0.05 * (salary - 850d);} else if (salary > 3000 && salary < 5000) {salary = 0.1 * (salary - 850d);} else if (salary > 5000 && salary < 8000) {salary = 0.15 * (salary - 850d);} else if (salary > 8000 && salary < 10000) {salary = 0.2 * (salary - 850d);} else if (salary > 10000) {salary = 0.22 * (salary - 850d);}return salary;}问答题1.使用系统设计的思想实现程序对不同语言,不同时区的支持。
参考:对不同语言,不同时区的支持,涉及国际化和本地化。
国际化是指在设计软件时,将软件与特定语言及地区脱钩的过程。
当软件被移植到不同的语言地区时,软件本身不用做内部工程上的改变或修正。
本地化则是指当移植软件时,加上与特定区域设置有关的资讯和翻译文件的过程。
通常作法是将文本和其他环境相关的资源与程序代码相分离。
这样在理想的情况下,应对变化的环境时无需修改代码,只要修改资源,从而显著简化了工作。
2.什么是快速迭代失效?如何解决?参考:Vector等Collection类,都有类似的说明:由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失败的:如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的 remove 或 add 方法之外的任何其他方式),则迭代器将抛出ConcurrentModificationException。
因此,面对并发的修改,迭代器很快就完全失败,而不是冒着在将来不确定的时间任意发生不确定行为的风险。
解决办法:不适用Collection自身的remove()方法,而使用Iterator本身的方法remove()来删除对象,因为这样子可以删掉原对象,同时当前迭代对象的索引也得到同步。
3.下面是一段对数据库异常处理的代码:public class DBUtil {private static final int CAN_CONNECT = 5001;private static final int SQL_ERROR = 5002;public void exceptionHandle(int exception){switch(exception){case CAN_CONNECT : {//do something...System.out.println("The DB can't be connected....");}case SQL_ERROR : {//do something...System.out.println("The SQL is Error...");}default ://do something...System.out.println("Other reasons...");}}}若需要添加其他错误码,则只需添加case分支即可。