1. 程式人生 > >java面試第一次問題,時間沒把握好,有點緊張,其實都是很簡單的題,筆試感覺良好,面試可能回答不太滿意,繼續加油,建議初學者把基礎學紮實,葵花寶典你值得擁有

java面試第一次問題,時間沒把握好,有點緊張,其實都是很簡單的題,筆試感覺良好,面試可能回答不太滿意,繼續加油,建議初學者把基礎學紮實,葵花寶典你值得擁有

筆試題: 1、描述一下JVM載入class檔案的原理機制?

2、靜態變數和例項變數的區別?

在語法定義上的區別:靜態變數前要加static關鍵字,而例項變數前則不加。
在程式執行時的區別:例項變數屬於某個物件的屬性,必須建立了例項物件,其中的例項變數才會被分配空間,才能使用這個例項變數。
靜態變數不屬於某個例項物件,而是屬於類,所以也稱為類變數,只要程式載入了類的位元組碼,不用建立任何例項物件,靜態變數就會被分配空間,靜態變數就可以被使用了。總之,例項變數必須建立物件後才可以通過這個物件來使用,靜態變數則可以直接使用類名來引用。
3

在java中如何跳出當前的多重巢狀迴圈?

方法一:可以在需要的迴圈語句前定義一個標號,
然後在裡層迴圈體的程式碼中使用帶有標號的break
語句,即可跳出外層迴圈 方法二:可以在需要的迴圈條件內加入一個boolean型別的判斷,需要的時候將此變數值反轉,再break當前迴圈即可跳出。 public class Test { public static void main(String[] args) { method1(); method2(); } //方法一: 利用標籤 public static void method1(){ tag:for(int i=0;i<10;i++){ for(int
j=0;j<10;j++){ System.out.println("i="+i+",j="+j); if(j==5){ break tag;//跳到迴圈外的tag出,即終止整個迴圈 } } } } //方法二: 增加迴圈條件判斷 public static void method2(){ int[][] arr = {{1,2,3},{4,5,6
,7},{9}}; boolean found = false; for(int i=0;i<arr.length && !found;i++){ for(int j=0;j<arr[i].length;j++){ System.out.println("i="+i+",j="+j); if(arr[i][j]==5){ found = true;//找到5,使外層迴圈判斷條件變為false則終止整個迴圈 break;//跳出當前迴圈 } } } } } 建議:推薦使用方法一,方便靈活,且程式碼可讀性好。

4、介面和抽象類有什麼區別?

含有abstract修飾符的class即為抽象類,abstract 類不能建立的例項物件。含有abstract方法的類必須定義為abstract classabstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體(Concrete)子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果的子類沒有實現抽象父類中的所有抽象方法,那麼子類也必須定義為abstract型別。
介面(interface)可以說成是抽象類的一種特例,介面中的所有方法都必須是抽象的。介面中的方法定義預設為public abstract型別,介面中的成員變數型別預設為public static final。
下面比較一下兩者的語法區別:
1.抽象類可以有構造方法,介面中不能有構造方法。
2.抽象類中可以有普通成員變數,介面中沒有普通成員變數
3.抽象類中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。
4. 抽象類中的抽象方法的訪問型別可以是publicprotected和(預設型別,雖然
eclipse下不報錯,但應該也不行),但介面中的抽象方法只能是public型別的,並且預設即為public abstract型別。
5. 抽象類中可以包含靜態方法,介面中不能包含靜態方法
6. 抽象類和介面中都可以包含靜態成員變數,抽象類中的靜態成員變數的訪問型別可以任意,但介面中定義的變數只能是public static final型別,並且預設即為public static final型別。
7. 一個類可以實現多個介面,但只能繼承一個抽象類。
    下面接著再說說兩者在應用上的區別:
介面更多的是在系統架構設計方法發揮作用,主要用於定義模組之間的通訊契約。而抽象類在程式碼實現方面發揮作用,可以實現程式碼的重用,例如,模板方法設計模式是抽象類的一個典型應用,假設某個專案的所有Servlet類都要用相同的方式進行許可權判斷、記錄訪問日誌和處理異常,那麼就可以定義一個抽象的基類,讓所有的Servlet都繼承這個抽象基類,在抽象基類的service方法中完成許可權判斷、記錄訪問日誌和處理異常的程式碼,在各個子類中只是完成各自的業務邏輯程式碼
5、打印出所有的水仙花數?
public class Flower
{
    public static void main(String[] args)
    {
        int temp=0;
        System.out.println("水仙花數為:");
        for (int i=100;i<999 ;i++ )
        {
            temp = i;
            int x= temp/100;//算出百位數,  因為x是int型別 所以小數省去
            int y= temp%100/10;//算出十位數
            int z= temp%10;//算出個位數
            if (i==x*x*x+y*y*y+z*z*z)
            {
                System.out.println(i);
            }
        }
    }
}

6、對十個數進行排序?

public class maopao {
    public static void main(String[] args) {
        int arr[] = {12,23,2,5,43,13,11,21};
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length-i-1; j++) {
                if(arr[j] > arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    }
                }
            }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

7、有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最後問第一個人,他說是10歲。請問第五個人多大?

public static int getage(int age){
        if(age == 1){
            return 10;
        }else{

            return 2 + getage(age-1);
        }
    }

8、某個公司採用公用電話網路傳遞資料資訊,資料是小於8位的整數,為了確保安全,在傳遞過程中需要加密,加密規則如下:首先將資料倒序,然後將每位數字都加上5,再用和除以10的餘數代替該數字,最後將第一位和最後一位數字交換

public class Phone {
        public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
            int num = sc.nextInt();
              int a,aa,aaa,aaaa = 0;

              a = num % 10;
              aa = num / 10 % 10;
              aaa = num / 100 % 10;
              aaaa = num / 1000;

             a = (a+5) % 10 ;
             aa = (aa+5) % 10;
             aaa = (aaa+5) % 10;
             aaaa = (aaaa+5) % 10;
             /*第一第四交換*/
             int temp = a;
             a = aaaa;
             aaaa = temp;
             /*第二和第三位交換*/
             temp = aa;
             aa = aaa;
             aaa = temp;
             System.out.println("wei"+aaaa+aaa+aa+a);
        }
    }

9、利用條件運算子的巢狀來完成此題:學習成績> =90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。

public class Xvexichengji {
    public static void main(String[] args) {
        System.out.println("輸入姓名");
        Scanner sc= new Scanner(System.in);
        String ren = sc.next();
        System.out.println("輸入成績");
        while (true) {

            Scanner chengji = new Scanner(System.in);
            Double shu = chengji.nextDouble();

            if (shu > 100 || shu < 0) {
                System.out.println("輸入的成績有誤,請重新輸入");
                continue;
            } else {
                if (shu >= 90) {
                    System.out.println(ren+"的成績為A");
                    break;
                } else if (shu < 60) {
                    System.out.println(ren+"的成績為C");
                    break;
                } else {
                    System.out.println(ren+"的成績為B");
                    break;
                }
            }
        }
    }

}

面試問題: 1:自我介紹 2:你對jvm瞭解多少?你知道其他的jvm載入器? 3:break和continue的區別?

breakcontinue都是用來控制迴圈結構的,主要是停止迴圈。
1.break
有時候我們想在某種條件出現的時候終止迴圈而不是等到迴圈條件為false才終止。
這是我們可以使用break來完成。break用於完全結束一個迴圈,跳出迴圈體執行迴圈後面的語句。
2.continue
continuebreak有點類似,區別在於continue只是終止本次迴圈,接著還執行後面的迴圈,break則完全終止迴圈。
可以理解為continue是跳過當次迴圈中剩下的語句,執行下一次迴圈。

4:之前專案有多少人?你負責什麼部分?為什麼離職?期望薪資?