『壹』 你要面試一個程序員,應該問他什麼問題
首先面試程序員分有沒有經驗
面試沒有經驗的程序員就隨便問問點ssm,ssh五大框架問題內,多線程什麼的,再容問問是否會點前端技術
有經驗就看看他的簡歷,問他簡歷項目上的問題,可以圍繞著簡歷上的項目問,通過他的回答涉及到的技術點之類的,拓展出去問其他的
『貳』 招java程序員的公司考題都是什麼
我個人覺得學歷不是和重要,尤其是做程序員,我也是一名java程序員,當時的面試題目是公司自己出題,有三道題目,第一題是:「資料庫題目」,每一個編程人員必須對資料庫有相當多的了解和認識,還必須熟練應用,第二題是:「java題」,主要寫出運行結果,這道題的用意主要是:對java代碼的熟悉程度的考核,第三題:「java編程」,對於java程序員來說,編程能力是不可少的,這題主要考察應聘人的編程的綜合能力,以上只是我個人面試的情況,希望能對你有所幫助!java程序員,如果是沒有工作經驗的話,剛開始沒有多少錢,只要2000左後,不過經驗是做出來的,以後會慢慢增加點的,根據自己的能力,能力的對少決定你能拿多少的薪水!
『叄』 求最新JAVA面試題目,越全越好!!!
這里有很多Java面經的,附答案和講解,自行下載即可:
Java資源教程專欄
『肆』 求程序員面試題
1.面向對象的軟體開發有哪些優點?
1)把軟體系統看成是各種對象的集合,這更接近人的思維。
2)軟體需求的變動往往是功能的變動,而功能的執行者--對象一般不會有太大的變化。這使得按照對象設計出來的系統結構比較穩定。
3)對象包括屬性和方法,對象把屬性和方法的具體實現方式一起封裝起來,這使得方法與之相關的屬性不再分離,提高每個子系統的相對獨立性,從而提高了軟體的可維護性。
4)支持封裝、繼承、多態和抽象,提高了軟體的可重用性、可維護性和可擴展性。
2.把一個類放在包里有什麼作用?(包的作用)
1)能夠區分名字相同的類。
2)有助於實施訪問許可權控制。
3)有助於劃分和組織java應用中的各個類。
3.說出一些常用的類,包,介面,請各舉出5個。
Runable,ActionListener,Conllection,Map,Set,List介面
1)java.lang包----包括線程類(Thread)、異常類(Exception)、系統類(System)、整數類(Integer)和字元串類(String) 等, 這些類是java程序中經常用到的。
2)java.awt包----抽象窗口工具箱包,awt是(Abstract Window Toolkit) 的縮寫。這個包中包含了用於構建GUI界面的類及繪圖類。
3)java.io包----輸入/輸出包,包含各種輸入流類和輸出流類,如文件輸入流類(FileInputStream類)及文件輸出流類(FileOutputStream)等。
4)java.util包----提供一些實用類,如日期類(Data)和集合類(Collection)等。
5)java.net包----支持TCP/IP網路協議,包括Socket類及和URL相關的類,這些類都用於網路編程。
除了上面提到的基本包,JDK中還有很多其他包,比如用於資料庫編程的java.sql包,用於編寫網路程序的java.rmi包(rmi是「Remote Method Invocation」的縮寫)。另外,javax.*包是對基本包的擴展,包括用於編寫GUI的javax.Swing包,以及用於編寫聲音程序的javax.sound包等。
4. 描述一下你最常用的編程風格。
1)注意編碼規則,符合編碼要求。
2)變數,類等起名要有意義。
3)經常格式化代碼,注意格式。
4)代碼中加入測試方法或測試類,盡量提早發現錯誤。
5)代碼中要加入注釋,為別人和自己將來理解代碼帶來方便。
5. 說一說標識符的命名規則,以及java的編程規范。
Java標識符的命名規則:
1) 標識符由字母、數字、下劃線「_」、美元符號「$」或者人民幣符號「¥」組成,並且首字母不能是數字。
2) 不能把關鍵字和保留字作為標識符。
3) 標識符沒有長度限制。
4) 標識符對大小寫敏感。
Java編程規范:
1)類名和介面名:首字母大寫,其餘字母小寫。如SamDoc
2)方法名和變數名:首字母小寫,其餘的字母大寫。
如bothEyesOfDoll。
3)包名:字母全部小寫。如,com.abc.dollapp。
4)常量名:採用大寫形式,單詞之間以下劃線「_」隔開。
如DEFAULT_COLOR_DOL。
…………………………
31、介紹JAVA中的Collection FrameWork(包括如何寫自己的數據結構)?
答:Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素(Elements)
Map提供key到value的映射
32、抽象類與介面?
答:抽象類與介面都用於抽象,但是抽象類(JAVA中)可以有自己的部分實現,而介面則完全是一個標識(同時有多重繼承的功能)。
JAVA類實現序例化的方法是實現java.io.Serializable介面
Collection框架中實現比較要實現Comparable 介面和 Comparator 介面
33、STRING與STRINGBUFFER的區別。
答:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字元串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法
34、談談final, finally, finalize的區別
答:final?修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載
finally?再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)
finalize?方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的
35、面向對象的特徵有哪些方面
答:主要有以下四方面:
1.抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
2.繼承:
繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和實例變數,並且類可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:
封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的介面訪問其他對象。
4. 多態性:
多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。
36、String是最基本的數據類型嗎
答:基本數據類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類
37、int 和 Integer 有什麼區別
答:Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。原始類型封裝類booleanBoolean,charCharacter,byteByte,shortShort,intInteger,
longLong,floatFloat,doubleDouble
引用類型和原始類型的行為完全不同,並且它們具有不同的語義。引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的預設值。對象引用實例變數的預設值為 null,而原始類型實例變數的預設值與它們的類型有關
38、運行時異常與一般異常有何異同
答:異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。
39、說出ArrayList,Vector, LinkedList的存儲性能和特性
答:ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,
Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。
40、HashMap和Hashtable的區別
答:HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非線程安全,效率上可能高於Hashtable。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。
41、heap和stack有什麼區別
答:棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。堆是棧的一個組成元素
42、Java的介面和C++的虛類的相同和不同處
答:由於Java不支持多繼承,而有可能某個類或對象要使用分別在幾個類或對象裡面的方法或屬性,現有的單繼承機制就不能滿足要求。與繼承相比,介面有更高的靈活性,因為介面中沒有任何實現代碼。當一個類實現了介面以後,該類要實現介面裡面所有的方法和屬性,並且介面裡面的屬性在默認狀態下面都是public static,所有方法默認情況下是public.一個類可以實現多個介面。
43、Java中的異常處理機制的簡單原理和應用
答:當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException。另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。
43、垃圾回收的優點和原理。並考慮2種回收機制
答:Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由於有個垃圾回收機制,Java中的對象不再有"作用域"的概念,只有對象的引用才有"作用域"。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。
44、你所知道的集合類都有哪些?主要方法?
答:最常用的集合類是 List 和 Map。 List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、存儲和操作任何類型對象的元素列表。 List 適用於按數值索引訪問元素的情形。
Map 提供了一個更通用的元素存儲方法。 Map 集合類用於存儲元素對(稱作"鍵"和"值"),其中每個鍵映射到一個值。
45、描述一下JVM載入class文件的原理機制?
答:JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。
46、排序都有哪幾種方法?請列舉
答: 排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸並排序,分配排序(箱排序、基數排序)
快速排序的偽代碼。
/ /使用快速排序方法對a[ 0 :n- 1 ]排序
從a[ 0 :n- 1 ]中選擇一個元素作為middle,該元素為支點
把餘下的元素分割為兩段left 和right,使得left中的元素都小於等於支點,而right 中的元素都大於等於支點
遞歸地使用快速排序方法對left 進行排序
遞歸地使用快速排序方法對right 進行排序
所得結果為left + middle + right
47、JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try塊中可以拋出異常嗎?="3">答:Java通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的介面。在Java中,每個異常都是一個對象,它是Throwable類或其它子類的實例。當一個方法出現異常後便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常並進行處理。Java的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。一般情況下是用try來執行一段程序,如果出現異常,系統會拋出(throws)一個異常,這時候你可以通過它的類型來捕捉(catch)它,或最後(finally)由預設處理器來處理。
用try來指定一塊預防所有"異常"的程序。緊跟在try程序後面,應包含一個catch子句來指定你想要捕捉的"異常"的類型。
throw語句用來明確地拋出一個"異常"。
throws用來標明一個成員函數可能拋出的各種"異常"。
Finally為確保一段代碼不管發生什麼"異常"都被執行一段代碼。
可以在一個成員函數調用的外面寫一個try語句,在這個成員函數內部寫另一個try語句保護其他代碼。每當遇到一個try語句,"異常"的框架就放到堆棧上面,直到所有的try語句都完成。如果下一級的try語句沒有對某種"異常"進行處理,堆棧就會展開,直到遇到有處理這種"異常"的try語句。
48、一個".java"源文件中是否可以包括多個類(不是內部類)?有什麼限制?
答:可以。必須只有一個類名與文件名相同。
49、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
答:位元組流,字元流。位元組流繼承於InputStream OutputStream,字元流繼承於InputStreamReader OutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高性能和使用方便。
50、java中會存在內存泄漏嗎,請簡單描述。
答:會。自己實現堆載的數據結構時有可能會出現內存泄露,可參看effective java.