版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Java面試題面向?qū)ο蟮奶卣饔心切??三大特征就是(繼承、封裝、多態(tài)性)抽象:抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分的注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過程抽象,二是數(shù)據(jù)抽象。繼承:繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類可以沖現(xiàn)有的類中派生,這個(gè)過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。封裝:封裝就是把過程和數(shù)據(jù)包圍起來,對(duì)數(shù)據(jù)的訪問只能通過已定義的界面,面向?qū)ο笥?jì)數(shù)始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對(duì)象,這些對(duì)象通過一個(gè)受保護(hù)的接口訪問其他對(duì)象。多態(tài)性:是指允許不同的類的對(duì)象對(duì)同一消息做出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語音具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名的問題。String是基本的數(shù)據(jù)類型嗎?Java的基本數(shù)據(jù)類型包括byte、int、char、long、float、double和short。java.lang.String類是final類型的,因此不能繼承和修改這個(gè)類,為了提高效率節(jié)省空間,我們應(yīng)該使用StringBuffer類?;緮?shù)據(jù)類型及轉(zhuǎn)換char16-bitUnicode0Unicode216-1Characterbyte8-bit-128+127Byteshort16-bit-215+215-1Shortint32-bit-231+321-1Integerlong64-bit-263+263-1Longfloat32-bitIEEE754IEEE754Floatdouble64-bitIEEE754IEEE754DoubleString和StringBuffer,StringBuild的區(qū)別。String和StringBuffer,它們可以存儲(chǔ)和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。這個(gè)String類提供了數(shù)值不可改變的字符串,而這個(gè)StringBuffer類提供的字符串可以進(jìn)行修改,可以使用這個(gè)StringBuffer來動(dòng)態(tài)構(gòu)造字符數(shù)據(jù)。StringBuild是jdk1.5后用來替換StringBuffer的一個(gè)類,大多數(shù)時(shí)候可以替換StringBuffer。和StringBuffer的區(qū)別在于StringBuild是一個(gè)單線程使用的類,不執(zhí)行線程,同步所以比StringBuffer速度快,效率高,是非線程安全的。說出ArrayList,Vector,LinkedList的存儲(chǔ)性能和特性ArrayList和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后即可,所以插入速度較快。HashMap和HashTable的區(qū)別。HashMap是HashTable的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),它們走完成了Map接口。HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于HashTable。HashMap允許將null作為一個(gè)entry的key或者value,HashTable不允許。HashMap把HashTable的contains方法去掉了,改成containsKey和containsVaule。因?yàn)閏ontains方法容易讓人誤會(huì)。HashTable繼承自Dictionary類,而HashMap是java1.2引進(jìn)的Mapinterface的一個(gè)實(shí)現(xiàn)。HashTable的方法是Synchronize的,而HashMap的不是,在多個(gè)線程訪問HashTable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須為之提供外同步。final,finally,finalize的區(qū)別final-修飾符(關(guān)鍵字)如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類不能既被聲明為abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們?cè)谑褂眠^程中不被改變。被聲明為final變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不能修改。被聲明為final的方法也是只能使用,不能重載。finally-在異常處理時(shí)提供finally塊來執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的catch子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入finally塊(如果有的話)。finalize-方法名。Java技術(shù)允許使用finalize()方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在Object類中定義的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統(tǒng)資源或執(zhí)行其他清理工作。finalize()方法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。Overlord和Override的區(qū)別。Overlorded的方法是否可以改變返回值的類型?方法重寫overriding和重載overlording是Java多態(tài)性的不同表現(xiàn)。重寫overriding是父類與子類之間多態(tài)性的一種表現(xiàn):如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫了。如子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中定義的,對(duì)它而言,父類中的方法如同被屏蔽了。重載overlording是一個(gè)類中多態(tài)性的一種表現(xiàn):如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,這樣稱為方法的重載。Overlorded是可以改變返回值的類型的。abstractclass和interface有什么區(qū)別?抽象類:抽象類是特殊的類,只是不能被實(shí)例化;除此之外,具有類的其他特性;重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能聲明在抽象類中,且不包含任何實(shí)現(xiàn),派生類必須覆蓋它們。另外,抽象類可以派生自一個(gè)抽象類,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類必須覆蓋它們。接口:接口是應(yīng)用類型的,類似于類,更和抽象類有所相似,以至于很多人對(duì)抽象類和接口的區(qū)別比較模糊,接口除了可以包含方法外,還可以包含屬性、索引器、事件,而且這些成員都被定義為公有的。除此之外,不能包含任何其他成員,例如:常量、域、構(gòu)造函數(shù)、析構(gòu)函數(shù)、靜態(tài)成員。一個(gè)類可以直接繼承多個(gè)接口,但是只能繼承一個(gè)類(包括抽象類)。抽象類與接口的相似之處不能實(shí)例化;包含未實(shí)現(xiàn)的方法聲明;派生類必須實(shí)現(xiàn)未實(shí)現(xiàn)的方法,抽象類是抽象方法,接口的所有成員。抽象類與接口的區(qū)別接口可以多重繼承,抽象類不可以;接口定義方法,不給實(shí)現(xiàn),抽象類可以實(shí)現(xiàn)部分方法;接口中基本數(shù)據(jù)類型的數(shù)據(jù)成員,都默認(rèn)為static和final的,抽象類則不是;如果事先知道某種東西會(huì)成為基礎(chǔ)類,那么第一選擇就是把它變成一個(gè)接口;只有在必須使用方法定義或者成員變量的時(shí)候,才考慮抽象類。shorts1=1;s1=s1+1;有什么錯(cuò)?shorts1=1;s1+=1;有什么錯(cuò)?shorts1=1;s1=s1+1;(s1+1是int類型的,需要進(jìn)行強(qiáng)制轉(zhuǎn)換)shorts1=1;s1+=1;(可以正確運(yùn)行)Math.round(11.5)等于多少?Math.round(-11.5)等于多少?Math.round(11.5)=12;Math.round(-11.5)=-11;Round方法返回與參數(shù)最近的長整數(shù),參數(shù)加1/2后求其float。Strings=newString(“xyz”);創(chuàng)建了幾個(gè)Stringobject?Java有沒有g(shù)oto?創(chuàng)建了兩個(gè)對(duì)象,一個(gè)是“syz”,一個(gè)是指向“syz”的引用對(duì)象s。goto是Java中的保留字,現(xiàn)在沒有在java中使用。啟動(dòng)一個(gè)線程是用run()還是start()?啟動(dòng)一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以有JVM調(diào)度并執(zhí)行。這并不意味著線程就好立即運(yùn)行,run()方法可以產(chǎn)生必須退出的標(biāo)志來停止一個(gè)線程。JVM是什么?JVM是Java虛擬機(jī),它是一個(gè)虛構(gòu)出來的計(jì)算機(jī),是通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來實(shí)現(xiàn)的。JVM有自己完善的硬件架構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。Java語言最重要的特點(diǎn)就是跨平臺(tái)運(yùn)行,使用JVM就是為了支持與操作系統(tǒng)無關(guān),實(shí)現(xiàn)跨平臺(tái)。JVM的原理:JVM是Java的核心和基礎(chǔ),在java編譯器和OS平臺(tái)之間的虛擬處理器,它是一種利用軟件方法實(shí)現(xiàn)的抽象的計(jì)算機(jī)基于下層的操作系統(tǒng)和硬件平臺(tái),可以在上面執(zhí)行java的字節(jié)碼程序。JVM執(zhí)行程序的過程加載.class文件;管理并分配內(nèi)存;c)執(zhí)行垃圾收集;d)JRE(java運(yùn)行時(shí)環(huán)境)由JVM構(gòu)造的java程序的運(yùn)行環(huán)境,也是java程序的 運(yùn)行環(huán)境,但是它同時(shí)一個(gè)操作系統(tǒng)的一個(gè)應(yīng)用程序一個(gè)進(jìn)程,因此它也有它 自己的生命周期,也有自己的代碼和數(shù)據(jù)空間。JVM在整個(gè)jdk中處于最底層, 負(fù)責(zé)于操作系統(tǒng)的交互,用來屏蔽操作系統(tǒng)環(huán)境,提供一個(gè)完整的Java運(yùn)行環(huán) 境,因此也就是虛擬計(jì)算機(jī)。操作系統(tǒng)裝入JVM是通過jdk中的Java.exe來完 成,通過下面4步來完成JVM環(huán)境:(1、創(chuàng)建JVM裝載環(huán)境和配置;2、裝載` JVM.dll;3、初始化JVM.dll并掛界到j(luò)nienv(jni調(diào)用接口)實(shí)例;4、調(diào)用 jnienv實(shí)例裝載并處理class類)。JVM的聲明周期JVM實(shí)例對(duì)應(yīng)了一個(gè)獨(dú)立運(yùn)行的java程序,它是進(jìn)程級(jí)別a)啟動(dòng):啟動(dòng)一個(gè)java程序時(shí),一個(gè)JVM實(shí)例就產(chǎn)生了,任何一個(gè)擁有publicstaticvoidmain(String[]args)函數(shù)的class都可以作為JVM實(shí)例運(yùn)行的起點(diǎn)。b)運(yùn)行:main()作為該程序初始線程的起點(diǎn),任何其他線程都由該線程啟動(dòng)。JVM內(nèi)部有兩種線程:守護(hù)線程和非守護(hù)線程,main()屬于非守護(hù)線程,守護(hù)線程通常由JVM自己使用,java程序也可以表明自己創(chuàng)建的線程是守護(hù)線程。c)消亡:當(dāng)程序中的所有非守護(hù)線程都終止時(shí);JVM才退出,若安全管理器允許,程序也可以使用Runtime類或者使用System.exit();來退出。JVM執(zhí)行引擎實(shí)例則對(duì)應(yīng)了屬于用戶運(yùn)行程序的線程它是線程級(jí)別的。應(yīng)用服務(wù)器都有哪些?BEAWebLogicServer、IBMWebSphereApplicationServer、Oracle9iApplicationServer、jBoss、Tomcat。Tomcat下部署項(xiàng)目在Tomcat中部署Javaweb應(yīng)用程序有兩種方式:靜態(tài)部署和動(dòng)態(tài)部署。靜態(tài)部署:靜態(tài)部署指的是我們?cè)诜?wù)器啟動(dòng)之前部署我們的程序,只有在啟動(dòng)服務(wù)器之后,我們的web應(yīng)用程序才能訪問。動(dòng)態(tài)部署:動(dòng)態(tài)部署是指可以在啟動(dòng)服務(wù)器之后部署web應(yīng)用程序,而不用重新啟動(dòng)服務(wù)器。heap和stack有什么區(qū)別?棧是一種線性集合,棧按照后進(jìn)先出的方式進(jìn)行處理第一,從軟件設(shè)計(jì)的角度看,棧代表了處理邏輯,而堆代表了數(shù)據(jù)。這樣分開,使得處理邏輯更為清晰。分而治之的思想。這種隔離、模塊化的思想在軟件設(shè)計(jì)的方方面面都有體現(xiàn)。第二,堆與棧的分離,使得堆中的內(nèi)容可以被多個(gè)棧共享(也可以理解為多個(gè)線程訪問同一個(gè)對(duì)象)。這種共享的收益是很多的。一方面這種共享提供了一種有效的數(shù)據(jù)交互方式(如:共享內(nèi)存),另一方面,堆中的共享常量和緩存可以被所有棧訪問,節(jié)省了空間。第三,棧因?yàn)檫\(yùn)行時(shí)的需要,比如保存系統(tǒng)運(yùn)行的上下文,需要進(jìn)行地址段的劃分。由于棧只能向上增長,因此就會(huì)限制住棧存儲(chǔ)內(nèi)容的能力。而堆不同,堆中的對(duì)象是可以根據(jù)需要?jiǎng)討B(tài)增長的,因此棧和堆的拆分,使得動(dòng)態(tài)增長成為可能,相應(yīng)棧中只需記錄堆中的一個(gè)地址即可。第四,面向?qū)ο蠓绞降某绦蚺c以前結(jié)構(gòu)化的程序在執(zhí)行上沒有任何區(qū)別。但是,面向?qū)ο蟮囊?,使得?duì)待問題的思考方式發(fā)生了改變,而更接近于自然方式的思考。當(dāng)我們把對(duì)象拆開,你會(huì)發(fā)現(xiàn),對(duì)象的屬性其實(shí)就是數(shù)據(jù),存放在堆中,而對(duì)象的行為(方法),就是運(yùn)行邏輯,放在棧中。我們編寫對(duì)象的時(shí)候,其實(shí)即編寫了數(shù)據(jù)結(jié)構(gòu),也編寫了處理數(shù)據(jù)的邏輯。forward和redirect的區(qū)別?forward是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪來的,所以它的地址欄中還是原來的地址。redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址,一般來說瀏覽器會(huì)用剛才請(qǐng)求的所有參數(shù)重新請(qǐng)求,所以session,request參數(shù)都可以獲取。Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢?是用==還是equals()?它們有何區(qū)別?使用iterator()方法來區(qū)分重復(fù)與否。equals()是判斷兩個(gè)set是否相等。equals()和==方法決定引用值是否指向同一對(duì)象,equals()在類中被覆蓋,為的是當(dāng)兩個(gè)分離的對(duì)象的內(nèi)容和類型相配的話,返回真值。說出數(shù)據(jù)連接池的工作機(jī)制是什么?J2EE服務(wù)器啟動(dòng)時(shí)會(huì)建立一定數(shù)量的池連接,并一直維持不少于此數(shù)目的池連接。客戶端程序需要連接時(shí),池驅(qū)動(dòng)程序會(huì)返回一個(gè)未使用的池連接并將其表記為忙。如果當(dāng)前沒有空閑連接,池驅(qū)動(dòng)程序就新建一定數(shù)量的連接,新建連接的數(shù)據(jù)由配置參數(shù)決定。當(dāng)使用的池連接調(diào)用完成后,池驅(qū)動(dòng)程序?qū)⒋诉B接表記為空閑,其他調(diào)用就可以使用這個(gè)連接。Java中的異常處理機(jī)制的簡單原理和應(yīng)用當(dāng)Java程序違反了Java的語義規(guī)則時(shí),Java虛擬機(jī)就會(huì)將發(fā)生的錯(cuò)誤表示為一個(gè)異常。違反語義規(guī)則包括兩種情況。一種是Java類庫內(nèi)置的語義檢查。例如數(shù)組下標(biāo)越界,會(huì)引發(fā)IndexOutOfBoundsException;方法null的對(duì)象時(shí)會(huì)引發(fā)NullPointerException。另一種情況就是Java允許程序員擴(kuò)展這種語義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常都是java.lang.Thowable的子類。sleep()和wait()有什么區(qū)別?sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會(huì)給其他線程但是監(jiān)控狀態(tài)依然保持,到時(shí)后會(huì)自動(dòng)恢復(fù)。調(diào)用sleep不會(huì)釋放對(duì)象鎖。wait是object類的方法,對(duì)此對(duì)象調(diào)用wait方法導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象發(fā)出notify方法(或notifyAll)后,本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。sleep()方法是使線程停止一段時(shí)間的方法。在sleep時(shí)間間隔期滿后,線程不一定立即恢復(fù)執(zhí)行。這是因?yàn)樵谀莻€(gè)時(shí)刻,其它線程可能正在運(yùn)行而且沒有被調(diào)度為放棄執(zhí)行,除非(a)“醒來”的線程具有更高的優(yōu)先級(jí);(b)正在運(yùn)行的線程因?yàn)槠渌蚨枞?。wait()是線程交互時(shí),如果線程對(duì)一個(gè)同步對(duì)象x發(fā)出一個(gè)wait()調(diào)用,該線程會(huì)暫停執(zhí)行,被調(diào)對(duì)象進(jìn)入等待狀態(tài),直到被喚醒或等待時(shí)間到。java中實(shí)現(xiàn)多線程的方法及其方法的作用interrupt():中斷線程。join():等待該線程終止。join(longmillis):等待該線程終止的時(shí)間最長為milli毫秒。run():如果該線程是使用獨(dú)立的Runnable運(yùn)行對(duì)象構(gòu)造的,則調(diào)用該Runnable對(duì)象的run方法;否則,該方法不執(zhí)行任何操作并返回。setPriority(intnewPriority):更改線程的優(yōu)先級(jí)。start():使該線程開始執(zhí)行,Java虛擬機(jī)調(diào)用該線程的run方法。sleep(longmillis):在指定的毫秒數(shù)內(nèi)讓當(dāng)前執(zhí)行的線程休眠。yield():暫停當(dāng)前正在執(zhí)行的線程對(duì)象,并執(zhí)行其他線程。多線程有幾種實(shí)現(xiàn)方法?同步有幾種實(shí)現(xiàn)方法?兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口。同步有兩種實(shí)現(xiàn)方法,分別是synchronized,wait與notify。線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系線程指在程序執(zhí)行過程中,能夠執(zhí)行程序代碼的一個(gè)執(zhí)行單位,每個(gè)程序至少都有一個(gè)線程,也就是程序本身。Java中的線程有四種狀態(tài):運(yùn)行、就緒、掛起、結(jié)束。 新狀態(tài)(就緒):線程已創(chuàng)建但尚未執(zhí)行(start()尚未被調(diào)用)。 可執(zhí)行狀態(tài)(運(yùn)行):線程可以執(zhí)行,雖然不一定正在執(zhí)行。CPU時(shí)間隨時(shí)可能被分配給該線程,從而使得它執(zhí)行。 死亡狀態(tài)(結(jié)束):正常情況下run()返回使得線程死亡。調(diào)用stop()或destroy()亦有同樣的效果,但是不被推薦,前者會(huì)產(chǎn)生異常,后者是強(qiáng)制終止,不會(huì)釋放鎖。 阻塞狀態(tài)(掛起):線程不會(huì)被分配CPU時(shí)間,無法執(zhí)行。多線程的并發(fā),単例創(chuàng)建線程進(jìn)程:一個(gè)計(jì)算機(jī)程序的運(yùn)行實(shí)例,包含了需要執(zhí)行的指令;有自己的獨(dú)立地址空間,包含程序內(nèi)容和數(shù)據(jù);不同進(jìn)程的地址空間是互相隔離的;進(jìn)程擁有各種資源和狀態(tài)信息,包括打開的文件、子進(jìn)程和信號(hào)處理。Java標(biāo)準(zhǔn)庫提供了進(jìn)程和線程相關(guān)的API,進(jìn)程主要包括表示進(jìn)程的java.lang.Process類和創(chuàng)建進(jìn)程的java.lang.ProcessBuilder類;表示線程是java.lang.Thread類。如何實(shí)現(xiàn)多線程1、實(shí)現(xiàn)多線程有兩種方法:Thread類繼承和Runnable接口實(shí)現(xiàn)。 a)繼承Thread類的步驟: 1)定義類繼承Thread;2)復(fù)寫Thread類中的run方法;將自定義代碼存儲(chǔ)在run方法,讓線程運(yùn)行。3)調(diào)用線程的start方法。 b)實(shí)現(xiàn)Runnable接口的步驟: 1)定義類實(shí)現(xiàn)Runnable接口; 2)覆蓋Runnable接口中的run方法。將線程要運(yùn)行的代碼放在該run方法中。JSP的內(nèi)置對(duì)象及方法request:表示HttpServletRequest對(duì)象。它包含了有關(guān)瀏覽器請(qǐng)求的信息,并且提供了幾個(gè)用于獲取cookie、header和session數(shù)據(jù)的有用的方法。response:表示HttpServletResponse對(duì)象,并提供了幾個(gè)用于設(shè)置送回瀏覽器的響應(yīng)的方法(如cookies、頭信息等)。out:對(duì)象是javax.jsp.JspWriter的一個(gè)實(shí)例,提供了幾個(gè)方法使你能用于向?yàn)g覽器回送輸出結(jié)果。pageContext:表示一個(gè)javax.servlet.jsp.PageContext對(duì)象。它是用于方便存儲(chǔ)各種范圍的名字空間、servlet相關(guān)的對(duì)象的API,并且包裝了通用servlet相關(guān)功能的方法。session:表示一個(gè)請(qǐng)求的javax.servlet.http.HttpSession對(duì)象。Session可以存儲(chǔ)用戶的狀態(tài)信息。application:表示一個(gè)javax.servlet.ServletContext對(duì)象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息。config:表示一個(gè)javax.servlet.ServletConfig對(duì)象。該對(duì)象用于存取servlet實(shí)例的初始化參數(shù)。page:表示從該頁面產(chǎn)生的一個(gè)servlet實(shí)例。JSP和Servlet有那些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么?JSP是servlet技術(shù)的擴(kuò)展,本質(zhì)上是servlet的簡易方式,更強(qiáng)調(diào)應(yīng)用的外表表達(dá)。JSP編譯后是”類servlet”。Servlet和JSP最主要的不同的在于,servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文件。JSP側(cè)重于視圖,servlet主要用于控制邏輯。Servlet的生命周期?Servlet被服務(wù)器實(shí)例化后,容器運(yùn)行其init方法,請(qǐng)求到達(dá)時(shí)運(yùn)行其service方法自動(dòng)派遣運(yùn)行與請(qǐng)求對(duì)應(yīng)的doXXX方法(doGet,doPost)等,當(dāng)服務(wù)器決定將實(shí)例銷毀的時(shí)候調(diào)用destroy方法。XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML文檔有哪幾種方式?XML定義有兩種方式:dtd和schema;本質(zhì)區(qū)別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發(fā)展schema的根本目的)解析XML文檔的方式:DOM,SAX,STAX等。DOM:處理大型文件時(shí)其性能下降的非常厲害。這個(gè)問題是有DOM的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合XML的隨機(jī)訪問。SAX:(SimpleAPIforXML)不同于DOM,SAX是事件驅(qū)動(dòng)型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開頭,文檔結(jié)束,或者標(biāo)簽開頭與標(biāo)簽結(jié)束時(shí),它會(huì)觸發(fā)一個(gè)事件,用戶通過在其回調(diào)事件中寫入處理代碼來處理XML文件,適合對(duì)XML的順序訪問。STAX:StreamingAPIforXML流模型中的拉模型分析方式。提供基于指針和基于迭代器兩種方式的支持,jdk1.6新特性【和推式解析相比的優(yōu)點(diǎn)】①在拉式解析中,事件是由解析應(yīng)用產(chǎn)生,因此拉式解析中向客戶端提供的是解析規(guī)則,而不是解析器。②同推式解析相比,拉式解析的代碼更簡單,而且不用那么多庫。③拉式解析客戶端能夠一次讀取多個(gè)XML文件。④拉式解析允許你過濾XML文件和跳過解析事件?!竞喗椤縎TAXAPI的實(shí)現(xiàn)是使用了Javaweb服務(wù)開發(fā)(JWSDP)1.6,并結(jié)合了sunJava流式XML分析器(SJSXP)-它位于javax.xml.stream包中。XMLStreamReader接口用于分析一個(gè)XML文檔,而XMLStreamWriter接口用于生成一個(gè)XML文檔。XMLLEventReader負(fù)責(zé)使用一個(gè)對(duì)象事件迭代子分析XML時(shí)間-這與XMLStreamReader所使用的光標(biāo)機(jī)制形成對(duì)照。XML的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中:可以使用XML的解析方式解析XML數(shù)據(jù)成object,再插入數(shù)據(jù)庫中。J2ee常用的設(shè)計(jì)模式?說明工程模式。簡潔說明簡單工廠和抽象的區(qū)別。Java中的23中設(shè)計(jì)模式:Factory(工廠模式),Builder(建造模式),F(xiàn)actoryMethod(工廠方式模式),Protory(原始模型模式),Singletom(單例模式),F(xiàn)a?ade(門面模式),Adapter(適配器模式),Bridge(橋梁模式),Composite(合成模式),Decorator(裝飾模式),F(xiàn)lyweight(享元模式),Proxy(代理模式),Command(命令模式),Interpreter(解釋器模式),Visitor(訪問者模式),Iterator(迭代子模式),Mediator(調(diào)停者模式),Memento(備忘錄模式),Observer(觀察者模式),State(狀態(tài)模式),Strategy(策略模式),TemplateMethod(模板方法模式),ChainOfResponsibleity(責(zé)任鏈模式)。工廠模式:工廠模式是一種經(jīng)常被使用到的模式,根據(jù)工廠模式實(shí)現(xiàn)的類可以根據(jù)提供的數(shù)據(jù)生成一組類中某一個(gè)類的實(shí)例,通常這一組類有一個(gè)公共的抽象父類并且實(shí)現(xiàn)了相同的方法,但是這些方法針對(duì)不同的數(shù)據(jù)進(jìn)行了不同的操作。首先需要定義一個(gè)基類,該類的子類通過不同的實(shí)現(xiàn)了基類中的方法。然后需要定義一個(gè)工廠類,工廠類可以根據(jù)條件生成不同的子類實(shí)例。當(dāng)?shù)玫阶宇惖膶?shí)例后,開發(fā)人員可以調(diào)用基類中的方法而不必考慮到底返回的是哪一個(gè)子類的實(shí)例。簡單工廠:一個(gè)具體工廠通過條件語句創(chuàng)建多個(gè)產(chǎn)品,產(chǎn)品的創(chuàng)建邏輯集中與一個(gè)工廠類??蛻舳送ㄟ^傳不同的參數(shù)給工廠,實(shí)現(xiàn)創(chuàng)建不同產(chǎn)品的目的增加新產(chǎn)品時(shí),需要修改工廠類、增加產(chǎn)品類,不符合OCP(開閉原則)原則工廠方法。抽象工廠:一個(gè)具體工廠創(chuàng)建一個(gè)產(chǎn)品族,一個(gè)產(chǎn)品族是不同系列產(chǎn)品的組合,產(chǎn)品的創(chuàng)建的邏輯分別在每個(gè)具體工廠類中。所有的具體工廠繼承自同一個(gè)抽象工廠。客戶端創(chuàng)建不同產(chǎn)品族的工廠,產(chǎn)品族的工廠創(chuàng)建具體的產(chǎn)品對(duì)客戶端是不可見的。增加新的產(chǎn)品族時(shí),需要增加具體工廠類,符合OCP原則。排序都有哪幾種方法?請(qǐng)舉例。用Java實(shí)現(xiàn)一個(gè)快速排序。排序的方法有:插入排序(直接插入排序、希爾排序);交換排序(冒泡排序、快速排序);選擇排序(直接選擇排序、堆排序);歸并排序;分配排序(箱排序、基數(shù)排序)冒泡排序:#include
<stdio.h>
void
swap(int
*a,
int
*b);int
main(){
int
array[10]
=
{15,
225,
34,
42,
52,
6,
7856,
865,
954,
10};
int
i,
j;
for(i=0;i<10;i++;){
//每一次由底至上地上升
for(j
=
9;
j
>
i;
j--){
if(array[j]<array[j-1]){
swap(&array[j],&array[j-1]);
}
}
}
for
(i=0;i<10;i++){
printf("%d\n",array[i]);
}
return
0;
}
void
swap(int
*a,
int
*b)
{
int
temp;
temp
=
*a;
*a
=
*b;
*b
=
temp;
}
快速排序的偽代碼//使用快速排序方法對(duì)a[0:n-1]排序從a[0:n-1]中選擇一個(gè)元素作為middle,該元素為支點(diǎn)把余下的元素分割為兩段left和right,使得left中的元素都小于等于支點(diǎn),而right中的元素都大于等于支點(diǎn);遞歸地使用快速排序方法對(duì)left進(jìn)行排序;遞歸地使用快速排序方法對(duì)right進(jìn)行排序;所得結(jié)果為left+middle+right。Java語言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎?Java通過面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類,并提供了良好的接口。在Java中,每個(gè)異常都是一個(gè)對(duì)象,它是Throwable類或其它子類的實(shí)例。當(dāng)一個(gè)方法出現(xiàn)異常后便拋出一個(gè)異常對(duì)象。該對(duì)象中包含有異常信息,調(diào)用這個(gè)對(duì)象的方法可以捕獲到這個(gè)異常并進(jìn)行處理。Java的異常處理是通過5個(gè)關(guān)鍵詞來實(shí)現(xiàn)的:try、catch、throw、throws和finally。一般情況下是用try來執(zhí)行一段程序,如果出現(xiàn)異常,系統(tǒng)會(huì)拋出(throws)一個(gè)異常,這時(shí)候你可以通過它的類型來捕捉(catch)它,或最后(finally)由缺省處理器來處理。用try來指定一塊預(yù)防所有”異?!钡某绦?。緊跟在try程序后面,應(yīng)包含一個(gè)catch字句來指定你想要捕捉的”異?!钡念愋?。throw語句用來明確的拋出一個(gè)”異?!?。throws用來標(biāo)明一個(gè)成員函數(shù)可能拋出的各種”異?!?。Finally為確保一段代碼不管發(fā)生什么”異常”都被執(zhí)行一段代碼??梢栽谝粋€(gè)成員函數(shù)調(diào)用的外面寫一個(gè)try語句,在這個(gè)成員函數(shù)內(nèi)部寫另一個(gè)try語句包含其他代碼。每當(dāng)遇到一個(gè)try語句,“異?!钡目蚣芫头诺蕉褩I厦?,直到所有的try語句都完成。如果下一級(jí)的try語句沒有對(duì)某種“異?!边M(jìn)行處理,堆棧就會(huì)展開,直到遇到有處理這種“異?!钡膖ry語句。Webservice的運(yùn)行機(jī)制是什么?在項(xiàng)目中是怎么使用的?客戶端應(yīng)用程序查找web服務(wù)的信息或類型描述。這些信息是一個(gè)XML文件,稱為web服務(wù)描述(WSDL)語言。然后,客戶端按要求使用簡單對(duì)象訪問協(xié)議(SOAP)將所需參數(shù)發(fā)送至服務(wù)器,服務(wù)器在將相應(yīng)的結(jié)果返回給客戶端。這里我們將發(fā)布webservice的機(jī)器稱為服務(wù)端,而將調(diào)用webservice的機(jī)器稱為客戶端。首先服務(wù)端將發(fā)布web服務(wù)。 客戶端調(diào)用步驟: a.加入web應(yīng)用,將剛才發(fā)布的web服務(wù)加入,這時(shí)生成了上述web服務(wù)在本地的一個(gè)道理,我們假設(shè)為WebProxy。 b.客戶端調(diào)用之前首先實(shí)例化一個(gè)該代理的對(duì)象,然后調(diào)用發(fā)布的方法。 c.客戶端將調(diào)用信息包括方法名和參數(shù)加入到soap消息中通過http傳送給webservice服務(wù)端。 d.服務(wù)端從soap消息中獲得調(diào)用信息,然后執(zhí)行方法,將返回結(jié)果加入到soap消息中,然后通過http傳回。 e.客戶端代理得到這個(gè)soap消息后解析出結(jié)果返回給調(diào)用客戶端方法。項(xiàng)目中用到了哪些測試方法?進(jìn)行簡單的描述。單元測試:用于測試軟件中的各個(gè)組件。它是屬于白盒測試的。用的最多的是使用Junit工具來進(jìn)行單元測試。類只需繼承TestCase類即可。集成測試:把幾個(gè)相關(guān)的單元集成在一起,通過檢查集成單元或模塊以發(fā)行缺陷的過程就稱為集成測試。我們通常在項(xiàng)目中是將每個(gè)人的模塊整合到一起進(jìn)行統(tǒng)一測試。系統(tǒng)測試:是一系列的測試,其主要目的是在模擬環(huán)境中完整、準(zhǔn)確的運(yùn)行軟件系統(tǒng)。我們通常的處理方法是: a.負(fù)載測試:使系統(tǒng)處理超過其能力的任務(wù)來測試系統(tǒng)的過程。 b.壓力測試:也叫做強(qiáng)度測試,獲取系統(tǒng)正確運(yùn)行的極限。 c.性能測試:其目的不是為了發(fā)現(xiàn)錯(cuò)誤或缺陷,而是消除瓶頸。 d.可用性測試:這個(gè)主要是體現(xiàn)在給用戶的體驗(yàn)上。用戶驗(yàn)收測試:開發(fā)階段之后的測試階段,確保開發(fā)的軟件是完整且沒有缺陷的。項(xiàng)目中如何規(guī)范編碼?制定一份編碼規(guī)范文檔:類名以大寫開頭、有意義的單詞的組成,組合單詞的每一個(gè)單詞都要大寫。接口以I開頭,實(shí)現(xiàn)類在類名后加Impl如:接口為IUserDAO,實(shí)現(xiàn)類為UserDAOImpl。系統(tǒng)中涉及的常量字符串,不能采用硬編碼,需要properties文件中讀取。編碼需要多加注釋。Jsp頁面命名以小寫字母開頭、有意義的單詞的組成,組合單詞除第一個(gè)單詞首字母小寫,其他單詞的首字母大寫,其余小寫。包名全部小寫。數(shù)據(jù)庫中表字段:同5。 如何考慮一個(gè)項(xiàng)目的安全性?從哪些方面去體現(xiàn)?項(xiàng)目的安全性并不是指一個(gè)系統(tǒng)的功能,而是屬性。 要考慮的方面: 防止有人惡意破壞,如:sql注入。編碼、權(quán)限的嚴(yán)密控制,也能很好的控制項(xiàng)目的安全性。如頁面盡量少用客戶端驗(yàn)證,而使用服務(wù)器驗(yàn)證,減少有人修改客戶端代碼而破壞項(xiàng)目的安全性。硬件設(shè)備等的支持,如:防火墻能夠防止有人攻擊Ip,從端口訪問服務(wù)器。平臺(tái)穩(wěn)定性如何,如:考慮Linux、Window平臺(tái)下項(xiàng)目是否能夠很好的運(yùn)行。js的命名規(guī)范、注釋有哪幾種?java的命名規(guī)范JS的命名規(guī)范:變量名必須以字母或下劃線開頭。變量名可以包含數(shù)字、從A到Z的大寫字母和從a到z的小寫字母,由于JavaScript區(qū)分大小寫,所以說,變量myVar、myVAR和myvar是三個(gè)不同的變量。 注釋:1.<!—注釋--> 2.//注釋。Java的命名規(guī)范: 標(biāo)識(shí)符的命名規(guī)則:必須以字母、下劃線“_”或“$”符號(hào)開頭。首字母后面可以跟任意數(shù)量的字母、數(shù)字、下劃線或“$”符號(hào)。標(biāo)識(shí)符可以包含數(shù)字,但是不能以數(shù)字開頭。另外,除下劃線和“$”符號(hào)外,不能包含任何特殊字符。不能使用java語言的關(guān)鍵字。Java中的變量名區(qū)分大小寫。 類名命名規(guī)范:不能為java中的關(guān)鍵字。不能包含任何嵌入的空格或點(diǎn)號(hào)“.”以及除下劃線、“$”字符之外的特殊字符。不能以數(shù)字開頭。一般以大寫字母開頭,且為有意義的單詞組合。 方法命名:不能為java中的關(guān)鍵字。不能包含任何嵌入的空格或點(diǎn)號(hào)“.”以及除下劃線、“$”字符之外的特殊字符。不能以數(shù)字開頭。一般以小寫字母開頭,有意義的單詞組合。 SVN命令行下常用的幾個(gè)命令將文件checkout到本地目錄svncheckoutpath(path是服務(wù)器的目錄)例如:svncheckoutsvn:///pro/domain簡寫:svnco往版本庫中添加新的文件svnaddfile例如:svnaddtest.php(添加test.php)svnadd*.php(添加當(dāng)前目錄下所有的php文件)將改動(dòng)的文件提交到版本庫svncommit–m“LogMessage”[-N][--no-unlock]PATH(如果選擇了保持鎖,就使用—no-unlock開關(guān))。例如:svncommit–m“addtestfileformytest”test.php,簡寫:svnci加鎖/解鎖svnlock–m“LockMessage”[--force]PATH 例如:svnlock–m“l(fā)ocktestfile”test.php svnunlockPATH。更新到某個(gè)版本svnupdate–rmpath例如:svnupdate如果后面沒有目錄,默認(rèn)將當(dāng)前目錄以及子目錄下的所有文件都更新到最新版本。 svnupdate–r200test.php(將版本庫中的文件test.php還原到版本200);svnupdatetest.php(更新,于版本庫同步。如果在提交的時(shí)候提示過期的話,是因?yàn)闆_突,需要先update,修改文件,然后清除svnresolved,最后再提交commit);簡寫:svnup。查看文件或者目錄狀態(tài)svnstatuspath(目錄下的文件和子目錄的狀態(tài),正常狀態(tài)不顯示)svnstatus–vpath(顯示文件和子目錄狀態(tài)) 第一列保持相同,第二列顯示工作版本號(hào),第三和第四列顯示最后一次修改的版本號(hào)和修改人。簡寫:svnst。 刪除文件 svndeletepath–m“deletetestfle” 例如:svndeletesvn:///pro/domain/test.php–m“deletetestfile”或者直接svndeletetest.php然后再svnci–m’deletetestfile’ 簡寫:svn(del,remove,rm) 查看文件 svnlogpath 例如:svnlogtest.php顯示這個(gè)文件的所有修改記錄,及其版本號(hào)的變化。查看文件詳細(xì)信息 svninfopath 例如:svninfotest.php比較差異 svndiffpath(將修改的文件與基礎(chǔ)版本比較) 例如:svndifftest.php svndiff–rm:npath(對(duì)版本m和版本n比較差異) 例如:svndiff–r200:201test.php 簡寫:svndi 將兩個(gè)版本之間的差異合并到當(dāng)前文件 svnmerge–rm:npath 例如:svnmerge–r200:205test.php(將版本200與205之間的差異合并到當(dāng)前文件,但是一般都會(huì)產(chǎn)生沖突,需要處理一下) svn幫助svnhelpsvnhelpci版本庫下的文件和目錄列表 svnlistpath 顯示path目錄下的所有屬于版本庫的文件和目錄,簡寫:svnls 創(chuàng)建納入版本控制下的目錄 svnmkdir:創(chuàng)建納入版本控制下的新目錄。 用法:1、mkdirPATH...2、mkdirURL... 恢復(fù)本地修改 svnrevert:恢復(fù)原始未改變的工作副本文件(恢復(fù)大部分的本地修改)。 用法:revertPATH...代碼庫URL變更 svnswitch(sw):更新工作副本至不同的URL。 用法:1、switchURL[PATH]2、switch–relocateFROMTO[PATH...]解決沖突 svnresolved:移除工作副本的目錄或文件的“沖突”狀態(tài) 用法:resolvedPATH... 注意:本子命令不會(huì)依語法來解決沖突或是移除沖突標(biāo)記;它只是移除沖突的相關(guān)文件,然后讓PATH可以再次提交。輸出指定文件或URL的內(nèi)容 svncat目標(biāo)[@版本]...如果指定了版本,將從指定的版本開始查找。svncat–rPREVfilename>filename 安裝配置安裝SVN#yuminstallsubversion測試是否安裝成功#svnserve--version如果顯示了版本信息則表示安裝成功創(chuàng)建倉庫#svnadmincreate/home/svn/repo給svn設(shè)置密碼修改配置文件/home/svn/repo/conf/svnserve.conf去掉#[general]前面的#號(hào)匿名訪問的權(quán)限,可以是read,write,none,默認(rèn)為readanon-access=none認(rèn)證用戶的權(quán)限,可以是read,write,none,默認(rèn)為writeauth-access=write密碼數(shù)據(jù)庫的路徑#password-db=passwd去掉前面的#修改配置文件passwd#vim/home/svn/repo/conf/passwd=前面是用戶名,后面是密碼[users]name=password啟動(dòng)SVN服務(wù)器對(duì)于單個(gè)代碼倉庫#svnserve–d–r/home/svn–listen–host00svn默認(rèn)端口是3690,在防火墻上開發(fā)這個(gè)端口。/sbin/iptables–AINPUT–IethO–ptcp–dport3690–jACCEPT/sbin/serviceiptablessave把/var/www/html/目錄導(dǎo)入到svn的repo目錄下svnimport/var/www/html/file:///home/svn/repo-m”rest”Java為什么可以跨平臺(tái)?因?yàn)镴ava程序編譯之后的代碼不是能被硬件系統(tǒng)直接運(yùn)行的代碼,而是一種“中間碼”—字節(jié)碼。然后不同的硬件平臺(tái)上安裝有不同的Java虛擬機(jī)(JVM),由JVM來把字節(jié)碼再“翻譯”成所對(duì)應(yīng)的硬件平臺(tái)能夠執(zhí)行的代碼。因此對(duì)于Java編程者來說,不需要考慮硬件平臺(tái)是什么。所以Java可以跨平臺(tái)。而C/C++不可以跨平臺(tái)的原因就是編譯后的代碼在特定的硬件上可以直接執(zhí)行,換個(gè)硬件平臺(tái)這些代碼就不能被執(zhí)行了。不過正是因?yàn)榭梢灾苯訄?zhí)行,所以C/C++程序的執(zhí)行效率要比Java程序高。Java中的類,集合,對(duì)象所謂對(duì)象就是真實(shí)世界中的實(shí)體,對(duì)象與實(shí)體是一一對(duì)應(yīng)的,也就是說實(shí)現(xiàn)世界中每一個(gè)實(shí)體都是一個(gè)對(duì)象,它是一種具體的概念。類是具備某些共同特征的實(shí)體的集合,它是一種抽象的概念,用程序設(shè)計(jì)的語言來說,類是一種抽象的數(shù)據(jù)類型,它是對(duì)所具有相同特征實(shí)體的抽象。Map的用法Java中的map其實(shí)就是以鍵值對(duì)形式的存放數(shù)據(jù)的容器,其常用的實(shí)現(xiàn)類主要是 hashmap,例如:Mapmap=newHashMap(); 插入元素:map.put(“key”,obj); 移除元素:map.remove(“key”); 清空:map.clear();Java中的反射機(jī)制JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語言的反射機(jī)制。 JAVA反射(放射)機(jī)制:“程序運(yùn)行時(shí),允許改變程序結(jié)構(gòu)或變量類型,這種語言稱為動(dòng)態(tài)語言”。從這個(gè)觀點(diǎn)看,Perl,Python,Ruby是動(dòng)態(tài)語言,C++,Java,C#不是動(dòng)態(tài)語言。但是JAVA有著一個(gè)非常突出的動(dòng)態(tài)相關(guān)機(jī)制:Reflection,用在Java身上指的是我們可以于運(yùn)行時(shí)加載、探知、使用編譯期間完全未知的classes。換句話說,Java程序可以加載一個(gè)運(yùn)行時(shí)才得知名稱的class,獲悉其完整構(gòu)造(但不包括methods定義),并生成其對(duì)象實(shí)體、或?qū)ζ鋐ields設(shè)值、或喚起其methods。 JAVA中常用到的集合框架都有哪些?下面是詳細(xì): Collection├List│├LinkedList│├ArrayList│└Vector│└Stack└SetMap├Hashtable├HashMap└WeakHashMapJAVA中最常用的集合類是List、Set和Map List特點(diǎn):元素有放入順序,元素可重復(fù)。 Map特點(diǎn):元素按鍵值對(duì)存儲(chǔ),無放入順序。 Set特點(diǎn):元素?zé)o放入順序,元素不可重復(fù)(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實(shí)是固定的)List和Ma。List的具體實(shí)現(xiàn)包括ArrayList和Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲(chǔ)和操作任何類型對(duì)象的元素列表。List適用于按數(shù)值索引訪問元素的情形。Map提供了一個(gè)更通用的元素存儲(chǔ)方法。Map集合類用于存儲(chǔ)元素對(duì)(稱作“鍵”和“值”)其中每個(gè)鍵映射到一個(gè)值。 編程題:用最有效率的方法算出2乘以8等于幾?兩個(gè)對(duì)象值相同(x.equals(y)==true),但卻可有不同的hashcode,這句話對(duì)不對(duì)?什么時(shí)候會(huì)使用hashCode?2<<3,因?yàn)閷⒁粋€(gè)數(shù)左移n位,就相當(dāng)于乘以了2的n次方,那么,一個(gè)數(shù)乘以8只要將其左移3位即可,而位運(yùn)算cpu直接支持的,效率最高,所以,2乘以8等于幾的最效率的方法是2<<3。兩個(gè)對(duì)象值相同(x.equals(y)==true),但卻可有不同的hashcode,這句話是不對(duì)的,它們有相同的hashcode,hashCode是用hashTable的時(shí)候?yàn)榱藱z索才用的。說出一些常用的類,包,接口,請(qǐng)個(gè)舉5個(gè)常用的類:BufferedReader、BufferedWriter、FileReader、FileWirter、String、Integer。常用的包:java.lang、java.awt、java.io、java.util、java.sql。常用的接口:Remote、List、Map、Document、NodeList。Java中取兩個(gè)集合的并集、交集和差集?并集:也叫合集,即把兩個(gè)集合的所有元素加在一起。publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub List<String>list1=newArrayList<String>(); list1.add("A"); list1.add("B"); List<String>list2=newArrayList<String>(); list2.add("C"); list2.add("B"); //2個(gè)集合的并集 list1.addAll(list2); System.out.println("并集:"+list1); }運(yùn)行結(jié)果并集:[A,B,C,B]交集:計(jì)算兩個(gè)集合的共有元素,即你有我也有。publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub List<String>list1=newArrayList<String>(); list1.add("A"); list1.add("B"); List<String>list2=newArrayList<String>(); list2.add("C"); list2.add("B"); //2個(gè)集合的交集 list1.retainAll(list2); System.out.println("交集:"+list1); }運(yùn)行結(jié)果:交集:[B]差集:由所有屬于A但是不屬于B的元素組成的集合,叫做A與B的差集,即我有而你沒有的元素。publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub List<String>list1=newArrayList<String>(); list1.add("A"); list1.add("B"); List<String>list2=newArrayList<String>(); list2.add("C"); list2.add("B"); //2個(gè)集合的差集 list1.removeAll(list2); System.out.println("差集:"+list1); }運(yùn)行結(jié)果:差集:[A]Java中有幾種類型的流?jdk為每種類型的流提供了一些抽象類以供繼承,請(qǐng)說出它們分別是哪些類?主要分為字節(jié)流,字符流。字節(jié)流繼承于InputStream,OutputStream。字符流繼承于InputStreamReader,OutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高性能和使用方便。什么是java序列化,如何實(shí)現(xiàn)java實(shí)例化?序列化就是一種用來處理對(duì)象流的機(jī)制,所謂對(duì)象也就是將對(duì)象的內(nèi)容進(jìn)行流花。為了解決在對(duì)對(duì)象流進(jìn)行讀寫操作時(shí)所引發(fā)的問題??梢詫?duì)流化后的對(duì)象進(jìn)行讀寫操作,也可將流化后的對(duì)象傳輸于網(wǎng)絡(luò)之間。序列化的實(shí)現(xiàn):將需要被序列化的類實(shí)現(xiàn)Serializable接口,該接口沒有需要實(shí)現(xiàn)的方法,implementsSerializable只是為了標(biāo)注對(duì)象是可被序列化的;然后使用一個(gè)輸出流(FileOutputStream)來構(gòu)造一個(gè)ObjectOutputStream(對(duì)象流)對(duì)象,接著,使用ObjectOutputStream對(duì)象的writeObject(Objectobj)方法就可以將參數(shù)為objd的對(duì)象寫出(即保存其狀態(tài)),要恢復(fù)的話則用輸入流。請(qǐng)對(duì)以下在J2EE中常用的名詞進(jìn)行解釋(或簡單描述)web容器:給處于其中的應(yīng)用程序組件(jsp,servlet)提供一個(gè)環(huán)境,使jsp,servlet直接跟容器中的環(huán)境變量接口交互,不必關(guān)注其他系統(tǒng)問題。主要有web服務(wù)器來實(shí)現(xiàn)。例如:tomcat,weblogic,websphere等。該容器提供的接口嚴(yán)格遵守J2EE規(guī)范中的webapplication標(biāo)準(zhǔn)。我們把遵守以上標(biāo)準(zhǔn)的web服務(wù)器就叫做J2EE中的web容器。EJB容器:Enterprisejavabean容器。更具有行業(yè)領(lǐng)域特色。他提供給運(yùn)行在其中的組件EJB各種管理功能。只要滿足J2EE規(guī)范的EJB放入該容器,馬上就會(huì)被容器進(jìn)行高效率的管理。并且可以通過現(xiàn)成的接口來獲得系統(tǒng)級(jí)別的服務(wù)。例如郵件服務(wù)、事務(wù)管理。JNDI:(JavaNaming&DirectoryInterface)JAVA命名目錄服務(wù)。主要提供的功能是:提供一個(gè)目錄系統(tǒng),讓其他各地的應(yīng)用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應(yīng)用程序的功能。JMS:(JavaMessageService)JAVA消息服務(wù)。主要實(shí)現(xiàn)各個(gè)應(yīng)用程序之間的通訊。包括點(diǎn)對(duì)點(diǎn)和廣播。JTA:(JavaTransactionAPI)JAVA事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口即可。JAF:(JavaActionFrameWork)JAVA安全認(rèn)證框架。提供一些安全控制方面的框架。讓開發(fā)者通過各種部署和自定義實(shí)現(xiàn)自己的個(gè)性安全控制策略。RMI/IIOP:(RemoteMethodInvocation/internet對(duì)象請(qǐng)求中介協(xié)議)他們主要用于通過遠(yuǎn)程調(diào)用服務(wù)。例如,遠(yuǎn)程有一臺(tái)計(jì)算機(jī)上運(yùn)行一個(gè)層析,它提供股票分析服務(wù),我們可以在本地計(jì)算機(jī)上實(shí)現(xiàn)對(duì)其直接調(diào)用。當(dāng)然這是要通過一定的規(guī)范才能在異構(gòu)的系統(tǒng)之間進(jìn)行通信。RMI是JAVA特有的。BS與CS的聯(lián)系與區(qū)別。C/S是Client/Server的縮寫。服務(wù)器通常采用高性能的PC、工作站或小型機(jī),并采用大型數(shù)據(jù)庫系統(tǒng),如Oracle、Sybase、Informix或SQLServer??蛻舳诵枰惭b專用的客戶端軟件。B/S是Brower/Server的縮寫,客戶機(jī)上只要安裝一個(gè)瀏覽器,服務(wù)器安裝Oracle、Sybase、Informix或SQLServer等數(shù)據(jù)庫。在這種結(jié)構(gòu)下,用戶界面完全通往WWW瀏覽器實(shí)現(xiàn),一部分事務(wù)邏輯在前端實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)端實(shí)現(xiàn)。瀏覽器通過WebServer同數(shù)據(jù)庫進(jìn)行交互。struts1.2和struts2.0的區(qū)別?如何控制兩種框架中的單例模式?struts1.2和struts2.0的對(duì)比Action類:struts1.2要求Action類繼承一個(gè)基類。struts2.0的Action要求繼承ActionSupport基類。線程模式:struts1.2的Action是單例模式的并且必須是線程安全的,因?yàn)閮H有一個(gè)Action的實(shí)例來處理所有的請(qǐng)求。單例策略限制了struts1.2的Action能做的事情,并且開發(fā)時(shí)特別小心。Action資源必須是線程安全的或同步的。struts2.0的Action為每一個(gè)請(qǐng)求產(chǎn)生一個(gè)實(shí)例,因此沒有線程安全問題。Servlet依賴:struts1.2的Action依賴于ServletAPI,因?yàn)楫?dāng)一個(gè)Action被調(diào)用時(shí)HttpServletRequest和HttpServletResponse被傳遞給execute方法。struts2.0的Action不依賴于容器,運(yùn)行Action脫離容器單獨(dú)測試。如果需要,struts2.0的Action仍然可以訪問初始的Request和Response。但是,其他的元素減少或者消除了直接訪問HttpServletRequest和HttpServletResponse的必要性??蓽y性:測試struts1.2的Action的一個(gè)主要問題是execute方法暴露了ServletAPI(這使得測試要依賴于容器)。需要第三方擴(kuò)展strutsTestCase提供了一套struts1.2的模擬對(duì)象來進(jìn)行測試。struts2.0的Action可以通過初始化、設(shè)置屬性、調(diào)用方法來測試。Struts2在項(xiàng)目中是怎么用的?struts2是如何配置的?struts2的標(biāo)簽都用過哪些?怎么使用:web.xml中配置StrutsPrepareAndExecuteFilter過濾器,在src下添加struts.xml配置文件。然后在struts.xml文件內(nèi)配置需要的action。如何配置:使用action節(jié)點(diǎn)驚醒a(bǔ)ction的配置,將name值設(shè)置為對(duì)應(yīng)的攔截路徑,class值設(shè)置為攔截后需要?jiǎng)?chuàng)建對(duì)象的全路徑名。如果使用了spring的話,將class的值設(shè)置為spring配置文件中對(duì)于bean的id名稱就可以了。最后配置對(duì)應(yīng)調(diào)用的方法名與返回后的結(jié)果集。標(biāo)簽:<s:property/>、<s:if>、<s:form>、<s:select>、<s:iterator>。Struts工作機(jī)制?為什么要使用struts?Struts的工作流程: 1、request請(qǐng)求會(huì)先通過一系列過濾器,配置 StrutsPrepareAndExecuteFilter過濾HttpServletReques請(qǐng)求;過濾器根據(jù)訪問的路徑來決定是否調(diào)用,若符合,則調(diào)用ActionMapper;ActionMapper調(diào)用ActionProxy,通過配置文件,找到相應(yīng)的Action類;Action類實(shí)例化一個(gè)ActionInvocation的實(shí)例,該實(shí)例涉及到一系列的攔截器;一旦方法運(yùn)行完畢,ActionInvocation根據(jù)返回值去配置文件查找要求訪問的路徑,通??梢允莏sp頁面和另一個(gè)Action。為什么要用Struts: JSP、Servlet、JavaBean技術(shù)的出現(xiàn)給我們構(gòu)建強(qiáng)大的企業(yè)應(yīng)用系統(tǒng)提供了可能。但用這些技術(shù)構(gòu)建的系統(tǒng)非常的繁亂,所以在此之上,我們需要一個(gè)規(guī)則、一個(gè)把這些技術(shù)組織起來的規(guī)則,這就是框架,struts便應(yīng)運(yùn)而生?;趕truts開發(fā)的應(yīng)用由3類組件構(gòu)成:控制器組件、模型組件、視圖組件。 說下Struts的設(shè)計(jì)模式MVC模式:將控制層、模型層、視圖層分開(配合詳細(xì)的MVC流程,自由發(fā)揮)Treadlocal模式:針對(duì)同一個(gè)Servlet實(shí)例代理模式Struts的應(yīng)用(如struts架構(gòu))Struts是采用servlet技術(shù),開發(fā)Web應(yīng)用程序的開放源碼的framework。采用Struts能開放出基于MVC(Model-View-Controller)設(shè)計(jì)模式的應(yīng)用構(gòu)架。 Struts有如下的主要功能: 1、包含一個(gè)controllerservlet,能將用戶的請(qǐng)求發(fā)送到相應(yīng)的Action對(duì)象。2、JSP自由tag庫,并且在controllerservlet中提供關(guān)聯(lián)支持,幫助開發(fā)員創(chuàng)建交互式表單應(yīng)用。 3、提供了一系列實(shí)用對(duì)象:XML處理、通過JavareflectionAPIs自動(dòng)處理JavaBeans屬性、國際化的提供和消息。 Struts的validate框架是如何驗(yàn)證的?在struts配置文件中配置具體的錯(cuò)誤提示,再在FormBean中的validate()方法具體調(diào)用。Hibernate工作原理及為什么要用?原理: 1、讀取并解析配置文件 2、讀取并解析映射信息,創(chuàng)建SessionFactory 3、打開Session 4、創(chuàng)建事務(wù)Transcation 5、持久化操作 6、提交事務(wù) 7、關(guān)閉Session 8、關(guān)閉SessionFactory為什么要用: 1、對(duì)JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復(fù)性代碼。2、Hibernate是一個(gè)基于JDBC的主流持久化框架,是一個(gè)優(yōu)秀的ORM實(shí)現(xiàn)。 3、Hibernate映射很靈活性。它支持各種關(guān)系數(shù)據(jù)庫,從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。Hibernate與jdbc的聯(lián)系1、hibernate是jdbc的輕量級(jí)封裝,包括jdbc與數(shù)據(jù)庫的連接,增刪改查等功能。2、hibernate用面向?qū)ο蟮乃枷?,通過配置文件把pojo類的字段和數(shù)據(jù)庫的字段關(guān)聯(lián)起來。3、其實(shí)hibernate=封裝的jdbc+XML文件。Hibernate與spring的聯(lián)系1、spring實(shí)現(xiàn)了程序的全局性管理,包括對(duì)hibernate的管理:2、hibernate中的一些對(duì)象可以給spring來管理,讓spring容器來創(chuàng)建hibernate中一些對(duì)象實(shí)例化。例如:SessionFactory,HibernateTemplate等。3、hibernate本來是對(duì)數(shù)據(jù)庫的一些操作,放在DAO層,而spring給業(yè)務(wù)層的方法定義了事務(wù),業(yè)務(wù)層調(diào)用DAO層的方法,很好的將hibernate的操作也加入到事務(wù)中來了。什么是Hibernate的并發(fā)機(jī)制?怎么去處理并發(fā)問題?Hibernate并發(fā)機(jī)制: 1、hibernate的session對(duì)象是非線程安全的,對(duì)于單個(gè)請(qǐng)求,單個(gè)會(huì)話,單個(gè)的工作單元,它通常只使用一次,然后就丟棄。如果一個(gè)session實(shí)例運(yùn)行共享的話,那些支持并發(fā)運(yùn)行的,例如Httprequest,sessionbeans將會(huì)導(dǎo)致出現(xiàn)資源爭用。2、并發(fā)可能會(huì)引發(fā)第一類丟失更新,臟讀,幻讀,不可重復(fù)讀,第二類丟失更新一系列的問題。處理并發(fā)問題:將session綁定到ThreadLocal,每個(gè)線程使用的只是session的副本,不會(huì)影響到session;設(shè)置事務(wù)隔離級(jí)別: Serializable:串行化。隔離級(jí)別最高 RepeatableRead:可重復(fù)讀。 ReadCommitted:已提交數(shù)據(jù)讀。 ReadUncommitted:未提交數(shù)據(jù)讀,隔離級(jí)別最差。設(shè)置鎖,樂觀鎖和悲觀鎖: 樂觀鎖:使用版本號(hào)或時(shí)間戳來檢測更新丟失,在class的的映射中設(shè)置optimistic-lock=”all”可以在沒有版本或者時(shí)間戳屬性映射的情況下實(shí)現(xiàn)版本檢查,此時(shí)hibernate將比較一行記錄的每個(gè)字段的狀態(tài)。 行級(jí)悲觀鎖:hibernate總是使用數(shù)據(jù)庫的鎖定機(jī)制,從不在內(nèi)存中鎖定對(duì)象,只要為JDBC連接指定一下隔離級(jí)別,然后讓數(shù)據(jù)庫去搞定一切就夠了。類LockMode定義了hibernate所需的不同的鎖定級(jí)別:LockMode.UPGRADE_NOWAIT,LockMode.UPGRADE,LockMode.READ。說說Hibernate的緩存機(jī)制內(nèi)部緩存存在hibernate中又叫一級(jí)緩存,屬于應(yīng)用事務(wù)級(jí)緩存二級(jí)緩存: a)應(yīng)用及緩存 b)分布式緩存 條件:數(shù)據(jù)不好被第三方修改、數(shù)據(jù)大小在可接受范圍、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)頻繁使用、非關(guān)鍵數(shù)據(jù)。 c)第三方緩存的實(shí)現(xiàn):使用第三方緩存插件。Hibernate的查詢方式Hibernate特有的語句Hql:屬性查詢、參數(shù)查詢、命名參數(shù)查詢、關(guān)聯(lián)查詢、分頁查詢、統(tǒng)計(jì)函數(shù) Criteria查詢Sql查詢Hibernate的三種狀態(tài)之間如何轉(zhuǎn)換當(dāng)對(duì)象由瞬間狀態(tài)(Transient)—save()時(shí),就變成了持久化狀態(tài)。當(dāng)我們?cè)趕ession里存儲(chǔ)對(duì)象的時(shí)候,實(shí)際是在session的map里存了一份,也就是它的緩存里放了一份,然后,又到數(shù)據(jù)庫里存了一份,在緩存里這一份叫持久對(duì)象(persistent)。Session—Close()了,它的緩存也都關(guān)閉了,整個(gè)session也就失效了,這個(gè)時(shí)候,這個(gè)對(duì)象變成了游離狀態(tài)(Detached),但數(shù)據(jù)庫中還是存在的。當(dāng)游離狀態(tài)(Detached)update()時(shí),又變?yōu)榱顺志脿顟B(tài)(Persistent)。當(dāng)持久狀態(tài)(Persistent)delete()時(shí),又變?yōu)榱怂矔r(shí)狀態(tài)(Transient),此時(shí),數(shù)據(jù)庫中沒有與之對(duì)應(yīng)的記錄。Hibernate中怎樣實(shí)現(xiàn)類之間的關(guān)系?(如:一對(duì)多、多對(duì)多的關(guān)系)類與類之間的關(guān)系主要體現(xiàn)在表與表之間的關(guān)系進(jìn)行操作,它們都是對(duì)對(duì)象進(jìn)行操作,我們程序中把所有的表與類都映射在一起,它們通過配置文件中的many-to-one、one-to-many、many-to-many。如何優(yōu)化hibernate?1、使用雙向一對(duì)多關(guān)聯(lián),不使用單向一對(duì)多2、靈活使用單向一對(duì)多關(guān)聯(lián)3、不用一對(duì)一,用多對(duì)一取代4、配置對(duì)象緩存,不使用集合緩存5、一對(duì)多集合使用Bag,多對(duì)多集合使用Set6、繼承類使用顯示多態(tài)7、表字段要少,表關(guān)聯(lián)不要怕多,有二級(jí)緩存撐腰比較truncate和delete命令?相同點(diǎn):truncate和delete都可以講數(shù)據(jù)實(shí)體刪掉;不同點(diǎn):a、truncate的操作并不記錄到rollback日志,所以操作數(shù)據(jù)較快,但同時(shí)這個(gè)數(shù)據(jù)不能恢復(fù);b、delete操作不能騰出表空間的空間;c、truncate不能對(duì)視圖等進(jìn)行刪除;d、truncate是數(shù)據(jù)定義語言(DDL),而delete是數(shù)據(jù)操縱語言(DML)。垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動(dòng)通知虛擬機(jī)進(jìn)行垃圾回收?對(duì)于GC(GarbageCollection)來說,當(dāng)程序員創(chuàng)建對(duì)象時(shí),GC就開始監(jiān)控對(duì)這個(gè)對(duì)象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對(duì)象。通過這種方式確定哪些對(duì)象是”可達(dá)的”,哪些對(duì)象是“不可達(dá)的”。當(dāng)GC確定一些對(duì)象為“不可達(dá)”時(shí),GC就有責(zé)任回收這些內(nèi)存空間。垃圾回收器不可以馬上回收內(nèi)存。程序員可以手動(dòng)執(zhí)行System.gc(),通知GC運(yùn)行,但是Java語言規(guī)范并不保證GC一定會(huì)執(zhí)行。項(xiàng)目中為什么使用SSH1、使用Struts是因?yàn)閟truts是基于MVC模式的,很好的將非應(yīng)用程序進(jìn)行了分層,使開發(fā)者更關(guān)注與業(yè)務(wù)邏輯的實(shí)現(xiàn);第二,struts有著豐富的taglib,如能靈活運(yùn)用,則能大大提高開發(fā)效率。2、使用Hibernate:因?yàn)閔ibernate為Java應(yīng)用提供了一個(gè)易用的、高效率的對(duì)象關(guān)系映射框架。Hibernate是個(gè)輕量級(jí)的持久性框架,功能豐富。3、使用Spring:因?yàn)閟pring基于IoC(InversionofControl,反向控制)和AOP構(gòu)架多層j2ee系統(tǒng)的框架,但它不強(qiáng)迫你必須在每一層中必須使用spring,因?yàn)樗K化的很好,允許你根據(jù)自己的需要選擇使用它的某一個(gè)模塊;采用IoC使得可以很容易的實(shí)現(xiàn)bean的裝配,而且能夠在類與類之間解耦合,提供了簡潔的AOP并根據(jù)實(shí)現(xiàn)事務(wù)管理(TranscationManagment)等。SpringMVC工作機(jī)制為什么要用?工作機(jī)制: 1、springmvc請(qǐng)所有的請(qǐng)求都提交給DispatcherServlet,它會(huì)委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)對(duì)請(qǐng)求進(jìn)行真正的處理工作。2、DispatcherServlet查詢一個(gè)或多個(gè)HandlerMapping,找到處理請(qǐng)求的Controller。3、DispatcherServlet請(qǐng)求提交到目標(biāo)Controller。4、Controller進(jìn)行業(yè)務(wù)邏輯處理后,會(huì)返回一個(gè)ModelAndView。5、Dispathcher查詢一個(gè)或多個(gè)ViewResolver視圖解析器,找到ModelAndView對(duì)象指定的視圖對(duì)象。6、視圖對(duì)象負(fù)責(zé)渲染返回給客戶端。 為什么要用spring?1、spring既是一個(gè)AOP框架,也是一個(gè)IOC容器。Spring最好的地方是它有助于替換對(duì)象。有了spring,只要用JavaBean屬性和配置文件加入依賴性(協(xié)作對(duì)象)。然后可以很容易地在需要時(shí)替換不同的接口實(shí)現(xiàn)類。2、spring有兩大特性:IOC和AOP IOC:正如單詞倒置所表明的,IOC就像反過來的JNDI。沒有使用一堆抽象工廠、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(straightconstruction),把對(duì)象的創(chuàng)建和維護(hù)交由容器管理,從而使類與類之間的依賴關(guān)系發(fā)生反轉(zhuǎn),實(shí)現(xiàn)解耦合。 AOP:讓開發(fā)人員可以創(chuàng)建非行為性的關(guān)注
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州大學(xué)《電動(dòng)汽車動(dòng)力電池與能源管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽學(xué)院《中法跨文化交際》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025天津市建筑安全員-C證(專職安全員)考試題庫
- 2025年河南建筑安全員《B證》考試題庫
- 2025年四川建筑安全員B證考試題庫附答案
- 2025江西省安全員考試題庫
- 廣州幼兒師范高等??茖W(xué)?!豆补芾砼c服務(wù)課程開發(fā)與教材分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州新華學(xué)院《軟件工程與實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025湖南建筑安全員《C證》考試題庫
- 2025年江蘇省建筑安全員知識(shí)題庫附答案
- 貸款咨詢服務(wù)協(xié)議書范本
- 教務(wù)處主任批評(píng)與自我批評(píng)
- 氟馬西尼完整
- 合同-勞動(dòng)主體變更三方協(xié)議
- 挪用公款還款協(xié)議書范本
- 煤礦巷道噴涂技術(shù)方案
- 新版中國腦出血診治指南
- 高校搬遷可行性方案
- 充電樁選址優(yōu)化與布局規(guī)劃
- 科技產(chǎn)業(yè)園項(xiàng)目投資計(jì)劃書
- 苗木采購?fù)稑?biāo)方案(技術(shù)標(biāo))
評(píng)論
0/150
提交評(píng)論