1. 程式人生 > 其它 >JAVA 技術方向測試題-Java 基礎

JAVA 技術方向測試題-Java 基礎

JAVA 技術方向測試題-Java 基礎

1.JVM、JRE 和 JDK 的關係

JDK>JRE>JVM.

JVM:是Java虛擬機器。能識別class型別檔案中位元組碼指令,呼叫作業系統向上的API完成動作。JVM是java能夠跨平臺的核心。

JRE:Java執行時環境。主要包含兩個部分:JVM的標準實現和Java的一些基本類庫。與jvm相比多出來的是一部分的java類庫。

JDK:Java開發工具包。JDK是整個Java開發的核心,它集成了JRE和一些工具。

2.什麼是跨平臺性?原理是什麼?

跨平臺性是指經過一次編譯後可以在不同的作業系統上執行。

實現原理:JDK裡有多個jvm針對不同的作業系統,這樣只需要編譯一次就能生成jvm時別的class檔案,通過不同的jvm翻譯就能讓不同的作業系統執行。

3.&和&&的區別?

短路與:&&,如果左側的表示式是false就不執行右側,直接返回false。

&:無論左側是不是false都會在執行一邊右邊。

4.用最有效率的方法計算 2 乘以 8

2 << 3.

一個數左移幾位就是乘以2的幾次方。8 = 23,所以左移3位,位運算是cpu直接支援的,效率更高,而2*8是通過加法運算操作的。

5.在沒有使用臨時變數的情況如何交換兩個整數變數的值?

a ^= b

b ^= a

a ^= b

6.short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1; 有錯嗎?

short s1 = 1;
s1 = s1 +1;//是錯誤的. 因為1是int型,相加之後是int型不能直接賦值給short型,需要強轉.
s1 += 1;//是正確的.因為 += 隱含了強轉,相當於  s1 = (int) s1 + 1;

7.float f=3.4;是否正確?

不正確。在Java裡,沒有小數點的資料型別預設是int型,有小數點的資料型別是double型別

float f = 3.4F;//這樣是正確的.

8.手動實現一下氣泡排序(快速排序)

//第一種方法
boolean flag =  false;
do {
    flag = false;
    for(int i = 0;i < nums.length;i++) {
        //如果左側大於右側
        if(nums[i] > nums[i+1]) {
            nums[i] ^= nums[i+1];
            nums[i+1] ^= nums[i];
            nums[i] ^= nums[i+1];
            flag = true;
        }
    }
}while(flag)
    //第二種方法
    //輪數
for(int i = 0;i < nums.length;i++) {
	 //次數
	for(int j = i;j < nums.length-i-1;j++) {
		if(nums[j] > nums[j+1]) {
			nums[j] ^= nums[j+1];
			nums[j+1] ^= nums[j];
			nums[j] ^= nums[j+1]; 
		}
	}
}

9.實現列印指定行數的空心菱形的功能

for(int i = 0;i < 4;i++) {
			for(int k = 0;k < 4-i-1;k++) {
				System.out.print("  ");
			}
			for(int j = 0;j < 2*i+1;j++) {
				if(j == 0 || j == 2*i) {
					System.out.print("* ");
				}else {
					System.out.print("  ");
				}
			}
			System.out.println();
		}
		for(int i = 0;i < 3;i++) {
			for(int j = 0;j < i+1;j++) {
				System.out.print("  ");
			}
			for(int k = 0;k < 5-2*i;k++) {
				if(k == 0 || k == 5-2*i-1) {
					System.out.print("* ");
				}else {
					System.out.print("  ");
				}
				
			}
			System.out.println();
		}

執行結果:

10.列印掃雷的地圖

Scanner input = new Scanner(System.in);
		Random r = new Random();
		System.out.print("請輸入地圖的邊長:");
		int size = input.nextInt();
		String[][] map = new String[size][size];
		//初始化地圖
		for (int i = 0; i < size; i++) {
			for (int j = 0; j < size; j++) {
				map[i][j] = i+""+j;
			}
		}
		//列印地圖
		for (int i = 0; i < size; i++) {
			for (int j = 0; j < size; j++) {
				System.out.print(map[i][j]+"  ");
			}
			System.out.println();
		}

執行截圖: