最近找java實習面試被問到的東西總結(Java方向)

      時間,就是這麼很悄悄的溜走了將近兩個年華,不知不覺的,研二了,做爲一個通常學校的研究生,不知道該說本身是不學無術,仍是說有過努力,反正,這兩年裏,有過堅持,有過墮落,這不,忽然間,有種開竅的急迫感,尋思着找些實習,充實下生活,也是爲了未來而備戰,目標定位在杭州,然而,杭州的Java實習並很少,大大小小投了十來個企業單位,面來面去,回答的基本上也算差強人意,今日得一閒暇,就最近被問到的一些問題一一羅列,繼續努力吧!:java

一、說出Object類的經常使用方法? mysql

答:這個問題,對於Java開發有經驗的人來講,應該不難,至少也得說出5/6個方法的樣子,然而,很顯然,大部分在校生,並不知情,這個問題是上個學期年末面試百度的時候被問到的,當時有點懵逼,只說出了equals()方法、toString()方法,後來被面試官果然狠狠的指教了一番,因而很天然的印象深入,估計着,之後的面試裏是確定不會忘記咯,其實要回答這個問題,只要咱們能想到線程通訊的方法,那就基本上沒問題了,要知道線程之間進行通訊那裏但是有着三個方法呢,加上這裏兩個不就5個了嘛,完徹底全的能夠搞定面試官了,這三個方法就是:wait()、notify()、notifyAll()!哈哈,好了,廢話很少說,總結答案以下:面試

protected Object clone()//建立並返回此對象的一個副本。   
boolean equals(Object obj)//指示其餘某個對象是否與此對象「相等」。   
String toString()//返回該對象的字符串表示。
void wait()//在其餘線程調用此對象的 notify() 方法或 notifyAll() //方法前,致使當前線程等待。 
void notify()//喚醒在此對象監視器上等待的單個線程。   
void notifyAll()//喚醒在此對象監視器上等待的全部線程。
int hashCode()//返回該對象的哈希碼值。
Class<> getClass()//返回此 Object 的運行時類。  
protected void finalize()//當垃圾回收器肯定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。   

這裏每一個方法用來作什麼的,務必要搞清楚,好比說若是面試官讓你對一個非基本數據類型的對象進行復制,但不能影響到原對象,這裏咱們要學會使用clone()方法,如此等等。。。算法

二、說出一些經常使用的類,包,接口,常見的runtime exception,請各舉5個。 spring

答:此問題依舊是被百度面試官所提出,當時覺着就是小菜一碟,然而回答的時候,腦子確實忽然短路了,平時寫代碼導入了那麼多包,用過那麼多類,媽蛋,一要說出口的時候才發現,真正是胸有溝壑萬千,殊不知道從何提及!因而稀裏糊塗的道出經常使用的類有String類、StringBuffer類、Integer類,嗯當時是就說了這幾個腦子就短路了,甚至還傻傻的怯怯的反問了面試官一句,這些算經常使用的類嗎?記得,當時面試官沒說啥,很天然的一笑了之,如今想一想以爲也是逗了!接下來,我接着發揮,經常使用的包的話,java.lang、java.util、java.io、java.awt、java.sql,正待我說的興致正濃時,面試官打斷,說說經常使用的接口,瞬間懵逼,接口,幸好瞬間想到集合框架,因而立馬答道Map,List,原本想說Set的,後來想一想打住了,但無奈想不起別的了,因而如實說,暫時就想起這些了,常見的異常,我直接說,數組越界、除0異常,數據庫異常,面試官打斷,用java,因而老老實實的左思右想,卻發現啥都想不起來了,憋了半天總算憋出了一個NullPointException異常,緊張啊!回來後,立馬總結語句:sql

經常使用的類:BufferedReader、BufferedWriter、FileReader、FileWirter、String、Integer 、StringBuffer、Stack
經常使用的包:java.lang、java.awt、java.io、java.util、java.sql、javax.xml、java.NET
經常使用的接口: List、Map、Document、NodeList、Remote 
常見的異常:ArithmeticException (a=5/0即數學運算中除0異常)ClassCastException (強制轉換異常)NullPointerException(空指針異常,使用Null時)ArrayIndexOutofBoundsException(數組越界)StringIndexOutBoundsException(指示索引或者爲負或者超出字符串大小)IndexOutOfBoundsException(下標越界)NegativeArraySizeException(建立大小爲負的數組)IllegalArgumentException(傳遞非法參數)SecurityException(安全異常)NumberFormatException(數據格式異常,字符串->數字)FileNotFoundException(文件未找到異常)SQLException(操做數據庫異常)IOException(I/O輸入輸出異常)數據庫

三、說說你經常使用的數據結構?數組

答:何爲數據結構?是說算法嘛,內心在想,在想,想說又不敢說(第一次面試,沒有準備的面試,面的仍是百度,別提有多緊張了),面試官見我是半天沒坑出一句話,因而提醒了下,你平時用過集合框架沒,額,瞬間醒悟,原來問的這個,因而口若懸河,將本身從某寶典中的記憶所有吸納而出,整體上回答的還算不差(自我感受,面試官也沒刁難在這裏),第二次在EMC再次被問到這個問題的時候,還算照着某寶典行雲流水,然而,想象老是那麼美好,期間,面試官,巧問了一句,你說HashMap和Hashtable之間一個是安全一個是不安全也就是線程同步和不一樣步,那麼這個線程安全問題指的是什麼?你能不能舉個例子出來,其實這個問題並不難,難就難在我當時正沉浸在某寶典之中,根本想不到會有這麼一問,因此稀裏糊塗的回答了些,很顯然,雖然回答的八九不離十,但面試官能從我臉上讀出我說話的沒底氣!接下來總結下集合框架面試的大致以下:緩存

首先咱們要說的應該是對集合框架的理解,也能夠當着面試官寫下本身認爲的集合框架結構圖或者簡圖之類的,這裏的具體的話,本身發揮!
一、其次說說Collection和Collections,Collection是集合類的上級接口,便是java.util下全部集合類的父接口,繼承於他的接口主要有List和Set;Collections是針對集合類的一個工具類,提供了一系列靜態方法實現對各類集合的搜索、排序、線程安全化等操做。 
二、List和Set是繼承自Collection接口,而Map並非繼承自Collection接口;Set裏的元素是不能重複的,能夠用iterator()方法來區分重複與否!equals()是判讀兩個set是否相等, equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。 
三、Collection框架中實現比較要實現comparable/comparator接口。 
四、ArrayList和Vector的區別: 
共同點:這兩個類都實現了List接口(List接口繼承了Collection接口),他們都是有序集合,即存儲在這兩個集合中的元素的位置都是有順序的,至關於一種動態的數組,咱們之後能夠按位置索引號取出某個元素,而且其中的數據是容許重複的,這是與HashSet之類的集合的最大不一樣處,HashSet之類的集合不能夠按索引號去檢索其中的元素,也不容許有重複的元素。 
接着說ArrayList與Vector的區別,這主要包括兩個方面:. 
同步性:Vector是線程安全的,也就是說是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不一樣步的。若是隻有一個線程會訪問到集合,那最好是使用ArrayList,由於它不考慮線程安全,效率會高些;若是有多個線程會訪問到集合,那最好是使用Vector,由於不須要咱們本身再去考慮和編寫線程安全的代碼。 
注意:這裏談到線程安全,同步問題,面試官少不了會多嘴說一句,讓你講講線程安全是咋回事,若是不考慮,你聽到這個問題估計會是一臉懵逼,我當初就是這樣子的!因此這裏我補充下線程安全的問題: java中的線程安全就是線程同步的意思,就是當一個程序對一個線程安全的方法或者變量進行訪問的時候,其餘的程序不能再對他進行操做了,必須等到此次訪問結束之後才能對這個線程安全的方法進行訪問,不然將會形成錯誤發生;線程安全就是說,若是你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。若是每次運行結果和單線程運行的結果是同樣的,並且其餘的變量的值也和預期的是同樣的,就是線程安全的。 線程安全問題都是由全局變量及靜態變量引發的,定義在方法內部的局部私有變量是沒有線程安全與否一說的。 
備註:對於Vector&ArrayList、Hashtable&HashMap,要記住線程安全的問題,記住Vector與Hashtable是舊的,是java一誕生就提供了的,它們是線程安全的,ArrayList與HashMap是java2時才提供的,它們是線程不安全的。因此,咱們講課時先講老的。 
數據增加:ArrayList與Vector都有一個初始的容量大小,當存儲進它們裏面的元素的個數超過了容量時,就須要增長ArrayList與Vector的存儲空間,每次要增長存儲空間時,不是隻增長一個存儲單元,而是增長多個存儲單元,每次增長的存儲單元的個數在內存空間利用與程序效率之間要取得必定的平衡。Vector默認增加爲原來兩倍,而ArrayList的增加策略在文檔中沒有明確規定(從源代碼看到的是增加爲原來的1.5倍)。ArrayList與Vector均可以設置初始的空間大小,Vector還能夠設置增加的空間大小,而ArrayList沒有提供設置增加空間的方法。 
總結:即Vector增加原來的一倍,ArrayList增長原來的0.5倍。 
五、ArrayList,Vector, LinkedList的存儲性能和特性: 
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增長和插入元素,它們都容許直接按序號索引元素,可是插入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector因爲使用了synchronized方法(線程安全),一般性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行前向或後向遍歷,可是插入數據時只須要記錄本項的先後項便可,因此插入速度較快。LinkedList也是線程不安全的,LinkedList提供了一些方法,使得LinkedList能夠被看成堆棧和隊列來使用。 
六、List和Map的區別: 
一個是存儲單列數據的集合,另外一個是存儲鍵和值這樣的雙列數據的集合,List中存儲的數據是有順序,而且容許重複;Map中存儲的數據是沒有順序的,其鍵(key)是不能重複的,它的值(value)是能夠有重複的,存值採用 put(key,value)。Map中取值:value=m.get(key)(這個面試官常問,雖然不難,但也得注意) 
七、HashMap和Hashtable的區別: 
HashMap把Hashtable的contains方法去掉了,改爲containsvalue和containsKey。由於contains方法容易讓人引發誤解。 
一.歷史緣由:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現 
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的 
三.值:只有HashMap可讓你將空值做爲一個表的條目的key或value,即HashMap容許將null做爲一個entry的key或者value,而Hashtable不容許。安全

四、String 和StringBuffer的區別? 

答:這個問題相對來講很容易,某寶典上有詳細的解說,問到的時候,只要按照某寶典上來發揮就好了!這個問題是杭州某家網絡公司問到的。。

String和StringBuffer類,它們能夠儲存和操做字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串,而這個StringBuffer類提供的字符串能夠進行修改,因此當你知道字符數據要改變的時候你就可使用StringBuffer。典型地,你可使用StringBuffers來動態構造字符數據。

另外,String類實現了equals方法,new String(「abc」).equals(new String(「abc」)的結果爲true,而StringBuffer沒有實現equals方法,因此,new StringBuffer(「abc」).equals(new StringBuffer(「abc」)的結果爲false。(String覆蓋了equals方法和hashCode方法,而StringBuffer沒有覆蓋equals方法和hashCode方法,因此,將StringBuffer對象存儲進Java集合類中時會出現問題。)

五、關於線程的一些問題?

答:面試官一開始問我熟悉線程嗎?我能怎麼回答,總不能說不熟悉啊,多線程這玩意幾乎都是各大企業面試官屢問不爽的問題啊,好吧,一接通電話,面試官進行了簡單的自我介紹以後,無一例外的會問到關於線程的問題,因此多少準備些吧。

很典型的一個問題,你通常如何實現多線程,這個問題不用多說,很簡單,java提供了兩種方式,一個是繼承Thread類,另外一個是實現Runnable接口,因爲java不支持多繼承,因此在多繼承的時候,咱們得優先選用 實現 Runnable接口,由於咱們能夠經過實現接口的辦法,間接的實現多繼承!

另外還有公司問到,線程之間是經過哪些方法進行通訊,這個其實在上面說到Object類的經常使用方法的時候已經提到過了,主要是三個方法,wait()、notify()、notifyAll()方法,解釋的話就本身組織下就行咯,在這以前,有些HR會問你你一般如何啓動線程,顯而易見,start()方法!好吧,問到這裏,其實線程問題也差很少了,不過有些面試官每每不知從何找話題,因而簡單的問道,線程的生命週期,嗯這個只要咱們想到OS中的進程就好了,差很少的,建立、就緒、運行、阻塞、消亡!

OK,不,好像還有個問題被問到了,線程池,這個問題我徹底不知道,查了百科,也就大體瞭解了下,因此你們本身看看,我就不組織語言了,最後本身以爲線程中還有一個比較重要的東西,一個就是 interrupt()方法,一個是currentThread()方法,具體狀況你們本身查看java API文檔就好,我就很少解釋了!

六、說說你經常使用的數據庫?

答:往往問到這個問題,我總會一口氣說完,mysql、sql server、oracle,固然是按照使用熟練程度,因此面試官就每每會往這方面提問,以前因爲一直沒接觸到數據庫存儲引擎的問題,因此在被問到你用MySQL時,通常用的是哪一種存儲引擎(Engine)的時候,直接是一臉懵逼!我默默的問了句,什麼是存儲引擎?好吧,面試官也算是無解,就說如今通常都是用的InnoDB存儲引擎吧。我只好在面完後,給本身作了下補充:MySQL經常使用存儲引擎:InnoDB和MyISAM,其中InnoDB適用頻繁維護的。修改 插入等的數據表,MyISAM適合少改寫 少插入的讀取頻繁的表,那麼顯而易見,咱們作開發的,確定是InnoDB存儲引擎用的多了!

嗯,你們確定在想,難道沒有面試官問你事務相關的嘛,No,幾乎每一個面試官都會問,事務是什麼東西,那麼咱們首先要了解到的是,事務是併發控制的單位,是用戶定義的一個操做序列,要麼全作,要麼不作,是一個不可分割的(通俗的理解,事務是一組原子操做單元,從數據庫角度說,就是一組SQL指令,要麼所有執行成功,若由於某個緣由其中一條指令執行有錯誤,則撤銷先前執行過的全部指令),主要是爲了保證數據的完整性!好了,那麼事務的特色呢,原子性、一致性、隔離性、持久性!(若是你想回答的更好那麼把各個解釋下吧:事務的原子性表示事務執行過程當中的任何失敗都將致使事務所作的任何修改失效。一致性表示當事務執行失敗時,全部被該事務影響的數據都應該恢復到事務執行前的狀態。隔離性表示在事務執行過程當中對數據的修改,在事務提交以前對其餘事務不可見。持久性表示已提交的數據在事務執行失敗時,數據的狀態都應該正確)那麼說了那麼多,爲何須要事務呢?以前就說過,爲了保證數據的完整性,對的,事務就是爲解決數據安全操做提出的,事務控制實際上就是控制數據的安全訪問。OK,那麼咱們就要知道Java事務的類型有三種:JDBC事務、JTA(Java Transaction API)事務、容器事務。好了,那麼咱們平時通常怎麼處理事務呢?spring的事務是經過「聲明式事務」的方式對事務進行管理,即在配置文件中進行聲明,經過AOP將事務切面切入程序,最大的好處是大大減小了代碼量,提升了工做效率。

七、sql之left join、right join、inner join

答:說句實在話,自從辭職讀研以來好久沒有用過sql語句了,關於這幾個鏈接光靠記憶的話,徹底會是懵逼,幸好本身還不算蠢,很天然的根據字面理解,我很好的回答了出來,left join就是返回包括左表中全部記錄和右表中聯結字段相等的記錄,好了面試官會問你,那麼若是A表中,有甲丙丁3條記錄,B表中有甲乙丙丁4條記錄,那麼若是條件都知足的狀況,A left join B 丙記錄是否會被查出,答案是否認的!好了,right join就是和left join 相反的,inner join等值聯結 只返回2表中聯結字段相等的行!

八、sql優化

答:關於這個問題,我一直屬於茫然狀態,我不知道什麼叫優化,不知道怎麼樣纔算優化,記得第一次被問到的時候是在EMC的時候,當時我記得學數據庫那會老師總會說盡可能少的用的select *,儘可能少用 distinct、group之類的命令,因而我就把這些說了上來,很顯然,這不是面試官要的結果!哈哈,我就接着扯到寫java代碼的時候,我依稀記得preparedStatement能夠緩存sql語句,下一次執行相同語句不須要再次解析,因而我就答了去,但惋惜仍是不是面試老大要的結果,以後經提醒,才撥亂反正,意識到索引這玩意,對啊,索引(DB中的索引是某個表中一列或多列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針)啊,主鍵(彙集索引)啊:一方面,創建索引提升查詢速度;另外一方面,把全部需提升查詢速度的字段都加入彙集索引。最後啊,在sql中,儘可能多的使用commit!

最後,這幾天問的大概要表明性的問題都在這裏吧,至於好多公司直接沒怎麼問java知識,直接給我問項目經驗,一坨坨的論調,繼續嘛,還有公司問到了OSI七層模型,讓我把每層模型說出來,還有問我OS內存管理如何管理來的,這些我就不一一列舉了,今天回憶起這些問題,一個方面,本身作個總結,另外一個方面,你們一塊兒共勉。。。

2017年2月20日21:28:09總結 by小仇哥

相關文章
相關標籤/搜索