总结Java常见面试题和答案
轉(zhuǎn)載自??總結Java常見面試題和答案
int和Integer有什么區(qū)別?
??答:int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類,java為每個原始數(shù)據(jù)類型都提供了封裝類。
String和StringBuffer的區(qū)別?
??答:String是不可變的對象,每次對String類型進行改變都相當于產(chǎn)生了一個新的對象,StringBuffer是可變的字符序列,所以如果要經(jīng)常改變某個字符串的話建議使用StringBuffer。
list、set、map問題?
??答:set????不允許重復,無序
?????????list???允許重復,有序
?????????map????成對的數(shù)據(jù)結構,鍵值必須具有唯一性
Servlet和CGI的區(qū)別?
??答:Servlet與CGI的區(qū)別在于Servlet處于服務器進程中,它通過多線程方式允許其service方法,一個實例可以服務于多個請求,并且其實例一般不會被銷毀,而CGI對每個請求都產(chǎn)生新的進程,服務完后就銷毀,所以效率上低于Servlet。
面向?qū)ο蟮奶卣?
??答:1:封裝:通過定義類并且給類的屬性和方法加上訪問控制
?????????2:繼承:子類繼承父類,子類可以擁有父類中已定義的方法,并且子類可以修改父類中的方法使其更適合特殊需求。
?????????3:多臺:不同對象對統(tǒng)一消息作出不同響應稱之為多態(tài)
?????????4:抽象:忽略與當前主題無關的那些方面,將注意力集中在與當前目標有關的方面
運行時異常和一般異常有何異同?
??答:運行時異常時(JVM)java虛擬機在運行過程中發(fā)生的問題,比如:內(nèi)存溢出等問題。這類異常沒法要求程序員去一一捕獲并拋出,一般異常是Java類庫或程序員自己寫的代碼發(fā)生的錯誤,這類異常可以由我們?nèi)ヒ灰徊东@并拋出。
多線程幾種實現(xiàn)方法,同步?
??答:多線程有兩種實現(xiàn)方法,一種是繼承Thread類或者實現(xiàn)Runnable接口。同步就是在方法返回類型后面加上synchronized。
c#中的委托,事件是不是委托?
??答:委托就是將方法作為一個參數(shù)帶入另一個方法叫做委托,事件是一種特殊的委托。
應用程序域?
??答:應用程序域可以理解為一種輕量級的進程,起到安全的作用,占用資源小。
Class.forName作用?
??答:調(diào)用該訪問返回一個以字符串指定類名的類對象。
JDO?
??答:JDO是java對象持久化的新的規(guī)范,為java?data?object的簡稱,也是一個用于存取某種數(shù)據(jù)倉庫中的對象的標準化API。
CORBA?
??答:CORBA標準是公共對象請求代理結構,用途為:用不同的程序設計語言書寫,在不同的進程中運行,為不同的操作系統(tǒng)開發(fā)。
xml解析技術?
??答:常用的DOM、SAX等
?????????DOM:處理大型文件時性能下降的非常厲害,適合對xml的隨機訪問
?????????SAX:事件驅(qū)動型的xml解析方法,適合對xml的順序訪問
jsp常用動作?
??答:jsp:include????引入一個文件
?????????jsp:useBean????實例化JavaBean
?????????jsp:setProperty????設置JavaBean屬性
?????????jsp:getProperty????輸出JavaBean屬性
?????????jsp:forward????轉(zhuǎn)發(fā)
CTS、CLS、CLR分別作何解釋?
??答:CTS????通用類型系統(tǒng)、CLS????通用語言規(guī)范、CLR????公共語言運行時。
Struts1和Struts2原理和區(qū)別?
??答:Struts1和Struts2是兩個完全不同的框架,Struts1以ActionServlet作為核心控制器,由ActionServlet負責攔截用戶的所有請求。Struts2以核心控制器FilterDispatcher為基礎,包含了框架內(nèi)部的控制流程和處理機制。
Hibernate工作原理,Hibernate數(shù)據(jù)持久化?
??答:Hibernate工作原理:
?????????1:讀取并解析映射信息,創(chuàng)建SessionFactory
?????????2:打開Session
?????????3:創(chuàng)建事物
?????????4:持久化操作
?????????5:提交事務
?????????6:關閉Session
?????????7:關閉SessionFactory
?????????Hibernate持久化:Hibernate根據(jù)定義的映射規(guī)則將對象持久化保存到數(shù)據(jù)庫,這就實現(xiàn)了對象的持久化。
Spring由那幾個模塊組成?
??答:Spring主要由7個模塊組成:
?????????1:Spring核心容器:提供了Spring框架的基本功能
?????????2:Spring?AOP:通過配置管理特性
?????????3:Spring?ORM:Spring框架集成了若干ORM框架
?????????4:Spring?DAO:打開關閉數(shù)據(jù)庫連接
?????????5:Spring?WEB:為基于WEB服務的應用程序提供上下文服務
?????????6:Spring?Context:向Spring框架提供上下文信息
?????????7:Spring?MVC:分離模型、視圖、控制器、以便更容易定制
折構函數(shù)和虛函數(shù)?
??答:折構函數(shù)式銷毀一個類的函數(shù),虛函數(shù)是為了C++的動態(tài)綁定而設計的。
描述你的編程風格?
??答:類名首字母大寫,常量一般全部大寫,給自己的代碼加注釋。
控制流程?
??答:控制流程一般使用if判斷條件。有第二分支,多分支,循環(huán)結構。循環(huán)本質(zhì)上也是通過判斷來實現(xiàn)的。
多形與繼承?
??答:多形:一個類中多個同名方法。繼承:子類繼承父類。
jsp內(nèi)置對象?
??答:request????用戶端請求
?????????response????回應
?????????pageContext????網(wǎng)頁屬性
?????????session????會話
?????????out????輸出
?????????page???當前網(wǎng)頁
?????????exception????錯誤網(wǎng)頁
?????????application????servlet正在執(zhí)行的內(nèi)容
?????????config????servlet構架部件
Struts模型驅(qū)動?
??答:封裝請求參數(shù)。
簡述JDBC?
??答:JDBC數(shù)據(jù)庫連接,是一種用于執(zhí)行SQL語句的Java API,可以為多種關系型數(shù)據(jù)庫提供統(tǒng)一訪問。
什么情況下不建議使用Hibernate?
??答:當數(shù)據(jù)量大,并且表關系復雜的時候不建議使用。
sleep()和wait()有什么區(qū)別?
??答:sleep()是線程類的方法,導致此線程暫停執(zhí)行指定時間,給執(zhí)行機會給其他線程,但監(jiān)控狀態(tài)依然保持,到時候會自動恢復。
?????????wait()是Object類的方法,對此對象調(diào)用了wait方法導致本線程放棄對象鎖,進入等待鎖定池,只有針對此對象發(fā)出notify方法后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態(tài)。
同步和異步,在什么情況下分別使用?
??答:如果數(shù)據(jù)將在線程間共享。例如正在寫的數(shù)據(jù)以后可能被另一個線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個線程寫過了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進行同步存取。
?????????當應用程序在對象上調(diào)用了一個需要花費很長時間來執(zhí)行的方法,并且不希望讓程序等待方法的返回時,就應該使用異步。在很多情況下采用異步往往更有效率。
數(shù)據(jù)庫三大范式?
??答:1:確保每列都是不可分割的原子值
?????????2:確保每列都和主鍵相關
?????????3:確保每列都和主鍵直接相關,而不是間接相關
單例模式有哪些好處?
??答:單例模式是一種比較常見的設計模式,帶給我們以下好處:
?????????1:控制資源的使用
?????????2:控制實例的產(chǎn)生數(shù)量
?????????3:讓多個不相關的兩個線程或進程之間實現(xiàn)通信
為什么要用spring?
??答:1、主要將各個框架有效的聯(lián)系起來,縮短實際編程時間。
?????????2、可以將各個框架進行有效的管理和控制,讓數(shù)據(jù)傳輸安全。
spring的IOC和DI?
??答:控制反轉(zhuǎn)和依賴注入是spring的兩大基礎作用。主要是將所有組件在spring提供的外部容器中加載。提高安全性,減低耦合性,使各個框架或者類之間的依賴性降低。
什么是聲明式的事務管理?為什么要用?spring如何實現(xiàn)聲明式的事務管理?
??答:聲明式的事務管理主要是將在進行對數(shù)據(jù)庫中數(shù)據(jù)的添加或者修改時需要執(zhí)行事務管理,主要是為了避免在執(zhí)行添加或修改的時候添加或修改不完全正確,導致數(shù)據(jù)丟失。spring使用AOP面向切面的思想進行事務管理的。
spring和Hibernate繼承后,定義事務管理特性的時候查詢?yōu)槭裁匆x為read-only?
??答:因為添加、刪除和更新都涉及到了數(shù)據(jù)庫的修改,而查詢并未涉及到數(shù)據(jù)庫修改,所以只需要定義只讀,這樣可以提高效率,進行更加方便的事務管理。
請你談談對Hibernate?OR映射的理解?
??答:將數(shù)據(jù)庫中的每一張表都映射成一個實體。
配置了lazy="true"一定會懶加載嗎?
??答:不一定,如果在配置中你也使用了fetch屬性的話此時lazy就會失效。
Hibernate數(shù)據(jù)庫標識與主鍵之間的認識?
??答:標識是為了方便和簡介映射文件,主鍵是為了讓數(shù)據(jù)不會重復。
為什么每次請求都要創(chuàng)建一個Action對象?
??答:Struts2每次請求的時候都會創(chuàng)建一個action實例,這樣會保證線程的安全。Struts1只是在第一次請求的時候創(chuàng)建一個action實例,以后每次相同的請求都直接從內(nèi)存中去讀取,它是單例模式,安全性較差。
Struts2是如何實現(xiàn)MVC模式的?
??答:在Struts2里面是將每次頁面的請求進行處理,然后將請求需要輸出的數(shù)據(jù)轉(zhuǎn)發(fā)到需要做數(shù)據(jù)顯示的頁面。Struts2只是起到一個數(shù)據(jù)接收和轉(zhuǎn)接的功能,就是Controller控制器,而傳來數(shù)據(jù)的頁面叫view顯示層,Struts2將數(shù)據(jù)提交給進行處理的類叫Model模型層,專門進行數(shù)據(jù)處理和數(shù)據(jù)庫的連接。
heap和stack有什么區(qū)別?
??答:棧是一種線形集合,其添加和刪除元素的操作應在同一段完成,棧按照后進先出的方式進行處理。堆是棧的一個組成元素。
EJB和JavaBean的區(qū)別?
??答:EJB不是一般的JavaBean,EJB是企業(yè)級的JavaBean,EJB一共分為3種,實體Bean,消息Bean,會話Bean。書寫EJB要遵循一定的規(guī)范,另外要運行EJB,你需要有相應的EJB容器,比如WebLogic、jboss等,而JavaBean不需要,只需要安裝Tomcat就可以了。EJB用于服務端的應用開發(fā),而JavaBean用于客戶端應用開發(fā)。
觸發(fā)器?
??答:觸發(fā)器是一種特殊的存儲過程,主要通過事件來觸發(fā)而被執(zhí)行。
什么是存儲過程?用什么調(diào)用?
??答:存儲過程是一個預編譯的SQL語句,優(yōu)點是允許模塊化的設計。就是說只需要創(chuàng)建一次,以后再程序中就可以調(diào)用多次。使用存儲過程比單純的SQL語句要快,可以用一個命令對象來調(diào)用存儲過程。
索引優(yōu)缺點?
??答:索引可以提高對數(shù)據(jù)庫中數(shù)據(jù)的檢索,缺點是減慢了數(shù)據(jù)錄入速度,同時也增加了數(shù)據(jù)庫的尺寸大小。
什么是事務?什么是事鎖?
??答:事務就是被綁定在一起,作為一個邏輯單元執(zhí)行的SQL語句。如果任何一個操作失敗,那么整個就失敗。共同失敗或共同成功。鎖可以保證事務的完整性和并發(fā)性。
什么是視圖?游標是什么?
??答:視圖是一種虛擬的表,具有和物理表相同的功能。游標是對查詢出來的結果集作為一個單元來有效的處理,可以對結果集的當前行做修改。
select執(zhí)行順序?
??答:from
?????????where
?????????group?by
?????????having
?????????select
?????????order?by
Collection和Collections的區(qū)別?
??答:Collection是集合類的父類,繼承它的主要由set和list
?????????Collections是針對集合類的幫助類,它提供了一系列針對集合的搜索,排序,線程安全化等操作。
final、finally、finalize的區(qū)別?
??答:final用于聲明屬性方法和類,分別表示:屬性不可變,方法不可覆蓋,類不可繼承。
?????????finally是異常處理語句的一部分,表示總是執(zhí)行。
?????????finalize是Object的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法。
assert是什么?什么時候用到?
??答:斷言,可以將斷言看成是異常處理的一種高級形式,可以用來判斷某個特定的表達式或值是否為真。
接口是否可以繼承接口?抽象類是否可以實現(xiàn)接口?抽象類是否可以繼承實體類?
??答:接口可以繼承接口,抽象類可以實現(xiàn)接口,抽象類可以繼承實體類。
引用傳遞和值傳遞?
??答:引用傳遞:形參改變影響實參
?????????值傳遞:形參改變不影響實參
當一個線程進入一個對象的synchronized方法后,其他線程是否可進入此對象的其他方法?
??答:其他方法前是否加了synchronized關鍵字,如果沒加則能。
說出servlet生命周期?
??答:servlet實例化時調(diào)用init方法,得到請求時調(diào)用service方法,service方法自動派遣doget或dopost方法,最后當實例銷毀時調(diào)用destroy方法。
error和exception有什么區(qū)別?
??答:error是指錯誤,通常程序員不能通過代碼來解決。底層環(huán)境或硬件問題。
?????????exception是指異常,可以通過代碼來解決的問題。
forward和redirect的區(qū)別?
??答:forward是轉(zhuǎn)發(fā),瀏覽器跳轉(zhuǎn)后不顯示新的地址。
?????????redirect是重定向,瀏覽器跳轉(zhuǎn)后顯示新的地址。
?????????對比之下forward更加高效,并且它有助于隱藏實際地址,但是有些情況則必須使用redirect,否則會報異常。
jsp中動態(tài)include和靜態(tài)include的區(qū)別?
??答:動態(tài)include用jsp:include實現(xiàn),適用于動態(tài)頁面,可以攜帶參數(shù)
?????????靜態(tài)include用include偽碼實現(xiàn),適用于靜態(tài)頁面
math.round(11.5)等于多少?math.round(-11.5)等于多少?
??答:Math.round()對數(shù)字進行四舍五入
?????????Math.round(11.5)=12
?????????Math.round(-11.5)=11
String?s=new?String("xyz");創(chuàng)建了幾個String?Object?
??答:創(chuàng)建了兩個String對象,一個保存的引用地址,一個保存實際的值。
數(shù)組有沒有l(wèi)ength()這個方法?String呢?
??答:數(shù)組里面沒有l(wèi)ength()方法,而是length屬性。String有l(wèi)ength()這個方法。
swtich()能否作用在byte、long、String上?
??答:swtich()傳遞的應該是一個整數(shù)表達式,所以它的值只能是:int、short、char、byte所以long和String都不能作用在swtich()上。
jsp和servlet之間的聯(lián)系?
??答:jsp前段動態(tài)頁面,servlet是純java類
?????????jsp被編譯之后會轉(zhuǎn)換為servlet執(zhí)行
java基本數(shù)據(jù)類型有哪些?String是不是基本數(shù)據(jù)類型,他們有何區(qū)別?
??答:基本數(shù)據(jù)類型8種:int、short、byte、long、float、double、char、boolean
?????????String不是基本數(shù)據(jù)類型,引用數(shù)據(jù)類型。
?????????區(qū)別:基本數(shù)據(jù)類型比較實用“==”,引用數(shù)據(jù)類型實用equest,并且引用數(shù)據(jù)類型存放的是地址而不是具體的值。
寫一個方法,實現(xiàn)字符串的替換,如:輸入bbbwlirbbb,輸出bbbhhtccc?
??答:String?s="bbbwlirbbb";
?????????s.replaceAll("wlirbbb","hhtccc");
如何將數(shù)值型字符轉(zhuǎn)換為數(shù)字(Integer,Double)?
??答:可以用Integer.parseInt()和Double.parseDouble()方法
如何將數(shù)字轉(zhuǎn)換為字符?
??答:可以使用String的valueOf()方法。
如何取得1970到現(xiàn)在的毫秒數(shù)?
??答:可以用getTime()方法。
如何格式化日期?
??答:可以用SimpleDateFormat?df=new?SimpleDateFormat("yyyy-MM-dd");
判斷是否有子文件?判斷是否有子目錄?判斷文件是否存在?
??答:判斷是否有子文件使用file.isFile()
?????????判斷是否有子目錄使用file.isDirectory()
?????????判斷文件是否存在使用file.exists()
繼承、重載、覆蓋問題?
??答:繼承:子類繼承父類,子類可以擁有父類中已定義的方法,并且子類可以修改父類中的方法使其更適合特殊需求。
?????????重載:在一個類中方法名和返回類型相同,參數(shù)不同。
?????????覆蓋:在子類中覆蓋父類的某個方法,要求方法名相同,參數(shù)類型相同。
Statement和PreparedStatement之間的區(qū)別?
??答:Statement比PreparedStatement速度慢
?????????PreparedStatement是預編譯,插入時速度高于Statement
?????????Statement創(chuàng)建速度很慢,常用選擇PreparedStatement
Session機制?
??答:session機制是一種服務器端機制,服務器使用一種類似于散列表的結構來保存信息。
jsp和servlet中的請求轉(zhuǎn)發(fā)分別如何實現(xiàn)?
??答:jsp可以使用jsp:forward標簽轉(zhuǎn)發(fā)
?????????servlet可以使用request.getRequestDispatcher()實現(xiàn)轉(zhuǎn)發(fā)
介紹j2ee、j2se、j2me的區(qū)別?
??答:j2ee(企業(yè)版):主要用于企業(yè)web開發(fā)
?????????j2se(標準版):主要用于web開發(fā),但缺少企業(yè)版的一些特性
?????????j2me(微小版):主要用于手機開發(fā)
J2ee提供的技術?
??答:j2ee提供的技術有EJB、servlet、jsp等。
什么是Application?Server?
??答:Application?Server?應用服務器
簡單介紹連接池的優(yōu)點和原理?
??答:數(shù)據(jù)庫連接和關閉是比較花費時間的一件事,而連接池可以提高我們的工作效率。
?????????剛開始創(chuàng)建一定數(shù)量的池連接,當需要時從池連接中拿出一個,用完之后再把這個連接重新放回連接池。
Web.xml的作用?
??答:Web.xml會在程序啟動時執(zhí)行,如果想在程序剛啟動的時候執(zhí)行一些方法的話可以配置在Web.xml中。
簡單介紹您所了解的MVC?
??答:在項目中使用MVC模式會使項目分工更加明確,結構更加清晰
?????????M?model?模型層:JavaBean
?????????V?view?視圖層:jsp?html
?????????C?controller?控制層:servlet
簡單介紹你所了解的XML?
??答:XML可擴展標記語言,可以用來標記數(shù)據(jù),定義數(shù)據(jù)結構,是一種允許用戶自定義標記的語言
簡單介紹您所了解的structs、spring和hibernate?
??答:struts:控制層Action,頁面標簽和Model數(shù)據(jù),調(diào)用業(yè)務層
?????????Spring:Aop管理事務控制,IOC管理各個組件的耦合
?????????Hibernate:負責數(shù)據(jù)庫和對象的映射,負責Dao層
總結
以上是生活随笔為你收集整理的总结Java常见面试题和答案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果发布新款 Apple Pencil:
- 下一篇: java美元兑换,(Java实现) 美元