java面試基礎(一)

java面試基礎(一)        2016年5月3日

面向對象編程特性:抽象、封裝、繼承、多態


方法作用域: public 當前類、同包、子孫類、其他
protected 當前類、同包、子孫類
default 當前類、同包
private 當前類

八大基本數據類型:byte、short、int、long、float、double、char、boolean

float型賦值需要加入強制轉換:float  f=(float)3.4

short s = 1;s=s+1; //錯誤需要強制轉換short s = 1;s = (short) (s + 1);
或者自動類型提升:short s = 1;s += 1;

goto爲保留字符

String是引用類型(區別在於是否可用null)
原始類型:byte、short、int、long、float、double、char、boolean
封裝類型:Byte、Short、Integer、Long、Float、Double、Character、Boolean


'&' '|' '^'(化作16位二進制進行運算)邏輯操作、'&&'、'||'爲條件操作(不說了,會短路,當判斷前面爲假,後面直接短路不判斷)
三者都是位運算,分別代表且、或、異或 計算方式:1&1=1,其他爲0。0|0=0,其他爲1。0^1或1^爲1,其他爲0


stack和heap:棧和堆,棧是一種線性集合、增刪改同一時間完成、後進先出。堆是棧組成的一個元素


Math.round(11.5)=12(計算方式+0.5求其floor,最接近的長整形)
Math.round(-11.5)=-11
源碼如下:
public static long round(double a) {
        if (a != 0x1.fffffffffffffp-2) // greatest double value less than 0.5
            return (long)floor(a + 0.5d);
        else
            return 0;
}


switch是一個整形表達式,因此傳遞過來的應該是int、short、char


'~':取反運算:~1=0,~0=1(取反:小於或等於0的,取反+1,大於0的取反-1)
~9=~0000 0000 0000 0000 0000 0000 0000 1001
  =~1111 1111 1111 1111 1111 1111 1111 0110(取反,32位操作系統)
  =1111111111111111111111111111111111111111111111111111111111110110(64位操作系統)
  =-10


負數變正數是通過補碼:
-33要知道其內存中儲存方式,先找出33的
0(代表正負數,0爲正數)000 0000 0010 0001
取反之後+1
1111 1111 1101 1110
1111 1111 1101 1111


'<<'(高位丟棄,地位補0)9<<3=72將9的位數向左移動三位(-9)<<3=-72(計算技巧,數據較小:左移n位相當於x*2^n)
'>>'(最高位爲0,則補0,反之亦然)9>>=1(計算技巧,數據較小:右移n位相當於x/2^n)
最快的算出2*8等於幾 2<<3


數組有length屬性,字符串有length()方法


label跳出多重嵌套循環


構造器Constructor不能被繼承,故不能重寫其Override方法


兩個equals相同,其一定有相同的hashcode,因爲其equals是用hashcode來判斷是否相等的


String是final最終類,不能被繼承


哈希算法:
(char)97=a //由哈希碼轉換爲字符串
a.hashCode() //由字符串轉換爲哈西碼


"abc".hashCode()=96354 //97=a,98=b,99=c。而96354是如何得到的呢?


java計算hashCode:
private int hash; // Default to 0
    public int hashCode() {
        int h = hash; //0
        if (h == 0 && count > 0) {
            int off = offset; //0
            char val[] = value; //abc
            int len = count; //3


            for (int i = 0; i < len; i++) { //0 i<3 | 1 1<3 | 2 2<3
                h = 31*h + val[off++]; //h=31*0+97=97
            } //h=31*97+98=3105
//h=31*3105+99=96354
            hash = h;
        }
        return h;

    }


原創筆記。若有錯誤,請及時告知

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章