1. 數(shù)據(jù)庫連接池的作用,以傳統(tǒng)的JDBC技術(shù)相比有什么優(yōu)點(diǎn)钉跷?
數(shù)據(jù)庫連接池是在應(yīng)用程序啟動(dòng)時(shí)建立足夠的數(shù)據(jù)庫連接旺订,并將這些連接組成一個(gè)連接池,由應(yīng)用程序動(dòng)態(tài)地對(duì)池中的連接進(jìn)行申請(qǐng)戏挡、使用和釋放。對(duì)于多于連接池中連接數(shù)的并發(fā)請(qǐng)求晨仑,應(yīng)在請(qǐng)求隊(duì)列中排隊(duì)等待褐墅。并且應(yīng)用程序可根據(jù)池中連接的使用率,動(dòng)態(tài)增加或減少池中的連接數(shù)洪己。當(dāng)關(guān)閉連接操作時(shí)妥凳,連接并不真正的關(guān)閉,而是返回到連接池中作為空閑連接在后面繼續(xù)使用码泛,連接池技術(shù)盡解決了數(shù)據(jù)庫連接頻繁打開關(guān)閉所帶來的性能問題猾封。 傳統(tǒng)的JDBC技術(shù)相比有什么優(yōu)點(diǎn):
- 限定數(shù)據(jù)庫的個(gè)數(shù),不會(huì)導(dǎo)致由于數(shù)據(jù)庫連接過多導(dǎo)致系統(tǒng)運(yùn)行緩慢或崩潰
- 數(shù)據(jù)庫連接不需要每次都去創(chuàng)建或銷毀噪珊,節(jié)約了資源
- 數(shù)據(jù)庫連接不需要每次都去創(chuàng)建晌缘,響應(yīng)時(shí)間更快。
2. 什么是HTML痢站,說說你對(duì)它的了解磷箕?CSS呢?
HTML 是用來描述網(wǎng)頁的一種語言阵难。
指的是超文本標(biāo)記語言 (Hyper Text Markup Language)岳枷,不是一種編程語言,而是一種標(biāo)記語言 (markup language),語法較為松散呜叫,不嚴(yán)格的web語言空繁;標(biāo)簽可以不閉合,不區(qū)分大小寫朱庆。 HTML主要用于在 Internet 上顯示 Web 頁面的主要標(biāo)記語言盛泡。換句話說,網(wǎng)頁由 HTML 組成娱颊,用于通過 Web 瀏覽器顯示文本傲诵,圖像或其他資源。所有 HTML 都是純文本箱硕,這意味著它不是編譯的拴竹,可以由人類閱讀。HTML 文件的文件擴(kuò)展名為.htm 或.html剧罩。
CSS (Cascading Style Sheets) 層疊樣式表
簡稱CSS,是用來配合HTML進(jìn)行相應(yīng)的修飾栓拜,在網(wǎng)頁制作時(shí)采用CSS技術(shù),可以有效地對(duì)頁面的的布局惠昔、顏色幕与、背景、寬度舰罚、高度纽门、字體等進(jìn)行控制,讓網(wǎng)頁按您的美工設(shè)計(jì)布局的更加美觀漂亮营罢。樣式定義如何顯示 HTML 元素赏陵,通常存儲(chǔ)在樣式表中,一般使用外部樣式饲漾,可以極大提高工作效率蝙搔。提供復(fù)用性。
3. GET和POST兩種提交方式的區(qū)別考传?
GET和POST是HTTP協(xié)議中的兩種發(fā)送請(qǐng)求的方法吃型。
他們的區(qū)別如下:
1. GET比POST更不安全,因?yàn)閰?shù)直接暴露在URL上僚楞,所以不能用來傳遞敏感信息勤晚。
2. GET請(qǐng)求參數(shù)會(huì)被完整保留在瀏覽器歷史記錄里枉层,而POST中的參數(shù)不會(huì)被保留。
3. GET請(qǐng)求在URL中傳送的參數(shù)是有長度限制的赐写,而POST理論上沒有鸟蜡。
4. GET參數(shù)通過URL傳遞,POST放在Request body中挺邀。
5. 對(duì)參數(shù)的數(shù)據(jù)類型揉忘,GET只接受ASCII字符,而POST沒有限制端铛。
6. GET和POST還有一個(gè)重大區(qū)別 簡單的說: GET產(chǎn)生一個(gè)TCP數(shù)據(jù)包泣矛;POST產(chǎn)生兩個(gè)TCP數(shù)據(jù)包。
對(duì)于GET方式的請(qǐng)求禾蚕,瀏覽器會(huì)把http header和data一并發(fā)送出去您朽,服務(wù)器響應(yīng)200(返回?cái)?shù)據(jù));
而對(duì)于POST夕膀,瀏覽器先發(fā)送header虚倒,服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送data产舞,服務(wù)器響應(yīng)200 ok(返回?cái)?shù)據(jù))魂奥。
也就是說,GET只需要汽車跑一趟就把貨送到了易猫,而POST得跑兩趟耻煤,第一趟,先去和服務(wù)器打個(gè)招呼“嗨准颓,我等下要送一批貨來哈蝇,你們打開門迎接我”,然后再回頭把貨送過去攘已。 因?yàn)镻OST需要兩步炮赦,時(shí)間上消耗的要多一點(diǎn),看起來GET比POST更有效
4. JavaScript與JAVA的區(qū)別样勃?吠勘? null和undefined的區(qū)別?
JavaScript與JAVA的區(qū)別:雷鋒和雷峰塔的區(qū)別
數(shù)據(jù)類型不同
Java的基本數(shù)據(jù)類型分為4類8種峡眶,分別是:byte剧防、short、int辫樱、long峭拘、float、double、char鸡挠、boolean辉饱,引用數(shù)據(jù)類型有3種,分別是:class、interface宵凌、array.
而JavaScript的數(shù)據(jù)類型為6種鞋囊,分別為:number止后、string瞎惫、boolean、null译株、undefined瓜喇、object。 除此之外歉糜,Java和Javascript變量方面也有不同乘寒。二者定位不同
Java是一種完全面向?qū)ο蟮木幊陶Z言,是一個(gè)強(qiáng)語言,想要運(yùn)用Java寫東西就必須先設(shè)計(jì)對(duì)象匪补,
而JavaScript不一樣伞辛,它是一個(gè)弱語言,是基于對(duì)象的一種腳本語言,它為開發(fā)者自帶提供了很多內(nèi)部對(duì)象夯缺,要更為簡易省時(shí)蚤氏。聯(lián)編方式不同
Java采用靜態(tài)聯(lián)編,Java的對(duì)象引用必須在編譯時(shí)就進(jìn)行踊兜,編譯器需要實(shí)現(xiàn)強(qiáng)類型檢查竿滨,
而JavaScript不同,它采用動(dòng)態(tài)聯(lián)編捏境,它的對(duì)象引用可以在運(yùn)行時(shí)檢查于游。使用場(chǎng)景不同 它們最本質(zhì)的不同就是用途,
Java目前被廣泛應(yīng)用于PC端垫言、手機(jī)端贰剥、互聯(lián)網(wǎng)、數(shù)據(jù)中心等等筷频,
而JavaScript則被主要用于嵌入文本到HTML頁面蚌成,讀寫HTML元素,控制cookies等截驮。
Java和JavaScript各有所長各有專精笑陈,Java的舞臺(tái)在編程領(lǐng)域,而JavaScript的得心之處是在Web頁面中葵袭,它幾乎無所不能涵妥。
null與undefined的區(qū)別:
- null: 在 JavaScript 中 null 表示 "什么都沒有"。null是一個(gè)只有一個(gè)值的特殊類型坡锡。表示一個(gè)空對(duì)象引用蓬网。使用typeof運(yùn)算得到 “object”窒所,所以你可以認(rèn)為它是一個(gè)特殊的對(duì)象值。
- undefined: 在 JavaScript 中,undefined是一個(gè)沒有設(shè)置值的變量帆锋,當(dāng)一個(gè)聲明了一個(gè)變量未初始化時(shí)吵取,得到的就是undefined。
null是javascript的關(guān)鍵字锯厢,可以認(rèn)為是對(duì)象類型皮官,它是一個(gè)空對(duì)象指針,和其它語言一樣都是代表“空值”实辑,不過 undefined 卻是javascript才有的捺氢。
undefined是在ECMAScript第三版引入的,為了區(qū)分空指針對(duì)象和未初始化的變量剪撬,它是一個(gè)預(yù)定義的全局變量摄乒。沒有返回值的函數(shù)返回為undefined,沒有實(shí)參的形參也是undefined残黑。
javaScript權(quán)威指南: null 和 undefined 都表示“值的空缺”馍佑,你可以認(rèn)為undefined是表示系統(tǒng)級(jí)的、出乎意料的或類似錯(cuò)誤的值的空缺梨水,而null是表示程序級(jí)的拭荤、正常的或在意料之中的值的空缺。
5. 閉包是什么冰木?事件冒泡呢?
閉包: 閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)穷劈,函數(shù)沒有被釋放,整條作用域鏈上的局部變量都將得到保留踊沸。 由于在javascript語言中歇终,只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量,因此可以把閉包簡單理解成‘定義在一個(gè)函數(shù)內(nèi)部的函數(shù)’逼龟。 所以评凝,在本質(zhì)上,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接的一座橋梁
腺律。 閉包的特性: 1. 函數(shù)內(nèi)再嵌套函數(shù) 2. 內(nèi)部函數(shù)可以引用外層的參數(shù)和變量 3. 參數(shù)和變量不會(huì)被垃圾回收機(jī)制回收 閉包的作用: 閉包可以用在許多地方奕短。它的最大用處有兩個(gè),一個(gè)是前面提到的可以讀取函數(shù)內(nèi)部的變量匀钧,另一個(gè)就是讓這些變量的值始終保持在內(nèi)存中翎碑。
事件冒泡: 事件按照從最特定的事件目標(biāo)到最不特定的事件目標(biāo)(document對(duì)象)的順序觸發(fā),即子級(jí)元素先觸發(fā)之斯,父級(jí)元素后觸發(fā)日杈。依次層級(jí)觸發(fā)。
阻止事件冒泡: 使用event.stopPropagation()起到阻止冒泡階段中當(dāng)前事件的進(jìn)一步傳播。
阻止事件默認(rèn)行為: 使用event.preventDefault()可以取消事件默認(rèn)行為莉擒。 使用 return false ; 取消事件默認(rèn)行為酿炸。
6. Bootstrap是什么?它有什么優(yōu)點(diǎn)涨冀?除了它你還知道其它的嗎填硕?
Bootstrap 是全球最受歡迎的前端組件庫,用于開發(fā)響應(yīng)式布局鹿鳖、移動(dòng)設(shè)備優(yōu)先的 WEB 項(xiàng)目扁眯。 Bootstrap 是一套用于 HTML、CSS 和 JS 開發(fā)的開源工具集栓辜。利用我們提供的 Sass 變量和大量 mixin恋拍、響應(yīng)式柵格系統(tǒng)、可擴(kuò)展的預(yù)制組件藕甩、基于 jQuery 的強(qiáng)大的插件系統(tǒng),能夠快速為你的想法開發(fā)出原型或者構(gòu)建整個(gè) app 周荐。
容易上手: 只要您具備 HTML 和 CSS 的基礎(chǔ)知識(shí)狭莱,您就可以開始學(xué)習(xí) Bootstrap。
響應(yīng)式設(shè)計(jì): Bootstrap 的響應(yīng)式 CSS 能夠自適應(yīng)于臺(tái)式機(jī)概作、平板電腦和手機(jī)腋妙。更多有關(guān)響應(yīng)式設(shè)計(jì)的內(nèi)容詳見 Bootstrap 響應(yīng)式設(shè)計(jì)。
瀏覽器支持: 所有的主流瀏覽器都支持 Bootstrap讯榕。
內(nèi)置組件: 它包含了功能強(qiáng)大的內(nèi)置組件骤素,易于定制。
開源/定制: 通過自定義 Bootstrap 組件愚屁、Less 變量和 jQuery 插件济竹,可以定制一份屬于你自己的 Bootstrap 版本。
其他常用前端框架 [圖片上傳失敗...(image-6e0237-1607862874185)]
7. XML霎槐,HTML的區(qū)別送浊?XML的解析方式有哪些,哪一個(gè)更好丘跌?
HTML(HyperTextMark-upLanguage)即超文本標(biāo)記語言袭景,是WWW的描述語言。 XML即ExtentsibleMarkup Language(可擴(kuò)展標(biāo)記語言)闭树,是用來定義其它語言的一種元語言. xml和html都是用于操作數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)耸棒,在結(jié)構(gòu)上大致是相同的,但它們?cè)诒举|(zhì)上卻存在著明顯的區(qū)別报辱。 語法要求不同:
- 在html中不區(qū)分大小寫与殃,在xml中嚴(yán)格區(qū)分。
- 在HTML中,有時(shí)不嚴(yán)格奈籽,如果上下文清楚地顯示出段落或者列表鍵在何處結(jié)尾.在XML中饥侵,是嚴(yán)格的樹狀結(jié)構(gòu),絕對(duì)不能省略掉結(jié)束標(biāo)記衣屏。
- 在XML中躏升,擁有單個(gè)標(biāo)記而沒有匹配的結(jié)束標(biāo)記的元素必須用一個(gè)/ 字符作為結(jié)尾。這樣分析器就知道不用查找結(jié)束標(biāo)記了狼忱。
- 在XML中膨疏,屬性值必須分裝在引號(hào)中。在HTML中钻弄,引號(hào)是可用可不用的佃却。
- 在HTML中,可以擁有不帶值的屬性名窘俺。在XML中饲帅,所有的屬性都必須帶有相應(yīng)的值。
- 在XML文檔中瘤泪,空白部分不會(huì)被解析器自動(dòng)刪除灶泵;但是html是過濾掉空格的。
標(biāo)記不同:
1对途、html使用固有的標(biāo)記赦邻;而xml沒有固有的標(biāo)記。
2实檀、Html標(biāo)簽是預(yù)定義的惶洲;XML標(biāo)簽是免費(fèi)的、自定義的膳犹、可擴(kuò)展的恬吕。
作用不同: - html是用來顯示數(shù)據(jù)的;xml是用來描述數(shù)據(jù)镣奋、存放數(shù)據(jù)的币呵,所以可以作為持久化的介質(zhì)!Html將數(shù)據(jù)和顯示結(jié)合在一起侨颈,在頁面中把這數(shù)據(jù)顯示出來余赢;xml 則將數(shù)據(jù)和顯示分開。
XML被設(shè)計(jì)用來描述數(shù)據(jù)哈垢,其焦點(diǎn)是數(shù)據(jù)的內(nèi)容妻柒。HTML被設(shè)計(jì)用來顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀耘分。 - xml不是HTML的替代品举塔,xml和html是兩種不同用途的語言绑警。 XML 不是要替換 HTML;
實(shí)際上XML 可以視作對(duì) HTML 的補(bǔ)充央渣。XML 和HTML 的目標(biāo)不同HTML 的設(shè)計(jì)目標(biāo)是顯示數(shù)據(jù)并集中于數(shù)據(jù)外觀计盒,而XML的設(shè)計(jì)目標(biāo)是描述數(shù)據(jù)并集中于數(shù)據(jù)的內(nèi)容。 - 沒有任何行為的XML芽丹。與HTML 相似北启,XML 不進(jìn)行任何操作。(共同點(diǎn))
- 對(duì)于XML最好的形容可能是: XML是一種跨平臺(tái)的拔第,與軟咕村、硬件無關(guān)的,處理與傳輸信息的工具蚊俺。
- XML未來將會(huì)無所不在懈涛。XML將成為最普遍的數(shù)據(jù)處理和數(shù)據(jù)傳輸?shù)墓ぞ摺?/li>
8. Servlet的執(zhí)行原理以及生命周期?
工作流程: Web服務(wù)器在與客戶端交互時(shí).Servlet的工作過程是:
- 在客戶端對(duì)web服務(wù)器發(fā)出請(qǐng)求
- web服務(wù)器接收到請(qǐng)求后將其發(fā)送給Servlet
- Servlet容器為此產(chǎn)生一個(gè)實(shí)例對(duì)象并調(diào)用ServletAPI中相應(yīng)的方法來對(duì)客戶端HTTP請(qǐng)求進(jìn)行處理,然后將處理的響應(yīng)結(jié)果返回給WEB服務(wù)器.
- web服務(wù)器將從Servlet實(shí)例對(duì)象中收到的響應(yīng)結(jié)構(gòu)發(fā)送回客戶端.
生命周期: Servlet生命周期定義了一個(gè)Servlet如何被加載泳猬、初始化批钠,以及它怎樣接收請(qǐng)求、響應(yīng)請(qǐng)求暂殖,提供服務(wù)价匠。下面來看看以下幾個(gè)主要方法:
init()方法 在Servlet的生命周期中,僅執(zhí)行一次init()方法呛每,它是在服務(wù)器裝入Servlet時(shí)執(zhí)行的,可以配置服務(wù)器坡氯,以在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問Servlet時(shí)裝入Servlet晨横。無論有多少客戶機(jī)訪問Servlet,都不會(huì)重復(fù)執(zhí)行init()箫柳;
service()方法 它是Servlet的核心手形,每當(dāng)一個(gè)客戶請(qǐng)求一個(gè)HttpServlet對(duì)象,該對(duì)象的Service()方法就要調(diào)用悯恍,而且傳遞給這個(gè)方法一個(gè)“請(qǐng)求”(ServletRequest)對(duì)象和一個(gè)“響應(yīng)”(ServletResponse)對(duì)象作為參數(shù)库糠。在HttpServlet中已存在Service()方法。默認(rèn)的服務(wù)功能是調(diào)用與HTTP請(qǐng)求的方法相應(yīng)的do功能涮毫。
destroy()方法 僅執(zhí)行一次瞬欧,在服務(wù)器端停止且卸載Servlet時(shí)執(zhí)行該方法,有點(diǎn)類似于C++的delete方法罢防。一個(gè)Servlet在運(yùn)行service()方法時(shí)可能會(huì)產(chǎn)生其他的線程艘虎,因此需要確認(rèn)在調(diào)用destroy()方法時(shí),這些線程已經(jīng)終止或完成咒吐。
在代碼中野建,Servlet生命周期由接口javax.servlet.Servlet定義属划。所有的Java Servlet 必須直接或間接地實(shí)現(xiàn)javax.servlet.Servlet接口.
9. HTTP常見的狀態(tài)碼有哪些?分別代表什么候生?HTTP和TCP/IP的區(qū)別與聯(lián)系?
常見的狀態(tài)碼:
200(成功) 服務(wù)器已成功處理了請(qǐng)求同眯。通常,這表示服務(wù)器提供了請(qǐng)求的網(wǎng)頁唯鸭。如果是對(duì)您的 robots.txt 文件顯示此狀態(tài)碼须蜗,則表示 Googlebot 已成功檢索到該文件。
304(未修改) 自從上次請(qǐng)求后肿孵,請(qǐng)求的網(wǎng)頁未修改過唠粥。服務(wù)器返回此響應(yīng)時(shí),不會(huì)返回網(wǎng)頁內(nèi)容停做。
400(錯(cuò)誤請(qǐng)求) 服務(wù)器不理解請(qǐng)求的語法晤愧。
403(禁止) 服務(wù)器拒絕請(qǐng)求。 如果網(wǎng)頁自請(qǐng)求者上次請(qǐng)求后再也沒有更改過蛉腌,您應(yīng)將服務(wù)器配置為返回此響應(yīng)(稱
404(找不到)器找不到請(qǐng)求的網(wǎng)頁官份。例如,對(duì)于服務(wù)器上不存在的網(wǎng)頁經(jīng)常會(huì)返回此代碼烙丛。
405(方法禁用) 禁用請(qǐng)求中指定的方法舅巷。例如:get請(qǐng)求,調(diào)用post請(qǐng)求方法
500(服務(wù)器內(nèi)部錯(cuò)誤) 服務(wù)器遇到錯(cuò)誤河咽,無法完成請(qǐng)求钠右。
503(服務(wù)不可用) 服務(wù)器目前無法使用(由于超載或停機(jī)維護(hù))。通常忘蟹,這只是暫時(shí)狀態(tài)飒房。
HTTP和TCP/IP的區(qū)別與聯(lián)系
網(wǎng)絡(luò)由下往上分為:物理層、數(shù)據(jù)鏈路層媚值、網(wǎng)絡(luò)層谢谦、傳輸層梆奈、會(huì)話層国觉、表示層和應(yīng)用層猾普。IP協(xié)議對(duì)應(yīng)于網(wǎng)絡(luò)層,TCP協(xié)議對(duì)應(yīng)于傳輸層锰扶,而HTTP協(xié)議對(duì)應(yīng)于應(yīng)用層献酗,三者從本質(zhì)上來說沒有可比性,socket則是對(duì)TCP/IP協(xié)議的封裝和應(yīng)用(程序員層面上)少辣。也可以說凌摄,TPC/IP協(xié)議是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸漓帅,而HTTP是應(yīng)用層協(xié)議锨亏,主要解決如何包裝數(shù)據(jù)痴怨。
HTTP協(xié)議是建立在請(qǐng)求/響應(yīng)模型上的。首先由客戶建立一條與服務(wù)器的TCP鏈接器予,并發(fā)送一個(gè)請(qǐng)求到服務(wù)器浪藻,請(qǐng)求中包含請(qǐng)求方法、URI乾翔、協(xié)議版本以及相關(guān)的MIME樣式的消息爱葵。服務(wù)器響應(yīng)一個(gè)狀態(tài)行,包含消息的協(xié)議版本反浓、一個(gè)成功和失敗碼以及相關(guān)的MIME式樣的消息萌丈。 HTTP/1.0為每一次HTTP的請(qǐng)求/響應(yīng)建立一條新的TCP鏈接,因此一個(gè)包含HTML內(nèi)容和圖片的頁面將需要建立多次的短期的TCP鏈接雷则。一次TCP鏈接的建立將需要3次握手辆雾。 另外,為了獲得適當(dāng)?shù)膫鬏斔俣仍屡瑒t需要TCP花費(fèi)額外的回路鏈接時(shí)間(RTT)度迂。每一次鏈接的建立需要這種經(jīng)常性的開銷,而其并不帶有實(shí)際有用的數(shù)據(jù)猜揪,只是保證鏈接的可靠性惭墓,因此HTTP/1.1提出了可持續(xù)鏈接的實(shí)現(xiàn)方法。HTTP/1.1將只建立一次TCP的鏈接而重復(fù)地使用它傳輸一系列的請(qǐng)求/響應(yīng) 消息而姐,因此減少了鏈接建立的次數(shù)和經(jīng)常性的鏈接開銷腊凶。
結(jié)論:雖然HTTP本身是一個(gè)協(xié)議,但其最終還是基于TCP的拴念。不過吭狡,目前,有人正在研究基于TCP+UDP混合的HTTP協(xié)議丈莺。
10. 重定向(redirect)和請(qǐng)求轉(zhuǎn)發(fā)(forward)的區(qū)別?什么情況下使用他們?
forward(轉(zhuǎn)發(fā)): 是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器.瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來的,因?yàn)檫@個(gè)跳轉(zhuǎn)過程實(shí)在服務(wù)器實(shí)現(xiàn)的送丰,并不是在客戶端實(shí)現(xiàn)的所以客戶端并不知道這個(gè)跳轉(zhuǎn)動(dòng)作缔俄,所以它的地址欄還是原來的地址.
redirect(重定向): 是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址.所以地址欄顯示的是新的URL.
總結(jié):轉(zhuǎn)發(fā)是服務(wù)器行為,重定向是客戶端行為.
區(qū)別:
從地址欄顯示來說 forward:地址欄不會(huì)改變,而redirect地址欄顯示的是新的URL.
從數(shù)據(jù)共享來說 forward:轉(zhuǎn)發(fā)頁面和轉(zhuǎn)發(fā)到的頁面可以共享request里面的數(shù)據(jù).redirect:不能共享數(shù)據(jù).重定向器躏,其實(shí)是兩次request,
從運(yùn)用地方來說 forward:一般用于用戶登陸的時(shí)候,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊. redirect:一般用于用戶注銷登陸時(shí)返回主頁面和跳轉(zhuǎn)到其它的網(wǎng)站等
從效率來說 forward:高. redirect:低.
11. Cookie和Session的區(qū)別與聯(lián)系俐载?
- cookie是什么?
cookie是存在于客戶端(瀏覽器)登失。
cookie的使用是由瀏覽器按照一定的原則在后臺(tái)自動(dòng)發(fā)送給服務(wù)器的遏佣。瀏覽器檢查所有存儲(chǔ)的cookie,如果某個(gè)cookie所聲明的作用范圍大于等于將要請(qǐng)求的資源所在的位置揽浙,則把該cookie附在請(qǐng)求資源的HTTP請(qǐng)求頭上發(fā)送給服務(wù)器状婶。
cookie的內(nèi)容主要包括:名字意敛,值,過期時(shí)間膛虫,路徑和域草姻。其中路徑與域一起構(gòu)成cookie的作用范圍。若不設(shè)置過期時(shí)間稍刀,則表示這個(gè)cookie的生命期為瀏覽器會(huì)話期間撩独,關(guān)閉瀏覽器窗口,cookie就消失账月。
- session是什么综膀?
session 存放在服務(wù)器端的。
session機(jī)制是一種服務(wù)器端的機(jī)制局齿,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)(也可能就是使用散列表)來保存信息剧劝。
cookie與session如何聯(lián)系與通信的? 用戶首次與Web服務(wù)器建立連接的時(shí)候,服務(wù)器會(huì)給用戶分發(fā)一個(gè) SessionID作為標(biāo)識(shí)项炼。SessionID是一個(gè)由24個(gè)字符組成的隨機(jī)字符串担平。用戶每次提交頁面,瀏覽器都會(huì)把這個(gè)SessionID包含在 HTTP頭中提交給Web服務(wù)器锭部,這樣Web服務(wù)器就能區(qū)分當(dāng)前請(qǐng)求頁面的是哪一個(gè)客戶端暂论。這個(gè)SessionID就是保存在客戶端的,屬于客戶端Session拌禾。其實(shí)客戶端Session默認(rèn)是以cookie的形式來存儲(chǔ)的取胎。 當(dāng)然我們客戶端可以禁用cookie,這時(shí)候服務(wù)器端就拿不到sessionID。
cookie與session的區(qū)別:
Cookie以文本文件格式存儲(chǔ)在瀏覽器中湃窍,而session存儲(chǔ)在服務(wù)端闻蛀。
cookie的存儲(chǔ)限制了數(shù)據(jù)量,只允許4KB您市,而session是無限量的觉痛。
我們可以輕松訪問cookie值但是我們無法輕松訪問會(huì)話值,因此它更安全茵休。
設(shè)置cookie時(shí)間可以使cookie過期薪棒。但是使用session-destory(),我們將會(huì)銷毀會(huì)話。
總結(jié):如果我們需要經(jīng)常登錄一個(gè)站點(diǎn)時(shí)榕莺,最好用cookie來保存信息俐芯,要不然每次登陸都特別麻煩,如果對(duì)于需要安全性高的站點(diǎn)以及控制數(shù)據(jù)的能力時(shí)需要用會(huì)話效果更佳钉鸯,當(dāng)然我們也可以結(jié)合兩者吧史,使網(wǎng)站按照我們的想法進(jìn)行運(yùn)行
12. jsp和servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系又是什么唠雕?
- 區(qū)別:
jsp經(jīng)編譯后就變成了Servlet.(JSP的本質(zhì)就是Servlet贸营,JVM只能識(shí)別java的類吨述,不能識(shí)別JSP的代碼,Web容器將JSP的代碼編譯成JVM能夠識(shí)別的java類)
jsp更擅長表現(xiàn)于頁面顯示,servlet更擅長于邏輯控制.
Servlet中沒有內(nèi)置對(duì)象,Jsp中的內(nèi)置對(duì)象都是必須通過HttpServletRequest對(duì)象莽使,HttpServletResponse對(duì)象以及HttpServlet對(duì)象得到.
Jsp是Servlet的一種簡化锐极,使用Jsp只需要完成程序員需要輸出到客戶端的內(nèi)容,Jsp中的Java腳本如何鑲嵌到一個(gè)類中芳肌,由Jsp容器完成灵再。而Servlet則是個(gè)完整的Java類,這個(gè)類的Service方法用于生成對(duì)客戶端的響應(yīng)亿笤。
- 聯(lián)系:
JSP是Servlet技術(shù)的擴(kuò)展翎迁,本質(zhì)上就是Servlet的簡易方式。JSP編譯后是“Servlet類”净薛。
-
Servlet和JSP最主要的不同點(diǎn)在于:
Servlet的應(yīng)用邏輯是在Java文件中汪榔,并且完全從表示層中的HTML里分離開來。
而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文件肃拜。
JSP側(cè)重于視圖痴腌,Servlet主要用于控制邏輯
Servlet更多的是類似于一個(gè)Controller,用來做控制燃领。
13. JSP的九大內(nèi)置對(duì)象及作用分別是什么士聪?請(qǐng)簡述使用MVC開發(fā)模式的好處?
JSP中一共預(yù)先定義了9個(gè)這樣的對(duì)象猛蔽,分別為:request剥悟、response、session曼库、application区岗、out、pagecontext毁枯、config慈缔、page、exception
request對(duì)象 request 對(duì)象是 javax.servlet.httpServletRequest類型的對(duì)象种玛。 該對(duì)象代表了客戶端的請(qǐng)求信息胀糜,主要用于接受通過HTTP協(xié)議傳送到服務(wù)器的數(shù)據(jù)。(包括頭信息蒂誉、系統(tǒng)信息、請(qǐng)求方式以及請(qǐng)求參數(shù)等)距帅。request對(duì)象的作用域?yàn)橐淮握?qǐng)求右锨。
response對(duì)象 response 代表的是對(duì)客戶端的響應(yīng),主要是將JSP容器處理過的對(duì)象傳回到客戶端碌秸。response對(duì)象也具有作用域绍移,它只在JSP頁面內(nèi)有效悄窃。
session對(duì)象 session 對(duì)象是由服務(wù)器自動(dòng)創(chuàng)建的與用戶請(qǐng)求相關(guān)的對(duì)象。服務(wù)器為每個(gè)用戶都生成一個(gè)session對(duì)象蹂窖,用于保存該用戶的信息轧抗,跟蹤用戶的操作狀態(tài)。session對(duì)象內(nèi)部使用Map類來保存數(shù)據(jù)瞬测,因此保存數(shù)據(jù)的格式為 “Key/value”横媚。 session對(duì)象的value可以使復(fù)雜的對(duì)象類型,而不僅僅局限于字符串類型月趟。
application對(duì)象 application 對(duì)象可將信息保存在服務(wù)器中灯蝴,直到服務(wù)器關(guān)閉,否則application對(duì)象中保存的信息會(huì)在整個(gè)應(yīng)用中都有效孝宗。與session對(duì)象相比穷躁,application對(duì)象生命周期更長,類似于系統(tǒng)的“全局變量”因妇。
out 對(duì)象 out 對(duì)象用于在Web瀏覽器內(nèi)輸出信息问潭,并且管理應(yīng)用服務(wù)器上的輸出緩沖區(qū)。在使用 out 對(duì)象輸出數(shù)據(jù)時(shí)婚被,可以對(duì)數(shù)據(jù)緩沖區(qū)進(jìn)行操作狡忙,及時(shí)清除緩沖區(qū)中的殘余數(shù)據(jù),為其他的輸出讓出緩沖空間摔寨。待數(shù)據(jù)輸出完畢后去枷,要及時(shí)關(guān)閉輸出流。
pageContext 對(duì)象 pageContext 對(duì)象的作用是取得任何范圍的參數(shù)是复,通過它可以獲取 JSP頁面的out删顶、request、reponse淑廊、session逗余、application 等對(duì)象。pageContext對(duì)象的創(chuàng)建和初始化都是由容器來完成的季惩,在JSP頁面中可以直接使用 pageContext對(duì)象录粱。
config 對(duì)象 config 對(duì)象的主要作用是取得服務(wù)器的配置信息。通過 pageConext對(duì)象的 getServletConfig() 方法可以獲取一個(gè)config對(duì)象画拾。當(dāng)一個(gè)Servlet 初始化時(shí)啥繁,容器把某些信息通過 config對(duì)象傳遞給這個(gè) Servlet。 開發(fā)者可以在web.xml 文件中為應(yīng)用程序環(huán)境中的Servlet程序和JSP頁面提供初始化參數(shù)青抛。
page 對(duì)象 page 對(duì)象代表JSP本身旗闽,只有在JSP頁面內(nèi)才是合法的。 page隱含對(duì)象本質(zhì)上包含當(dāng)前 Servlet接口引用的變量,類似于Java編程中的 this 指針适室。
exception 對(duì)象 exception 對(duì)象的作用是顯示異常信息嫡意,只有在包含 isErrorPage="true" 的頁面中才可以被使用,在一般的JSP頁面中使用該對(duì)象將無法編譯JSP文件捣辆。excepation對(duì)象和Java的所有對(duì)象一樣蔬螟,都具有系統(tǒng)提供的繼承結(jié)構(gòu)。exception 對(duì)象幾乎定義了所有異常情況汽畴。在Java程序中旧巾,可以使用try/catch關(guān)鍵字來處理異常情況; 如果在JSP頁面中出現(xiàn)沒有捕獲到的異常整袁,就會(huì)生成 exception 對(duì)象菠齿,并把 exception 對(duì)象傳送到在page指令中設(shè)定的錯(cuò)誤頁面中,然后在錯(cuò)誤頁面中處理相應(yīng)的 exception 對(duì)象坐昙。
MVC全名是Model View Controller, 是一種程序開發(fā)設(shè)計(jì)模式,它實(shí)現(xiàn)了顯示模塊與功能模塊的分離绳匀。提高了程序的可維護(hù)性、可移植性炸客、可擴(kuò)展性與可重用性疾棵,降低了程序的開發(fā)難度。它主要分模型痹仙、視圖是尔、控制器三層。
- 模型(model): 它是應(yīng)用程序的主體部分开仰,主要包括業(yè)務(wù)邏輯模塊(web項(xiàng)目中的Action,dao類)和數(shù)據(jù)模塊(pojo類)拟枚。模型 與數(shù)據(jù)格式無關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)众弓。由于應(yīng)用于模型的代碼只需寫一次就可以被多個(gè)視圖重用恩溅,所以減少了代碼的重復(fù)性
- 視圖(view): 用戶與之交互的界面、在web中視圖一般由jsp,html組成
- 控制器(controller): 接收來自界面的請(qǐng)求 并交給模型進(jìn)行處理 在這個(gè)過程中控制器不做任何處理只是起到了一個(gè)連接的做用
MVC的優(yōu)點(diǎn)
分工明確谓娃,通過MVC模式可以把數(shù)據(jù)庫的開發(fā)脚乡,程序業(yè)務(wù)邏輯開發(fā)以及頁面開發(fā)分開,這樣方便后期的代碼維護(hù)滨达,也使的程序員之間分工更加明確.
可以為一個(gè)模型在運(yùn)行時(shí)同時(shí)建立和使用多個(gè)視圖奶稠。變化-傳播機(jī)制可以確保所有相關(guān)的視圖及時(shí)得到模型數(shù)據(jù)變化,從而使所有關(guān)聯(lián)的視圖和控制器做到行為同步捡遍。
重用性高锌订,多個(gè)視圖共享一個(gè)模型,不論視圖層是用flash界面還是wap界面画株,用一個(gè)模型就可以處理瀑志,這樣最大化重用代碼.
模型的可移植性涩搓。因?yàn)槟P褪仟?dú)立于視圖的,所以可以把一個(gè)模型獨(dú)立地移植到新的平臺(tái)工作劈猪。需要做的只是在新平臺(tái)上對(duì)視圖和控制器進(jìn)行新的修改。
潛在的框架結(jié)構(gòu)良拼≌降茫可以基于此模型建立應(yīng)用程序框架,不僅僅是用在設(shè)計(jì)界面的設(shè)計(jì)中庸推。
MVC的不足之處
增加了系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性常侦。對(duì)于簡單的界面,嚴(yán)格遵循MVC贬媒,使模型聋亡、視圖與控制器分離,會(huì)增加結(jié)構(gòu)的復(fù)雜性际乘,并可能產(chǎn)生過多的更新操作坡倔,降低運(yùn)行效率。
視圖與控制器間的過于緊密的連接脖含。視圖與控制器是相互分離罪塔,但確實(shí)聯(lián)系緊密的部件,視圖沒有控制器的存在养葵,其應(yīng)用是很有限的征堪,反之亦然,這樣就妨礙了他們的獨(dú)立重用关拒。
視圖對(duì)模型數(shù)據(jù)的低效率訪問佃蚜。依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)着绊。對(duì)未變化數(shù)據(jù)的不必要的頻繁訪問谐算,也將損害操作性能。
14. Filter 和 Servlet的區(qū)別畔柔?
概念 Servlet: 是一種運(yùn)行服務(wù)器端的Java應(yīng)用程序氯夷,具有獨(dú)立于平臺(tái)和協(xié)議的特性,可動(dòng)態(tài)的生成web頁面靶擦,工作在客戶端請(qǐng)求與服務(wù)器響應(yīng)的中間層腮考。 Filter: 是一個(gè)可復(fù)用的代碼片段,可用來轉(zhuǎn)換HTTP請(qǐng)求玄捕、響應(yīng)和頭信息踩蔚,但不能產(chǎn)生一個(gè)請(qǐng)求或者響應(yīng),只是修改對(duì)某一資源的請(qǐng)求枚粘,或者修改從某一的響應(yīng)馅闽。
生命周期 過濾器的生命周期比servlet長 servlet生命周期: servlet的生命周期始于它被裝入web服務(wù)器的內(nèi)存時(shí),并在web服務(wù)器終止或重新裝入 servlet時(shí)結(jié)束; servlet一旦被裝入web服務(wù)器福也,一般不會(huì)從web服務(wù)器內(nèi)存中刪除局骤,直至web服務(wù)器關(guān)閉或重新開始。
裝入:啟動(dòng)服務(wù)器時(shí)加載Servlet的實(shí)例暴凑;
初始化:web服務(wù)器啟動(dòng)時(shí)或web服務(wù)器接收到請(qǐng)求時(shí)峦甩,或者兩者之間的某個(gè)時(shí)刻啟動(dòng),初始化工作由init()方法負(fù)責(zé)執(zhí)行完成现喳;
調(diào)用:從第一次到以后的多次訪問凯傲,都是只調(diào)用doGet()或doPost()方法;
銷毀:停止服務(wù)器時(shí)調(diào)用destroy()方法嗦篱,銷毀實(shí)例冰单。
filter生命周期: 過濾器一定要實(shí)現(xiàn)javax.servlet包的Filter接口的三個(gè)方法init()、doFilter()灸促、destroy()诫欠,空實(shí)現(xiàn)也行。
啟動(dòng)服務(wù)器時(shí)加載過濾器的實(shí)例腿宰,并調(diào)用init()方法來初始化實(shí)例呕诉;
每一次請(qǐng)求時(shí)都只調(diào)用方法doFilter()進(jìn)行處理;
停止服務(wù)器時(shí)調(diào)用destroy()方法吃度,銷毀實(shí)例甩挫。
共同之處:都有init()、destroy()方法椿每,都需配置WEB-INF/web.xml
職責(zé) servlet: 創(chuàng)建并返回一個(gè)包含基于客戶請(qǐng)求性質(zhì)的動(dòng)態(tài)內(nèi)容的完整的html頁面伊者; 創(chuàng)建可嵌入到現(xiàn)有的html頁面中的一部分html頁面(html片段); 讀取客戶端發(fā)來的隱藏?cái)?shù)據(jù)间护; 讀取客戶端發(fā)來的顯示數(shù)據(jù)亦渗; 與其他服務(wù)器資源(包括數(shù)據(jù)庫和java的應(yīng)用程序)進(jìn)行通信; 通過狀態(tài)代碼和響應(yīng)頭向客戶端發(fā)送隱藏?cái)?shù)據(jù)汁尺。 filter: 能夠在一個(gè)請(qǐng)求到達(dá)servlet之前預(yù)處理用戶請(qǐng)求法精,也可以在離開servlet時(shí)處理http響應(yīng); 在執(zhí)行servlet之前痴突,首先執(zhí)行filter程序搂蜓,并為之做一些預(yù)處理工作; 根據(jù)程序需要修改請(qǐng)求和響應(yīng)辽装; 在servlet被調(diào)用之后截獲servlet的執(zhí)行帮碰。
區(qū)別 servlet: 流程是短的,url傳來之后拾积,就對(duì)其進(jìn)行處理殉挽,之后返回或轉(zhuǎn)向到某一自己指定的頁面丰涉。它主要用來在業(yè)務(wù)處理之前進(jìn)行控制。 filter: 流程是線性的斯碌,url傳來之后一死,檢查之后,可保持原來的流程繼續(xù)向下執(zhí)行傻唾,被下一個(gè)filter摘符、 servlet接收等,而servlet 處理之后策吠,不會(huì)繼續(xù)向下傳遞。 filter: 功能可用來保持流程繼續(xù)按照原來的方式進(jìn)行下去瘩绒,或者主導(dǎo)流程猴抹,而servlet的功能主要用來主導(dǎo)流程 。 filter: 可用來進(jìn)行字符編碼的過濾锁荔,檢測(cè)用戶是否登陸的過濾蟀给,禁止頁面緩存等
調(diào)用順序 servlet:按照web.xml中的映射配置順序按照配置條件從后向前調(diào)用第一個(gè)滿足條件的Servlet,調(diào)用之前事先執(zhí)行滿足條件的Filter阳堕,不存在層次調(diào)用Servlet問題 filter:
按照web.xml中的映射配置順序按照配置條件從后向前調(diào)用跋理;
層次調(diào)用doFilter()方法中FilterChain.doFilter()之前的內(nèi)容;
調(diào)用Servlet中的service()方法恬总;
service()方法執(zhí)行完畢后前普,層次調(diào)用doFilter()中FilterChain.doFilter()之后的方法,順序與之前的相反壹堰。
15. JQuery是什么拭卿,它有什么優(yōu)點(diǎn)?
JQuery是什么贱纠? jQuery是一個(gè)快速峻厚、簡潔的JavaScript框架,jQuery設(shè)計(jì)的宗旨是“write Less谆焊,Do More”惠桃,即倡導(dǎo)寫更少的代碼,做更多的事情辖试。它封裝JavaScript常用的功能代碼辜王,提供一種簡便的JavaScript設(shè)計(jì)模式,優(yōu)化HTML文檔操作剃执、事件處理誓禁、動(dòng)畫設(shè)計(jì)和Ajax交互。
JQuery的優(yōu)點(diǎn): jQuery是輕量級(jí)的框架肾档,大小不到30kb,它有強(qiáng)大的選擇器摹恰,出色的DOM操作的封裝辫继,有可靠的事件處理機(jī)制(jQuery在處理事件綁定的時(shí)候相當(dāng)?shù)目煽?,完善的ajax(它的ajax封裝的非常的好俗慈,不需要考慮復(fù)雜瀏覽器的兼容性和XMLHttpRequest對(duì)象的創(chuàng)建和使用的問題姑宽。) 出色的瀏覽器的兼容性。而且支持鏈?zhǔn)讲僮鞴脍澹[式迭代炮车。行為層和結(jié)構(gòu)層的分離,還支持豐富的插件酣溃,jquery的文檔也非常的豐富瘦穆。
16.JQuery中find()、has()和filter()區(qū)別赊豌?
find :在當(dāng)前選中元素的上下文中找到符合條件的后代扛或,返回的是子元素
has : 將匹配元素集合根據(jù)選擇器或DOM元素為條件,檢索該條件在每個(gè)元素的后代中是否存在碘饼,將符合條件的的元素構(gòu)成新的結(jié)果集熙兔。
filter :過濾DOM元素包裝集,是指操作當(dāng)前元素集艾恼,刪除不匹配的元素住涉,得到一個(gè)新的集合。
find()方法是獲得在當(dāng)前結(jié)果集中每個(gè)元素的后代钠绍。參數(shù)(選擇器舆声、jquery集合或DOM元素)做為過濾條件,滿足過濾條件的則保留五慈,保留的是后代纳寂。而has()方法中,參數(shù)只做為條件泻拦,符合條件的毙芜,它的前元素加入新的結(jié)果集,而不是后代加入新的結(jié)果集争拐。 has()只起判斷作用腋粥。以has參數(shù)中的選擇器或DOM元素做為條件,檢測(cè)原結(jié)果集中的元素是否符合架曹。去掉不符合的元素隘冲,將符合的元素構(gòu)成一個(gè)新結(jié)果集。 filter()方法與has()方法中的參數(shù)绑雄,都是過濾條件展辞。不同的是filter()方法,條件作用于自身万牺;has()方法條件是作用于它的后代元素中罗珍。
17. Ajax是什么洽腺?Ajax書寫方式及內(nèi)部主要參數(shù)都有哪些?
AJAX 是一種在無需重新加載整個(gè)網(wǎng)頁的情況下覆旱,能夠更新部分網(wǎng)頁的技術(shù)蘸朋。 AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。 AJAX 不是新的編程語言扣唱,而是一種使用現(xiàn)有標(biāo)準(zhǔn)的新方法藕坯。 AJAX 是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁的技術(shù)。 通過在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換噪沙,AJAX 可以使網(wǎng)頁實(shí)現(xiàn)異步更新炼彪。這意味著可以在不重新加載整個(gè)網(wǎng)頁的情況下,對(duì)網(wǎng)頁的某部分進(jìn)行更新正歼。 傳統(tǒng)的網(wǎng)頁(不使用 AJAX)如果需要更新內(nèi)容霹购,必需重載整個(gè)網(wǎng)頁面。 語法:
<pre spellcheck="false"
class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded"
lang="javascript"
cid="n312"
mdtype="fences"
style="box-sizing: border-box;
overflow: visible;
font-family: "
Fira Code",
Consolas, "
Lucida Console",
Courier, monospace, "
Helvetica Neue",
Helvetica, "
Arial sans-serif";
font-size: 0.9rem;
display: block;
break-inside: avoid;
text-align: left;
white-space: normal;
background-image:
inherit; background-position: inherit;
background-size: inherit;
background-repeat: inherit;
background-attachment: inherit;
background-origin: inherit;
background-clip: inherit;
background-color: rgb(34, 37, 38);
position: relative !important;
padding: 6px 10px 6px 0px;
box-shadow: rgba(0, 0, 0, 0.16) 0px 2px 5px 0px, rgba(0, 0, 0, 0.12) 0px 2px 10px 0px;
margin-bottom: 2.10526rem;
border: none;
border-radius: 6px;
width: inherit; color: rgb(171, 192, 208);
font-style: normal;
font-variant-ligatures: normal;
font-variant-caps: normal;
font-weight: 400;
letter-spacing: normal;
orphans: 2; text-indent: 0px; text-transform: none;
widows: 2; word-spacing: 0px;
-webkit-text-stroke-width: 0px;
text-decoration-style: initial;
text-decoration-color: initial;">
$.ajax({
type: // 請(qǐng)求方式,
url: // 請(qǐng)求地址,
async: // 布爾值朋腋,表示請(qǐng)求是否異步處理。默認(rèn)是 true ,
contentType: // 發(fā)送的內(nèi)容類型,
data: // 發(fā)送到服務(wù)器的數(shù)據(jù),JSON類型,
dataType: // 響應(yīng)的數(shù)據(jù)類型,
success: function(data){}膜楷,// 請(qǐng)求成功時(shí)運(yùn)行的函數(shù)
error:function(e){} // 請(qǐng)求失敗要運(yùn)行的函數(shù)旭咽。
});</pre>
18. 什么是Radis? NOSQL和關(guān)系型數(shù)據(jù)庫的優(yōu)缺點(diǎn)比較?
Radis是一個(gè)key-value存儲(chǔ)系統(tǒng)赌厅。包括string(字符串)穷绵、list(鏈表)、set(集合)特愿、zset(sorted set --有序集合)和hash(哈希類型)仲墨。 Redis特點(diǎn): Redis以內(nèi)存作為數(shù)據(jù)存儲(chǔ)介質(zhì),所以讀寫數(shù)據(jù)的效率極高揍障,遠(yuǎn)遠(yuǎn)超過數(shù)據(jù)庫目养。以設(shè)置和獲取一個(gè)256字節(jié)字符串為例,它的讀取速度可高達(dá)110000次/s毒嫡,寫速度高達(dá)81000次/s癌蚁。 Redis跟memcache不同的是,儲(chǔ)存在Redis中的數(shù)據(jù)是持久化的兜畸,斷電或重啟后努释,數(shù)據(jù)也不會(huì)丟失。因?yàn)镽edis的存儲(chǔ)分為內(nèi)存存儲(chǔ)咬摇、磁盤存儲(chǔ)和log文件三部分伐蒂,重啟后,Redis可以從磁盤重新將數(shù)據(jù)加載到內(nèi)存中肛鹏,這些可以通過配置文件對(duì)其進(jìn)行配置逸邦,正因?yàn)檫@樣恩沛,Redis才能實(shí)現(xiàn)持久化。 Redis支持主從模式昭雌,可以配置集群复唤,這樣更利于支撐起大型的項(xiàng)目,這也是Redis的一大亮點(diǎn)烛卧。 關(guān)系數(shù)據(jù)庫的特點(diǎn)是:
數(shù)據(jù)關(guān)系模型基于關(guān)系模型佛纫,結(jié)構(gòu)化存儲(chǔ),完整性約束总放。
基于二維表及其之間的聯(lián)系呈宇,需要連接、并局雄、交甥啄、差、除等數(shù)據(jù)操作炬搭。
采用結(jié)構(gòu)化的查詢語言(SQL)做數(shù)據(jù)讀寫蜈漓。
操作需要數(shù)據(jù)的一致性,需要事務(wù)甚至是強(qiáng)一致性宫盔。 優(yōu)點(diǎn):
保持?jǐn)?shù)據(jù)的一致性(事務(wù)處理)
可以進(jìn)行join等復(fù)雜查詢融虽。
通用化,技術(shù)成熟灼芭。 缺點(diǎn):
數(shù)據(jù)讀寫必須經(jīng)過sql解析有额,大量數(shù)據(jù)、高并發(fā)下讀寫性能不足彼绷。
對(duì)數(shù)據(jù)做讀寫巍佑,或修改數(shù)據(jù)結(jié)構(gòu)時(shí)需要加鎖,影響并發(fā)操作寄悯。
無法適應(yīng)非結(jié)構(gòu)化存儲(chǔ)萤衰。
擴(kuò)展困難。
昂貴猜旬、復(fù)雜腻菇。
NoSQL數(shù)據(jù)庫的特點(diǎn)是:
非結(jié)構(gòu)化的存儲(chǔ)。
基于多維關(guān)系模型昔馋。
具有特有的使用場(chǎng)景筹吐。 優(yōu)點(diǎn):
高并發(fā),大數(shù)據(jù)下讀寫能力較強(qiáng)秘遏。
基本支持分布式丘薛,易于擴(kuò)展,可伸縮邦危。
簡單洋侨,弱結(jié)構(gòu)化存儲(chǔ)舍扰。 缺點(diǎn):
join等復(fù)雜操作能力較弱。
事務(wù)支持較弱希坚。
通用性差边苹。
無完整約束復(fù)雜業(yè)務(wù)場(chǎng)景支持較差。
19. Maven有哪些優(yōu)點(diǎn)和缺點(diǎn)?Maven常見的依賴范圍有哪些?
優(yōu)點(diǎn)如下:
簡化了項(xiàng)目依賴管理:
易于上手裁僧,對(duì)于新手可能一個(gè)"mvn clean package"命令就可能滿足他的工作
便于與持續(xù)集成工具(jenkins)整合
便于項(xiàng)目升級(jí)个束,無論是項(xiàng)目本身升級(jí)還是項(xiàng)目使用的依賴升級(jí)。
有助于多模塊項(xiàng)目的開發(fā)聊疲,一個(gè)模塊開發(fā)好后茬底,發(fā)布到倉庫,依賴該模塊時(shí)可以直接從倉庫更新获洲,而不用自己去編譯阱表。
maven有很多插件,便于功能擴(kuò)展贡珊,比如生產(chǎn)站點(diǎn)最爬,自動(dòng)發(fā)布版本等
缺點(diǎn)如下:
maven是一個(gè)龐大的構(gòu)建系統(tǒng),學(xué)習(xí)難度大
maven采用約定優(yōu)于配置的策略(convention over configuration)门岔,雖然上手容易烂叔,但是一旦出了問題,難于調(diào)試固歪。
中國的網(wǎng)絡(luò)環(huán)境差,很多repository無法訪問胯努,比如google code牢裳, jboss 倉庫無法訪問等
常見的依賴范圍:
compile:編譯依賴,默認(rèn)的依賴方式叶沛,在編譯(編譯項(xiàng)目和編譯測(cè)試用例)蒲讯,運(yùn)行測(cè)試用例,運(yùn)行(項(xiàng)目實(shí)際運(yùn)行)三個(gè)階段都有效灰署,典型地有spring-core等jar判帮。
test:測(cè)試依賴,只在編譯測(cè)試用例和運(yùn)行測(cè)試用例有效溉箕,典型地有JUnit晦墙。
provided:對(duì)于編譯和測(cè)試有效,不會(huì)打包進(jìn)發(fā)布包中肴茄,典型的例子為servlet-api,一般的web工程運(yùn)行時(shí)都使用容器的servlet-api晌畅。
runtime:只在運(yùn)行測(cè)試用例和實(shí)際運(yùn)行時(shí)有效,典型地是jdbc驅(qū)動(dòng)jar包寡痰。
system: 不從maven倉庫獲取該jar,而是通過systemPath指定該jar的路徑抗楔。
import: 用于一個(gè)dependencyManagement對(duì)另一個(gè)dependencyManagement的繼承