2023年自己的詳細總結面試寶典_第1頁
2023年自己的詳細總結面試寶典_第2頁
2023年自己的詳細總結面試寶典_第3頁
2023年自己的詳細總結面試寶典_第4頁
2023年自己的詳細總結面試寶典_第5頁
已閱讀5頁,還剩37頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java面試寶典2023版(黃sir學生專用)TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc"項目介紹 PAGEREF_Toc\h5HYPERLINK\l"_Toc"前言 PAGEREF_Toc\h7HYPERLINK\l"_Toc"一.Java基礎部分?PAGEREF_Toc\h9HYPERLINK\l"_Toc"1、 請說一下break和continue的區別??PAGEREF_Toc\h9HYPERLINK\l"_Toc"2、 switch中用于判斷的表達式,可以用哪些數據類型??PAGEREF_Toc\h9HYPERLINK\l"_Toc"3、 char型變量中能不能存貯一個中文漢字?為什么? PAGEREF_Toc\h9HYPERLINK4、 靜態變量和實例變量的區別? PAGEREF_Toc\h9HYPERLINK5、 是否可以從一個static方法內部發出對非static方法的調用? PAGEREF_Toc\h9HYPERLINK6、?Integer與int的區別?PAGEREF_Toc\h9HYPERLINK\l"_Toc"7、?Overload和Override的區別。參數列表相同,返回值不同的方法,是否是重載方法? PAGEREF_Toc\h10HYPERLINK8、?接口是否可繼承接口?抽象類是否可實現(implements)接口?抽象類是否可繼承具體類(concreteclass)? PAGEREF_Toc\h10HYPERLINK\l"_Toc"9、?面向對象有哪三大特性? PAGEREF_Toc\h10HYPERLINK12、?String和StringBuffer的區別?PAGEREF_Toc\h11HYPERLINK13、 數組有沒有length()這個方法?String有沒有length()這個方法? PAGEREF_Toc\h11HYPERLINK\l"_Toc"14、 final,finally,finalize的區別。 PAGEREF_Toc\h11HYPERLINK\l"_Toc"15、?請說一下你常用的幾種異常??PAGEREF_Toc\h11HYPERLINK16、?線程的基本概念?線程的基本狀態以及狀態之間的關系?PAGEREF_Toc\h12_Toc"18、 多線程有幾種實現方法? PAGEREF_Toc\h12HYPERLINK\l"_Toc"19、 啟動一個線程是用run()還是start()?. PAGEREF_Toc\h12HYPERLINK\l"_Toc"20、?Set和List的區別,List和Map的區別 PAGEREF_Toc\h12HYPERLINK\l"_Toc"21、?HashMap和Hashtable的區別 PAGEREF_Toc\h12HYPERLINK22、 說出ArrayList,LinkedList的區別?PAGEREF_Toc\h13HYPERLINK\l"_Toc"23、?請描述一下JDK1.5有哪些新特性? PAGEREF_Toc\h13HYPERLINK\l"_Toc"24、?為什么要使用單例模式 PAGEREF_Toc\h13HYPERLINK\l"_Toc"二.Javaweb部分?PAGEREF_Toc\h13HYPERLINK25、 什么是B/S和C/S? PAGEREF_Toc\h13HYPERLINK26、 如何設立servlet初始化參數?如何獲?。骵rvlet初始化的參數??PAGEREF_Toc\h13HYPERLINK27、?Ajax是干么用的?有哪些常用的Ajax框架??PAGEREF_Toc\h14HYPERLINK\l"_Toc"28、 HTTP請求的GET與POST方式的區別?PAGEREF_Toc\h14HYPERLINK30、 ServletAPI中forward()與redirect()的區別??PAGEREF_Toc\h14HYPERLINK\l"_Toc"31、?jsp有哪些內置對象??PAGEREF_Toc\h14HYPERLINK\l"_Toc"32、 Session和Cookie的區別? PAGEREF_Toc\h15HYPERLINK\l"_Toc"33、?靜態include和動態include的區別? PAGEREF_Toc\h15HYPERLINK\l"_Toc"三.數據庫部分?PAGEREF_Toc\h15HYPERLINK36、?什么是數據庫中的視圖,其好處是什么? PAGEREF_Toc\h16HYPERLINK\l"_Toc"37、 數據庫中索引的好處是什么?一個數據庫表,經常要進行添加和刪除記錄的操作,應當為該表建多個索引嗎??PAGEREF_Toc\h16HYPERLINK38、 什么是數據庫游標??16HYPERLINK\l"_Toc"39、 什么是事務??PAGEREF_Toc\h16HYPERLINK\l"_Toc"40、?數據庫中日記的作用是什么? PAGEREF_Toc\h16HYPERLINK\l"_Toc"41、?什么是主鍵和外鍵? PAGEREF_Toc\h17HYPERLINK42、 什么是數據庫中的存儲過程和觸發器?存儲過程的好處? PAGEREF_Toc\h17HYPERLINK\l"_Toc"43、 內連接和外連接的區別? PAGEREF_Toc\h17HYPERLINK\l"_Toc"44、?請介紹一下數據庫連接池技術? PAGEREF_Toc\h17HYPERLINK\l"_Toc"45、?MySQL、Oracle、SQLServer各數據庫服務的端標語??PAGEREF_Toc\h17HYPERLINK\l"_Toc"46、 Oracle和SQLServer的分頁有什么區別? PAGEREF_Toc\h18HYPERLINK\l"_Toc"47、 如何對數據庫進行優化??PAGEREF_Toc\h18HYPERLINK\l"_Toc"48、 JDBC連接數據庫的環節??PAGEREF_Toc\h18HYPERLINK49、?JDBC中的PreparedStatement相比Statement的好處?PAGEREF_Toc\h18HYPERLINK四.其他部分 PAGEREF_Toc\h18HYPERLINK50、 xml有哪些解析技術?區別是什么? PAGEREF_Toc\h18HYPERLINK\l"_Toc"51、 xml文檔在實際項目中有哪些應用? PAGEREF_Toc\h19HYPERLINK\l"_Toc"五.流行框架與技術?PAGEREF_Toc\h19HYPERLINK52、 什么是MVC?常用的MVC框架有哪些??PAGEREF_Toc\h19HYPERLINK\l"_Toc"53、?談談Struts的工作流程(或運營原理)?PAGEREF_Toc\h19HYPERLINK\l"_Toc"54、 談談Struts2的工作流程(或運營原理) PAGEREF_Toc\h20HYPERLINK\l"_Toc"55、?說說struts1與struts2的區別?PAGEREF_Toc\h20HYPERLINK57、 什么是Hibernate,好處是什么? PAGEREF_Toc\h21HYPERLINK58、?hibernate中的update()和saveOrUpdate()的區別?PAGEREF_Toc\h21HYPERLINK\l"_Toc"59、?hibernate中持久化對象的三種狀態??PAGEREF_Toc\h21HYPERLINK\l"_Toc"60、 session的load()和get()的區別 PAGEREF_Toc\h22HYPERLINK\l"_Toc"61、 iBatis與Hibernate有什么不同? PAGEREF_Toc\h22HYPERLINK63、 什么是AOP?談談你對他的理解。?PAGEREF_Toc\h23HYPERLINK64、 什么是IOC和DI??PAGEREF_Toc\h23HYPERLINK65、?依賴注入的兩種方式? PAGEREF_Toc\h23HYPERLINK\l"_Toc"66、 SpringIOC容器中Bean默認的范圍(scope)? 23?項目介紹在進行技術面試前,提醒大家,必須要準備好項目介紹,即需要準備好你的簡歷中列的所有項目的項目介紹!面試時關于項目,面試官常見的問題及回答(以銀行柜臺系統為例):你給我簡要介紹一下銀行柜臺系統?1、簡易銀行柜臺系統是模擬銀行柜臺的基本功能而做的一個系統。2、系統分前臺和后臺部分,前臺部分是銀行柜臺人員操作的,涉及:注冊登錄模塊、開銷戶模塊、帳號管理模塊、存取錢轉賬模塊、柜臺人員信息管理;后臺部分是銀行管理者操作的,涉及查看日記模塊、管理柜臺人員信息模塊;3、我重要負責的是前臺的所有功能;你具體介紹一下你負責的模塊的功能?1、我負責的注冊登錄模塊和柜臺人員信息模塊事實上是管理柜臺人員信息的,內容比較簡樸;2、開銷戶模塊、帳號管理模塊、存取錢轉賬模塊是為銀行儲戶服務的模塊。其中開銷戶就是為儲戶開戶、銷戶的功能,賬戶管理模塊就是幫儲戶凍結帳號、修改密碼等功能,存取錢轉賬模塊就是為儲戶存錢、取錢,幫儲戶轉賬的功能;這個項目幾個人做的?用了多長時間?這個項目比較小,由2個人合作完畢的,我負責的是前臺部分;項目大約用了4天左右的時間;這個項目使用了什么技術?這個項目使用Struts2、Hibernate3和MySQL你在做這個項目的時候,碰到了什么困難,怎么解決的?比如在Hiberante的使用,關于表之間關聯關系的配置,我開始操作的時候不太熟悉,后來通過查文檔、和其他同學溝通的方式,這個問題也得到了解決;備注:假如你在這里提到了表之間關聯關系的配置,那么這個問題面試官非常有也許接下去就問這個技術問題,所以務必認真準備這個技術問題。?前言這套面試題重要目的是幫助那些還沒有java軟件開發實際工作經驗,而正在努力尋找java軟件開發工作的學生在筆試/面試時更好地贏得好的結果。由于這套試題涉及的范圍很泛,很廣,很雜,大家不也許一天兩天就看完和學完這套面試寶典,即使你已經學過了有關的技術,那么至少也需要半個月的時間才干消化和掌握這套面試寶典,所以,大家應當早作準備,從拿到這套面試寶典之日起,就要堅持在天天閑暇之余學習其中幾道題目,日積月累,等到出去面試時,一切都水到渠成,面試時就自然會游刃有余了。答題時,先答是什么,再答有什么作用,要注意什么(這條可以沒有)比如說面試官問:給我介紹一下ORM?較好回答:ORM就是ObjectRelationalMapping,就是對象關系映射;作用:我們在寫程序的時候,用的是面向對象的方法,但是在關系型數據庫里,存的是一條條的記錄;為了用純面向對象的思想解決問題,所以需要將程序中的對象和數據庫中的記錄建立起映射關系,ORM就是將對象和數據庫中的記錄建立起映射的技術;答案要層次分明,條理清楚,從這些表面的東西也可以看出一個人的習慣、辦事風格、條理等。答題不局限于什么格式和形式,就是要將自己的掌握的技術內容展現出來,比如可以采用舉例的說法:需要特別注意的是,由于面試官自身水平層次不齊,不要由于人家題目問的模棱兩可(或者題目問的不準確),你就心里膽怯和沒底氣了,不敢回答了。你要大膽地提出對方題目中你不清楚的地方,希望對方能重新明確的提出問題?例如,你可以問:您提的問題,我剛才沒有完全聽明白,能不能再說一遍。

一.Java基礎部分請說一下break和continue的區別?1、這兩個語句都可以用于跳出循環的;2、break是中止循環,執行循環體以后的語句,而continue是跳出本次循環,執行下一次循環;3、break還可以用在switch結構中,用于跳出switch結構.4、break假如用于多重循環中,可以跳出內部循環,直接進入外部循環.switch中用于判斷的表達式,可以用哪些數據類型?1、可以是char、byte、short、int,不可以是long、String等其他類型;2、從JDK1.7開始,支持String類型;char型變量中能不能存貯一個中文漢字?為什么?Java里采用了Unicode編碼格式,Unicode編碼中一個char型占用2個字節,而一個漢字也是占用2個字節,所以可以存儲中文漢字。備注:C語言里,char占用1個字節,不用存漢字。靜態變量和實例變量的區別?在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前則不加。在程序運營時的區別:實例變量屬于某個對象的屬性,必須創建了實例對象,其中的實例變量才會被分派空間,才干使用這個實例變量。靜態變量不屬于某個實例對象,而是屬于類,所以也稱為類變量,不用創建任何實例對象,靜態變量就會被分派空間,靜態變量就可以被使用了??傊?實例變量必須創建對象后才可以通過這個對象來使用,靜態變量則可以直接使用類名來引用。注意:也許涉及局部變量的考核問題?是否可以從一個static方法內部發出對非static方法的調用?不可以。由于非static方法是要與對象關聯在一起的,必須創建一個對象后,才可以在該對象上進行方法調用,而static方法調用時不需要創建對象,可以直接調用。也就是說,當一個static方法被調用時,也許還沒有創建任何實例對象,假如從一個static方法中發出對非static方法的調用,那個非static方法是關聯到哪個對象上的呢?這個邏輯無法成立,所以,一個static方法內部發出對非static方法的調用。實例方法與靜態方法的區別?抽象方法?靜態方法:用static聲明的方法,不需要對象,就可以調用,在調用該方法時,不會將對象的引用傳遞給它。實例方法:就是沒有static前綴的一類的一般方法,被對象擁有。抽象方法:就是以abstract修飾的方法,這種方法只聲明返回的數據類型、方法名稱和所需要的參數,沒有方法體,抽象方法只需要聲明,不需要實現。Integer與int的區別包裝類與基本類型的關系1、int是基本數據類型,Integer是包裝類;2、int的默認值是0,Interger的默認值是null;3、Boolean—booleanDouble—doubleCharacter-charFloatfloat:valueOf()4、包裝類和字符串之間的轉換:包裝類提供了parseXXX()方法Overload和Override的區別。參數列表相同,返回值不同的方法,是否是重載方法?Overload是重載的意思,Override是覆蓋的意思,也就是重寫。重載是指在一個類里,方法名相同,參數不同;重寫是指子類繼承父類,子類里重新編寫了父類中的同名(同參數)方法,也就是覆蓋了父類的方法;不是!由于重載必須規定參數列表不同!在OOP中,什么是方法的重載,什么是方法的重寫?方法的重載:指的是一個類中可以定義相同的名字,但參數不同的多個方法,調用時會根據不同的參數表選擇相應的方法,注意:只有返回值不同不構成方法的重載、只有形參的名稱的不同不構成方法的重載。方法的重寫:重寫方法必須和被重寫的方法具有相同的方法名稱、參數列表和返回類型。重寫方法不能使用比被重寫方法更嚴格的訪問權限。接口是否可繼承接口?抽象類是否可實現(implements)接口?抽象類是否可繼承具體類(concreteclass)?接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承具體類。備注:只要明白了接口和抽象類的本質和作用,這些問題都很好回答。只有記住抽象類與普通類的唯一區別就是不能創建實例對象和允許有abstract方法。Servlet:接口HttpServlet(抽象類)GernericServlet面向對象有哪三大特性?1、面向對象有三大特性,分別是:封裝、繼承和多態。2、封裝:面向對象的封裝就是把描述一個對象的屬性和行為的代碼封裝在一個類中,有些屬性是不希望公開的,或者說被其他對象訪問的,所以我們使用private修飾該屬性,使其隱藏起來;類中提供了方法(用public修飾),常用的是get、set方法,可以操作這些被隱藏的屬性,其他類可以通過調用這些方法,改變隱藏屬性的值!下面的回答是更高規定,不需要學生必須掌握:封裝是保證軟件部件具有優良的模塊性的基礎,封裝的目的就是要實現軟件部件的“高內聚、低耦合”,防止程序互相依賴性而帶來的變動影響。在面向對象的編程語言中,對象是封裝的最基本單位,面向對象的封裝比傳統語言的封裝更為清楚、更為有力。3、繼承:在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,使用extends關鍵字實現繼承;子類中可以加入若干新的內容,或修改本來的方法使之更適合特殊的需要,這就是繼承。繼承是子類自動共享父類數據和方法的機制,這是類之間的一種關系,提高了軟件的可重用性和可擴展性。4、多態:多態就是在聲明時使用父類,在實現或調用時使用品體的子類;即不修改程序代碼就可以改變程序運營時所綁定的具體代碼,讓程序可以選擇多個運營狀態,這就是多態性,多態增強了軟件的靈活性和擴展性。這里可以舉個例子,比如聲明時使用的是動物類,調用時傳遞的是一個貓類(動物類的子類)的對象,具體執行父類里動物——吃的方法時,實際執行的是貓——吃的方法。abstractclass和interface有什么區別??1、抽象類里面可以用普通方法,而接口中的方法所有都是抽象的;2、在應用范圍上來說,接口往往在程序設計的時候,用來定義程序模塊的功能,方便各模塊協同工作;抽象類是對相似類進行抽象,形成一個抽象的父類可供重用!有了抽象類為什么還需要接口?繼承的局限性:單根性Java編程思想所制:面向接口編程String是最基本的數據類型嗎?1、String是個類,不是基本數據類型;引用數據類型(array,String,類(自定義的類和系統提供的類),接口)2、基本數據類型涉及byte、int、char、long、float、double、boolean和short。String和StringBuffer的區別?3、StringBuffer與StringBuilder區別1、String是個不可變長度的字符串,而StringBuffer是個可變長度的字符串;2、在對String類進行操作的時候(例如增長字符),事實上是在內存中產生了一個新的String對象;而StringBuffer是給原對象增長字符,不是新創建一個對象;3、StringBuilder:線程非安全的,可變字符序列,但是效率高?StringBuffer:"線程安全的,可變字符序列,但是效率低4、什么叫線程安全?

jvm有一個mainmemory(主存儲器),而每個線程有自己的workingmemory(工作的存儲器),一個線程對一個variable(變量)進行操作時,都要在自己的workingmemory里面建立一個copy,操作完之后再寫入main

memory。多個線程同時操作同一個variable,就也許會出現不可預知的結果,即線程不安全。加鎖來實現線程安全,每個線程在獲得這個鎖之后,要執行完(load到workingmemory

->

use&assign

->

store到mainmemory)自己的一系列的過程,才會釋放它得到的鎖。這樣就實現了所謂的線程安全。數組有沒有length()這個方法?String有沒有length()這個方法?數組沒有length()這個方法,有length的屬性。String有length()這個方法。final,finally,finalize的區別。final用于聲明屬性,方法和類,分別表達屬性不可變,方法不可覆蓋,類不可繼承。finally是異常解決語句結構的一部分,表達總是執行。finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文獻等。JVM不保證此方法總被調用請說一下你常用的幾種異常?比如:空指針異常;數組下標越界;類型轉換異常;算數異常,例如除數為零;IO異常,比如說找不到文獻;找不到類異常;sql異常,例如sql語句不能正常運營;…線程的基本概念?線程的基本狀態以及狀態之間的關系1、是程序執行流的最小HYPERLINK""\t"_blank"單元。在單個程序中同時運營多個線程完畢不同的工作,稱為HYPERLINK""\t"_blank"多線程。2、開始時:就緒狀態,等待cpu調用后進入運營狀態,運營過程中碰到阻塞事件,進入阻塞狀態,等待阻塞事件結束后,重新進入就緒狀態;假如沒有阻塞事件,運營結束后,則進入結束狀態。sleep()和wait()有什么區別?sleep就是暫停當前線程一段時間,把cpu讓給其他線程使用,屆時后會自動恢復。調用sleep不會釋放對象鎖。wait方法導致本線程放棄對象鎖,進入等待,只有等到本對象的notify方法(或notifyAll)后本線程才進入就緒狀態,等待執行。多線程有幾種實現方法?多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口啟動一個線程是用run()還是start()?.啟動一個線程是調用start()方法,使線程就緒狀態,以后可以被調度為運營狀態,一個線程必須關聯一些具體的執行代碼,run()方法是該線程所關聯的執行代碼。Set和List的區別,List和Map的區別1、Set是無序的,元素不可反復;List是有序的,元素可以反復;他倆同為Collection的子接口2、List存儲的是單個對象的集合(有序的),Map存儲的是鍵值對為對象的集合(無序的);HashMap和Hashtable的區別1、HashMap和Hashtable都完畢了Map接口;2、HashMap非線程安全的,而Hashtable是線程安全的,因素是Hashtable里面的方法使用Synchronize關鍵字修飾的;3、由于Hashtable使用了Synchronize關鍵字修飾,其性能比較差;(具體因素不做具體說明)說出ArrayList,LinkedList的區別1、ArrayList和LinkedList都完畢了List接口;2、ArrayList底層是用數組實現的,而LinkedList使用鏈表實現的;3、ArrayList在插入、刪除時,需要移動數組元素,故性能較差;但是在查詢時,由于是連續的數組,所以查詢速度快;LinkedList正好相反。請描述一下JDK1.5有哪些新特性?//不是很懂1、泛型2、For-Each循環3、自動裝包/拆包4、枚舉5、靜態導入6、Annotation為什么要使用單例模式(進行補充,使其成為典型)1、避免在開發程序的時候,創建出一個類的多個實例(占用空間,性能問題),所以使用單例模式,保證該類只創建一個對象;2、一般單例模式通常有兩種形式:它的構造函數為private的,必須有一個靜態方法返回自己的實例;實行形式有兩種,懶漢式和餓漢式;所謂的餓漢式就是在聲明實例的時候直接初始化對象,而懶漢式是先聲明一個空對象,在靜態方法中實例化該對象并返回。二.Javaweb部分什么是B/S和C/S?1、B/S:瀏覽器服務器模式;2、C/S:客戶端服務器模式;如何設立servlet初始化參數?如何獲取servlet初始化的參數?1、在web.xml里為每一個Servlet配置初始化參數;2、通過ServletConfig對象實現對Servlet初始化對象的獲取;Ajax是干么用的?有哪些常用的Ajax架?(重點應用)1、Ajax是采用了異步請求的方式,解決了頁面無刷新式提交的問題,改善了頁面的用戶體驗效果;常用在google地圖,注冊時用戶名反復性校驗,百度搜索下拉列表框;2、常用的Ajax框架:底層框架:JQuery、HYPERLINK""\t"_blank"Prototype;高層框架:DWR、DOJO、EXTJS、YUI;HTTP請求的GET與POST方式的區別(描述的具體點)Get和Post都是提交表單的方式之一;1、get方式表單中的數據放到HTTP數據包的頭部,post方式放到body中;2、get方式提交后,數據會在地址欄中顯示出來,而post方式不會,所以post更安全;3、get方式在提交數據的時候,數據長度是有限制的;而post方式在理論上對提交數據的大小是無限制的;4、get提交表單永遠使用字符方式提交;而post方式提交表單可以是字節方式也可以是字符方式說一說Servlet的生命周期?Servlet里常用的方法有哪些?Servlet生命周期涉及加載和實例化、初始化、解決請求以及服務結束;Servlet生命周期是由容器進行管理的,不可以被程序員手工銷毀;”0Servlet被服務器實例化后(用戶第一次訪問該Servlet時),容器運營其init方法,請求到達時運營其service方法,service方法自動派遣運營與請求相應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。ServletAPI中forward()與redirect()的區別?(具體、聊、)1、forward是請求轉發,而redirect是重定向;2、請求轉發是服務器將客戶端的請求轉發到另一個地址去解決,然后將響應返回給客戶端;事實上是1次請求,1次響應,對客戶端而言是透明的;而重定向是服務器根據客戶端發來的請求,返回給一個客戶端一個新的地址,客戶端根據這個返回的地址再發送請求,得到響應;事實上是2次請求,2次響應,并且客戶端的地址是第二次訪問的地址;3、轉發只能轉發到自己的資源,重定向無限制。jsp有哪些內置對象?(各自的作用)JSP共有以下9個內置的對象:(JSP內置對象即無需聲明就可以直接使用的對象實例)1、request用戶端請求客戶端的請求信息被封裝在request對象中,通過它才干了解到客戶的需求,從這個對象中可以取出客戶端用戶提交的數據或者是參數2、response網頁傳回用戶端的回應服務器端向客戶端返回的數據,從這個對象中可以取出部分與服務器互動的數據和信息,只有接受這個對象的頁面才可以訪問這個對象,服務器需要對客戶端進行某些操作的時候也需要response對象,例如服務器要在客戶端生成Cookies,那么這時候response對象就是一個很好的選擇3、pageContext網頁的屬性是在這里管理(1)只合用于當前頁面范圍,即超過這個頁面就不可以使用了4、session與請求有關的會話期(1)維護客戶端用戶和服務器端狀態,從這個對象中可以去除用戶和服務器交互過程中的數據和信息。這個對象在用戶關閉瀏覽器離開Web應用之前一直有效。保存的內容是用戶與服務器整個交互過程中的信息,假如是想在整個交互的過程中都可以訪問到信息,就可以選擇存放在session對象中)(2)Session的生命周期:session存儲在服務器端,Sessinon在用戶訪問第一次訪問服務器時創建,需要注意只有訪問JSP、Servlet等程序時才會創建Session,只訪問HTML、IMAGE等靜態資源并不會創建Session,可調用request.getSession(true)強制生成Session。session什么時候失效?1.服務器會把長時間沒有活動的Session從服務器內存中清除,此時Session便失效。Tomcat中Session的默認失效時間為20分鐘。2.調用Session的invalidate方法。5、application1、在服務器一開始執行服務,到服務器關閉為止。它的范圍最大,生存周期最長2、應用:在線人員記錄、在線人員名單列表6、out用來傳送回應的輸出7、config8、pageJSP網頁自身9、exception頁面中的異常和錯誤Session和Cookie的區別?(之間的關聯)1、Session和Cookie都是會話跟蹤技術;2、Session是保存在服務器端的技術(保持用戶登錄狀態的檢查常用Session),而Cookie是保存在客戶端的技術;3、Cookie只能存字符串,Session可以存對象;解釋:session機制采用的是一種在客戶端與服務器之間保持狀態的解決方案。同時我們也看到,由于采用服務器端保持狀態的方案在客戶端也需要保存一個標識,所以session機制也許需要借助于cookie機制來達成保存標記的目的。當程序需要為某個客戶端的請求創建一個session時,服務器一方面檢查這個客戶端的請求里是否已包含了一個session標記(稱為sessionid),假如已包含則說明以前已經為此客戶端創建過session,服務器就按照sessionid把這個session檢索出來使用(檢索不到,會HYPERLINK""\t""新建一個),假如客戶端請求不包含sessionid,則為此客戶端創建一個session并且生成一個與此session相關聯的sessionid,sessionid的值應當是一個既不會反復,又不容易被找到規律以仿造的字符串,這個sessionid將被在本次響應中返回給客戶端保存。?保存這個sessionid的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標記發揮給服務器。一般這個cookie的名字都是類似于SEEESIONID。但cookie可以被人為的嚴禁,則必須有其他機制以便在cookie被嚴禁時仍然可以把sessionid傳遞回服務器。因素:http協議是無狀態協議,通俗點說就是當你發送一次請求道服務器端,然后再次發送請求到服務器端,服務器是不知道你的這一次請求和上一次請求是來源于同一個人發送的。session就能很好解決這個問題靜態include和動態include的區別?(不大懂)1、靜態包含屬于編譯期包含(包含頁面和被包含的頁面在編譯期形成一個jsp文獻),動態包含屬于運營期包含(包含頁面和被包含的頁面分別編譯成兩個文獻,然后運營時把兩個文獻組裝起來);2、動態包含可以帶參數;1)補充:動態INCLUDE用jsp:include動作實現

<jsp:includepage="included.jsp"flush="true"/>?它總是會檢查所含文獻中的變化,適合用于包含動態頁面,并且可以帶參數?<%@includefile="included.htm"%>

靜態INCLUDE用include偽碼實現,定不會檢查所含文獻的合用于包含靜態頁面變化,2)動態HYPERLINK""\t""INCLUDE在使用的時候,會先解析所要包含的頁面(你例子中的HYPERLINK""included.jsp),解析后在和主頁面放到一起顯示;

靜態HYPERLINK""INCLUDE在使用的時候,不會解析所要包含的頁面(你例子中的included.htm),也就是說,不管你的included.htm中有什么,我的任務就是把你包含并顯示,其他的一概不管三.數據庫部分重要備注:此數據庫部分面試題不含SQL語句(含各類函數)面試具體的題目,關于SQL語句的使用,請學生自己準備!SQL語言涉及哪三種類型,每種類型又涉及哪些語句?數據定義:createTable,AlterTable,DropTable,Create/DropIndex等(學生需要了解)數據操縱:select,insert,update,delete(這個最重要,學生需要開展學習準備)數據控制:grant,revokeSQL語言包含4個部分:數據定義語言(DDL),例如:CREATE、DROP、ALTER等語句。數據操作語言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句。數據查詢語言(DQL),例如:SELECT語句。數據控制語言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等語句。SQL語言涉及三種重要程序設計語言類別的語句:數據定義語言(DDL),數據操作語言(DML)及數據控制語言(DCL)。Sql題表A(varchar(32)NAME,intGRADE)數據:ZHANGSHAN80,LISI60,WANGWU84?表B(varchar(32)NAME,intAGE)

數據:ZHANGSHAN26,LISI24,WANGWU26,WUTIAN26?1)寫SQL語句得到如下查詢結果:

NAME

GRADE

AGE

ZHANGSHAN

80

26

LISI

60

24?WANGWU

84

26?WUTIAN

NULL

26答:select*fromArightjoinBonA.NAME=B.NAMEHYPERLINK""\t""LEFTHYPERLINK""JOIN或HYPERLINK""LEFTOUTERHYPERLINK""\t""JOIN。?左向外聯接的結果集涉及HYPERLINK""\t""LEFTOUTER子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。假如左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。

HYPERLINK""RIGHTHYPERLINK""\t""JOIN或HYPERLINK""\t""RIGHTOUTERJOIN。

右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。假如右表的某行在左表中沒有匹配行,則將為左表返回空值。2)寫SQl語句根據名字(NAME)相同按年齡(AGE)分組得到不同年齡的人的平均成績,并寫出結果。答:avg(grade)groupbyname,age在emp表中略掉名字中不具有‘LL’的雇員,然后按照部門進行分組,按部門平均薪水大于2023的組,按照平均薪資的倒序排列。答:Selectavg(sal)FromempWhereenamenotlike‘%LL’GroupbydeptnoHavingsag(sal)>2023Orderbyavg(sal)desc;平均薪資最高的部門的部門編號答:SelectdeptnoFromempGroupbydeptnoWhereavg(sal)=selectmax(avg(sal))fromempgroupbydeptno)求部門平均薪資的等級答:Selectdeptno,avg_sal,gradeFromselect(deptno,avg(sal)avg_salfromempgroupbydeptno)t,SalgradesWhereavg_salbetweens.losalands.hisal比普通用戶的最高薪資還要高的經理人的名稱Selectename,salFromempWheresal>(max(sal)fromempwhereempnonotin(selectdistinctmgrfromempwheremgrisnotnull)Andempnoin(Selectdistinctmgrfromempwheremgridnotnull))求薪資最高的五名員工Selectename,salFrom(selectsalfromemporderbysaldesc)Whererownum<=5薪資最高的第六到第十位雇員Selectename,salFrom(selectename,sal,rownumrfrom(selectmax(sal)fromemporderbysaldescWhererownum<10)Wherer>5andr<10簡要介紹一下數據庫有哪些常用對象?常用的數據庫對象涉及:表、視圖、索引、函數、存儲過程、觸發器等。什么是數據庫中的視圖,其好處是什么?1、視圖是一個虛擬表,是由查詢語句產生的,不是真實存在的表;同真實的表同樣,視圖包含一系列帶有名稱的列和行數據。2、它重要出于兩種因素:安全因素,視圖可以隱藏一些數據,如:員工信息表,可以用視圖只顯示姓名,HYPERLINK""\t"_blank"年齡、性別等通用信息,而隱藏工資等敏感信息,另一因素是多表連接,可使復雜的查詢易于理解和使用。數據庫中索引的好處是什么?一個數據庫表,經常要進行添加和刪除記錄的操作,應當為該表建多個索引嗎?1、索引是一種特殊的查詢表,簡樸的理解就是在數據庫中,將數據按一定的順序進行排列(分物理索引:只有1個和邏輯索引:可以有多個),用來快速訪問數據庫表格或者視圖里的數據,查詢的時候,可以有效提高查詢速度。2、假如一個表要頻繁的進行添加和刪除記錄的操作(不是查詢),不建議建立多個索引,由于添加和刪除記錄,都需要調整索引,增長數據庫承擔,影響性能。什么是數據庫游標?1、游標是對查詢出來的結果集進行解決的一個對象,游標可以定在該集合中的特定行,從而根據游標從結果集中檢索出一行或多行。什么是事務?1、事務是一系列的HYPERLINK""\t"_blank"數據庫操作,是數據庫應用的基本邏輯單位,事務由事務開始(begintransaction)和事務結束(endtransaction)之間執行的全體操作組成。2、事務具有如下特性:(其中原子性最為重要,必須掌握)原子性(atomicity)一個事務是一個不可分割的工作單位,事務中涉及的諸操作要么都做,要么都不做。一致性(consistency)事務必須是使HYPERLINK""\t"_blank"數據庫從一個一致性狀態變到另一個一致性狀態。隔離性(isolation)一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對并發的其他事務是隔離的,并發執行的各個事務之間不能互相干擾。持久性(durability)連續性也稱永久性(permanence),指一個事務一旦提交,它對HYPERLINK""\t"_blank"數據庫中數據的改變就應當是永久性的。接下來的其他操作或故障不應當對其有任何影響。數據庫中日記的作用是什么?日記的作用是記錄所有對數據庫數據的修改,重要是保護數據庫以防止故障發生后,對數據庫進行恢復;什么是主鍵和外鍵?1、主鍵和外鍵是用來建立數據庫表之間關聯關系的;2、舉例來說,有一個學生表(學生學號、姓名、班級編號等信息)和一個班級表(班級編號、班級名稱),通過編輯編號建立班級表和學生表之間一對多的關聯,則班級表中班級編號是主鍵,學生表中的班級編號是外鍵。主鍵是表格里的(一個或多個)字段,只用來定義表格里的行;主鍵里的值總是唯一的。外鍵是一個用來建立兩個表格之間關系的約束。這種關系一般都涉及一個表格里的主鍵字段與此外一個表(也許是同一表)里的字段。那么這些相連的字段就是外鍵。什么是數據庫中的存儲過程和觸發器?存儲過程的好處?1、數據庫中的存儲過程是用于定義的一系列的sql語句的集合(含控制語句),涉及特定表和其他對象的任務,用戶可以調用存儲過程(有些類似java里的方法);2、觸發器(trigger)是個特殊的HYPERLINK""\t"_blank"存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,HYPERLINK""\t"_blank"比如當對一個表進行操作(insert,delete,update)時就會激活它執行。3、存儲過程的好處:SQL語句已經預編繹過了,因此運營的速度比較快;常用功能的集合,提高了重用性;用戶只需要調用存儲過程,不需要逐個寫存儲過程中的語句,減少了數據傳輸量;內連接和外連接的區別?1、內連接是保證兩個表中所有的行都要滿足連接條件,而外連接則不然。2、在外連接中,某些不滿條件的列也會顯示出來,也就是說,只限制其中一個表的行,而不限制另一個表的行。分左連接、右連接、全連接(笛卡爾集)三種。請介紹一下數據庫連接池技術?1、數據庫連接池技術,就是數據庫啟動時會建立一定數量的數據庫連接(也稱為池連接),并一直維持不少于此數目的池連接。2、客戶端程序需要連接數據庫時,數據庫連接池會返回一個未使用的池連接給數據庫使用。假如當前沒有空閑連接,數據庫連接池就新建一定數量的連接。當使用的池連接調用完畢后,連接池將此連接表記為空閑,其他調用就可以使用這個連接。這樣做的目的是提高了應用程序訪問數據庫的性能。MySQL、Oracle、SQLServer各數據庫服務的端標語?1、MySQL:33062、Oracle:15213、SQLServer:1433Oracle和SQLServer的分頁有什么區別?在SQLServer中使用TOP分頁,在Oracle中用ROWNUM,或分析函數ROW_NUMBER,在MySQL中用Limit。mysql和oracle區別1.組函數用法規則mysql中組函數在select語句中可以隨意使用,但在oracle中假如查詢語句中有組函數,那其他列名必須是組函數解決過的,或者是groupby子句中的列否則報錯2.自動增長的數據類型解決MYSQL有自動增長的數據類型,插入記錄時不用操作此字段,會自動獲得數據值。ORACLE沒有自動增長的數據類型,需要建立一個自動增長的序列號,插入記錄時要把序列號的下一個值賦于此字段。3.單引號的解決MYSQL里可以用雙引號包起字符串,ORACLE里只可以用單引號包起字符串。如何對數據庫進行優化?1、先優化SQL語句;2、表級別優化:比如說建立索引;3、數據庫級別優化:比如說數據庫參數設立,例如連接池數量;JDBC連接數據庫的環節?加載JDBC驅動程序在連接數據庫之前要把連接數據庫的驅動加載到JVM(Java虛擬機),?這通過java.lang.Class類的靜態方法forName(StringclassName)實現。創建數據庫的連接;要連接數據庫,需要向java.sql.DriverManager請求并獲得Connection對象,?該對象就代表一個數據庫的連接。?使用DriverManager的getConnectin(Stringurl,Stringusername,?Stringpassword)方法傳入指定的欲連接的數據庫的途徑、數據庫的用戶名和?密碼來獲得。創建一個Statement對象;要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3

種類型:

1、執行靜態SQL語句?通常通過Statement實例實現。

2、執行動態SQL語句?通常通過PreparedStatement實例實現。?3、執行數據庫存儲過程。通常通過CallableStatement實例實現。執行SQL語句;Statement接口提供了三種執行SQL語句的方法:executeQuery、executeUpdate

和execute?1、ResultSetexecuteQuery(StringsqlString):執行查詢數據庫的SQL語句?,返回一個結果集(ResultSet)對象。

2、intexecuteUpdate(StringsqlString):用于執行INSERT、UPDATE或

DELETE語句以及SQLDDL語句,如:CREATETABLE和DROPTABLE等?3、execute(sqlString):用于執行返回多個結果集、多個更新計數或兩者組合的返回并解決結果;兩種情況:1、執行更新返回的是本次操作影響到的記錄數。

2、執行查詢返回的結果是一個ResultSet對象。?ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法提供了對這些?行中數據的訪問。?使用結果集(ResultSet)對象的訪問方法獲取數據:關閉連接;操作完畢以后要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲

明順序相反:

1、關閉記錄集

2、關閉聲明

3、關閉連接對象JDBC中的PreparedStatement相比Statement的好處1、PreparedStatement是Statement的子接口;2、PreparedStatement有綁定參數的功能,避免SQL注入,安全性更好;3、PreparedStatement對SQL語句有預編譯的功能,所以性能更好;四.其他部分xml有哪些解析技術?區別是什么?XML的DOM其實就是映射在內存中的數據.XML是樹型結構,操作很麻煩.DOM的出現就是解決這個問題的.運用DOM,可以輕松地在節點間進行讀取,增長,刪除等一系列操作User.dir(用戶工作目錄)1、有DOM,SAX等2、DOM:解決大型文獻時性能比較差,因素是DOM需要把整個文檔裝入內存,適合對XML的隨機訪問;DOM:將文檔一次性所有加載到內存中然后構建DOM樹,根據XML文檔的屬性文本建出相應的結點。優點:可以整體的把握文檔,對文檔結點進行增刪改。缺陷:文獻大時加載有延遲,內存消耗嚴重SAX:是事件驅動型的XML解析方式,它順序讀取XML文獻,不需要一次所有裝載整個文獻,當碰到像文檔開頭、文檔結束或標簽開頭和結束時,會觸發一個事件,用戶可以進行解決;SAX:以事件流的方式解析文檔,不會創建文檔,只是給我們的代碼發送事件我們根據事件解決所需要的數據優點:沒有延遲,內存消耗少,隨時可以停止解析創建XML文獻環節:創建節點(給結點添加屬性,文本)將節點進行有機的關聯創建XML文檔(Documentdocument=newDocument(usersElement);)將文檔寫到硬盤XMLOutputterxmlOutputter=newXMLOutputter(format);xmlOutputter.output(document,newFileOutputStream(path));解析XML文檔環節:獲得解析器講XML文獻以流的方式讀取到內存中解析器開始解析輸入流獲取文檔的根節點然后對文獻進行修改將文檔寫到硬盤xml文檔在實際項目中有哪些應用?1、配置文獻中使用XML文檔;2、XML是標準的文獻傳輸格式,異構系統數據互換常采用XML;五.流行框架與技術什么是MVC?常用的MVC框架有哪些?M:Model模型層重要用來解決業務邏輯,承載數據;Model又叫實體類,這樣,Model在三層架構中的位置,和int,string等變量的地位就同樣了,沒有其它的目的,僅用于數據的存儲而已,只但是它存儲的是復雜的數據2、V:View視圖層重要用來做頁面顯示的3、C:Control控制層重要用來進行業務流程控制;4、常用的MVC框架涉及:Struts、Struts2、SpringMVC;談談Struts的工作流程(或運營原理)備注:下面的描述必須轉換成自己的語言進行表述??!!這道題非常重要,面試官關于Struts的很多問題都可以從本題中找到答案。1、Struts是一個應用于Web層的MVC框架;2、以ActionServlet作為核心控制器,接受用戶所有請求,并將請求分發到不同的Action中進行解決,并將響應結果返回給客戶端;3、我們可以在web.xml文獻中將符合某種特性的所有請求交給這個核心控制器進行解決,這核心控制器再參照一個配置文獻(通常為/WEB-INF/struts-config.xml)將各個請求分別分派給不同的Action去解決。4、ActionServlet把請求交給Action去解決之前,會將請求參數封裝成一個formbean對象。備注:假如面試官需要解釋一下formbean,則按如下思緒回答:ActionServlet把formbean對象傳遞給action的execute方法之前,也許會調用formbean的validate方法進行校驗,只有校驗通過后才將這個formbean對象傳遞給action的execute方法,否則,它將返回一個錯誤頁面,這個錯誤頁面由input屬性指定,(看配置文獻)作者為什么將這里命名為input屬性,而不是error屬性,我們后面結合實際的運營效果進行分析。5、Action執行完后要返回顯示的結果視圖,這個結果視圖是用一個ActionForward對象來表達的,actionforward對象通過struts-config.xml配置文獻中的配置關聯到某個jsp頁面,由于程序中使用的是在struts-config.xml配置文獻為jsp頁面設立的邏輯名,這樣可以實現action程序代碼與返回的jsp頁面名稱的解耦。談談Struts2的工作流程(或運營原理)備注:下面的描述必須轉換成自己的語言進行表述!??!這道題非常重要,面試官關于Struts2的很多問題都可以從本題中找到答案。1、客戶端發送一個指向Servlet容器(例如Tomcat)的請求,服務器接受請求,將HttpServletRequest傳進來。2、這個請求通過一系列的過濾器(Filter)3、接著FilterDispatcher(核心控制器)被調用,將request中所攜帶的數據放入值棧(ValueStack);4、FilterDispatcher(核心控制器)詢問ActionMapper來決定這個請求是否需要調用某個Action,把請求的解決交給ActionProxy;5、ActionProxy通過ConfigurationManager詢問框架的配置文獻(struts.xml),找到調用的Action類;6、ActionProxy創建一個ActionInvocation對象,執行其execute方法;?7、在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用;8、一旦Action執行完畢,根據struts.xml中的配置找到相應的返回結果(JSP顯示結果)。說說struts1與struts2的區別備注:下面的描述必須轉換成自己的語言進行表述!!!1、都是MVC的WEB框架;2、struts1的前端控制器是一個Servlet,名稱為ActionServlet,struts2的前端控制器是一個filter,在struts2.0中叫FilterDispatcher,在struts2.1中叫StrutsPrepareAndExecuteFilter;3、struts1的action需要繼承Action類,struts2的action可以不繼承任何類;struts1對同一個途徑的所有請求共享一個Action實例(單例模式),struts2對同一個途徑的每個請求分別使用一個獨立Action實例對象(多例模式),所有對于struts2的Action不用考慮線程安全問題。4、在struts1中使用formbean封裝請求參數,在struts2中直接使用action的屬性來封裝請求參數。(不懂)5、struts1中的多個業務方法放在一個Action中時(即繼承DispatchAction時),要么都校驗,要么都不校驗;對于struts2,可以指定只對某個方法進行校驗,當一個Action繼承了ActionSupport且在這個類中只編寫了validateXxx()方法,那么則只對Xxx()方法進行校驗。Struts優缺陷優點:1、實現MVC模式,結構清楚,使開發者只關注業務邏輯的實現;2、有豐富的tag可以用,Struts的標記庫(Taglib),如能靈活動用,則能大大提高開發效率;3、通過配置文獻,使系統的脈絡更加清楚。一個配置文獻,即可把握整個系統各部分之間的聯系,這對于后期的維護有著很大的好處。4、Struts提供了兩周異常解決方式,聲明式異常解決和編程式異常解決——此處學生需要自己多看看相關資料,可以進一步回答面試官問題;5、對國際化進行支持,支持I18N;缺陷:1、實現MVC模式,代碼復雜度提高;2、需要維護配置文獻,比較麻煩;什么是Hibernate,好處是什么?1、Hibernate是一個操作數據庫的框架,實現了對JDBC的封裝;2、Hibernate是一個ORM(對象關系映射)框架,我們在寫程序的時候,用的是面向對象的方法,但是在關系型數據庫里,存的是一條條的記錄;為了用純面向對象的思想解決問題,所以需要將程序中的對象和數據庫中的記錄建立起映射關系,ORM就是將對象和數據庫中的記錄建立起映射的技術,而Hibernate就是這樣一個ORM框架;3、Hibernate簡化了代碼編寫,本來JDBC需要寫一堆代碼完畢的功能,Hibernate需要少量的代碼即可以實現;4、Hibernate屏蔽了數據庫的差異,增長了對不同數據庫的可移植性(通過方言);5、使用Hibernate的基本流程是:配置Configuration對象、產生SessionFactory、創建session對象,啟動事務,完畢CRUD操作,提交事務,關閉session;6、使用Hibernate時,先要配置hibernate.cfg.xml文獻,其中配置數據庫連接信息和方言等,還要為每個實體配置相應的hbm.xml文獻,hibernate.cfg.xml文獻中需要登記每個hbm.xml文獻。hibernate中的update()和saveOrUpdate()的區別1、update針對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論