1,java 基本數據類型有幾種?哪幾種?(面試題)
答:8種 byte short int long float double char booleanhtml
2,int類型是幾個字節?(面試題)
答:4字節java
3, int i = 3000000000; 編譯能經過嗎?緣由是什麼?(面試題)
答:不能 右邊數據是int類型但超出了int類型的表示範圍 大約20多億(-2^31--2^31-1)面試
4,3默認是什麼類型?3.14默認是什麼類型?(面試題)
答:3默認int類型 3.14默認double類型編程
5,請問H的字符值(ASCII值)是多少?(面試題)數組
答:(A:65 a:97)安全
6,爲何 int a = 09;會報錯
答:由於在進製表示中0開頭的表示八進制,而八進制中不能出現大於7的數!dom
7,int a=3&4;請問a的值爲多少模塊化
答:在java中,若是&先後都是數字,那麼表示位運算符,按位與:先把十進制的數轉化成爲二進制,而後按位與,都爲1的時候纔是1,其他都爲0post
同理可知 | 在java中也是位運算符,按位或:先把十進制的數轉化成爲二進制,而後按位與,都爲0的時候纔是0,其他都爲1spa
8,高類型向低類型轉換須要強制轉換嗎?強制轉換可能致使什麼問題?
答:須要 可能致使精度丟失或溢出
9,String是基本數據類型嗎?(面試題)
答:不是,是引用數據類型
10, int i=2; int b = i++ + ++i + i++ ; b等於多少?i等於多少?(面試題)
答:計算過程:第一個 i++ i先使用 再自增 2+ ++i + i++ 此時 i=3
到第二個 ++i i先自增 再使用 2+4 + i++ 此時 i=4
到第三個i++ i先使用 再自增 2+4+4 此時 i=5
通常可由有多少個 i++ 或 ++i 直接肯定 i 的值 ,每出現一次直接加1
1,下面程序運行的結果是什麼?(面試題)
1 int i = 1 ; 2 while(i<=20){ 3 i++; 4 i=i++ ; 5 System.out.println(" char長度爲1,用單引號括起來。 "); 6 } 7 System.out.println(i);
答:程序陷入死循環 右邊的運算結果爲1 ,i永遠都是1
1,打印星星
1 //定義五行 2 int hs = 5; 3 for (int i = 1; i <= hs; i++) { 4 // 打印空格 5 for (int j = 1; j <= hs - i; j++) { 6 System.out.print(" "); 7 } 8 // 打印*號 9 for (int j = 1; j <= i + i - 1; j++) { 10 System.out.print("*"); 11 } 12 System.out.print("\n"); 13 }
2,冒泡排序(面試題)
有一個數組{7,5,14,23,19,2,4},要求使用冒泡進行排序(從大到小)
1 public static void main(String[] args){ 2 int [] arr={7,5,14,23,19,2,4}; 3 //比較輪數 4 for(int i=1;i<arr.length-1;i++){ 5 //從左往右,兩兩相比 6 for(int j=1;j<arr.length-1;j++){ 7 //交換 8 if(arr[j]<arr[j+1]){ 9 int temp=arr[j+1]; 10 arr[j+1]=arr[j]; 11 arr[j]=temp; 12 } 13 } 14 } 15 }
3,內存分配原理 (面試題)
1,談談你對面向對象的理解?什麼是類跟對象?(面試題)
答:面向對象是向現實世界模型的天然延伸,這是一種「萬物皆對象」的編程思想。 類是對象的抽象 對象是類的具體實例。
面向對象有三大特性,封裝、繼承和多態。
封裝就是將一類事物的屬性和行爲抽象成一個類,使其屬性私有化,行爲公開化,提升了數據的隱祕性的同時,使代碼模塊化。這樣作使得代碼的複用性更高。
繼承則是進一步將一類事物共有的屬性和行爲抽象成一個父類,而每個子類是一個特殊的父類--有父類的行爲和屬性,也有本身特有的行爲和屬性。
這樣作擴展了已存在的代碼塊,進一步提升了代碼的複用性。
若是說封裝和繼承是爲了使代碼重用,那麼多態則是爲了實現接口重用。多態的一大做用就是爲了解耦--爲了解除父子類繼承的耦合度。
(這是主觀題,不要死記,經過本身理解,而後能夠在網上找一些答案,將和本身理解相近的記下來)
1,final的用法?(面試題)
答:1,當final修飾變量的時候,表示常量,內容不能夠更改。
2,當修飾類的時候表示這個類不可以被繼承。
3,當修飾方法的時候表示這個方法不能被覆寫。
2,重載跟重寫有什麼區別?(面試題)
答:重寫:子類與父類方法名相同,參數列表必須徹底與被重寫的方法相同,返回類型必須一直與被重寫的方法相同,訪問修飾符的限制必定要大於等於被重寫方法的訪問修飾符,重寫最多一次。
重載:子類與父類方法名相同,必須具備不一樣的參數列表, 能夠有不一樣的返回類型,能夠有不一樣的訪問修飾符,重載能夠N次
3,java的3大特性是什麼?
答:封裝 繼承 多態
1,抽象類是否必定有抽象方法?
答:不必定,但有抽象方法的類必定是抽象類
2,堆跟棧有什麼區別?
答:1,最主要的區別就是棧內存用來存儲局部變量和方法調用;而堆內存用來存儲Java中的對象。不管是成員變量,局部變量,仍是類變量,它們指向的對象都存儲在堆內存中。
2,棧空間比較小;堆空間比較大。
3,說下有哪幾種訪問修飾符?他們有什麼區別?(面試題)
答:public protected default(不寫) private 權限由高到低
private :只有同類能夠直接訪問
default(不寫):同類,同包能夠直接訪問
protected:同類,同包和子類能夠直接訪問
public:同類,同包,子類和不一樣包的類均可以直接訪問
4,java內存結構分爲哪幾部分?(面試題)
答:棧,堆,方法區,程序計數器,本地方法棧(native)
5,構建對象會經歷哪些步驟?(面試題)
答:1,訪問方法區看類是否已經被加載,若是沒有先加載(靜態成員會在第一次加載時初始化)
2,而後經過關鍵字new在堆中申請空間,初始化對象
3,執行方法裏面的邏輯
6,靜態方法中能夠調用非靜態的變量嗎?非靜態的方法中能夠調用靜態的變量嗎?(面試題)
答:靜態方法不能夠調用非靜態的變量,非靜態方法能夠調用靜態的變量
1.請列舉switch case中能夠填寫的類型
答:byte short int char String enum
2.請判斷下面生成了幾個對象
String a="dax"; String b= new String("dax");
答:產生兩個對象,一個在堆內存中 還有一個在方法區中的常量池中
3.請判斷下面輸出結果
String str6 = "b"; String str7 = "a" + str6; String str67 = "ab"; System.out.println("str7 = str67 : "+ (str7 == str67));
答:結果是false,由於系統編譯的時候不知道str6是一個變量,系統不會自動幫你完成字符串的拼接
3.請判斷下面輸出結果
final String str2 = "ab"; final String str3 = "cd"; String str4 = str2+str3; // String str5 = "abcd"; System.out.println("str4 = str5 : " + (str4==str5));
答:輸出的結果是true,因爲裏面都是字符串常量,結果能夠在編譯期間就肯定下來,因此在class中已是str1 = "abcd"
1,看以下代碼會輸出什麼
1 Integer i1 = 120 ; 2 Integer i2 = 120 ; 3 Integer i3 = new Integer(120); 4 Integer i4 = new Integer(120);
答: Integer 在類加載的時候會先在靜態區中初始化好-128 127 之間的數值,若是在這個範圍則直接重複使用,不然在堆中new一個Integer
120:true 因爲10在範圍內,因此使用共用靜態區中的Integer
1000:false 因爲1000在範圍外,因此在堆中從新new一個Integer
2,ArrayList能夠有重複的元素嗎?元素是有序的嗎?
答:有重複的元素,元素是有序的
3,ArrayList和Vector有什麼區別
答:ArrayList是線程不安全的,效率高
Vector是線程安全的,效率低
4,有23個對象加入到HashSet中,初始化最小爲多少
答:23/0.75=30.66...<32=2^5
因此初始化32個最好,又不會擴容。也不會浪費空間
5,寫一個迭代器
1 // 迭代器遍歷 2 Iterator<String> iterator = set.iterator(); 3 while(iterator.hasNext()){ 4 System.out.println(iterator.next()); 5 }
6,List 跟Set Map的區別?
答:List:繼承Collection接口,有序集合,容許重複元素。
Set: 繼承Collection接口,無序集合,不容許重複元素,且最多有一個null值。
Map: Map是獨立接口,key_value鍵值對存儲數據;不容許重複元素。
7,Vector 跟ArrayList的區別是什麼?
答:ArrayList線程不安全,效率高 ,擴容1.5倍;Vector 線程安全,效率低,擴容2倍。
8,說下java中的集合,說下ArrayList底層原理?
答: 對於ArrayList而言,它實現List接口、底層使用數組保存全部元素。其操做基本上是對數組的操做。
ArrayList定義只定義類兩個私有屬性:elementData存儲ArrayList內的元素,size表示它包含的元素的數量。
9,說下ArrayList跟LinkList的區別?
答:Arraylist:底層是基於動態數組,動態數組就是改變數組容量方法,建立新的數組,指定新的容量(原來的1.5倍),將舊數組複製到新數組中並本類舊數組指向新數組
LinkedList:LinkedList的實現是基於雙向鏈表,並實現隊列(Queue),雙向隊列(Deque)接口
對於隨機訪問:ArrayList優於LinkedList 對於插入和刪除操做:LinkedList優於ArrayList
LinkedList比ArrayList更佔內存,由於LinkedList的節點除了存儲數據,還存儲了兩個引用,一個指向前一個元素,一個指向後一個元素。
1,final finally finalize有什麼區別?
答:final修飾變量表示其不能改變,修飾方法表示其不能重寫,修飾類表示其不能被繼承
finalize當垃圾回收器回收時執行其中的邏輯
finally不管是否發生異常,最終都會執行其中的邏輯
2,throws throw 區別是什麼?
答:throws:用來聲明一個方法可能產生的全部異常,不作任何處理而是將異常往上傳,誰調用我我就拋給誰。
throw:則是用來拋出一個具體的異常類型。
3,寫出5個常見異常?(面試題)
答:數組越界異常 (ArrayIndexOutOfBoundsException )
空指針異常 (NullPointException)
類轉換異常 (ClassCastException)
算術異常 (ArithmeticException)
類不存在異常 (ClassNotFoundException)
待補充。。。。。