java簡介(問答模式)
一、 JAVA語言1、 面向?qū)ο蟮娜齻€基本特征
答:繼承、封裝、多態(tài)
2、 方法重載和方法重寫的概念和區(qū)別
答:方法重載:方法名稱相同但方法內(nèi)的參數(shù)個數(shù)和參數(shù)類型不一樣。
方法重寫:在類的繼承中,當子類的成員變量與父類的成員變量同名時,子類的成員變量會隱藏父類的成員變量;當子類的方法與父類的方法同名,參數(shù)列表、反回值類型相同時,子類的方法將覆蓋父類的方法,當重寫的方法在子類的對象被調(diào)用時,他總是參考在子類中的定義的方法就被隱藏。
3、 接口和內(nèi)部類、抽象類的特征
答:接口:在一個類里,只有申明沒有實現(xiàn)。
內(nèi)部類:是在一個類的內(nèi)部定義的一個類
抽象類:是以abstract 定義的,里面至少有一個抽象方法。
4、 文件讀寫的基本類
答:File Reader 類和FileWriter類分別繼承自Reader類和Writer類。FileReader類用于讀取文件,F(xiàn)ile Writer類用于將數(shù)據(jù)寫入文件,這兩各類在使用前,都必須要調(diào)用其構(gòu)造方法創(chuàng)建相應(yīng)的對象,然后調(diào)用相應(yīng)的read()或 write()方法。
5、 串行化的注意事項以及如何實現(xiàn)串行化
答:如果有循環(huán)引用是不可以串行化的。對象輸出流的WriteObject方法和 對象輸入流的ReadObect 方法
6、 線程的基本概念、線程的本狀態(tài)以及狀態(tài)之間的關(guān)系
STOP(),SUSPENG()
STOP的本意是中止一個線程。中止的線程的問題根源不在于object locks,而是object的狀態(tài)。當stop()中止一個線程時,會釋放線程持有的所有l(wèi)ocks。但你并不知道當時的代碼正在做什么。
Suspend() 原意是暫時懸掛起一個線程對應(yīng)的是resume()函數(shù),用來恢復(fù)先前被懸掛起的線程。它并不釋放將被懸掛之線程所有的LOCKS。
7、 線程的同步、如何實現(xiàn)線程的同步
答:當兩個或多個線程同時訪問同一個變量,并且以個線程需要修改這個變量。就要用到線程同步。在Java 中,同步是通過 synchronized 關(guān)鍵字來定義的。 諾是想同步化某程序段,可以使用 synchronized(object){}方法,其中{}內(nèi)的程序語句被同步化。
8、 幾種常用的數(shù)據(jù)結(jié)構(gòu)以及內(nèi)部實現(xiàn)的原理
答:list map使用紅黑樹來實現(xiàn)的 set 。
9、 socket通信(tcp/udp區(qū)別及JAVA的實現(xiàn)方式)
10、 JAVA的事件委托機制和垃圾回收機制
11、 JDBC調(diào)用數(shù)據(jù)庫的基本步驟
答:注冊驅(qū)動程序
生成連接
創(chuàng)建Statement/PreparedStatement對象
執(zhí)行命令
查看結(jié)果
關(guān)閉連接,釋放資源
12、 解析XML文件的幾種方式和區(qū)別
答:Dom解析 在內(nèi)存中創(chuàng)建一個DOM樹,能隨機訪問文件內(nèi)容,也可以修改原文件內(nèi)容
SAX解析 線性解析,不能隨機訪問,也無法修改原文件
Dom解析要先用SAX解析創(chuàng)建DOM樹
13、 JAVA的四種基本權(quán)限的定義
14、 JAVA的國際化
答:Java 中提供了諾干國際化明感類,來實現(xiàn)國際化的。例如:dateformat timezone 等等。
二、 JSP
1、 至少能說出7個隱含對象以及他們的區(qū)別
答:request,response, session, application, out, page, exception, pageContext
2、 forward和rederect的區(qū)別
答:redirect重定向到另外一個頁面,重新開始一個請求
forward跳轉(zhuǎn)到另外一個頁面, 請求不斷開
3、 jsp的常用的命令
答:page, include, talib, forward,
三、 servlet
1、 什么情況下調(diào)用doget()和什么情況dopost
答:當表單提交時method設(shè)置的 是 get 就調(diào)用 doget 方法,如果是 post 就調(diào)用 dopost方法。 http get方法請求一頁面,調(diào)用doget() http post方法請求一頁面,調(diào)用dopost()
2、 servlet的init()方法和service()方法的區(qū)別
答:初始化時調(diào)用init()方法
有請求到達時調(diào)用service()方法,service()根據(jù)請求的類型,調(diào)用doget()或depost()等方法
3、 servlet的生命周期
答:init()----serviece()----destory()
4、 如何實現(xiàn)servlet的單線程模式
答:默認就是單線程的
5、 servlet的配置
6、 四種會話跟蹤技術(shù)
答:cookie
url重寫
session
隱藏域
四、 ejb
1、 ejb 容器提供的服務(wù)
答:主要提供聲明周期管理、代碼產(chǎn)生、持續(xù)性管理、安全、事務(wù)管理、鎖和并發(fā)行管理等服務(wù)。
2、 ejb的角色和三個對象
答:EJB角色主要包括Bean開發(fā)者 應(yīng)用組裝者 部署者 系統(tǒng)管理員 EJB容器提供者 EJB服務(wù)器提供者
三個對象是Remote(Local)接口、Home(LocalHome)接口,Bean類
3、 ejb的幾種類型
會話(Session)Bean ,實體(Entity)Bean 消息驅(qū)動的(Message Driven)Bean
會話Bean又可分為有狀態(tài)(Stateful)和無狀態(tài)(Stateless)兩種
實體Bean可分為Bean管理的持續(xù)性(BMP)和容器管理的持續(xù)性(CMP)兩種
4、 bean實例的生命周期
對于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在緩沖池管理,而對于Entity Bean和Statefull Session Bean存在Cache管理,通常包含創(chuàng)建實例,設(shè)置上下文、創(chuàng)建EJB Object(create)、業(yè)務(wù)方法調(diào)用、remove等過程,對于存在緩沖池管理的Bean,在create之后實例并不從內(nèi)存清除,而是采用緩沖池調(diào)度機制不斷重用實例,而對于存在Cache管理的Bean則通過激活和去激活機制保持Bean的狀態(tài)并限制內(nèi)存中實例數(shù)量。
5、 remote接口和home接口主要作用
remote接口定義了業(yè)務(wù)方法,用于EJB客戶端調(diào)用業(yè)務(wù)方法
home接口是EJB工廠用于創(chuàng)建和移除查找EJB實例
7、 客服端口調(diào)用EJB對象的幾個基本步驟
答;設(shè)置JNDI服務(wù)工廠以及JNDI服務(wù)地址系統(tǒng)屬性
查找Home接口
從Home接口調(diào)用Create方法創(chuàng)建Remote接口
通過Remote接口調(diào)用其業(yè)務(wù)方法
五、數(shù)據(jù)庫
1、存儲過程的編寫
2、基本的SQL語句
六、 weblogic
1、 weblogic指定大小的內(nèi)存
答:在啟動Weblogic的腳本中(位于所在Domian對應(yīng)服務(wù)器目錄下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以調(diào)整最小內(nèi)存為32M,最大200M。
2、 如何設(shè)定weblogic的熱啟動模式(開發(fā)模式)與產(chǎn)品發(fā)布模式。
答:可以在管理控制臺中修改對應(yīng)服務(wù)器的啟動模式為開發(fā)或產(chǎn)品模式之一。或者修改服務(wù)的啟動文件或者commenv文件,增加set PRODUCTION_MODE=true。
3、 如何啟動時不需要用戶名和密碼。
答:修改服務(wù)啟動文件,增加 WLS_USER和WLS_PW項。也可以在boot.properties文件中增加加密過的用戶名和密碼.
4、 在weblogic管理控制臺中對一個應(yīng)用域(或者一個網(wǎng)站)進行jms以及ejb或連接池等相關(guān)信息進行配置,實際保存在什么文件中。
答:保存在此Domain的config.xml文件中,它是服務(wù)器的核心配置文件。
5、 說說webloic中一個Domain的缺省目錄結(jié)構(gòu)?比如要講一個簡單的helloword.jsp放入何目錄下,在瀏覽器上就可以打入http://主機:端口號//hello.jsp既可以看到結(jié)果,又比如其中用到了一個自己寫的javabean如何辦。
答:Domain目錄\服務(wù)器目錄\applications,將應(yīng)用目錄放在此目錄下將可以作為應(yīng)用訪問,如果是Web應(yīng)用,應(yīng)用目錄需要滿足Web應(yīng)用目錄要求,jsp文件可以直接放在應(yīng)用目錄中,Javabean需要放在應(yīng)用目錄的WEB-INF目錄的classes目錄中,設(shè)置服務(wù)器的缺省應(yīng)用將可以實現(xiàn)在瀏覽器上無需輸入應(yīng)用名。
6、 如何查看在weblogic中已發(fā)布的ejb。
答:可以使用管理控制臺,在它的Deployment中可以查看所有已發(fā)布的EJB
7、 如何在weblogic進行ssl的配置與客戶端的認證配置或說說j2ee進行ssl的配置。
答:缺省安裝中使用DemoIdentity.jks和DemoTrust.jks KeyStore實現(xiàn)SSL,需要配置服務(wù)器使用Enable SSL,配置其端口,在產(chǎn)品模式下需要從CA獲取私有密鑰和數(shù)字證書,創(chuàng)建identity和trust keystore,裝載獲得的密鑰和數(shù)字證書。可以配置此SSL連接是單向還是雙向的。
8、 在weblogic中發(fā)布ejb需要設(shè)計那些配置文件。
答:不同類型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP實體Bean一般還需要weblogic-cmp-rdbms-jar.xml
9、 ejb需直接實現(xiàn)他的業(yè)務(wù)接口或home接口嗎?請簡述理由。
答:遠程接口和Home接口不需要直接實現(xiàn),他們的實現(xiàn)代碼是由服務(wù)器產(chǎn)生的,程序運行中對應(yīng)實現(xiàn)類會作為對應(yīng)接口類型的實例被使用。
10、 說說在weblogic中開發(fā)消息bean時persistenty與non-persistent的差別。
答:persistent方式的MDB可以保證消息傳遞的可靠性,也就是如果EJB容器出現(xiàn)問題而JMS服務(wù)器依然會將消息在此MDB可用的時候發(fā)送過來,而non-persistent方式的消息將被丟棄。
11、 說說你所熟悉的j2ee中的幾種常用的模式?以及對設(shè)計模式的一些看法。
答:Session Facade Pattern:使用SessionBean訪問EntityBean
Message Facade Pattern:實現(xiàn)異步調(diào)用
EJB Command Pattern:使用Command JavaBeans取代SessionBean,實現(xiàn)輕量級訪問
Data Transfer Object Factory:通過DTO Factory簡化EntityBean數(shù)據(jù)提供特性
Generic Attribute Access:通過AttibuteAccess接口簡化EntityBean數(shù)據(jù)提供特性
Business Interface:通過遠程(本地)接口和Bean類實現(xiàn)相同接口規(guī)范業(yè)務(wù)邏輯一致性
EJB架構(gòu)的設(shè)計好壞將直接影響系統(tǒng)的性能、可擴展性、可維護性、組件可重用性及開發(fā)效率。項目越復(fù)雜,項目隊伍越龐大則越能體現(xiàn)良好設(shè)計的重要性
12、 java的調(diào)試如何進行。
答:jdb 是java 的調(diào)試器,類似于 UNIX系統(tǒng)的調(diào)試器 dbx,jdb 使用 Java調(diào)試器應(yīng)用程序接口來完成對本地或遠程的Java調(diào)試器的調(diào)用工作。
一般是在要測試的代碼段想控制臺打印消息。
13、 java中對象之間的通訊采用什么方法。
答:直接調(diào)用另一對象方法來進行通訊以及數(shù)據(jù)的交換。
14、 applet訪問數(shù)據(jù)庫采用了什么底層機制。
15、 tcp/ip在連接是有幾次握手?釋放是有幾次握手?
答:建立連接是2次,釋放是3次。
16、 談?wù)勀銓wing mvc模式的理解?
答:Swing號稱是完全按照MVC的思路來進行設(shè)計的。在設(shè)計開始前,Swing的希望能夠達到的目標就包括:
模型驅(qū)動(Model-Driven)的編程方式。
提供一套單一的API,但是能夠支持多種視感(look-and-feel),為用戶提供不同的界面。
嚴格的說,Swing中的MVC實際上是MVC的一個變體:M-VC。 Swing中只顯示的定義了Model接口,而在一個UI對象中集成了視圖和控制器的部分機制。View和Control比較松散的交叉組合在一起,而更多的控制邏輯是在事件監(jiān)聽者部分引入的。
但是,這并沒有妨礙在Swing中體現(xiàn)MVC的精髓。事實上,在Swing的開發(fā)初期,Swing確實是按照標準的MVC模式來設(shè)計的,但是很快的問題就出現(xiàn)了:View和Controller實際上是緊密耦合的,很難作出一個能夠適應(yīng)不同View的一般化的Controller來,而且,一般也沒有很大的必要。
17、 Java中線程間怎么通訊?什么叫僵死線程?
答:線程之間可以通過管道進行通訊。
18、 Java程序怎么優(yōu)化?
答:提高JAVA的性能,一般考慮如下的四個主要方面:
(1) 程序設(shè)計的方法和模式
(2) JAVA布署的環(huán)境。
(3) JAVA應(yīng)用程序的實現(xiàn)
(4) 硬件和操作系統(tǒng)
為了提高JAVA程序的性能,需要遵循如下的六個步驟。
a) 明確對性能的具體要求
b) 了解當前程序的性能
c) 找到程序的性能瓶頸
d) 采取適當?shù)拇胧﹣硖岣咝阅?nbsp;
e) 只進行某一方面的修改來提高性能
f) 返回到步驟c,繼續(xù)作類似的工作,一直達到要求的性能為止。
19、 Java中如何訪問數(shù)據(jù)庫?
答:Java 中是通過 JDBC 進行對數(shù)據(jù)庫的訪問的。
20、 Jdbc提供什么方法訪問數(shù)據(jù)庫?
答:1. 建立數(shù)據(jù)源
2. 建立連接
與數(shù)據(jù)庫建立連接的標準方法是調(diào)用方法Drivermanger.getConnection(String url,String user,String password)。Drivermanger類用于處理驅(qū)動程序的調(diào)入并且對新的數(shù)據(jù)庫連接提供支持。
3. 執(zhí)行SQL語句
JDBC提供了Statement類來發(fā)送SQL語句,Statement類的對象由createStatement方法創(chuàng)建;SQL語句發(fā)送后,返回的結(jié)果通常存放在一個ResultSet類的對象中,ResultSet可以看作是一個表,這個表包含由SQL返回的列名和相應(yīng)的值,ResultSet對象中維持了一個指向當前行的指針,通過一系列的getXXX方法,可以檢索當前行的各個列,從而顯示出來。
21、 在java中如何進行socket編程。
答:Sockets有兩種主要的操作方式:面向連接的和無連接的。
無連接的操作使用數(shù)據(jù)報協(xié)議.這個模式下的socket不需要連接一個目的的socket,它只是簡單地投出數(shù)據(jù)報.無連接的操作是快速的和高效的,但是數(shù)據(jù)安全性不佳.
面向連接的操作使用TCP協(xié)議.一個這個模式下的socket必須在發(fā)送數(shù)據(jù)之前與目的地的socket取得一個連接.一旦連接建立了,sockets就可以使用一個流接口:打開-讀-寫-關(guān)閉.所有的發(fā)送的信息都會在另一端以同樣的順序被接收.面向連接的操作比無連接的操作效率更低,但是數(shù)據(jù)的安全性更高.
在服務(wù)器,使用ServerSocket監(jiān)聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請求,客戶連接后,會話產(chǎn)生;在完成會話后,關(guān)閉連接。
在客戶端,使用Socket對網(wǎng)絡(luò)上某一個服務(wù)器的某一個端口發(fā)出連接請求,一旦連接成功,打開會話;會話完成后,關(guān)閉Socket。客戶端不需要指定打開的端口,通常臨時的、動態(tài)的分配一個1024以上的端口。
22、 用java怎樣實現(xiàn)多線程?線程有那些狀態(tài)?
答:Java 中實現(xiàn)多線程的方法有兩種,一是繼承 java.lang 包中的 Thread 類,二是用戶自己的類實現(xiàn) Runnable 接口。
初始狀態(tài),就緒狀態(tài),阻塞狀態(tài),運行狀態(tài),死亡狀態(tài)。
23、 編譯java用那些命令?
答:javac編譯命令。Help命令可以幫助你得到你想要的命令。
24、 同時編譯java兩個類應(yīng)帶什么參數(shù)?
答:CLASSPATH
七、數(shù)據(jù)庫:
1、 動態(tài)查詢?nèi)绾螌崿F(xiàn)?表的結(jié)構(gòu)變化后,如果不需要修改程序,如何設(shè)計和實現(xiàn)查詢?
答:講查詢封裝進存儲過程中,通過調(diào)用存儲過程實現(xiàn)動態(tài)調(diào)用;表結(jié)構(gòu)發(fā)生變化后修改相應(yīng)的存儲過程即可再不修改程序的情況下實現(xiàn)查詢。
2、 如何優(yōu)化數(shù)據(jù)庫,如何提高數(shù)據(jù)庫的性能?
答:優(yōu)化數(shù)據(jù)庫主要是優(yōu)化查詢語句,通過高性能的查詢語句提高數(shù)據(jù)庫的性能。
3、 設(shè)計數(shù)據(jù)庫應(yīng)注意那些問題
答:首先應(yīng)盡量滿足三范式的要求,在一定程度上打破3范式的要求以提高數(shù)據(jù)庫的性能。
4、 表與表之間的關(guān)聯(lián)關(guān)系
答:分為3種:一對一、一對多、多對多。
5、 主鍵和外鍵的區(qū)別
答:主鍵在本表中是唯一的、不可唯空的,外鍵可以重復(fù)可以唯空;外鍵和另一張表的主鍵關(guān)聯(lián),不能創(chuàng)建對應(yīng)表中不存在的外鍵。