今天参加了一个线上测试,分享几个面试题。
一、选择题
1、下面这段代码生成了几个对象?

String s = new String("asdf");

答案:2个
解析:程序运行先创建了一个“asdf”的字符串保存到常量池中,然后new的时候在堆中又创建了一个对象,这个对象引用常量池中的字符串。

2、执行了下面的代码后c的值是什么?

a = 0;c = 0;;
do{
--c;
a = a - 1;
}while(a>0);

答案:-1
解析:这个第一遍的时候我看错了,do()while()语句会执行一次,然后判定条件,所以–c了之后c=-1,判断条件,a不大于0结束循环,我第一次迷迷糊糊的以为a不大于0继续循环。

3、下面中优先级最高的是?

A:&  B:&&  C:!=  D:?:

答案:!=

解析:

java功能测试面试题 java软件测试面试题及答案_System


4、下面标识符不合法的有?

A:new  B:$Usdollars  C:1234  D:car.taix

答案:A、C、D
解析:标识符中可以含有$、_,也可以是他们开头,大小写字母,不能是关键字、数字、和非法字符。

5、下列类中不属于Collection的子类的是?

A:linkedList  B:HashSet  C:PriorityQueue  D:HashMap

答案:D
解析:HashMap是Map类

6、下面代码的含义是?

new list(10,true);

A、创建含有10列的新列表
B、创建含有十行的新列表,且允许多重选择
C、创建不多于10个选项的新列表
D、创建含10行的新列表,每次选择一项。
答案:B
解析:第一次我也不知道,百度了一下是B。

二、编程题
1、打印出所有水仙花数。(三位数,每位数字的立方和等于该数本身)

//计算水仙花数
public class test1 {
    public static void main(String[] args) {
        System.out.print("水仙花数有:");
        int number = 100;
        int a = 0; //百位数定义
        int b = 0; //十位数定义
        int c = 0; //个位数定义
        for (int sum = 0; number < 1000; number++){
            a = number / 100;  //求百位数
            b = (number - a*100) / 10;  //求十位数
            c = (number -a*100-b*10);  //求个位数
            sum = a*a*a+b*b*b+c*c*c;
            if (sum == number){
                System.out.print(number + ",");
            }
        }
    }
}

注意:一定要逻辑性强,编程一定要一步一步走,把条件都写清楚。

2、计算并输出0-100之间不能被3整除的整数的和。

//计算并输出0-100之间不能被三整除的整数的和
public class test2 {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 0; i <= 100; i++){
            if (i%3 == 0){
                sum += i;
            }
        }
        System.out.println(sum);
    }
}

送分,细心就好。

3、求1!+2!+3!+4!+…+10!。
方式一:用递归。

//求1!+2!+..+10!的和
public class test3 {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 10; i++){
            sum += f(i);
        }
        System.out.println(sum);
    }
    public static int f(int n){
        int sum = 1;
            if (n==1){
                return sum;
            }else {
                sum = n*f(n-1);
            }
            return sum;
    }

这个我写错了,只算出了十的阶乘,没有循环相加,我自己的失误,最近刚好复习了递归,就想用一下。
思想:用递归让方法调用自己,每次算除一个数的阶乘,然后在主方法里面循环把每次的结果相加。
方式二:循环

//求1!+2!+..+10!的和
public class test3 {
    public static void main(String[] args) {
        System.out.println(Factorial_Sum(10));
    }
    public static int Factorial_Sum(int a){
        int sum = 0;
        int r = 1;
        for (int i = 1; i <= a; i++){
            r = 1;
            for (int j = 1; j <= i; j++){
                r = r * j;
            }
            sum = r + sum;
        }
        return sum;
    }
}

用循环还是很简单的。
三、应用实践题

我一题也不会,是真的不会,题目给大家看看。

1、编写ModbusTcp主站、ModbusTCP从站的通讯程序。

2、编写WebService通讯接口程序。