`
yld387xs
  • 浏览: 15022 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

面试题讲评

阅读更多

面试题讲评
2011年03月14日
  面试了几家公司,只有这一两公司的面试题有点水平.且听我一一讲评:
  a. 在java中导入一个包,会导入这个包的所有类及其嵌套包的所有类,这个说话正确吗?
  错误  前半句"会导入这个包的所有类"是正确的,但是不能导入其嵌套包的所有类,如event包在awt包中,我们在做applet程序时要同时import java.awt.*;和import java.awt.event.*;
  b. String s1 = "Hello"; String s2 = "Hello"; String s3 = new String("Hello"); String s4 = new String("Hello");为什么s1 == s2为true,而s3 == s4为false呢?
  (我记得这个题目应该跟别人讲过哦!)因为s1和s2是定义在String pool中的两个常量,两者的内存地址相同;而new出来的对象是在heap堆中开辟一块内存空间,如:s3和s4就是在heap堆中开辟了两块不同的内存空间后,分别让s3和s4指向它们,两者的内存地址不相同.而==比较符又是比较左右两个变量的内存地址是否相等,所以会有以上结果!
  c. double a = 1.1; double b = 110/100;为什么a与b不相等?
  这个很简单哦,因为110/100逻辑运算中,两个参数都是int型,得出的结果也是int型.然后转换成double型,在结果的小数点后面补0所以b的结果是1.0,与1.1不相等.
  d. SQL Server可以应用与Linux平台吗?
  不能(这也是Oracle与SQL Server的一大区别) 
  e. 为什么捕捉多个异常的时候,Exception的捕捉只能放在最后?
  因为Exception是所有异常的父类,如果定义了多个catch语句,而将Exception的捕捉放在前面或中间.一旦发生异常时,总是会进入到Exception的捕捉块中进行处理,而导致后面的catch语句无法运行,从而编译出错,所以Exception的捕捉总是放在最后面的.
  一个实战例子(在main方法中定义):
  try {
  String s = null;
  System.out.println(s.length());
  }catch(Exception e){
  e.printStackTrace();
  }catch(NullPointerException e) { // 代码总是不被执行!
  e.printStackTrace();
  }
  f. Integer a = 100;Integer b = 200;System.out.println((a+b));此处的+是不是像c或c++中重载了连接符+呢?如果不是,那java是怎么做到的?
  不是 java是利用装拆箱来进行操作的,在jdk1.6中java提供了自动装箱和拆箱的操作,a+b在进行操作时,已经被自动转换成int型(手动拆箱: Integer.parseInt(int number)),从而进行整型的加法逻辑运算.
  g. 在进行大数据量地改变字符串时,为什么使用StringBuffer和StringBuilder,而不使用String?
  因为String提供了不可变的字符序列而StringBuffer(或StringBuilder)提供了可变的字符序列,在进行大数据量改变字符串时,StringBuffer(或StringBuilder)可以直接进行操作,而String必须在每次操作后要创建一个新的String对象进行接收,浪费内存空间;其次,StringBuffer(或Stringbuider)提供的append方法比String的+连接符具有更高的效率,更加适合字符串的拼接操作
  h. 从控制台输入一个字符串,并且反转输出:
  import java.util.*;
  public class ReverseInput {
  static String input;
  static StringBuffer output;
  public static void main(String[] args) {
  System.out.println("请输入一个字符串: ");  // 如:输入"我爱牛奶"
  Scanner s = new Scanner(System.in);
  input = s.next();
  output = reverseStr(input);
  System.out.println("反转后的结果是: " + output); // 细心的朋友可能发现,output是一个StringBuffer类型,但它可以与一个字符串进行拼接操作
  }
  public static StringBuffer reverseStr(String input) {
  return (new StringBuffer(input)).reverse();
  }
  }
  i. 从控制台接收一个字符串,进行parseInt操作,捕捉NumberFormatException,并且定义一个异常,判断数字是否在[0,100]范围内.如果不在,抛出异常,否则判断是否大于60,进行输出.
  import java.io.*;
  import java.util.*;
  public class DefinedException {
  public static void main(String[] args) {
  int score = 0;
  System.out.print("请输入一个分数: ");
  Scanner s = new Scanner(System.in);
  String str = s.next();
  try {
  score = Integer.parseInt(str);
  } catch (NumberFormatException e) {
  System.err.println("您输入的不是一个数字!"); // System.err与System.out的区别在于:体现在MyEclipse上,前者是以红色警告字体进行输出,后者以黑色普通字体进行输出
  System.exit(-1); // 退出JVM
  }
  try {
  if (score 100) {
  throw(new NotInAreaException("您输入的数字不在0-100的范围内!"));
  } else {
  System.out.println( (score > 60 ? "恭喜您,及格了!" : "对不起,没有及格!"));
  }
  } catch (NotInAreaException e) {
  System.err.println("错误!" + e.getMessage());
  }
  }
  }
  class NotInAreaException extends Exception{
  public NotInAreaException(String msg) {
  super(msg);
  }
  }
  j. 编写一个方法,接受一个int数组,并且可以输出数组的最大值、最小值和平均值
  import java.util.*;
  public class TakeOutput {
  public static void main(String[] args) {
  output(new int[]{1, 5, 7, 4, 3});
  }
  public static void output(int[] arr) {
  // Arrays.sort(arr);
  /**
  // BubblingSort(冒泡排序写法)
  int temp = 0;
  for (int i = 0;i  arr[j+i]) {
  temp = arr[j];
  arr[j] = arr[j+1];
  arr[j+1] = temp;
  }
  }
  }
  */
  System.out.print(" min = " + arr[0] + "\n max = " + arr[arr.length-1] + "\n");
  int sum = 0;
  for (int element : arr) {
  sum += element;
  }
  System.out.print("avg = " + (sum/arr.length));
  }
  }
  k. 一张表book包含字段press(出版社) name(图书名称) price(价格)查询各个出版社的图书的平均价格.
  select distinct a.press, avg_price = (select avg(price) from book b where a.press = b.press) from book a order by a.press
  l. 这道题目是关于一个图形化讲解的深复制,要你写出这个程序深复制的代码来.很遗憾,我没有做出来,这儿我就不说了,大家有兴趣的可以去网上查查!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics