java初級(jí)面試總結(jié)

1.collection

一.分兩部分:

一部分是一個(gè)一個(gè)存(稱(chēng)collection)。

另一部分是一對(duì)一對(duì)存(稱(chēng)Map)。

集合主要有3種重要的類(lèi)型:(集合只能存引用類(lèi)型)

List :是一個(gè)有序集合,可以放重復(fù)的數(shù)據(jù)。

Set:是一個(gè)無(wú)序集合,不允許放重復(fù)的數(shù)據(jù)

Map:是一個(gè)無(wú)序集合,集合中包含一個(gè)鍵對(duì)象,一個(gè)值對(duì)象,鍵對(duì)象不允許重復(fù)。值可以重復(fù)

(1)ArrayList和Vector的區(qū)別?

這兩個(gè)類(lèi)都實(shí)現(xiàn)了List接口(List接口繼承了Collection接口),他們都是有序集合,即存儲(chǔ)在這兩個(gè)集合中的元素的位置都是有順序的,相當(dāng)于一種動(dòng)態(tài)的數(shù)組,我們以后可以按位置索引號(hào)取出某個(gè)元素,,并且其中的數(shù)據(jù)是允許重復(fù)的,這是HashSet之類(lèi)的集合的最大不同處。

1)同步性:Vector是線程安全的,也就是說(shuō)是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不同步的。如果只有一個(gè)線程會(huì)訪問(wèn)到集合,那最好是使用ArrayList,因?yàn)樗豢紤]線程安全,效率會(huì)高些;如果有多個(gè)線程會(huì)訪問(wèn)到集合,那最好是使用Vector,因?yàn)椴恍枰覀冏约涸偃タ紤]和編寫(xiě)線程安全的代碼。

2)數(shù)據(jù)增長(zhǎng):ArrayList與Vector都有一個(gè)初始的容量大小,當(dāng)存儲(chǔ)進(jìn)它們里面的元素的個(gè)數(shù)超過(guò)了容量時(shí),就需要增加ArrayList與Vector的存儲(chǔ)空間,每次要增加存儲(chǔ)空間時(shí),不是只增加一個(gè)存儲(chǔ)單元,而是增加多個(gè)存儲(chǔ)單元,每次增加的存儲(chǔ)單元的個(gè)數(shù)在內(nèi)存空間利用與程序效率之間要取得一定的平衡。Vector默認(rèn)增長(zhǎng)為原來(lái)兩倍,而ArrayList的增長(zhǎng)策略在文檔中沒(méi)有明確規(guī)定(從源代碼看到的是增長(zhǎng)為原來(lái)的1.5倍)。ArrayList與Vector都可以設(shè)置初始的空間大小,Vector還可以設(shè)置增長(zhǎng)的空間大小,而ArrayList沒(méi)有提供設(shè)置增長(zhǎng)空間的方法。

總結(jié):即Vector增長(zhǎng)原來(lái)的一倍,ArrayList增加原來(lái)的0.5倍。

(2)HashMap和Hashtable的區(qū)別

HashMap是Hashtable的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,在只有一個(gè)線程訪問(wèn)的情況下,效率要高于Hashtable。

一.歷史原因:Hashtable是基于陳舊的Dictionary類(lèi)的,HashMap是Java 1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)

二.同步性:Hashtable是線程安全的,也就是說(shuō)是同步的,而HashMap是線程序不安全的,不是同步的

?三.值:只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value


2.棧和堆

heap和stack有什么區(qū)別。

java的內(nèi)存分為兩類(lèi),一類(lèi)是棧內(nèi)存,一類(lèi)是堆內(nèi)存。棧內(nèi)存是指程序進(jìn)入一個(gè)方法時(shí),會(huì)為這個(gè)方法單獨(dú)分配一塊私屬存儲(chǔ)空間,用于存儲(chǔ)這個(gè)方法內(nèi)部的局部變量,當(dāng)這個(gè)方法結(jié)束時(shí),分配給這個(gè)方法的棧會(huì)釋放,這個(gè)棧中的變量也將隨之釋放。

堆是與棧作用不同的內(nèi)存,一般用于存放不放在當(dāng)前方法棧中的那些數(shù)據(jù),例如,使用new創(chuàng)建的對(duì)象都放在堆里,所以,它不會(huì)隨方法的結(jié)束而消失。方法中的局部變量使用final修飾后,放在堆中,而不是棧中。

(3)JSP

jsp有哪些內(nèi)置對(duì)象?作用分別是什么? 分別有什么方法?

JSP共有以下9個(gè)內(nèi)置的對(duì)象:

request 用戶(hù)端請(qǐng)求,此請(qǐng)求會(huì)包含來(lái)自GET/POST請(qǐng)求的參數(shù)

response 網(wǎng)頁(yè)傳回用戶(hù)端的回應(yīng)

pageContext 網(wǎng)頁(yè)的屬性是在這里管理

session 與請(qǐng)求有關(guān)的會(huì)話期

application servlet 正在執(zhí)行的內(nèi)容

out 用來(lái)傳送回應(yīng)的輸出

config servlet的構(gòu)架部件

page JSP網(wǎng)頁(yè)本身

exception 針對(duì)錯(cuò)誤網(wǎng)頁(yè),未捕捉的例外

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ì)象。它是用于方便存取各種范圍的名字空間、servlet相關(guān)的對(duì)象的API,并且包裝了通用的servlet相關(guān)功能的方法。

session表示一個(gè)請(qǐng)求的javax.servlet.http.HttpSession對(duì)象。Session可以存貯用戶(hù)的狀態(tài)信息

applicaton 表示一個(gè)javax.servle.ServletContext對(duì)象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息

config表示一個(gè)javax.servlet.ServletConfig對(duì)象。該對(duì)象用于存取servlet實(shí)例的初始化參數(shù)。

page表示從該頁(yè)面產(chǎn)生的一個(gè)servlet實(shí)例

jsp有哪些動(dòng)作?作用分別是什么?

答:JSP共有以下6種基本動(dòng)作

jsp:include:在頁(yè)面被請(qǐng)求的時(shí)候引入一個(gè)文件。

jsp:useBean:尋找或者實(shí)例化一個(gè)JavaBean。

jsp:setProperty:設(shè)置JavaBean的屬性。

jsp:getProperty:輸出某個(gè)JavaBean的屬性。

jsp:forward:把請(qǐng)求轉(zhuǎn)到一個(gè)新的頁(yè)面。

jsp:plugin:根據(jù)瀏覽器類(lèi)型為Java插件生成OBJECT或EMBED標(biāo)記

JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?

它總是會(huì)檢查所含文件中的變化,適合用于包含動(dòng)態(tài)頁(yè)面,并且可以帶參數(shù) 靜態(tài)INCLUDE用include偽碼實(shí)現(xiàn),定不會(huì)檢查所含文件的變化,適用于包含靜態(tài)頁(yè)面 <%@ include file=included.htm %>

兩種跳轉(zhuǎn)方式分別是什么?有什么區(qū)別?

(下面的回答嚴(yán)重錯(cuò)誤,應(yīng)該是想問(wèn)forward和sendRedirect 的區(qū)別,畢竟出題的人不是專(zhuān)業(yè)搞文字藝術(shù)的人,可能表達(dá)能力并不見(jiàn)得很強(qiáng),用詞不一定精準(zhǔn),加之其自身的技術(shù)面也可能存在一些問(wèn)題,不一定真正將他的意思表達(dá)清楚了,嚴(yán)格意思上來(lái)講,一些題目可能根本就無(wú)人能答,所以,答題時(shí)要掌握主動(dòng),只要把自己知道的表達(dá)清楚就夠了,而不要去推敲原始題目的具體含義是什么,不要一味想著是在答題)答:有兩種,分別為:前者頁(yè)面不會(huì)轉(zhuǎn)向include所指的頁(yè)面,只是顯示該頁(yè)的結(jié)果,主頁(yè)面還是原來(lái)的頁(yè)面。執(zhí)行完后還會(huì)回來(lái),相當(dāng)于函數(shù)調(diào)用。并且可以帶參數(shù).后者完全轉(zhuǎn)向新頁(yè)面,不會(huì)再回來(lái)。相當(dāng)于go to 語(yǔ)句。

JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么?

JSP是Servlet技術(shù)的擴(kuò)展,本質(zhì)上是Servlet的簡(jiǎn)易方式,更強(qiáng)調(diào)應(yīng)用的外表表達(dá)。JSP編譯后是"類(lèi)servlet"。Servlet和JSP最主要的不同點(diǎn)在于,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開(kāi)來(lái)。而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文件。JSP側(cè)重于視圖,Servlet主要用于控制邏輯。

forward 和redirect的區(qū)別

(4)Struts2

談?wù)勀銓?duì)Struts2的理解

服務(wù)器啟動(dòng):Tomcat啟動(dòng)-? 加載自身web.xml---?加載所有項(xiàng)目的web.xml通過(guò)在項(xiàng)目的web.xml中引入過(guò)濾器,

-?Struts的核心功能的初始化,通過(guò)過(guò)濾器完成

1. 加載項(xiàng)目web.xml

2. 創(chuàng)建Struts核心過(guò)濾器對(duì)象, 執(zhí)行filter ?? init()

struts-default.xml,? ? 核心功能的初始化

struts-plugin.xml,? ? struts相關(guān)插件

struts.xml ? 用戶(hù)編寫(xiě)的配置文件

訪問(wèn):

3. 用戶(hù)訪問(wèn)Action, 服務(wù)器根據(jù)訪問(wèn)路徑名稱(chēng),找對(duì)應(yīng)的aciton配置, 創(chuàng)建action對(duì)象

4. 執(zhí)行默認(rèn)攔截器棧中定義的18個(gè)攔截器

5. 執(zhí)行action的業(yè)務(wù)處理方法

說(shuō)說(shuō)struts1與struts2的區(qū)別

Struts1最早的一種基于mvc模式的框架;

Struts2 是在Struts1的基礎(chǔ)上,融合了xwork的功能;

也可以說(shuō),Struts2 = struts1? +? xwork

(5)Hibernate

1)hibernate中的update()和saveOrUpdate()的區(qū)別,session的load()和get()的區(qū)別。

2)iBatis與Hibernate有什么不同?

3)介紹一下Hibernate的二級(jí)緩存?

2)iBatis與Hibernate有什么不同?

相同點(diǎn):屏蔽jdbc api的底層訪問(wèn)細(xì)節(jié),使用我們不用與jdbc api打交道,就可以訪問(wèn)數(shù)據(jù)。

jdbc api編程流程固定,還將sql語(yǔ)句與java代碼混雜在了一起,經(jīng)常需要拼湊sql語(yǔ)句,細(xì)節(jié)很繁瑣。

ibatis的好處:屏蔽jdbc api的底層訪問(wèn)細(xì)節(jié);將sql語(yǔ)句與java代碼進(jìn)行分離;提供了將結(jié)果集自動(dòng)封裝稱(chēng)為實(shí)體對(duì)象和對(duì)象的集合的功能,queryForList返回對(duì)象集合,用queryForObject返回單個(gè)對(duì)象;提供了自動(dòng)將實(shí)體對(duì)象的屬性傳遞給sql語(yǔ)句的參數(shù)。

Hibernate是一個(gè)全自動(dòng)的orm映射工具,它可以自動(dòng)生成sql語(yǔ)句,ibatis需要我們自己在xml配置文件中寫(xiě)sql語(yǔ)句,hibernate要比ibatis功能負(fù)責(zé)和強(qiáng)大很多。因?yàn)閔ibernate自動(dòng)生成sql語(yǔ)句,我們無(wú)法控制該語(yǔ)句,我們就無(wú)法去寫(xiě)特定的高效率的sql。對(duì)于一些不太復(fù)雜的sql查詢(xún),hibernate可以很好幫我們完成,但是,對(duì)于特別復(fù)雜的查詢(xún),hibernate就很難適應(yīng)了,這時(shí)候用ibatis就是不錯(cuò)的選擇,因?yàn)閕batis還是由我們自己寫(xiě)sql語(yǔ)句。

介紹一下Hibernate的二級(jí)緩存?

按照以下思路來(lái)回答:(1)首先說(shuō)清楚什么是緩存,(2)再說(shuō)有了hibernate的Session就是一級(jí)緩存,即有了一級(jí)緩存,為什么還要有二級(jí)緩存,(3)最后再說(shuō)如何配置Hibernate的二級(jí)緩存。

(1)緩存就是把以前從數(shù)據(jù)庫(kù)中查詢(xún)出來(lái)和使用過(guò)的對(duì)象保存在內(nèi)存中(一個(gè)數(shù)據(jù)結(jié)構(gòu)中),這個(gè)數(shù)據(jù)結(jié)構(gòu)通常是或類(lèi)似Hashmap,當(dāng)以后要使用某個(gè)對(duì)象時(shí),先查詢(xún)緩存中是否有這個(gè)對(duì)象,如果有則使用緩存中的對(duì)象,如果沒(méi)有則去查詢(xún)數(shù)據(jù)庫(kù),并將查詢(xún)出來(lái)的對(duì)象保存在緩存中,以便下次使用

Hibernate的Session就是一種緩存,我們通常將之稱(chēng)為Hibernate的一級(jí)緩存,當(dāng)想使用session從數(shù)據(jù)庫(kù)中查詢(xún)出一個(gè)對(duì)象時(shí),Session也是先從自己內(nèi)部查看是否存在這個(gè)對(duì)象,存在則直接返回,不存在才去訪問(wèn)數(shù)據(jù)庫(kù),并將查詢(xún)的結(jié)果保存在自己內(nèi)部。由于Session代表一次會(huì)話過(guò)程,一個(gè)Session與一個(gè)數(shù)據(jù)庫(kù)連接相關(guān)連,所以Session最好不要長(zhǎng)時(shí)間保持打開(kāi),通常僅用于一個(gè)事務(wù)當(dāng)中,在事務(wù)結(jié)束時(shí)就應(yīng)關(guān)閉。并且Session是線程不安全的,被多個(gè)線程共享時(shí)容易出現(xiàn)問(wèn)題。通常只有那種全局意義上的緩存才是真正的緩存應(yīng)用,才有較大的緩存價(jià)值,因此,Hibernate的Session這一級(jí)緩存的緩存作用并不明顯,應(yīng)用價(jià)值不大。Hibernate的二級(jí)緩存就是要為Hibernate配置一種全局緩存,讓多個(gè)線程和多個(gè)事務(wù)都可以共享這個(gè)緩存。我們希望的是一個(gè)人使用過(guò),其他人也可以使用,session沒(méi)有這種效果。

(3)二級(jí)緩存是獨(dú)立于Hibernate的軟件部件,屬于第三方的產(chǎn)品,多個(gè)廠商和組織都提供有緩存產(chǎn)品,例如,EHCache和OSCache等等。在Hibernate中使用二級(jí)緩存,首先就要在hibernate.cfg.xml配置文件中配置使用哪個(gè)廠家的緩存產(chǎn)品,接著需要配置該緩存產(chǎn)品自己的配置文件,最后要配置Hibernate中的哪些實(shí)體對(duì)象要納入到二級(jí)緩存的管理中。明白了二級(jí)緩存原理和有了這個(gè)思路后,很容易配置起Hibernate的二級(jí)緩存。擴(kuò)展知識(shí):一個(gè)SessionFactory可以關(guān)聯(lián)一個(gè)二級(jí)緩存,也即一個(gè)二級(jí)緩存只能負(fù)責(zé)緩存一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù),當(dāng)使用Hibernate 的二級(jí)緩存后,注意不要有其他的應(yīng)用或SessionFactory來(lái)更改當(dāng)前數(shù)據(jù)庫(kù)中的數(shù)據(jù),這樣緩存的數(shù)據(jù)就會(huì)與數(shù)據(jù)庫(kù)中的實(shí)際數(shù)據(jù)不一致

6)Spring

什么是spring的IOC? AOP

Servlet

1.servlet的執(zhí)行順序

servlet分兩部分,訪問(wèn)servlet配置和servlet-mapping配置,

到本地的hosts文件中查找是否存在該域名對(duì)應(yīng)的IP地址

127.0.0.1,8080 :找到tomcat服務(wù)器,在tomcat的webapps目錄下找 day10的目錄,訪問(wèn)/first? ? 資源名稱(chēng),tomcat服務(wù)器啟動(dòng)時(shí),首先加載webapps中的每個(gè)web應(yīng)用的web.xml配置文件。在day10的web.xml中查找是否有匹配的url-pattern的內(nèi)容(用/first去匹配),如果找到匹配的url-pattern,則使用當(dāng)前servlet-name的名稱(chēng)到web.xml文件中查詢(xún)是否相同名稱(chēng)的servlet配置,如果找到,則取出對(duì)應(yīng)的servlet配置信息中的servlet-class內(nèi)容:(字符串: bao.a_servlet.FirstServlet),通過(guò)反射:a)構(gòu)造FirstServlet的對(duì)象b)然后調(diào)用FirstServlet里面的方法

2.Servlet重要的四個(gè)生命周期方法:

構(gòu)造方法: 創(chuàng)建servlet對(duì)象的時(shí)候調(diào)用。默認(rèn)情況下,第一次訪問(wèn)servlet的時(shí)候創(chuàng)建servlet對(duì)象 只調(diào)用1次。證明servlet對(duì)象在tomcat是單實(shí)例的。

init方法: 創(chuàng)建完servlet對(duì)象的時(shí)候調(diào)用。只調(diào)用1次。

service方法: 每次發(fā)出請(qǐng)求時(shí)調(diào)用。調(diào)用n次。

destroy方法: 銷(xiāo)毀servlet對(duì)象的時(shí)候調(diào)用。停止服務(wù)器或者重新部署web應(yīng)用時(shí)銷(xiāo)毀servlet對(duì)象。只調(diào)用1次。

3.ServletConfig對(duì)象

ServletConfig對(duì)象: 主要是用于加載servlet的初始化參數(shù)。在一個(gè)web應(yīng)用可以存在多個(gè)ServletConfig對(duì)象(一個(gè)Servlet對(duì)應(yīng)一個(gè)ServletConfig對(duì)象)

創(chuàng)建時(shí)機(jī): 在創(chuàng)建完servlet對(duì)象之后,在調(diào)用init方法之前創(chuàng)建。

得到對(duì)象: 直接從有參數(shù)的init方法中得到?。?!

4. ServletContext對(duì)象

ServletContext對(duì)象 ,叫做Servlet的上下文對(duì)象。表示一個(gè)當(dāng)前的web應(yīng)用環(huán)境。一個(gè)web應(yīng)用中只有一 個(gè)ServletContext對(duì)象

創(chuàng)建時(shí)機(jī):加載web應(yīng)用時(shí)創(chuàng)建ServletContext對(duì)象。

得到對(duì)象: 從ServletConfig對(duì)象的getServletContext方法得到

5.域?qū)ο螅鹤饔檬怯糜诒4鏀?shù)據(jù),獲取數(shù)據(jù)??梢栽诓煌膭?dòng)態(tài)資源之間共享數(shù)據(jù)

參數(shù)傳遞有兩種方法

方案1: 可以通過(guò)傳遞參數(shù)的形式,共享數(shù)據(jù)。局限:只能傳遞字符串類(lèi)型。

方案2: 可以使用域?qū)ο蠊蚕頂?shù)據(jù),好處:可以共享任何類(lèi)型的數(shù)據(jù)?。。。?!

ServletContext域?qū)ο螅鹤饔梅秶谡麄€(gè)web應(yīng)用中有效!?。?br>

所有域?qū)ο螅?/p>

HttpServletRequet 域?qū)ο?/p>

ServletContext域?qū)ο?/p>

HttpSession 域?qū)ο?/p>

PageContext域?qū)ο?/p>

6.轉(zhuǎn)發(fā)和重定向

RequestDispatcher getRequestDispatcher(java.lang.String path)

1)轉(zhuǎn)發(fā)

a)地址欄不會(huì)改變

b)轉(zhuǎn)發(fā)只能轉(zhuǎn)發(fā)到當(dāng)前web應(yīng)用內(nèi)的資源

c)可以在轉(zhuǎn)發(fā)過(guò)程中,可以把數(shù)據(jù)保存到request域?qū)ο笾?/p>

2)重定向

a)地址欄會(huì)改變,變成重定向到地址。

b)重定向可以跳轉(zhuǎn)到當(dāng)前web應(yīng)用,或其他web應(yīng)用,甚至是外部域名網(wǎng)站。

c)不能再重定向的過(guò)程,把數(shù)據(jù)保存到request中。

數(shù)據(jù)庫(kù)

1、數(shù)據(jù)庫(kù)三范式是什么?

2.JDBC:使用java代碼(程序)發(fā)送sql語(yǔ)句的技術(shù),就是jdbc技術(shù)!

使用JDBC連接數(shù)據(jù)庫(kù)前提:數(shù)據(jù)庫(kù)的IP地址:"jdbc:mysql://localhost:3306/day17" ?

// jdbc協(xié)議:數(shù)據(jù)庫(kù)子協(xié)議:主機(jī):端口/連接的數(shù)據(jù)庫(kù) ,數(shù)據(jù)庫(kù)用戶(hù)名,密碼

使用JDBC連接數(shù)據(jù)庫(kù)的第一種方法:

第一種方法

1.創(chuàng)建驅(qū)動(dòng)程序類(lèi)對(duì)象

2設(shè)置用戶(hù)名和密碼

3.連接數(shù)據(jù)庫(kù),返回連接對(duì)象

第二種方法

使用驅(qū)動(dòng)管理器類(lèi)連接數(shù)據(jù)庫(kù)(注冊(cè)了兩次,沒(méi)必要)

Driver driver = new com.mysql.jdbc.Driver();

/1.注冊(cè)驅(qū)動(dòng)程序(可以注冊(cè)多個(gè)驅(qū)動(dòng)程序)

DriverManager.registerDriver(driver);

/2.連接到具體的數(shù)據(jù)庫(kù)

Connection conn = DriverManager.getConnection(url, user, password);

(推薦使用第二種)

JDBC接口核心的API

|- Connection接口: 表示java程序和數(shù)據(jù)庫(kù)的連接對(duì)象。

|- Statement createStatement() : 創(chuàng)建Statement對(duì)象

|- PreparedStatement prepareStatement(String sql)? 創(chuàng)建PreparedStatement對(duì)象

|- CallableStatement prepareCall(String sql) 創(chuàng)建CallableStatement對(duì)象


|- Statement接口: 用于執(zhí)行靜態(tài)的sql語(yǔ)句

|- int executeUpdate(String sql)? : 執(zhí)行靜態(tài)的更新sql語(yǔ)句(DDL,DML)

|- ResultSet executeQuery(String sql)? :執(zhí)行的靜態(tài)的查詢(xún)sql語(yǔ)句(DQL)


|-PreparedStatement接口:用于執(zhí)行預(yù)編譯sql語(yǔ)句

|- int executeUpdate() : 執(zhí)行預(yù)編譯的更新sql語(yǔ)句(DDL,DML)

|-ResultSet executeQuery()? : 執(zhí)行預(yù)編譯的查詢(xún)sql語(yǔ)句(DQL)

|-CallableStatement接口:用于執(zhí)行存儲(chǔ)過(guò)程的sql語(yǔ)句(call xxx)

|-ResultSet executeQuery()? : 調(diào)用存儲(chǔ)過(guò)程的方法

//7.關(guān)閉連接(順序:后打開(kāi)的先關(guān)閉)if(stmt!=null)try {stmt.close();} catch (SQLException,再關(guān) conn) {

3.PreparedStatement vs Statment

String sql = "UPDATE student SET NAME=? WHERE id=?"; //?表示一個(gè)參數(shù)的占位符(預(yù)編譯sql語(yǔ)句有占位符號(hào))

1)語(yǔ)法不同:PreparedStatement可以使用預(yù)編譯的sql,而Statment只能使用靜態(tài)的sql

2)效率不同: PreparedStatement可以使用sql緩存區(qū),效率比Statment高

3)安全性不同: PreparedStatement可以有效防止sql注入,而Statment不能防止sql注入。

推薦使用PreparedStatement

JDBC優(yōu)化:

BeanUtils組件:程序中對(duì)javabean的操作很頻繁, 所以apache提供了一套開(kāi)源的api,方便對(duì)javabean的操作!即BeanUtils組件。

BeanUtils組件,? 作用是簡(jiǎn)化javabean的操作!

方法1: 對(duì)象屬性的拷貝

BeanUtils.copyProperty(admin, "userName", "jack");

BeanUtils.setProperty(admin, "age", 18);

方法2: 對(duì)象的拷貝

BeanUtils.copyProperties(newAdmin, admin);

方法3: map數(shù)據(jù)拷貝到j(luò)avabean中

【注意:map中的key要與javabean的屬性名稱(chēng)一致】

BeanUtils.populate(adminMap, map);

元數(shù)據(jù)

在jdbc中獲取數(shù)據(jù)庫(kù)的定義,例如:數(shù)據(jù)庫(kù)、表、列的定義信息。就用到元數(shù)據(jù)。

在jdbc中可以使用: 數(shù)據(jù)庫(kù)元數(shù)據(jù)、參數(shù)元數(shù)據(jù)、結(jié)果集元數(shù)據(jù)

(元數(shù)據(jù)定義相關(guān)api,? ..MetaData)

DatabaseMetaData metaData = conn.getMetaData();// alt + shift + L? 快速獲取方法返回值

System.out.println(metaData.getUserName());

可以簡(jiǎn)化dao層,具體看代碼

DbUtils組件:簡(jiǎn)化jdbc操作

連接池

涉及頻繁的連接的打開(kāi)、關(guān)閉,影響程序的運(yùn)行效率!預(yù)先創(chuàng)建一組連接,有的時(shí)候每次取出一個(gè); 用完后,放回;

學(xué)習(xí)連接池

1.自定義一個(gè)連接池

2.學(xué)習(xí)優(yōu)秀的連接池組件DBCP ?C3P0

設(shè)計(jì)模式

代理:

如果對(duì)某個(gè)接口中的某個(gè)指定的方法的功能進(jìn)行擴(kuò)展,而不想實(shí)現(xiàn)接口里所有方法,可以使用(動(dòng)態(tài))代理模式!

Java中代理模式:靜態(tài)/動(dòng)態(tài)/Cglib代理(spring)

使用動(dòng)態(tài)代理,可以監(jiān)測(cè)接口中方法的執(zhí)行!

如何對(duì)Connection對(duì)象,生成一個(gè)代理對(duì)象:

|--Proxy

static Object newProxyInstance(

ClassLoader loader,? ? 當(dāng)前使用的類(lèi)加載器

Class[] interfaces,? 目標(biāo)對(duì)象(Connection)實(shí)現(xiàn)的接口類(lèi)型

InvocationHandler h? ? 事件處理器:當(dāng)執(zhí)行上面接口中的方法的時(shí)候,就會(huì)自動(dòng)觸發(fā)事件處理器代碼,把當(dāng)前執(zhí)行的方法(method)作為參數(shù)傳入。

),



寫(xiě)一個(gè)Singleton出來(lái)。

第一種:飽漢模式

public class SingleTon {

private SingleTon(){

}

//實(shí)例化放在靜態(tài)代碼塊里可提高程序的執(zhí)行效率,但也可能更占用空間

private final static SingleTon instance = new SingleTon();

public static SingleTon getInstance(){

return instance;

}

}

第二種:饑漢模式

public class SingleTon {

private SingleTon(){}

private static instance = null;//new SingleTon();

public static synchronized SingleTon getInstance(){

if(instance == null)

instance = new SingleTon();

return instance;

}

}

基礎(chǔ)

異常

多線程

網(wǎng)絡(luò)

HTML

html的標(biāo)簽作用:用于描述一個(gè)網(wǎng)頁(yè)的結(jié)構(gòu)的,如果要操作數(shù)據(jù)的樣式,是要通過(guò)標(biāo)簽的熟悉操作的.

1.常用標(biāo)簽

<h1 align=“center”>~<h6>表示文章大標(biāo)題,而且字體依次漸小,對(duì)齊。

文章是是段落的,段落用<p></p>標(biāo)簽,段落一般縮進(jìn)兩個(gè)空格, 一般這么干<p>&nbsp;&nbsp</p>

水的化學(xué)式:H<sub>2<sub>O ?下標(biāo)簽

2的16次方:2<sup>16</sup> 上標(biāo)簽

<hr/> :水平分割線

<br/>:換行

<pre>一首詩(shī)</pre>原樣標(biāo)簽,保留編寫(xiě)的時(shí)候的空格和換行符號(hào)(注意:使用這個(gè)標(biāo)簽的空格要么用table鍵要么用空格鍵要一致,否則出現(xiàn)錯(cuò)誤,這里建議用空格)

有序的列表標(biāo)簽:ol li

<ol type=“a”>

<li>烤魚(yú)<li>

<li>火鍋<li>

</ol>

無(wú)序的的列表標(biāo)簽:ul li 前面默認(rèn)是小圓點(diǎn),也可以改type=“square”

項(xiàng)目標(biāo)簽dl dt dd ?

<dl>

<dt>技術(shù)總監(jiān)</dt>

<dd>碼農(nóng)<dd>// dd是可以縮進(jìn)一個(gè)table鍵的

<dt>人事總監(jiān)</dt>

<dd>妹紙1<dd>

</dl>

<div></div> ? ?div標(biāo)簽的內(nèi)容會(huì)獨(dú)立占一行。

CSS+Div布局方式,Div才擁有,<span>行內(nèi)標(biāo)簽也才有用

2.超鏈接

<a>超鏈接標(biāo)簽

a標(biāo)簽常用的屬性

?href:用于指定鏈接的資源,

target:設(shè)置打開(kāi)資源的目標(biāo)。它又有兩個(gè)常用屬性:_Blank 在獨(dú)立的窗口打開(kāi)新資源,_self 在當(dāng)前窗口打開(kāi)新資源。

file:file協(xié)議(文件協(xié)議)這種協(xié)議主要用于搜索本地機(jī)器的資源文件

格式:file:\\\f:\美女\1.jpg

表格標(biāo)簽<table>

<table> 表格

?<tr>行?

<td>單元格

<th>表頭 ?默認(rèn)的樣式是居中,加粗

<caption>表格的標(biāo)題

表格常用屬性:、

border設(shè)置表格的邊框

width:設(shè)置表格的寬度

height:設(shè)置表格的高度

3.框架標(biāo)簽

framSet:一個(gè)frameSet可以把一個(gè)頁(yè)面切割成多份。只能按照行或者列切割

frame 不能被切割的,frame是位于frameSet中. src鏈接的那個(gè)頁(yè)面

<frameset rows="20%,70%,*">

<frame src="top.html"/>

<frameset>

注意:frameSet標(biāo)簽不能用于body標(biāo)簽體內(nèi)容,有body不需要frameset,有body就不需要frameset

4.實(shí)體標(biāo)簽

為什么要學(xué)實(shí)體標(biāo)簽:因?yàn)?lt; >空格等一些符號(hào)在html頁(yè)面中是有特殊含義,這些字體如果需要在頁(yè)面中顯示,這時(shí)候就應(yīng)該使用實(shí)體標(biāo)簽。

空格。&nbsp;大于號(hào) &lt; 大于號(hào) ?&gt

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,767評(píng)論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,837評(píng)論 0 11
  • (一)Struts、Spring、Hibernate、Mybatis框技術(shù) 1.Struts2.0有幾種標(biāo)簽庫(kù) 【...
    獨(dú)云閱讀 3,280評(píng)論 0 62
  • spring mvc 工作機(jī)制(原理): DispatcherServlet主要用作職責(zé)調(diào)度工作,本身主要用于控制...
    java大濕兄閱讀 1,919評(píng)論 5 24
  • 給小圖和小小圖的粑粑麻麻們: 首先表白:I love you! 不知不覺(jué),從小圖小小圖成立到現(xiàn)在大半年的時(shí)間已經(jīng)在...
    日出東方天剛曉閱讀 298評(píng)論 2 3