-
1 # IT人劉俊明
-
2 # 演算法
作為IT行業的一名Java開發人員,我可以給你一些建議。
實習生一般都是面試Java基礎崗,面試的問題一般都會隨著公司的大小有較大的區別。
一般大型公司。像BAT那樣的公司大部分都會很重視原始碼這一方面。像一些集合的原理、鎖的底層原理都會重點去詢問,其次的話框架方面也會側重於底層原理的執行。這方面網上會有很多 相關的面試題,你可以搜尋完後做做。
中小型公司因為公司業務的需要,很多都會側重於應用,比如sopringmvc框架的使用、集合的使用、map與list的區別等問題。很多的時候都會要求實習生介紹一下自己的專案,以及專案是如何去做的。資料庫的使用、jdbc等相關專案開發中用到的基礎都會去詢問。
推薦一個App“”牛客網“”,裡面有很多練習題,可以模擬面試,應該能滿足你的需求。
我本人從事多年網際網路Java開發,感興趣的朋友可以關注私聊,共同努力,共同進步。
-
3 # 丁哥開講
關於Java面試,一般應該會問到下面這些問題。
[程式設計工具]
你常用的程式設計工具有哪些?這個問題主要是考察你工作的專業性,你是不是具有大型專案的工作經驗.
一般好的,Java的程式設計工具,你比如說,Eclipse, netbeans, Intelli J 等等。
[區域性變數和類變數的區別]
這個問題主要是考察選手對於scope的概念。回答這個問題,
就是區域性變數是在方法裡面定義的。這個變數只能在方法內部才可以被呼叫。
類變數呢,可以在類的內部,任何地方都可以被呼叫。類變數還可以新增一些修飾符,限制或者允許外部類呼叫。
[什麼是繼承? ]
繼承就是說子類可以享有父類的一些定義。
[什麼是封裝?]
封裝是透過類定義的方式,把一些方法和資料包裹起來。
[什麼是多型?]
多型是指一個物件可以透過具體的引用型別來呼叫父類和子類的一些方法。
這三個問題主要是考察選手對於面向物件程式設計的概念。
[ Overriding 和 overloading的區別]
這兩種方法在程式設計中會經常用到。被問的可能性非常大。
Overriding主要用在子類要使用父類的一些方法定義。方法名必須相同,方法引數必須相同, 返回值型別必須相同。使用這種方法, 子類既可以呼叫父類的方法也可以新增自己個性化的實現。
Overloading主要用在方法這一層次上。具有同樣的方法名,不同的引數型別, 可能會返回不同的資料型別。
[介面和抽象的區別?]
這個問題在面向物件程式設計裡面也是經常被問到的一個問題。
在Java中,無法實現多類繼承,所以就引入了介面的概念。介面中,主要是類的宣告,沒有實現內容。
抽象類中至少要含有一個抽象方法。這個抽象方法只有宣告沒有實現。抽象類的非抽象方法,需要有實現內容。
[說一下訪問修飾符]
這也是面向物件程式設計裡面非常重要的一個概念。
private, protected, public。沒有修飾符,就是default。
private只能在本類內部訪問。
protected在本類和子類中訪問。
public在其他類中都可訪問。
default在包內可訪問。
[陣列和陣列列表的區別?]
[String, StringBuilder, StringBuffer的區別? ]
string不可修改。
string builder可修改,執行緒不安全的。
string buffer可修改,執行緒安全的。
[HashMap, HashTable 的區別? ]
都是字典型別。
hash map 是執行緒不安全的。
hash table 是執行緒安全的。
[Set 相關的問題]
Set裡面的資料是唯一的。
sorted set是可排序的。
[Queue 相關的問題]
priority queue先進先出。
[Map相關的問題]
有hash map, linked hash map, tree map.
[Tree相關的問題]
主要是二叉樹, 搜尋二叉樹以及平衡二叉樹。
二叉樹是指只有左邊和右邊兩個節點的結構。
搜尋二叉樹是指左邊的節點永遠比右邊的節點小。
平衡二叉樹是指左邊的高度與右邊的高度相差不超過1。
這是資料結構相關的問題。
[final相關的問題]
final分別用在變數,類和方法上意味著什麼。
final用在類上,這樣的類無法被繼承。
final用在變數上, 這樣的變數無法被修改。
final用在方法上,這樣的方法無法被overriding。
[Exception相關的問題]
一共有幾種exception?
out of index, io, illegal argument, etc.
他們的區別是什麼?在什麼時候用?
這樣的exception很多。顧名思義,在對應的情況下使用對應的exception。
Runtime exception和compile exception有什麼區別?
run time exception,是在執行過程中發生的exception。
compile exception,是指在程式編譯的時候,報出來的exception。
[執行緒相關的問題]
什麼是執行緒?
執行緒是程序的一個分支。
如何建立執行緒?
可以使用thread和 handler來建立執行緒。
如何線上程中間傳輸資料?
可以透過共享資料和執行緒變數。
解釋一下yield, wait, notify, notifyAll, sleep
yield是把執行緒從執行狀態,變為可執行狀態。
wait是要求執行緒解鎖並放棄執行狀態,進入等待佇列。
notify是用來從等待佇列裡面喚醒一個執行緒。
notifyAll是用來從等待佇列裡面喚醒所有執行緒。
sleep是暫停執行緒的執行。當前執行緒被喚醒後會進入可執行狀態。
解釋執行緒的生命狀態。
執行緒的生命狀態,新建立,可執行,正在執行,不可執行,終止。
如何實現執行緒的同步?執行緒同步有什麼缺點?
通常使用synchronized 關鍵字來實現。缺點是降低了程式的執行效率。
Volatile是幹什麼用的?
這個關鍵字是用來在主記憶體上定義一個變數。而不是線上程的記憶體上。主要用來做資料的共享。
[序列化是怎麼回事]
序列化是指把一個物件寫入檔案當中。反序列化是指從檔案返回一個物件。
如何來做序列化和反序列化?
可以使用objectoutputstream寫入和讀取。
回覆列表
作為一名從業多年的程式設計師,也出版過Java程式設計書籍,所以我來回答一下這個問題。
首先,對於剛學習完Java程式設計的準程式設計師來說,從實習崗位開始做起是比較現實的選擇,一方面實習崗位不會有太大的工作壓力,另一方面也能夠積累大量的實踐經驗。
對於實習崗位的應聘,主要的問題將集中在以下三個方面:
第一:Java的基本程式設計思想。Java程式設計思想的考察主要集中在對於“抽象”的理解,比如類、介面、抽象類分別用於哪些場景,各自的作用是什麼等等。另外,面向物件的程式設計過程、封裝、繼承、多型等都是面試當中經常會遇到的問題。一些大型軟體開發企業往往會在筆試中涉及到IO、多執行緒和網路程式設計(Socket)知識。
第二:資料庫知識。資料庫知識通常是Java實習崗位考察的一個重點,包括基本的Sql語句,資料庫部署等,另外需要掌握JDBC知識。雖然目前透過DAO框架,比如MyBatis,可以完成資料庫對映(OO與OR),但是掌握JDBC的細節還是有一定必要的。隨著大資料應用的逐漸普及,未來Java程式設計師也需要掌握NoSql資料庫的相關技術。
第三:前端開發知識。雖然Java開發以後端開發為主,但是前端開發知識通常也會涉及到一些,不少開發團隊還比較關注Java程式設計師的前端開發能力。前端開發知識主要涉及到Html、CSS和JavaScript,其中JavaScript是重點內容,未來JavaScript將是程式設計師需要掌握的重要技能之一,因為目前JavaScript的應用邊界被不斷擴充套件,從前端開發到後端開發(Nodejs)再到嵌入式開發,都有JavaScript的身影。
最後,如果應聘Web開發崗位,需要了解Spring框架知識,如果面試大資料開發崗位,還需要了解Hadoop、Spark平臺知識。