軟件開發應試人員考試試題(Java)

姓名:___________   電話:___________

以下信息有工作經驗人員如實填寫,應屆畢業不填(時間從畢業參加工作算起)

從事Java開發時間____月   熟悉JavaScrip時間____月  

熟悉EXT開發時間____月    熟悉PDM開發時間____月

熟悉的數據庫及時間(如SQLServer 3個月,可多填)___________________

一、         JAVA基礎

1、簡述你所知道的JAVA修飾符及各自的使用機制?(public、abstract、final、synchronized、super…)

public :允許所有客戶訪問

protected:只能在本包內被該類的子類所使用

private:只允許在本類內使用

abstract:沒有提供實現,需要子類提供

static:與整個類相關,與單個對象無關

final:你只能定義一個實體一次,以後不能改變它或繼承它。一個final修飾的類不能被子類化,一個final修飾的方法不能被重寫,一個final修飾的變量不能改變其初始值

synchronized:方法獲得對對象監控的訪問權;如果該方法是static類型的,獲得是對類本身的訪問權。

super:構造器和方法,都用關鍵字super指向超類,但是用的方法不一樣。方法用這個關鍵字去執行被重載的超類中的方法。

2.String、StringBuffer與StringBuilder之間區別?別簡述各自的執行效率?

區別:String 類型和 StringBuffer 類型的主要性能區別其實在於 String 是不可變的對象, 因此在每次對String 類型進行改變的時候其實都等同於生成了一個新的 String 對象,然後將指針指向新的 String 對象,所以經常改變內容的字符串最好不要用 String ,因爲每次生成對象都會對系統性能產生影響,特別當內存中無引用對象多了以後, JVM GC 就會開始工作,那速度是一定會相當慢的,

執行速度:三者在執行速度方面的比較:StringBuilder >  StringBuffer >  String

使用場景:1.如果要操作少量的數據用 = String

2.單線程操作字符串緩衝區下操作大量數據 = StringBuilder

3.多線程操作字符串緩衝區下操作大量數據 = StringBuffer

2、靜態變量和實例變量的區別?能在靜態方法中調用非靜態變量嗎?

靜態變量屬於類,該類不生產對象,通過類名就可以調用靜態變量。實例變量屬於該類的對象,必須產生該類對象,才能調用實例變量

靜態方法及變量屬於整個類,數據將會被存儲在公共區域,非靜態方法及變量屬於對象

靜態方法中無法調用實例變量,而實例方法卻可以調用靜態變量

 

2、繼承和接口是什麼?以及他們的區別?

1 接口定義一個類需要實現的方法屬性索引事件和可能的參數返回值類型,具體的實現交由相應的類或結構,從而實現多態;而繼承用於在一個現有父類基礎上的功能擴展,把幾個類中相同的成員提取出來放在一個父類中,在子類中添加獨特的方法即繼承擴展

2 接口能夠實現多接口繼承,而繼承只能實現單繼承

3 繼承能夠獲得父類方法的實現,而接口只能獲得方法的定義,所以必須獲得所有的方法

4 在繼承中爲父類添加方法不影響子類的繼承,但在接口中爲父類添加一個方法定義必須在子類中添加此方法的實現  

3、HashMap和Hashtable的區別?

 1Hashtable是基於陳舊的Dictionary類的,HashMapMap接口的一個實現。

 2Hashtable的方法是同步的,而HashMap的方法不是

 3,只有HashMap可以讓你將空值作爲一個表的條目的keyvalue

4、抽象類(abstract class)和接口(interface)有什麼區別?

聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的所有抽象方法提供實現,否則它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其它類可以在類中實現這些方法

接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然後,它可以在實現了該接口的類的任何對象上調用接口的方法。由於有抽象類,它允許使用接口名作爲引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口

 

5、重載(Overload)和重寫(Override)的區別。Overloaded的方法是否可以改變返回值的類型?

Overload是重載,是有相同的方法名,但參數類型或個數彼此不同 
Override是重寫,是在子類與父類中,子類中的方法的方法名,參數個數、類型都與父類中的完全一樣,在子類中覆蓋掉了父類的改方法。

 

6、你所知道的集合類都有哪幾類?主要區別有哪些並簡單描述?

集合類型主要有3種:set(集)、list(列表)和map(映射)

Set

它的對象不按特定方式排序,只是簡單的把對象加入集合中

對集中成員的訪問和操作是通過集中對象的引用進行的,所以集中不能有重複對象。

列表 List

List接口與其實現類是容量可變的列表,可以按照索引訪問集合中的元素,是有序的集合

列表在數據結構中分別表現爲:數組和向量、鏈表、堆棧、隊列。常用的有ArrayList vector

映射 Map

映射中每個項都是成對的,Map是把鍵對象和值對象進行關聯的容器。

映射中存儲的每個對象都有一個相關的關鍵字(Key)對象,關鍵字決定了對象在映射中的存儲位置,關鍵字應該是唯一的,常用的有HashMapHashTable

 

7、JAVA SERVLET API中forward()與redirect()的區別?

使用forward的時候瀏覽器不知道它所請求的具體資源來源,所以地址欄不會變;

使用redirect,服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL

forward,轉發頁面和轉發到的頁面可以共享request裏面的數據.redirect,不能共享數據.

 

8、寫出JSP的常用內置對象?以及每個內置對象的簡單介紹?

1.request對象

客戶端的請求信息被封裝在request對象中,通過它才能瞭解到客戶的需求,然後做出響應。它是HttpServletRequest類的實例。

2.response對象

response對象包含了響應客戶請求的有關信息,但在JSP中很少直接用到它。它是HttpServletResponse類的實例。

3.session對象

session對象指的是客戶端與服務器的一次會話,從客戶連到服務器的一個WebApplication開始,直到客戶端與服務器斷開連接爲止。它是HttpSession類的實例。

4.out對象

out對象是JspWriter類的實例,是向客戶端輸出內容常用的對象

5.page對象

page對象就是指向當前JSP頁面本身,有點象類中的this指針,它是java.lang.Object類的實例

6.application對象

application對象實現了用戶間數據的共享,可存放全局變量。它開始於服務器的啓動,直到服務器的關閉,在此期間,此對象將一直存在;這樣在用戶的前後連接或不同用戶之間的連接中,可以對此對象的同一屬性進行操作;在任何地方對此對象屬性的操作,都將影響到其他用戶對此的訪問。服務器的啓動和關閉決定了application對象的生命。它是ServletContext類的實例。

7.exception對象

exception對象是一個例外對象,當一個頁面在運行過程中發生了例外,就產生這個對象。如果一個JSP頁面要應用此對象,就必須把isErrorPage設爲true,否則無法編譯。他實際上是java.lang.Throwable的對象。

8.pageContext對象

pageContext對象提供了對JSP頁面內所有的對象及名字空間的訪問,也就是說他可以訪問到本頁所在的SESSION,也可以取本頁面所在的application的某一屬性值,他相當於頁面中所有功能的集大成者,它的本類名也叫pageContext

9.config對象

config對象是在一個Servlet初始化時,JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時所要用到的參數(通過屬性名和屬性值構成)以及服務器的有關信息(通過傳遞一ServletContext對象)

9、JAVA解析XML有哪幾種方法?並簡述各自的優缺點

DOM:

是用與平臺和語言無關的方式表示XML文檔的官方W3C標準,分析該結構通常需要加載整個文檔和構造層次結構,然後才能做任何工作。是基於信息層次的

優點有:由於樹在內存中是持久的,因此可以修改它以便應用程序能對數據和結構作出更改。它還可以在任何時候在樹中上下導航,而不是像SAX那樣是一次性的處理。DOM使用起來也要簡單得多。  

SAX :

對於特別大的文檔,解析和加載整個文檔可能很慢且很耗資源,因此使用其他手段來處理這樣的數據會更好。這些基於事件的模型,比如SAX。這種處理的優點非常類似於流媒體的優點。分析能夠立即開始,而不是等待所有的數據被處理。而且,由於應用程序只是在讀取數據時檢查數據,因此不需要將數據存儲在內存中。這對於大型文檔來說是個巨大的優點。事實上,應用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時停止解析。一般來說,SAX還比它的替代者DOM快許多。

JDOM

目的是成爲Java特定文檔模型,它簡化與XML的交互並且比使用DOM實現更快。

DOM4J:

它是JDOM的一種智能分支。它合併了許多超出基本XML文檔表示的功能,包括集成的XPath支持、XML   Schema支持以及用於大文檔或流化文檔的基於事件的處理。它還提供了構建文檔表示的選項,

DOM4J是一個非常優秀的Java   XML  API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的Java軟件都在使用DOM4J來讀寫XML,特別值得一提的是連SunJAXM也在用DOM4J

9、概述MVC體系結構及優點

M:模型(Model),V:(View)C:控制Controller)

MVC模式的目的就是實現Web系統的職能分工。

Model層實現系統中的業務邏輯。 View層用於與用戶的交互。Controller層是ModelView之間溝通的橋樑,它可以分派用戶的請求並選擇恰當的視圖以用於顯示,同時它也可以解釋用戶的輸入並將它們映射爲模型層可執行的操作。

概括一下吧,用戶瀏覽,URL路由解析地址,如何指定對應的控制器(C)去處理,結合業務邏輯層(M),處理數據,比方說增\\\,完成之後,在調用指定的視圖(V),把處理的結果回傳給用戶.

意義就是:職能分工

10、介紹你所知道的J2EE中常用的設計模式,並簡單介紹工廠模式

Factory(工廠模式),      Builder(建造模式),       Factory Method(工廠方法模式),

Prototype(原始模型模式),Singleton(單例模式),   Facade(門面模式),

Adapter(適配器模式),   Bridge(橋樑模式),        Composite(合成模式),

Decorator(裝飾模式),   Flyweight(享元模式),     Proxy(代理模式),

Command(命令模式),      Interpreter(解釋器模式), Visitor(訪問者模式),

Iterator(迭代子模式),  Mediator(調停者模式),   Memento(備忘錄模式),

Observer(觀察者模式),  State(狀態模式),         Strategy(策略模式),

TemplateMethod(模板方法模式), Chain Of Responsibleity(責任鏈模式)

工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的數據生成一組類中某一個類的實例,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的數據進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件生成不同的子類實例。當得到子類的實例後,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例。

 

11. 線程和進程的區別?實現多線程的方式有哪幾種?如何實現多線程同步?

區別:

線程和進程是不同的,每個進程都是一個獨立運行的程序,擁有自己的變量,且不同進程間的變量不能共享;而線程是運行在進程內部的,每個正在運行的進程至少有一個線程,而且不同的線程之間可以在進程範圍內共享數據。也就是說進程有自己獨立的存儲空間,而線程是和它所屬的進程內的其他線程共享一個存儲空間。

實現多線程的方法:

1、  繼承java.lang.Thread,並重寫它的run()方法,將線程的執行主體放入其中。 

2、  實現java.lang.Runnable接口,實現它的run()方法,並將線程的執行主體放入其中。

如何實現線程同步:

給一個方法增加synchronized修飾符之後就可以使它成爲同步方法,這個方法可以是靜態方法和非靜態方法,但是不能是抽象類的抽象方法,也不能是接口中的接口方法

12:中的異常處理機制的簡單和應用。

Java程序違反了Java的語義規則時,Java虛擬機就會將發生的錯誤表示爲一個異常。違反語義規則包括2種情況。一種是Java類庫內置的語義。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException。另一種情況就是Java允許程序員擴展這種語義檢查,程序員可以創建自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類

13:線程同步的方法(類裏有哪些方法來支持線程同步)。

wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock

sleep():使一個正在運行的線程處於睡眠狀態,是靜態方法,調用此方法要捕捉InterruptedException異常。

notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切地喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先級。

Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。

14.Error與Exception有什麼區別

Error表示系統級的錯誤和程序不必處理的異常,

Exception表示需要捕捉或者需要程序進行處理的異常。

15.談談final, finally, finalize的區別。

final—修飾符(關鍵字)如果一個類被聲明爲final,意味着它不能再派生出新的子類,不能作爲父類被繼承。因此一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,可以保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明爲final的方法也同樣只能使用,不能重載。

finally—異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally (如果有的話)

finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的

二、 Javascript相關

1.      如何彈出帶確認取消按鈕的提示框,如”確定保存嗎?”,以及如何實現帶輸入框的提示框?

confirm(“確定保存嗎?”)

prompt(“輸入意見”)

2.      Javascript有哪些打開一個頁面的方式?

window.open(sURL [,vArguments] [,sFeatures]) 新頁面

window. showmodaldialog(sURL[, vArguments] [,sFeatures]) 模態對話框

window.showModelessDialog(sURL[, vArguments] [,sFeatures]) 非模態對話框

3.      頁面加載完後調用js方法如何實現?

body標籤加onload事件,如<body onload=”alert(1);”>

 

4.      Javascript如何做到在子頁面中調用父頁面的js函數或全局變量(如test()函數,test變量)?

window.opener.test();

Window.opener.test = “abc”;

5.      Javascript中定時執行如何實現?

setTimeout();定時執行,執行一次。clearTimeout(定時器對象名)結束

setInterval();定時執行,一直執行。clearInterval(定時器對象名)結束

兩種區別:

setTimeout();定時執行,執行一次。clearTimeout(定時器對象名)結束;

setInterval();定時執行,一直執行。clearInterval(定時器對象名)結束

6.      innerHTML和outerHTML的區別是什麼?

innerHTML取頁面元素標籤內部的內容,outerHTML取包含元素標籤的內容,如<a href=”test.jsp”>test</a>,innerHTML取到testouterHTML取到<ahref=”test.jsp”>test</a>.

7.      javascript如何做到頁面局部刷新?

使用AJAX。原理:獲取一個請求對象,向指定url發送請求,當請求完成時(狀態4),獲取到請求返回內容,並將內容填充到頁面局部。

8.      有如下表格,如何通過這個按鈕取到該格所在的表,以及如何取到該表格的第二行中的hello值?

<table>

          <tr>

                   <td>&nbsp;</td>

                   <td><input type=”button” value=”click”onclick=”test(this)”></td>

<tr>

<tr>

                   <td>hello</td>

                   <td>&nbsp;</td>

<tr>

</table>

通過按鈕取到表格:table = button.parentElement.parentElement.parentElement;(主要看是否掌握元素的parentElement方法)

          通過表格取到hello值:str =table.childNodes[1].childNodes[0].innerHTML;(主要看是否掌握元素的childNodes方法)

 

三  數據庫相關

1. 存儲過程和函數的區別?

存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務,用戶可以調用存儲過程,而函數通常是數據庫已定義的方法,它接收參數並返回某種類型的值並且不涉及特定用戶表。

2.oracle中truncate和delete命令有何區別?

delete將在回滾段中產生回滾信息,truncate不產生,因此無論表中的記錄多少,truncate執行都很快

truncate DDL,執行隱含的committruncate不能回滾

 

3. Oracle中char和varchar2數據類型有什麼區別?有數據”test”分別存放到char(10)和varchar2(10)類型的字段中,其存儲長度及類型有何區別?

Achar是定長字符類型,varchar2是變長字符類型。“test”在char(10)中被補齊空格,存儲長度是10字節,在varchar2(10)中存儲長度是4字節

 

4. 假如系統中有如下四張表:

1)文檔表(DOC):編號(docid)、名稱(docname)、描述(docdesc);docid爲主鍵,docname有索引;

2)學生表(XS):學生代碼(XSDM)、學生名稱(XSMC);

3)學科表(XK):學科代碼(XKDM)、學科名稱(XKMC)、最高分數(ZGF);

4)成績表(CJ):學生代碼(XSDM)、學科代碼(XKDM)、成績(CJ)。

 

問題1 寫出您最常用SQL語句的關鍵字

 

問題2 以下查詢的處理速度(返回數據量相同)從高到低排列?

A、select * from doc where docname=’test’

B、select * from doc where docid=50

C、select * from doc where docdesc=’test’

問題3  列出有不及格(<底於60分)的學生姓名(SQL語句)

 

問題4  統計每個學生的總分(SQL語句):

 

問題5  列出沒有不及格(>=60分)的學生姓名及平均分(SQL語句):


文章源自百度文庫:http://wenku.baidu.com/view/a557701e964bcf84b9d57b24.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章