面試題復習記錄(一)


此表文章 是在學習了傳智播客的 董鵬老師的  Java程序員之從菜鳥到職場高手的必看之面試題學習而來(http://bbs.itcast.cn/thread-20484-1-1.html  當我在決定學習的時候先看了幾篇有點事情耽擱了,忙完回來再看時發現前面看的自己還是沒有記住,這也許就是沒有理解吧 !為了方便以后提醒自己,還是做個記錄吧!老師講的已經很好了,不過我加了一點自己學習過程中的思想過程。好吧,開始:
面試題一:java中到底有沒有goto這個關鍵字?
  答案是:goto是java語言中的保留字,目前還沒有在java中使用。
                注意這里老師的解釋是:保留字,而不是關鍵字。 保留字(Reserved Words)一般是等同於關鍵字(Keywords)的。保留字是語言中已經定義過的字,編程人員不能使用保留字來命名變量、函數、方法等。關鍵字是在語言中有特定的含義,是語法中的一部分。在一些語言中保留字並沒有應用的當前的語法,但是為了程序的可擴展性、也為了當前程序代碼能向后兼容,所以保留了這些字,共以后程序有可能使用。
goto是c語言中的一個詞,goto通常與條件判斷語句配合使用,從而實現條件轉移、構建循環、跳出循環等功能。但在結構化的程序設計中一般不主張使用goto,以免造成程序流程的混亂,使理解和調試程序產生困難。
 
面試題二:java中如何跳出當前的多重嵌套循環?
對於這個題,我首先想到的就是break,當時卻忘記了要指明跳出的位置,也就是跳出多重嵌套的那個標記的位置
例如:
A:for(int i=0; i<10; i++){       //外循環定義標號A.
                                  for(int j=0; j<10; j++){
                                           System.out.println("i="+i+",j="+j);
                                                if(j==6){
                                                break A; //break A,就是跳到外循環處(也就是整個外循環都結束了).   
                                                    }
                                         }
                       }

 

然后使用當滿足條件是跳出語句 break A; 試想如果我們不給break這個跳出的位置,那么break只能跳出當前的那層循環,而不是跳出這個的嵌套的循環。
然后老師又講了另一種方法,
例如:
其實這種思路很簡單:就是給最外層的循環添加一個跳出循環的條件,我們首先聲明一個布爾型的變量found,然后進行循環,當需要跳出時給這個變量重新附一個值就可以了,然后最外層的條件不成立,就跳出了循環,上面的found先是給的false,在for循環中的終止用了一個
!found,其實這里也可以不能這么倒思維。直接先給true 然后 跳出時給false,但是這種的給法是為了程序的可讀性更高。
其實有了上面的goto學習 我有種想法就是當需要跳出是使用goto A,但是我在測試時顯示了錯誤,
 
意思是:一種不能被解析為一個變量。什么原因換不是很清楚,好吧 !我的想法未能成功。
 
面試題三: 構造器Constructor是否可被override? 
             好吧,我承認,看到這個問題我都不知道是說什么的,看了講解才知道是說繼承的。
            老師講解: 這個問題,看起來非常簡單,但是很多初學者學完繼承后,都認為子類可以繼承父類的一切,事實上,構造器Constructor不能被繼承,因此不能重寫Override,但可以被重載Overload。

       
       希望大家一定注意,不是父類所有的東西都要繼承.  

            看完這個我又回去找了曾經自己看過的面向對象的三大特征:繼承、多態、封裝。
             繼承:以前記得自己看過的繼承曾有一段是說:不是所有父類的東西都要繼承。找了書,原來是我以前看c#是的繼承,好吧,都是面向對象語言,並且java和c#的關系大家都懂得,那我就當兩者一樣來理解吧!c#中說:實例構造函數、析構函數和靜態構造函數是不會被繼承的,其他的所有父類成員都會被子類繼承,無論他們的聲明方式是什么,但是,根據它們被聲明的訪問性,在繼承類中不一定能夠訪問到這些成員,這點在我看的java書里得到了驗證:一個父類中用 private聲明的變量:color ;子類是不能直接使用的,必須通過父類中給定的getColor()方法 才能使用。
 
面試題四:“==”和equals方法究竟有什么區別?
              對於這點我以前根本沒有注意過,知道上周實習時,有一個使用 leixin 獲取到一個radio的選擇時,我要做判斷,我就是用了
  if(leixin==“admin”)
       {....}
程序老是報錯,起初以為是沒有獲取到,結果用out.println(leixin);
顯示是獲取到了 就很郁悶,最后老師給我改成了equals,然后就success 了。今天能看到解釋了:
               答案:對於比較基本數據類型來說,==比較的就是數值的大小,例如:

                          int m = 2;
                          int n = 3;
                          boolean b = m==n;
                          System.out.println(b);//結果為false,因為2和3不等嗎.
                            但是對於引用類型數據來說,==和equals就有些不同了,在大多數類中的equals方法調用的依然是==,但比較的是兩個引用變量的地址是否相同.
                  例如:
                          int[] arr1 = {1,2,3};
                          int[] arr2 = {1,2,3};
                          System.out.println(arr1==arr2);//結果是false,因為比較的是地址值.
                          System.out.println(arr1.equals(arr2));//結果還是false,因為比較的還是地址值.其實調用的方法還是"=="
                                但是在字符串String中就不一樣了,因為String中的equals方法被重寫了,它比較的是兩個字符串對象中的內容是否相同.
                  例如:
                          String s1 = new String("abc");
                          String s2 = new String("abc");
                          System.out.println(s1==s2);//結果是false,因為比較的是地址值.
                          System.out.println(s1.equals(s2));//結果是true,因為比較的是對象中內容是否相同.

     所以就記住:當時string的類型時就用equals。
 
面試題五:對於兩個整數變量,在不使用第三個變量的條件下交換兩個變量的值?
           這個問題肯定很多人都看到過,比較簡單的一種就是:
               a=a+b;
               b=a-b;
               a=a-b;
           其實這里我們要注意的是在每條程序執行時a和b中的值的變化:例如:a=3,b=4; 當程序執行完 a=a+b; a的值就是7,b的值此時沒有改變依然是4;然后執行完b=a-b; 此時b的值就成了最開始的那個“a”(3),注意;此時 a=7,b=3,那么重新給a 賦值:a=a-b=7-3=4;嗯,思路就這樣理順了。
            這里貼出老師的另一個方法:
                     1,我們知道一個數異或另一個數2次,結果還是這個數。舉例:2^3^3=2.這個 大家明白吧,應該沒問題.同樣,3^2^3=2,其實我只是把順序換了下位置,這個都不難理解.

                             2, 題目中不是說兩個整數變量嗎?那么我們就設兩個整數變量.比如: int x = 2; int y = 3;現在我們就把這兩個數用異或的方法進行數值換位.
                             3,由於我們人的思想習慣是xy的順序,那么我們就先來換位x,於是有:
         x = x^y;//此時x=2^3.這時再算出y,於是有
         y = x^y;//相當於2^3^3=2,這時的y=2,我們完成了一個換位.於是開始換x.
        此時x^y=2^3^2=3,那么我們就把這個值賦給x,那么就是
         x = x^y;//相當於2^3^2=3.這時x=3;

              如果仔細思考,其實兩者的思想是一樣的:都是先用其中的一個變量來記錄關於兩個值的東西,然后使用這個記錄的東西和另一個沒有改變的變量來使用恰當的方法使另一種變量先變成第一個變量,然后在用那個東西和改變的那個變量方法來使產生原來的那個值賦給第一個變量 ,只是這其中的那個方法不一樣而已。
 
夜深人靜,先就總結這么多吧 明天再繼續!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM