JAVA笔试面试题集锦01

第一部分:JAVA基础

1.1 JAVA语言基础

【题目编号】        jsd-01-101-1001

【知 识 点】         JAVA基础-JAVA语言基础-运算符-三目运算符

【难易程度】        50

【题目描述】

编译运行以下程序后,关于输出结果的说明正确的是 (       ):

public class       Conditional{

   public static  void     main(String      args[ ]){

     int   x=4;

     System.out.println(“value     is      “+ ((x>4) ? 99.9 :9));

   }                  

}                         

【选项】

A.    输出结果为:value       is      99.99

B.    输出结果为:value       is      9

C.    输出结果为:value       is      9.0

D.    编译错误                

【正确答案】        C

【解释】

三目运算符中:第二个表达式和第三个表达式中如果都为基本数据类型,整个表达式的运算结果由容量高的决定。99.9 是 double 类型而9是 int 类型,double 容量高。

 

【题目编号】        jsd-01-101-1002

【知 识 点】         JAVA基础-JAVA语言基础-运算符和表达式-转义字符

【难易程度】        80

【题目描述】

在字符串前面加上(  )符号,则字符串中的转义字符将不被处理。

【选项】

A. @     B. \    C.#    D.%

【正确答案】        B

【解释】

 

 

【题目编号】        jsd-01-101-1004

【知 识 点】         JAVA基础-JAVA语言基础-排序-插入排序

【难易程度】        70

【题目描述】

对记录序列{314,298,508,123,486,145}按从小到大的顺序进行插入排序,经过两趟排序后的结果为:

【选项】

A. {314,298,508,123,145,486}

B. {298,314,508,123,486,145}

C. {298,123,314,508,486,145}

D. 123、298,314,508,486,145}

【正确答案】        B

【解释】

插入排序算法:

public static void injectionSort(int[] number) {

// 第一个元素作为一部分,对后面的部分进行循环

  for (int j = 1; j < number.length; j++) {

           int tmp = number[j];

           int i = j - 1;

           while (tmp < number[i]) { number[i + 1] = number[i]; i--;

                  if (i == -1)

                  break;

         }

         number[i + 1] = tmp;

    }

}

 

 

【题目编号】        jsd-01-101-1006

【知 识 点】         JAVA基础-JAVA语言基础-关键字

【难易程度】        50

【题目描述】

Given:

public class Test {

         public static void main(String[] args) {

                  String str = NULL; System.out.println(str);

         }

}

What is the result?

【选项】

A. NULL

B. Compilation fails.

C. The code runs with no output.

D. An exception is thrown at runtime.

【正确答案】        B

【解释】

null 应该小写

 

【题目编号】        jsd-01-101-1007

【知 识 点】         JAVA基础-JAVA语言基础-普通数组

【难易程度】        40

【题目描述】

Given:

public class Test {

public static void main (String[]args) {

          String foo = args[1];

          String bar = args[2];

          String baz = args[3];

          System.out.println(“baz = ” + baz);

}

}

And the output: Baz = 2

Which command line invocation will produce the output?

【选项】

A. java Test 2222

B. java Test 1 2 3 4

C. java Test 4 2 4 2

D. java Test 4 3 2 1

【正确答案】        C

【解释】

数组下标从 0 开始

 

 

【题目编号】        jsd-01-101-1010

【知 识 点】         JAVA基础-JAVA语言基础-进制

【难易程度】        60

【题目描述】

题目:

1. public class test (

2.     public static void main (String args[]) {

3.     int i = 0xFFFFFFF1;

4.     int j = ~i;

5.

6.     }

7. )

程序运行到第 5 行时,j 的值为多少?(       )

【选项】

A. –15

B. 0

C. 1

D. 14

E. 在第三行的错误导致编译失败

【正确答案】        D

【解释】

int i = 0xFFFFFFF1;相当于 int i=-15 然后对 i 进行取反即取绝对值再减一

 

【题目编号】        jsd-01-101-1012

【知 识 点】         JAVA基础-JAVA语言基础-普通数组

【难易程度】        30

【题目描述】

         已知表达式 int m [ ] = {0,1,2,3,4,5,6}; 下面哪个表达式的值与数组下标量总数相等?(        )

【选项】

A .m.length()            B.m.length            C.m.length()+1                 D.m.length+1

【正确答案】        B

【解释】

数组下标是从零开始的,但是数据下标的总量和数据长度相同。

 

【题目编号】        jsd-01-101-1013

【知 识 点】         JAVA基础-JAVA语言基础-运算符和表达式-移位运算符

【难易程度】        30

【题目描述】

关于运算符>>和>>>描述正确的是()

【选项】

A.>>执行移动                          B.>>执行翻转

C.>>执行有符号左移,>>>执行无符号左移

D.>>执行无符号左移,>>>执行有符号左移

【正确答案】        C

【解释】

 

【题目编号】        jsd-01-101-1014

【知 识 点】         JAVA基础-JAVA语言基础-进制

【难易程度】        50

【题目描述】

存储一个24X24点阵的汉字(每个点1bit),需要多少字节(  )

【选项】

A. 24                  B. 48     C. 72     D. 144

【正确答案】        C

【解释】

解释:24*24/8=72。解释下意思:24*24的结果是二进制位,而八个二进制位等于一个字节,所以再除以八是所得的字节数。

 

【题目编号】        jsd-01-101-2001

【知 识 点】         JAVA基础-JAVA语言基础-关键字

【难易程度】        30

【题目描述】

如下哪些不是 java 的关键字?( )

【选项】

A.const            B.NULL            C.false              D.this E.native

【正确答案】        BC

【解释】

虽然 null false 还有 true 不是 java 的关键字,但是都有特殊用途,不建议作为标识符。

 

【题目编号】        jsd-01-101-2002

【知 识 点】         JAVA基础-JAVA语言基础-循环结构-while

【难易程度】        40

【题目描述】

69.已知如下代码:( )

public class Test{

         public static void main(String arg[] ){

                  int i = 5;

         do{ System.out.print(i);

         }while(--i>5)

         System.out.print(“finished”);

         }

}

         执行后的输出是什么?

【选项】

A. 5           B. 4           C. 6           D. finished

【正确答案】        AD

【解释】

输出 5finished,do?while 循环中循环体一定会执行一次

 

【题目编号】        jsd-01-101-2003

【知 识 点】         JAVA基础-JAVA语言基础-Java基本类型

【难易程度】        20

【题目描述】

下面的哪些声明是合法的?(    )

A. long 1 = 4990               B. int i = 4L                C. float f =1.1         D. double d = 34.4

【选项】

【正确答案】AD  

【解释】

B.4L 应该是 long 类型的写法,C.1.1 是 double 类型 ,float f=1.1f 是正确写法

 

【题目编号】        jsd-01-101-2005

【知 识 点】         JAVA基础-JAVA语言基础-运算符和表达式

【难易程度】        20

【题目描述】

从下列选项中选择正确的 Java 表达式

【选项】

A.int k=new String(“aa”)         B.String str=String(“bb”)

C.char c=74;                              D.long j=8888;

【正确答案】        BCD

【解释】

 

【题目编号】        jsd-01-101-2006

【知 识 点】         JAVA基础-JAVA语言基础

【难易程度】        20

【题目描述】

下列描述中,哪些符合 Java 语言的特征

【选项】

A.     支持跨平台(Windows,Linux,Unix等)

B.     GC(自动垃圾回收),提高了代码安全性

C.     支持类 C 的指针运算操作

D.     不支持与其它语言书写的程序进行通讯

【正确答案】        AB

【解释】

 

【题目编号】        jsd-01-101-4001

【知 识 点】         JAVA基础-JAVA语言基础-递归方法-递归方法

【难易程度】        80

【题目描述】

简单说明什么是递归?什么情况会使用?并使用 java 实现一个简单的递归程序。

【正确答案】       

1)递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程中直接或间接调 用自身而产生的重入现象。

2)递归算法一般用于解决三类问题:

         a.数据的定义是按递归定义的。(Fibonacci(斐波那契)函数)

         b.问题解法按递归算法实现。(回溯)

         c.数据的结构形式是按递归定义的。(树的遍历,图的搜索)

3)这是一个排列的例子,它所做的工作是将输入的一个字符串中的所有元素进行排序并输出,例如: 你给出的参数是"abc" 则程序会输出:abc acb bac bca cab cba

         a.算法的出口在于:low=high也就是现在给出的排列元素只有一个时。

         b.算法的逼近过程:先确定排列的第一位元素,也就是循环中i所代表的元素, 然后low+1开始减少排列元素,如此下去,直到low=high

public class Foo {

public static void main(String[] args) {

      permute("abc");

}

public static void permute(String str) {

      char[] strArray = str.toCharArray();

      permute(strArray, 0, strArray.length - 1);

}

public static void permute(char[] list, int low, int high) {

      int i;

      if (low == high) {

               String cout = "";

               for (i = 0; i <= high; i++)

                        cout += list[i];

               System.out.println(cout);

      } else {

               for (i = low; i <= high; i++) {

                        char temp = list[low];

                        list[low] = list[i];

         list[i] = temp;

                          permute(list, low + 1, high);

                          temp = list[low]; list[low] = list[i]; list[i] = temp;

                  }

         }

}

}

【解释】无

 

【题目编号】        jsd-01-101-4002

【知 识 点】         JAVA基础-JAVA语言基础-Java开发环境

【难易程度】        30

【题目描述】

列出自己常用的 jdk 包.

【正确答案】       

JDK 常用的 package

java.lang: 这个是系统的基础类,比如 String 等都是这里面的,这个 package 是唯一一个可以不用 import 就可以使用的 Package。

java.io: 这里面是所有输入输出有关的类,比如文件操作等

java.net: 这里面是与网络有关的类,比如 URL,URLConnection 等。

java.util : 这个是系统辅助类,特别是集合类 Collection,List,Map 等。

java.sql: 这个是数据库操作的类,Connection, Statememt,ResultSet 等

 

 

列出自己常用的 jdk 中的数据结构

【正确答案】       

线性表,链表,哈希表是常用的数据结构。

 

【题目描述】

char 类型能否存储一个中文字符?为什么

【正确答案】       

可以。一个 char 是两个字节,而一个中文也是两个字节。

 

【题目描述】

在 java 语言中 int        和    Integer     有什么区别

【正确答案】       

int 是基本数据类型,Integer 是 int 的包装类,属于引用类型

 

计算下列结果:

25&3 =

25|3=

【正确答案】       

25 的二进制是11001,3的二进制是00011,按位与的结果是:00001,按位或的结果是:11010,因此转成10进制分别为:1和27。

 

JDK1.5 中支持的 for 循环的语法

【正确答案】       

for(type element : array) {

         System.out.println(element)

}

type 集合(不仅仅指 Collection,也包含普通的数组)中元素的数据类型element 遍历到的元素;array集合对象本身(当然不只是 Collection)

 

【题目描述】

Bit 和 Byte 是什么意思?它们之间有什么关系?

【正确答案】       

bit 中文名称是位,是用以描述电脑数据量的最小单位。

byte(字节)是计算机信息技术用于计量存储容量和传输容量的一种计量单位 1byte=8bit

 

【题目描述】

你认为 java 与其他(你所了解的)语言相比,有什么优点和缺点?

【正确答案】       

1). Java 没有预处理指令。(如 C 中的#define , #include , #ifdef 等)。C 中的常量定义在Java 中用 static final 来取代。

2). Java 中没有 C 中的全局变量。

3). Java 中的主类型的 size 是确定的,而 C 中主类型的 size 跟平台相关。

4). Java 中没有了指针,它使用了类似的句柄来取代指针,但是 Java 中不允许对句柄进行加减, 没有取地址操作符之类的东东。

5). Java 有垃圾收集机制,不需要自己释放空间。

6). Java 没有 goto 语句。Java 在 C 提供的控制语句基础上增加了异常处理和标签 break 和continue 语句。这些可以替代 goto 的作用。

7). C 要求一个方法或块中使用的所有局部变量的定义在该方法或块的最开始处定义,而 Java允许这些定义在方法或块的任意地方出现。

8). Java 不要求在调用一个函数以前已经定义了该函数,可以在调用点后面定义。而 C 有这个要 求。

9). Java 不支持 C 中的 strut 和 union 类型。Java 支持方法重载。

10). Java 不支持 C 中的 enum 关键字。

11). Java 不支持 C 中的 bitfields 能力。

12). Java 不支持 C 的 typedef。

13). Java 不支持 C 的方法指针。

14). Java 不支持 C 的可变参数表。

java 和.net 的都不适合做桌面程序,这两个比较适合写 WEB 的程序;

c++比较适合写桌面程序 c++/java 都是强类型的静态预编译型语言。优点是结构性强,程序可读性好, 开发效率高,适合开发大型应用。就本人的经验而言,java 的开发效率优于 c++,实际上 java 大行其道的首要因素就是它够简单。java 尤其不适合开发桌面程序,GUI 的 API 一直都是 java 的弱点;

perl/python 是动态解释型语言。perl 是弱类型的而 python 是强类型的,后者的变量一旦赋值, 就拥有了类型,不能再赋其他类型的值。不象 javascript/perl 可以随便定义。perl 是 unix 下的王牌工具,在缺乏 IDE 的字符界面下,很好地弥补了unix;

shell/utility 的不足,并且部分继承了面向对象语言的灵活性。适合用来搭建大程序。

 

 

【题目描述】

排序都有哪几种方法?用伪代码实现一个快速排序

【正确答案】       

排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序) 快速排序的伪代码:使用快速排序方法对 a[ 0 :n- 1 ]排序从 a[ 0 :n- 1 ]中选择一个元素作为 middle,该元素为支点;把余下的元素分割为两段left和 right,使得left中的元素都小于等于支点,而right中的元素都大于等于支点;递归地使用快速排序方法对left进行排序;递归地使用快速排序方法对 right 进行排序;所得结果 为 left + middle + right。

 

【题目描述】

String a=null; if (a!=null && a.length()>10) {...}

上面面的代码,如果你用“&”替换“&&”将发生什么错误?

【正确答案】       

会抛出空指针异常;&&会短路,只要遇到 boolean 值为 false 就不会再往后执行了;而&则是会 把两边的运算都执行完。

 

【题目描述】

用递归方法实现正序显示数组元素。例如 String[] s = {“a”,”b”,”c”,”d”};

方法声明如下:

void print(String[] s,int i){        }

【正确答案】       

参数 i 是指打印 string 数组的起始位置,原理是正序打印 s 从第 0 个开始的所有字符串,等价于先打印第 0 个,在打印 s 中从第一个开始的所有字符串,如此递归

void print(String[] s, int i) {

  if ((i >= 0) && (i < s.length)) {

           System.out.print(s[i]);

           i++;

           print(s, i);

  }

}

 

【题目描述】

               请写出求 n!的算法。

【正确答案】       

public class Factorial {

         public static void main(String[] args) {

             long n = 6;

                  System.out.println(doFactorial(n));

         }

         public static long doFactorial(long n) {

                  if (n < 1) {

                          System.out.println("ERROR");

                          return 0;

                  } else if (n == 1 || n == 2) {

                          return n;

                  } else {

                          return n * doFactorial(n - 1);

                  }

         }

}

 

【题目描述】

编写一个字符界面的 Java Application 程序,接受用户输入的 10 个整数,并输出这 10 个整数的最大值和最小值。

【正确答案】       

采用了冒泡进行排序

import java.util.Scanner;

import java.util.Scanner;

public class MaxAndMin {

         public static void main(String[] args) {

                  Scanner scanner = new Scanner(System.in);

                  int[] arr = new int[10];

                  for (int i = 0; i < arr.length; i++) {

                          int next = scanner.nextInt();

                          arr[i] = next;

                  }

                  int[] after=Arrays.sort(arr);

                  System.out.println("最小值:"+after[0]+",最大值:"+after[arr.length-1]);

         }

}

 

【题目描述】

               写一个排序算法 1-100 随机数字,进行排序,要求效率。

【正确答案】       

public class Sort {

// 选择排序方法

         public static void selectionSort(int[] number) {

                  for (int i = 0; i < number.length - 1; i++) {

                          int m = i;

                          for (int j = i + 1; j < number.length; j++) {

                                   if (number[j] < number[m])

                                            m = j;

                          }

                          if (i != m)

                          swap(number, i, m);

                  }

         }

// 用于交换数组中的索引为 i、j 的元素

         private static void swap(int[] number, int i, int j) {

                  int t;

                  t = number[i]; number[i] = number[j]; number[j] = t;

         }

         public static void main(String[] args) {

         // 定义一个数组

int[] num = new int[100];

                  for(int i=0;i<num.length;i++){

                          num[i]=(int)(Math.random()*100)+1;

                  }

                  // 排序

                  selectionSort(num);

                  for (int i = 0; i < num.length; i++) {

                          System.out.println(num[i]);

                  }

         }

}

 

 

【题目描述】

冒泡排序:依次比较相邻的两个数,将大数放在前面,小数放在后面。第一趟结束,在最后的数必是 所有数中的最小数。重复以上过程,直至最终完成排序。由于在排序过程中总是大数往前放,小数往后 放,相当于气泡往上升,所以称作冒泡排序。请用 JAVA 语言编写一个完成冒泡排序算法的程序。

【正确答案】

解答:

int[] bubbleSort(int before[]) {

        int t;

        for (int i = 0; i < before.length; i++) {

                 for (int j = 0; j < before.length - i - 1; j++) {

                          if (before[j] > before[j + 1]) {

                                  t = before[j];

                                  before[j] = before[j + 1];

                                  before[j + 1] = t;

                          }

                 }

        }

        return before;

}

 

【题目描述】

下面是一个由*号组成的 4 行倒三角形图案。要求:1、输入倒三角形的行数,行数的取值 3-21 之 间,对于非法的行数,要求抛出提示“非法行数!”;2、在屏幕上打印这个指定了行数的倒三角形。

*******

*****

***

*

【正确答案】       

import java.util.Scanner;

public class Lines {

         public static void main(String args[]) {

                  Scanner scanner = new Scanner(System.in);

                  int lines = scanner.nextInt();

                  if (lines > 3 && lines < 21) {

                          for (int i = lines-1; i >= 0; i--) {

                                   for (int z = 0; z <= i * 2; z++) {

                                            System.out.print("*");

                                   }

                                   System.out.print("\n");

                          }

                  }else{

                          System.out.println("非法行数!");

                  }

         }

}

 

 

【题目描述】

               打印出杨辉三角形(编程题)

【正确答案】       

public class printYang {

  public static void main(String[] args) {

           int[][] a = new int[10][10];

           for(int i=0; i<10; i++) {

                   a[i][i] = 1;

                   a[i][0] = 1;

           }

           for(int i=2; i<10; i++) {

                   for(int j=1; j<i; j++) {

                a[i][j] = a[i-1][j-1] + a[i-1][j];

             }

           }

           for(int i=0; i<10; i++) {

                          for(int k=0; k<2*(10-i)-1; k++) {

                                   System.out.print(" ");

                          }

                      for(int j=0; j<=i; j++) {

                                   System.out.print(a[i][j] + "   ");

                 }

                 System.out.println();

                  }

         }

}

 

【题目描述】

               下列代码的输出结果是什么?

public class MyFor {

         public static void main (String argv[]){

                  int i; int j;

                  outer:for(i=1;i<3;i++)

                  inner:for(j=1;j<3;j++){

                          if (j==2) continue outer;

                          System.out .println("Value for i="+i+" Value for j=" +j);

                  }

         }

}

【正确答案】       

Value for i=1 Value for j=1

Value for i=2 Value for j=1

 

【题目描述】

现有一个 32 位的整型变量 value 和一个有 32 个元素的数组 a[32],

要求:1、对 value 随机赋值;2、让数组 a[n]的值等于 value“位 n”的值,0<=n<=31。举例:如果 value 的“位 0”(Bit0)=0,那么 a[0]=0;如果 value 的“位 10”(Bit10)=1,那么 a[10]=1。

【正确答案】       

public class Foo {

         public static void main(String[] args) {

                  //产生随机数

                  int random = (int) (Math.random() * Integer.MAX_VALUE + 1);

                  //转成二进制字符串

                  String str=Integer.toBinaryString(random);

                  //转成二进制时最前面的零被省略,补上省略的 0

                  if(str.length()<32){

                          for(int j=0;j<=32-str.length();j++){

                    str="0"+str;

                          }

                  }

                  //给数组赋值

                  int[] a=new int[32];

                  for(int i=0;i<str.length();i++){

                          a[i]=Integer.parseInt(String.valueOf(str.charAt(i)));

                          System.out.println("a["+i+"]="+a[i]);

                  }

         }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值