Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
些使用 jquery.js 插件的的網(wǎng)站,為節(jié)約服務(wù)器資源喜歡引用一些靜態(tài)CDN上的 jquery.js 資源鏈接,但如果靜態(tài)CDN資源出現(xiàn)無法鏈接的問題,就會導(dǎo)致網(wǎng)站的崩潰。為解決這一問題,今天我們就說一說,如何在靜態(tài)CDN資源上的 jquery.js 鏈接失效時,引用本地的jquery.js鏈接。
方法1:
<script> if (jQuery) { // jQuery 已加載 } else { // jQuery 未加載 } </script>
方法2:
<script> if (typeof jQuery=='undefined') { // jQuery 未加載 } else { // jQuery 已加載 } </script>
示例代碼1:
<script src="https://cdn.staticfile.org/jquery/2.2.4/jquery.min.js"></script> <script type="text/javascript"> if (typeof jQuery=='undefined') { document.write('<script src="js/jquery.min.js"></script>'); } </script>
示例代碼2:
者 | Ronny Shani
譯者 | 核子可樂
策劃 | Tina
2 月 6 日,jQuery 核心團隊負責(zé)人 Timmy Willison 宣布,jQuery 4.0.0 現(xiàn)已發(fā)布 beta 版。
jQuery 4.0.0 已經(jīng)開發(fā)了很長時間,如今終于準備好推出 beta 版本!新版本有不少內(nèi)容值得介紹,我們也很高興迎接它的到來。除了 bug 修復(fù)和性能改進之外,4.0.0 還做出了一系列重大調(diào)整。
我們裁剪掉遺留代碼,刪除了部分已被棄用的 API,還去掉了不少從未對外公開、僅供內(nèi)部使用的公共函數(shù)參數(shù),同時不再支持某些過于復(fù)雜的“神奇”操作。
本文將向大家簡單介紹這些變更。先從最重要的入手:放棄對 IE10 及更早版本的支持。jQuery 團隊原本計劃在微軟于 2022 年結(jié)束支持后放棄 IE11,但最終又決定將計劃延后至 v5,以避免 v4 版本出現(xiàn)更多問題。
即將發(fā)布的新版本將使用 ES 模塊,并將打包方案從 RequireJS 切換至 Rollup。新版本還刪除了 13 項已被棄用的函數(shù),這些函數(shù)“要么長期僅對內(nèi)部開放,要么已經(jīng)在所有受支持瀏覽器上均已有等效替代選項”。
此次公告的一大重要主題,就是全面遵循各種現(xiàn)代瀏覽器行為與規(guī)范。事實上,自 2006 年 1 月 jQuery 誕生以來(當(dāng)時 IE 還占全球九成市場份額 ),網(wǎng)絡(luò)瀏覽器已經(jīng)取得了長足的進步,前端開發(fā)也掀起一波曠日持久的競爭。
現(xiàn)如今,99.84%的瀏覽器均已支持 ES6、提供大量效果良好的 Web API 還迎來了 CSS 的強大升級(允許我們使用 WebAssembly 在瀏覽器中運行成熟 WordPress 實例)——至少不再需要依賴 1.25 MB 的 DOM 操作庫了。
或者用一位 Reddit 用戶的話說:
看看,jQuery 簡直是不可思議。它以難以置信的方式改變了 JS,給 JS 開發(fā)者帶來了前所未有的改變。它如此創(chuàng)意滿滿,JS 社區(qū)和 TC39 實現(xiàn)了很多 jQ 以往根本做不到的事。jQ 的最大目標就是制定標準和改進 JS 語言,它做到了,而現(xiàn)在也是時候退出歷史舞臺了。
從在線統(tǒng)計數(shù)據(jù)來看,這種說法顯然很有道理。jQuery 可能已經(jīng)成了前端領(lǐng)域最不招人疼的孩子,但可觀的市場份額卻足以讓其他時髦框架相形見絀。
從 NPM 看,jQuery 3.7.1 發(fā)布于 2023 年 8 月,每周下載量超過 900 萬次,相應(yīng)依賴包更是超過 20k。
BuiltWith 指出目前全球超 7800 萬網(wǎng)站在使用 jQuery,而 W3Techs 報告稱“據(jù)我們所知,全部 JavaScript 庫網(wǎng)站中有 94.4%使用 jQuery,在所有網(wǎng)站中占比 77.1%。”
jQuery 之所以能夠長期流行,主要原因之一就是它對生態(tài)系統(tǒng)的卓越貢獻。具體來講,它被捆綁在 WordPress Core 當(dāng)中,成為了眾多主題與插件的固定組成部分。
WordPress 采用基于 React 的 Gutenberg,降低了對 jQuery 的依賴。在 Willison 做出題為《JavaScript 之于現(xiàn)代 WordPress 開發(fā)》(https://wordpress.tv/2024/02/13/developer-hours-javascript-for-modern-wordpress-development/)演講一周后的 Developers Hours 開發(fā)者會議上,Automattic 開發(fā)倡導(dǎo)者 Ryan Welcher 和 Nick Diego 花了一個多小時深入討論 JS 工具和技術(shù)如何構(gòu)建塊和編輯器擴展,但卻一次都沒有提到過 jQuery。
在 2021 年 10 月在 Make Themes 博客上發(fā)表的文章中,核心貢獻者 Felix Arntz 甚至敦促開發(fā)者們放棄 jQuery 以提高性能。
盡管如此,在 Willison 宣布 jQuery 新版本的當(dāng)天,TRAC 還是率先報道了這一消息,并提問“WordPress 核心團隊期待這次更新嗎?”Automattic 首席開發(fā)者 Andrew Ozz 立馬回復(fù),“當(dāng)然:)”
作為在 CMS 市場上占比高達 43%的巨頭,WordPress 的肯定無疑是給 jQuery 續(xù)命的萬能靈藥。
WordPress Tavern 上次介紹 jQuery 還是在 2020 年,當(dāng)時 jQuery Migarte 1.4.1 被從 WordPress 5.5 中刪除,并引發(fā)不少主題和插件失效。
WordPress 核心團隊的 Enable jQuery Migrate Helper 插件專為解決這次問題而推出,時至今日仍在繼續(xù)維護,并擁有 10 萬活躍安裝量。用戶們普遍反響不錯,表示這東西確實有效。可這也不禁讓我們要問,現(xiàn)在已經(jīng)是 2024 年了,為什么構(gòu)建 WordPress 網(wǎng)站還需要借助這樣一個“作為臨時解決方案的插件,為的就是讓插件和主題作者們能繼續(xù)拖著不更新和測試自己的代碼?”
也許答案就在 W3Techs 上一條令人震驚的評論當(dāng)中。目前,使用 jQuery 的網(wǎng)站中仍有三分之一運行著 3.x 甚至更早(3.0.0 發(fā)布于 2016 年 6 月)版本。
這樣的結(jié)果與 OpenJS 基金會及 IDC 于 2023 年 11 月開展的一項小范圍研究也對得上。在 509 名調(diào)查受訪者中,有 89%確認自己在使用 jQuery,其中 56%表示部署的是舊版本,其中有些版本甚至不再維護。
開源與標準化專家 Tobie Langel 在 W3C 的 Secure the Web Forward 研討會上發(fā)表講話,認為“jQuery 巨大的影響力和長久的生命力”使其處于獨特的市場地位:如果捍衛(wèi) jQuery 就是捍衛(wèi) Web,那么 jQuery 也許會再一次迸發(fā)出新的生機,以開拓者的姿態(tài)繼續(xù)推動 Web 向前發(fā)展。
人們已經(jīng)在為此而努力:2022 年 10 月,開源安全基金會(OpenSSF)的 Alpha-Omega 項目向 jQuery 授予了 35 萬美元的資助,旨在“幫助其用戶并推動代碼現(xiàn)代化,從而緩解 jQuery 的潛在安全問題。”
而且在 Linux 基金會、微軟、谷歌、亞馬遜等行業(yè)巨頭的支持下,以及由 GoDaddy、IBM、Joyent 和 Sovereign Tech Fund 支持的 OpenJS 基金會的推動下,jQuery 似乎已經(jīng)呈現(xiàn)出復(fù)蘇的跡象。
原文鏈接:https://www.infoq.cn/article/ZZRcTXfErLIftQNwwSZg
eb方面相關(guān):
291.WEB應(yīng)用中如果有.class和.jar類型的文件一般分別應(yīng)該放在什么位置?
答:.class文件放在WEB-INF/classes文件下,.jar文件放在WEB-INF/lib文件夾下
292.元素中有一個輸入框(< input type='text' name=”username”id=”username”value=””/>,請用JavaScript語言寫一行代碼,取得這個輸入框中的值。
答:document.getElementById(“username”).value;
293.簡單描述一下Servlet與JSP的的相同點和區(qū)別點。
區(qū)別:
JSP是在HTML代碼里寫JAVA代碼,框架是HTML;而Servlet是在JAVA代碼中寫HTML代碼,本身是個JAVA類。
JSP使人們把顯示和邏輯分隔成為可能,這意味著兩者的開發(fā)可并行進行;而Servlet并沒有把兩者分開。
Servlet獨立地處理靜態(tài)表示邏輯與動態(tài)業(yè)務(wù)邏輯.這樣,任何文件的變動都需要對此服務(wù)程序重新編譯;JSP允許用特殊標簽直接嵌入到HTML頁面, HTML內(nèi)容與JAVA內(nèi)容也可放在單獨文件中,HTML內(nèi)容的任何變動會自動編譯裝入到服務(wù)程序.
Servlet需要在web.xml中配置,而JSP無需配置。
目前JSP主要用在視圖層,負責(zé)顯示,而Servlet主要用在控制層,負責(zé)調(diào)度
聯(lián)系:
都是Sun公司推出的動態(tài)網(wǎng)頁技術(shù)。
先有Servlet,針對Servlet缺點推出JSP。JSP是Servlet的一種特殊形式,每個JSP頁面就是一個Servlet實例——JSP頁面由系統(tǒng)翻譯成Servlet,Servlet再負責(zé)響應(yīng)用戶請求。
294.請簡單描述下幾個您熟悉JavaScript庫,它們有哪些作用和特點?
JavaScript 高級程序設(shè)計(特別是對瀏覽器差異的復(fù)雜處理),通常很困難也很耗時。為了應(yīng)對這些調(diào)整,許多的 JavaScript庫應(yīng)運而生。這些 JavaScript 庫常被稱為 JavaScript 框架。
jQuery:
Ext JS - 可定制的 widget,用于構(gòu)建富因特網(wǎng)應(yīng)用程序(rich Internet applications)。
Prototype
MooTools。
YUI - Yahoo! User Interface Framework,涵蓋大量函數(shù)的大型庫,從簡單的 JavaScript 功能到完整的 internet widget。
295.簡單描述HTML,CSS,Javascript在Web開發(fā)中分別起什么作用?
1、什么是HTML(超文本標記語言 Hyper Text Markup Language),HTML 是用來描述網(wǎng)頁的一種語言。
2、CSS(層疊樣式表 Cascading Style Sheets),樣式定義如何顯示 HTML 元素,語法為:selector {property:value} (選擇符 {屬性:值})
3、JavaScript是一種腳本語言,其源代碼在發(fā)往客戶端運行之前不需經(jīng)過編譯,而是將文本格式的字符代碼發(fā)送給瀏覽器由瀏覽器解釋運行
對于一個網(wǎng)頁,HTML定義網(wǎng)頁的結(jié)構(gòu),CSS描述網(wǎng)頁的樣子,JavaScript設(shè)置一個很經(jīng)典的例子是說HTML就像 一個人的骨骼、器官,而CSS就是人的皮膚,有了這兩樣也就構(gòu)成了一個植物人了,加上javascript這個植物人就可以對外界刺激做出反應(yīng),可以思 考、運動、可以給自己整容化妝(改變CSS)等等,成為一個活生生的人。
如果說HTML是肉身、CSS就是皮相、Javascript就是靈魂。沒有Javascript,HTML+CSS是植物人,沒有Javascript、CSS是個毀容的植物人。
如果說HTML是建筑師,CSS就是干裝修的,Javascript是魔術(shù)師。
296.當(dāng)DOM加載完成后要執(zhí)行的函數(shù),下面哪個是正確的()
A. | JQuery(expression, [context]) |
B. | JQuery(html, [ownerDocument]) |
C. | JQuery(callback) |
答案:C |
297.舉例說明JAVA中如何解析xml,不同方式有和優(yōu)缺點?
答:1. DOM(Document Object Model)
DOM是用與平臺和語言無關(guān)的方式表示XML文檔的官方W3C標準。DOM是以層次結(jié)構(gòu)組織的節(jié)點或信息片斷的集合。這個層次結(jié)構(gòu)允許開發(fā)人員在樹中尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個文檔和構(gòu)造層次結(jié)構(gòu),然后才能做任何工作。由于它是基于信息層次的,因而DOM被認為是基于樹或基于對象的。
【優(yōu)點】
①允許應(yīng)用程序?qū)?shù)據(jù)和結(jié)構(gòu)做出更改。
②訪問是雙向的,可以在任何時候在樹中上下導(dǎo)航,獲取和操作任意部分的數(shù)據(jù)。
【缺點】
①通常需要加載整個XML文檔來構(gòu)造層次結(jié)構(gòu),消耗資源大。
2. SAX(Simple API for XML)
SAX處理的優(yōu)點非常類似于流媒體的優(yōu)點。分析能夠立即開始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應(yīng)用程序只是在讀取數(shù)據(jù)時檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲在內(nèi)存中。這對于大型文檔來說是個巨大的優(yōu)點。事實上,應(yīng)用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時停止解析。一般來說,SAX還比它的替代者DOM快許多。
選擇DOM還是選擇SAX? 對于需要自己編寫代碼來處理XML文檔的開發(fā)人員來說, 選擇DOM還是SAX解析模型是一個非常重要的設(shè)計決策。 DOM采用建立樹形結(jié)構(gòu)的方式訪問XML文檔,而SAX采用的是事件模型。
DOM解析器把XML文檔轉(zhuǎn)化為一個包含其內(nèi)容的樹,并可以對樹進行遍歷。用DOM解析模型的優(yōu)點是編程容易,開發(fā)人員只需要調(diào)用建樹的指令,然后利用navigation APIs訪問所需的樹節(jié)點來完成任務(wù)。可以很容易的添加和修改樹中的元素。然而由于使用DOM解析器的時候需要處理整個XML文檔,所以對性能和內(nèi)存的要求比較高,尤其是遇到很大的XML文件的時候。由于它的遍歷能力,DOM解析器常用于XML文檔需要頻繁的改變的服務(wù)中。
SAX解析器采用了基于事件的模型,它在解析XML文檔的時候可以觸發(fā)一系列的事件,當(dāng)發(fā)現(xiàn)給定的tag的時候,它可以激活一個回調(diào)方法,告訴該方法制定的標簽已經(jīng)找到。SAX對內(nèi)存的要求通常會比較低,因為它讓開發(fā)人員自己來決定所要處理的tag.特別是當(dāng)開發(fā)人員只需要處理文檔中所包含的部分數(shù)據(jù)時,SAX這種擴展能力得到了更好的體現(xiàn)。但用SAX解析器的時候編碼工作會比較困難,而且很難同時訪問同一個文檔中的多處不同數(shù)據(jù)。
【優(yōu)勢】
①不需要等待所有數(shù)據(jù)都被處理,分析就能立即開始。
②只在讀取數(shù)據(jù)時檢查數(shù)據(jù),不需要保存在內(nèi)存中。
③可以在某個條件得到滿足時停止解析,不必解析整個文檔。
④效率和性能較高,能解析大于系統(tǒng)內(nèi)存的文檔。
【缺點】
①需要應(yīng)用程序自己負責(zé)TAG的處理邏輯(例如維護父/子關(guān)系等),文檔越復(fù)雜程序就越復(fù)雜。
②單向?qū)Ш剑瑹o法定位文檔層次,很難同時訪問同一文檔的不同部分數(shù)據(jù),不支持XPath。
3. JDOM(Java-based Document Object Model)
JDOM的目的是成為Java特定文檔模型,它簡化與XML的交互并且比使用DOM實現(xiàn)更快。由于是第一個Java特定模型,JDOM一直得到大力推廣和促進。正在考慮通過“Java規(guī)范請求JSR-102”將它最終用作“Java標準擴展”。從2000年初就已經(jīng)開始了JDOM開發(fā)。
JDOM與DOM主要有兩方面不同。首先,JDOM僅使用具體類而不使用接口。這在某些方面簡化了API,但是也限制了靈活性。第二,API大量使用了Collections類,簡化了那些已經(jīng)熟悉這些類的Java開發(fā)者的使用。
JDOM文檔聲明其目的是“使用20%(或更少)的精力解決80%(或更多)Java/XML問題”(根據(jù)學(xué)習(xí)曲線假定為20%)。JDOM對于大多數(shù)Java/XML應(yīng)用程序來說當(dāng)然是有用的,并且大多數(shù)開發(fā)者發(fā)現(xiàn)API比DOM容易理解得多。JDOM還包括對程序行為的相當(dāng)廣泛檢查以防止用戶做任何在XML中無意義的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情況下的錯誤)。這也許是比學(xué)習(xí)DOM或JDOM接口都更有意義的工作。
JDOM自身不包含解析器。它通常使用SAX2解析器來解析和驗證輸入XML文檔(盡管它還可以將以前構(gòu)造的DOM表示作為輸入)。它包含一些轉(zhuǎn)換器以將JDOM表示輸出成SAX2事件流、DOM模型或XML文本文檔。JDOM是在Apache許可證變體下發(fā)布的開放源碼。
【優(yōu)點】
①使用具體類而不是接口,簡化了DOM的API。
②大量使用了Java集合類,方便了Java開發(fā)人員。
【缺點】
①沒有較好的靈活性。
②性能較差。
4. DOM4J(Document Object Model for Java)
雖然DOM4J代表了完全獨立的開發(fā)結(jié)果,但最初,它是JDOM的一種智能分支。它合并了許多超出基本XML文檔表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文檔或流化文檔的基于事件的處理。它還提供了構(gòu)建文檔表示的選項,它通過DOM4J API和標準DOM接口具有并行訪問功能。從2000下半年開始,它就一直處于開發(fā)之中。
為支持所有這些功能,DOM4J使用接口和抽象基本類方法。DOM4J大量使用了API中的Collections類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然DOM4J付出了更復(fù)雜的API的代價,但是它提供了比JDOM大得多的靈活性。
在添加靈活性、XPath集成和對大文檔處理的目標時,DOM4J的目標與JDOM是一樣的:針對Java開發(fā)者的易用性和直觀操作。它還致力于成為比JDOM更完整的解決方案,實現(xiàn)在本質(zhì)上處理所有Java/XML問題的目標。在完成該目標時,它比JDOM更少強調(diào)防止不正確的應(yīng)用程序行為。
DOM4J是一個非常非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的Java軟件都在使用DOM4J來讀寫XML,特別值得一提的是連Sun的JAXM也在用DOM4J.
【優(yōu)點】
①大量使用了Java集合類,方便Java開發(fā)人員,同時提供一些提高性能的替代方法。
②支持XPath。
③有很好的性能。
【缺點】
①大量使用了接口,API較為復(fù)雜。
二、比較
1. DOM4J性能最好,連Sun的JAXM也在用DOM4J。目前許多開源項目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J來讀取XML配置文件。如果不考慮可移植性,那就采用DOM4J.
2. JDOM和DOM在性能測試時表現(xiàn)不佳,在測試10M文檔時內(nèi)存溢出,但可移植。在小文檔情況下還值得考慮使用DOM和JDOM.雖然JDOM的開發(fā)者已經(jīng)說明他們期望在正式發(fā)行版前專注性能問題,但是從性能觀點來看,它確實沒有值得推薦之處。另外,DOM仍是一個非常好的選擇。DOM實現(xiàn)廣泛應(yīng)用于多種編程語言。它還是許多其它與XML相關(guān)的標準的基礎(chǔ),因為它正式獲得W3C推薦(與基于非標準的Java模型相對),所以在某些類型的項目中可能也需要它(如在JavaScript中使用DOM)。
3. SAX表現(xiàn)較好,這要依賴于它特定的解析方式-事件驅(qū)動。一個SAX檢測即將到來的XML流,但并沒有載入到內(nèi)存(當(dāng)然當(dāng)XML流被讀入時,會有部分文檔暫時隱藏在內(nèi)存中)。
我的看法:如果XML文檔較大且不考慮移植性問題建議采用DOM4J;如果XML文檔較小則建議采用JDOM;如果需要及時處理而不需要保存數(shù)據(jù)則考慮SAX。但無論如何,還是那句話:適合自己的才是最好的,如果時間允許,建議大家講這四種方法都嘗試一遍然后選擇一種適合自己的即可。
298.char型變量中能不能存儲一個中文漢字?
答:1.java采用unicode編碼,2個字節(jié)(16位)來表示一個字符, 無論是漢字還是數(shù)字,字母,或其他語言都可以存儲。
2.char 在java中是2個字節(jié),所以可以存儲中文
299.一個類可以實現(xiàn)多個接口,但只能繼承一個抽象類。
下面接著再說說兩者在應(yīng)用上的區(qū)別:
接口更多的是在系統(tǒng)架構(gòu)設(shè)計方法發(fā)揮作用,主要用于定義模塊之間的通信契約。而抽象類在代碼實現(xiàn)方面發(fā)揮作用,可以實現(xiàn)代碼的重用,例如,模板方法設(shè)計模式是抽象類的一個典型應(yīng)用,假設(shè)某個項目的所有Servlet類都要用相同的方式進行權(quán)限判斷、記錄訪問日志和處理異常,那么就可以定義一個抽象的基類,讓所有的Servlet都繼承這個抽象基類,在抽象基類的service方法中完成權(quán)限判斷、記錄訪問日志和處理異常的代碼,在各個子類中只是完成各自的業(yè)務(wù)邏輯代碼,偽代碼如下:
public abstract classBaseServlet extends HttpServlet{
public final void service(HttpServletRequest request,HttpServletResponse response) throws IOExcetion,ServletException {
記錄訪問日志
進行權(quán)限判斷
if(具有權(quán)限){
try{
doService(request,response);
}
catch(Excetpion e) {
記錄異常信息
}
}
}
protected abstract void doService(HttpServletRequest request,HttpServletResponse response) throws IOExcetion,ServletException;
//注意訪問權(quán)限定義成protected,顯得既專業(yè),又嚴謹,因為它是專門給子類用的
}
public class MyServlet1 extendsBaseServlet
{
protected voiddoService(HttpServletRequest request, HttpServletResponse response) throwsIOExcetion,ServletException
{
本Servlet只處理的具體業(yè)務(wù)邏輯代碼
}
}
父類方法中間的某段代碼不確定,留給子類干,就用模板方法設(shè)計模式。
備注:這道題的思路是先從總體解釋抽象類和接口的基本概念,然后再比較兩者的語法細節(jié),最后再說兩者的應(yīng)用區(qū)別。比較兩者語法細節(jié)區(qū)別的條理是:先從一個類中的構(gòu)造方法、普通成員變量和方法(包括抽象方法),靜態(tài)變量和方法,繼承性等6個方面逐一去比較回答,接著從第三者繼承的角度的回答,特別是最后用了一個典型的例子來展現(xiàn)自己深厚的技術(shù)功底。
300.比較一下Java 和JavaSciprt
答:JavaScript 與Java是兩個公司開發(fā)的不同的兩個產(chǎn)品。Java 是原Sun 公司推出的面向?qū)ο蟮某绦蛟O(shè)計語言,特別適合于互聯(lián)網(wǎng)應(yīng)用程序開發(fā);而JavaScript是Netscape公司的產(chǎn)品,為了擴展Netscape瀏覽器的功能而開發(fā)的一種可以嵌入Web頁面中運行的基于對象和事件驅(qū)動的解釋性語言,它的前身是LiveScript;而Java 的前身是Oak語言。
下面對兩種語言間的異同作如下比較:
1)基于對象和面向?qū)ο螅篔ava是一種真正的面向?qū)ο蟮恼Z言,即使是開發(fā)簡單的程序,必須設(shè)計對象;JavaScript是種腳本語言,它可以用來制作與網(wǎng)絡(luò)無關(guān)的,與用戶交互作用的復(fù)雜軟件。它是一種基于對象(Object-Based)和事件驅(qū)動(Event-Driven)的編程語言。因而它本身提供了非常豐富的內(nèi)部對象供設(shè)計人員使用;
2)解釋和編譯:Java 的源代碼在執(zhí)行之前,必須經(jīng)過編譯;JavaScript 是一種解釋性編程語言,其源代碼不需經(jīng)過編譯,由瀏覽器解釋執(zhí)行;
3)強類型變量和類型弱變量:Java采用強類型變量檢查,即所有變量在編譯之前必須作聲明;JavaScript中變量聲明,采用其弱類型。即變量在使用前不需作聲明,而是解釋器在運行時檢查其數(shù)據(jù)類型;
4)代碼格式不一樣。
補充:上面列出的四點是原來所謂的標準答案中給出的。其實Java和JavaScript最重要的區(qū)別是一個是靜態(tài)語言,一個是動態(tài)語言。目前的編程語言的發(fā)展趨勢是函數(shù)式語言和動態(tài)語言。在Java中類(class)是一等公民,而JavaScript中函數(shù)(function)是一等公民。對于這種問題,在面試時還是用自己的語言回答會更加靠譜。
301.什么時候用assert?
答:assertion(斷言)在軟件開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)語言中都支持這種機制。一般來說,assertion用于保證程序最基本、關(guān)鍵的正確性。assertion檢查通常在開發(fā)和測試時開啟。為了提高性能,在軟件發(fā)布后, assertion檢查通常是關(guān)閉的。在實現(xiàn)中,斷言是一個包含布爾表達式的語句,在執(zhí)行這個語句時假定該表達式為true;如果表達式計算為false,那么系統(tǒng)會報告一個AssertionError。
斷言用于調(diào)試目的:
assert(a > 0); // throws an AssertionError if a <=0
斷言可以有兩種形式:
assert Expression1;
assert Expression1 : Expression2 ;
Expression1 應(yīng)該總是產(chǎn)生一個布爾值。
Expression2 可以是得出一個值的任意表達式;這個值用于生成顯示更多調(diào)試信息的字符串消息。
斷言在默認情況下是禁用的,要在編譯時啟用斷言,需使用source 1.4 標記:
javac -source 1.4 Test.java
要在運行時啟用斷言,可使用-enableassertions 或者-ea 標記。
要在運行時選擇禁用斷言,可使用-da 或者-disableassertions 標記。
要在系統(tǒng)類中啟用斷言,可使用-esa 或者-dsa 標記。還可以在包的基礎(chǔ)上啟用或者禁用斷言。可以在預(yù)計正常情況下不會到達的任何位置上放置斷言。斷言可以用于驗證傳遞給私有方法的參數(shù)。不過,斷言不應(yīng)該用于驗證傳遞給公有方法的參數(shù),因為不管是否啟用了斷言,公有方法都必須檢查其參數(shù)。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試后置條件。另外,斷言不應(yīng)該以任何方式改變程序的狀態(tài)。
302.UML是什么?UML中有哪些圖?
答:UML是統(tǒng)一建模語言(Unified Modeling Language)的縮寫,它發(fā)表于1997年,綜合了當(dāng)時已經(jīng)存在的面向?qū)ο蟮慕UZ言、方法和過程,是一個支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言,為軟件開發(fā)的所有階段提供模型化和可視化支持。使用UML可以幫助溝通與交流,輔助應(yīng)用設(shè)計和文檔的生成,還能夠闡釋系統(tǒng)的結(jié)構(gòu)和行為。UML定義了多種圖形化的符號來描述軟件系統(tǒng)部分或全部的靜態(tài)結(jié)構(gòu)和動態(tài)結(jié)構(gòu),包括:用例圖(use case diagram)、類圖(class diagram)、時序圖(sequence diagram)、協(xié)作圖(collaboration diagram)、狀態(tài)圖(statechart diagram)、活動圖(activity diagram)、構(gòu)件圖(component diagram)、部署圖(deployment diagram)等。在這些圖形化符號中,有三種圖最為重要,分別是:用例圖(用來捕獲需求,描述系統(tǒng)的功能,通過該圖可以迅速的了解系統(tǒng)的功能模塊及其關(guān)系)、類圖(描述類以及類與類之間的關(guān)系,通過該圖可以快速了解系統(tǒng))、時序圖(描述執(zhí)行特定任務(wù)時對象之間的交互關(guān)系以及執(zhí)行順序,通過該圖可以了解對象能接收的消息也就是說對象能夠向外界提供的服務(wù))。
用例圖:
303.XML 文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML 文檔有哪幾種方式?
答: XML文檔定義分為DTD和Schema兩種形式;其本質(zhì)區(qū)別在于Schema本身也是一個XML文件,可以被XML解析器解析。對XML的解析主要有DOM(文檔對象模型)、SAX、StAX(JDK 1.6中引入的新的解析XML的方式,Streaming API for XML) 等,其中DOM處理大型文件時其性能下降的非常厲害,這個問題是由DOM 的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM 必須在解析文件之前把整個文檔裝入內(nèi)存,適合對XML 的隨機訪問(典型的用空間換取時間的策略);SAX是事件驅(qū)動型的XML解析方式,它順序讀取XML文件,不需要一次全部裝載整個文件。當(dāng)遇到像文件開頭,文檔結(jié)束,或者標簽開頭與標簽結(jié)束時,它會觸發(fā)一個事件,用戶通過在其回調(diào)事件中寫入處理代碼來處理XML文件,適合對XML 的順序訪問;如其名稱所暗示的那樣,StAX把重點放在流上。實際上,StAX與其他方法的區(qū)別就在于應(yīng)用程序能夠把XML作為一個事件流來處理。將XML作為一組事件來處理的想法并不新穎(事實上 SAX 已經(jīng)提出來了),但不同之處在于StAX允許應(yīng)用程序代碼把這些事件逐個拉出來,而不用提供在解析器方便時從解析器中接收事件的處理程序。
304.你在項目中哪些地方用到了XML?
答: XML的主要作用有兩個方面:數(shù)據(jù)交換(曾經(jīng)被稱為業(yè)界數(shù)據(jù)交換的事實標準,現(xiàn)在此項功能在很多時候都被JSON取代)和信息配置。在做數(shù)據(jù)交換時,XML將數(shù)據(jù)用標簽組裝成起來,然后壓縮打包加密后通過網(wǎng)絡(luò)傳送給接收者,接收解密與解壓縮后再從XML文件中還原相關(guān)信息進行處理。目前很多軟件都使用XML來存儲配置信息,很多項目中我們通常也會將作為配置的硬代碼(hard code)寫在XML文件中,Java的很多框架也是這么做的。
305.用JavaScript實現(xiàn)用正則表達式驗證,某個字符串是合法的6位數(shù)字的郵編的函數(shù)
Function testE(ss){
var reg=/^[1-9][0-9]{5}$/;
if(req.test(ss)){
alert(“郵編OK”)
}else{
alert(“郵編格式不正確”);
}
}
306.請使用JQuery將頁面上的所有元素邊框設(shè)置為2pix寬的虛線?
$(“*”).css(“border”,”2px dashed”)
307.如何設(shè)定JQuery異步調(diào)用還是同步調(diào)用?
答案:調(diào)用jQuery中的ajax函數(shù),設(shè)置其async屬性來表明是異步還是同步,如下:
$.ajax({
async:true//表示異步,false表示同步
})
308.說出3條以上firefox和IE的瀏覽器兼容問題?
答案:兼容firefox的 outerHTML,F(xiàn)F中沒有outerHtml的方法
IE下,可以使用()或[]獲取集合類對象;Firefox下,只能使用[]獲取集合類對象.解決方法:統(tǒng)一使用[]獲取集合類對象.
IE下,可以使用獲取常規(guī)屬性的方法來獲取自定義屬性,也可以使用getAttribute()獲取自定義屬性;Firefox下,只能使用getAttribute()獲取自定義屬性.解決方法:統(tǒng)一通過getAttribute()獲取自定義屬性
309.請用Jquery語言寫出ajax請求或者post請求代碼
$.post(“show”,{uname=”張三”,pwd=”123”},function(data){
alert(data)
})
310.body中的onload ()函數(shù)和jQuery中document.ready()有什么區(qū)別?
答案:ready 事件的觸發(fā),表示文檔結(jié)構(gòu)已經(jīng)加載完成(不包含圖片等非文字媒體文件)
onload 事件的觸發(fā),表示頁面包含圖片等文件在內(nèi)的所有元素都加載完成。
311.jQuery中有哪幾種類型的選擇器?
答案:
基本選擇器
層次選擇器
基本過濾選擇器
內(nèi)容過濾選擇器
可見性過濾選擇器
屬性過濾選擇器
子元素過濾選擇器
表單選擇器
表單過濾選擇器
312.EasyUI中datagrid刷新當(dāng)前數(shù)據(jù)的方法?
答案:使用reload()即可
313.分別寫出一個div居中和其中的內(nèi)容居中的css屬性設(shè)置
Div居中:
margin:auto 0px;
內(nèi)容居中:
text-align:center;
314.概述一下session與cookie的區(qū)別
答案:
存儲角度:
Session是服務(wù)器端的數(shù)據(jù)存儲技術(shù),cookie是客戶端的數(shù)據(jù)存儲技術(shù)
解決問題角度:
Session解決的是一個用戶不同請求的數(shù)據(jù)共享問題,cookie解決的是不同請求的請求數(shù)據(jù)的共享問題
生命周期角度:
Session的id是依賴于cookie來進行存儲的,瀏覽器關(guān)閉id就會失效
Cookie可以單獨的設(shè)置其在瀏覽器的存儲時間。
315.JavaScript 中 null和 undefined 是否有區(qū)別?有哪些區(qū)別?
答案:
賦值角度說明:
null 表示此處沒有值,undefined表示此處定義了但是沒有賦值
從數(shù)據(jù)轉(zhuǎn)換角度:
Null在做數(shù)值轉(zhuǎn)換時會被轉(zhuǎn)換為0,undefined會被轉(zhuǎn)換為NaN
316.Servlet中的doPost和doGet方法有什么區(qū)別?它們在傳遞和獲取參數(shù)上有什么區(qū)別?
答案:
區(qū)別:doPost用來處理post請求,doGet用來處理get請求,獲取參數(shù):獲取的參數(shù)是相同的都是HttpServletRequest \HttpServletResponse
317.請寫出一段jQuery代碼,實現(xiàn)把當(dāng)前頁面中所有的a元索中class 屬性為“view-link”的鏈接都改為在新窗口中打開
答案:$(“a[class=view-link]”).attr(“target”,”_blank”)
318.如下JavaScript代碼的輸出為:
var scope="global scope";
function checkscope() {
var scope="local scope”;
return function() { return scope}
}
console.log (checkscope()());
319.Jquery中’.get()’與’.eq()’的區(qū)別
eq返回的是一個jquery對象 get返回的是一個html對象
320.如何給weblogic定內(nèi)存的大小?
在啟動Weblogic的腳本中(位于所在Domian對應(yīng)服務(wù)器目錄下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以調(diào)整最小內(nèi)存為32M,最大200M
321.TCP為何采用三次握手來建立連接,若釆用二次握手可以嗎,請說明理由?
三次握手是為了防止已失效的連接請求再次傳送到服務(wù)器端。 二次握手不可行,因為:如果由于網(wǎng)絡(luò)不穩(wěn)定,雖然客戶端以前發(fā)送的連接請求以到達服務(wù)方,但服務(wù)方的同意連接的應(yīng)答未能到達客戶端。則客戶方要重新發(fā)送連接請求,若采用二次握手,服務(wù)方收到重傳的請求連接后,會以為是新的請求,就會發(fā)送同意連接報文,并新開進程提供服務(wù),這樣會造成服務(wù)方資源的無謂浪費
322.以下HTTP相應(yīng)狀態(tài)碼的含義描述正確的是()
A. | 200ok表示請求成功 |
B. | 400不良請求表示服務(wù)器未發(fā)現(xiàn)與請求URL匹配內(nèi)容 |
C. | 404未發(fā)現(xiàn)表示由于語法錯誤兒導(dǎo)致服務(wù)器無法理解請求信息 |
D. | 500內(nèi)部服務(wù)器錯誤,無法處理請求 |
答案:D 分析: A 200ok 表示的意思是一切正常。一般用于相應(yīng)GET和POST請求。這個狀態(tài)碼對servlet是缺省的;如果沒有調(diào)用setStatus方法的話,就會得到200。 B 400 表示指出客戶端請求中的語法錯誤 C 404 客戶端所給的地址無法找到任何資源 |
323.JSP頁面包括哪些元素?()
A. | JSP命令 |
B. | JSP Action |
C. | JSP腳本 |
D. | JSP控件 |
答案:C 分析:JSP頁面元素構(gòu)成如下,因此ABD錯誤 A 200ok 表示的意思是一切正常。一般用于相應(yīng)GET和POST請求。這個狀態(tài)碼對servlet是缺省的;如果沒有調(diào)用setStatus方法的話,就會得到200。 B 400 表示指出客戶端請求中的語法錯誤 C 404 客戶端所給的地址無法找到任何資源 |
324.Ajax有四種技術(shù)組成:DOM,CSS,JavaScript,XmlHttpRequest,其中控制文檔結(jié)構(gòu)的是()
A. | DOM |
B. | CSS |
C. | JavaScript |
D. | XmlHttpRequest |
答案:A |
325.下面關(guān)于session的用法哪些是錯誤的?()
A. | HttpSession session=new HttpSession(); |
B. | String haha=session getParameler(:haha”); |
C. | session.removeAttribute(“haha”); |
D. | session.setAttribute(:haha:);XmlHttpRequest |
答案:A |
326.Jsp九大內(nèi)置對象
答案:1、request對象
request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象代表了客戶端的請求信息,主要用于接受通過HTTP協(xié)議傳送到服務(wù)器的數(shù)據(jù)。(包括頭信息、系統(tǒng)信息、請求方式以及請求參數(shù)等)。request對象的作用域為一次請求。
2、response對象
response 代表的是對客戶端的響應(yīng),主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內(nèi)有效。
3、session對象
session 對象是由服務(wù)器自動創(chuàng)建的與用戶請求相關(guān)的對象。服務(wù)器為每個用戶都生成一個session對象,用于保存該用戶的信息,跟蹤用戶的操作狀態(tài)。session對象內(nèi)部使用Map類來保存數(shù)據(jù),因此保存數(shù)據(jù)的格式為 “Key/value”。 session對象的value可以使復(fù)雜的對象類型,而不僅僅局限于字符串類型。
4、application對象
application 對象可將信息保存在服務(wù)器中,直到服務(wù)器關(guān)閉,否則application對象中保存的信息會在整個應(yīng)用中都有效。與session對象相比,application對象生命周期更長,類似于系統(tǒng)的“全局變量”。
5、out 對象
out 對象用于在Web瀏覽器內(nèi)輸出信息,并且管理應(yīng)用服務(wù)器上的輸出緩沖區(qū)。在使用 out 對象輸出數(shù)據(jù)時,可以對數(shù)據(jù)緩沖區(qū)進行操作,及時清除緩沖區(qū)中的殘余數(shù)據(jù),為其他的輸出讓出緩沖空間。待數(shù)據(jù)輸出完畢后,要及時關(guān)閉輸出流。
6、pageContext 對象
pageContext 對象的作用是取得任何范圍的參數(shù),通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的創(chuàng)建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。
7、config 對象
config 對象的主要作用是取得服務(wù)器的配置信息。通過 pageConext對象的 getServletConfig() 方法可以獲取一個config對象。當(dāng)一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。 開發(fā)者可以在web.xml 文件中為應(yīng)用程序環(huán)境中的Servlet程序和JSP頁面提供初始化參數(shù)。
8、page 對象
page 對象代表JSP本身,只有在JSP頁面內(nèi)才是合法的。 page隱含對象本質(zhì)上包含當(dāng)前 Servlet接口引用的變量,類似于Java編程中的 this 指針。
9、exception 對象
exception 對象的作用是顯示異常信息,只有在包含 isErrorPage="true" 的頁面中才可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。excepation對象和Java的所有對象一樣,都具有系統(tǒng)提供的繼承結(jié)構(gòu)。exception 對象幾乎定義了所有異常情況。在Java程序中,可以使用try/catch關(guān)鍵字來處理異常情況; 如果在JSP頁面中出現(xiàn)沒有捕獲到的異常,就會生成 exception 對象,并把 exception 對象傳送到在page指令中設(shè)定的錯誤頁面中,然后在錯誤頁面中處理相應(yīng)的 exception 對象。
327.如何配置一個servlet?
在web.xml中使用如下標簽:
<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
或者使用注解方式:
@WebServlet(name="servlet", urlPatterns={"/*"})
328.JavaScript,如何定義含有數(shù)值1至8的數(shù)組?
答: var arr=[1,2,3,4,5,6,7,8]
329.以下JavaScipt語句會產(chǎn)生運行錯誤的是_()
A. | var obj=( ); |
B. | var obj=[ ]; |
C. | var obj=//; |
D. | var obj=1; |
答案:AC |
330.在JSP中,下面__()__塊中可以定義一個新類:
A. | <% %> |
B. | <% ! %> |
C. | <%@ %> |
D. | <%=%> |
答案:B 分析:B <% ! %> 可用作聲明 A不正確 C為引用xxx,比如<% @page xxxxx%> D為表達式 |
331.HTML含義和版本變化
HTML含義:
Hyper Text Markup Language 超文本標記語言,是一種用來制作“網(wǎng)頁”的簡單標記語言;用HTML編寫的超文本文檔稱為HTML文檔,HTML文檔的擴展名是html或者htm
版本變化:
HTML1.0——在1993年6月作為IETF工作草案發(fā)布(并非標準)
HTML 2.0——1995年11月作為RFC 1866發(fā)布
HTML 3.2——1997年1月14日,W3C推薦標準
HTML 4.0——1997年12月18日,W3C推薦標準
HTML 4.01(微小改進)——1999年12月24日,W3C推薦標準
HTML 5—2014年10月28日,W3C推薦標準HTML文檔結(jié)構(gòu);
HTML 5.1 - 2016年
HTML 5.2 – 2018年最新版本
HTML 5.3 is coming…
332.什么是錨鏈接
錨鏈接是帶有文本的超鏈接。可以跳轉(zhuǎn)到頁面的某個位置,適用于頁面內(nèi)容較多,超過一屏的場合 。分為頁面內(nèi)的錨鏈接和頁面間的錨鏈接 。
例如:1F2F
跳轉(zhuǎn)到2F標記位置
說明:
1.在標記位置利用a標簽的name屬性設(shè)置標記。
2.在導(dǎo)航位置通過a標簽的href屬性用#開頭加name屬性值即可跳轉(zhuǎn)錨點位置。
333.HTML字符實體的作用及其常用字符實體
有些字符,比如說“<”字符,在HTML中有特殊的含義,因此不能在文本中使用。想要在HTML中顯示一個小于號“<”,需要用到字符實體:<或者<
字符實體擁有三個部分:一個and符號(&),一個實體名或者一個實體號,最后是一個分號(;)
常用字符實體:
顯示結(jié)果 | 描述 | 實體 | 實體號 |
空格 | |||
< | 小于 | < | < |
> | 大于 | > | |
& | and符號 | & | & |
' | 單引號 | ' (IE不支持) | ' |
" | 引號 | " | " |
£ | 英鎊 | £ | £ |
¥ | 人民幣元 | ¥ | ¥ |
§ | 章節(jié) | ¥ | ¥ |
? | 版權(quán) | ? | ? |
334.HTML表單的作用和常用表單項類型
表單的作用:
利用表單可以收集客戶端提交的有關(guān)信息。
常用表單項類型:
input標簽 | 功能 | input標簽 | 功能 |
text | 單行本框 | reset | 重置按鈕 |
password | 密碼框 | submit | 提交按鈕 |
radio | 單選按鈕 | textarea | 文本域 |
checkbox | 復(fù)選框 | select | 下拉框 |
button | 普通按鈕 | hidden | 隱藏域 |
優(yōu)點 | 缺點 | 應(yīng)用場合 | |
表格 | 方便排列有規(guī)律、結(jié)構(gòu)均勻的內(nèi)容或數(shù)據(jù) | 產(chǎn)生垃圾代碼、影響頁面下載時間、靈活性不大難于修改 | 內(nèi)容或數(shù)據(jù)整齊的頁面 |
框架 | 支持滾動條、方便導(dǎo)航 節(jié)省頁面下載時間等 | 兼容性不好,保存時不方便、應(yīng)用范圍有限 | 小型商業(yè)網(wǎng)站、論壇后臺管理 |
Div | 代碼精簡、提高頁面下載速度、表現(xiàn)和內(nèi)容分離 | 比較靈活、難于控制 | 復(fù)雜的不規(guī)則頁面、業(yè)務(wù)種類較多的大型商業(yè)網(wǎng)站 |
readonly | disabled | |
有效對象 | .只針對type為text/password有效 | 對所有表單元素有效 |
表單提交 | 當(dāng)表單元素設(shè)置readonly后,表單提交能將該表單元素的值傳遞出去。 | 當(dāng)表單元素設(shè)置disabled后,表單提交不能將該表單元素的值傳遞出去。 |
CSS的定義:CSS是Cascading Style Sheets(層疊樣式表)的簡稱。
CSS是一系列格式規(guī)則,它們控制網(wǎng)頁內(nèi)容的外觀。CSS簡單來說就是用來美化網(wǎng)頁用的。
CSS的具體作用包括:
使網(wǎng)頁豐富多彩,易于控制。
頁面的精確控制,實現(xiàn)精美、復(fù)雜頁面 。
選擇器名稱 | 案例 | 語法格式 |
標簽選擇器 | h3{font-size:24px;font-family:"隸書“; }< h3>JSP< /h3> | 元素標簽名{樣式屬性} |
類選擇器 | .red {color:#F00;} < li class="red">Oracle< /li> | . 元素標簽class屬性值{樣式屬性} |
ID選擇器 | #p1 {background-color:#0F0;} < p id="p1">content< /p> | #元素標簽id屬性值{樣式屬性} |
包含選擇器 | div h3{color:red;} < div> < h3>CSS層疊樣式表< /h3> < /div> | 父元素標簽 子元素標簽{ 樣式屬性 } |
子選擇器 | div>ul{color:blue;} < div> < ul> < li>測試1 < ol> < li>嵌套元素< /li> < li>嵌套元素< /li> < li>嵌套元素< /li> < li>嵌套元素< /li> < /ol> < /li> < li>測試1< /li> < li>測試1< /li> < /ul> < /div> | 父元素標簽名>子元素名{ 樣式屬性 } |
三種引用方式:
1. 外部樣式表(存放.css文件中)
不需要style標簽
< link rel=”stylesheet” href=”引用文件地址” />
2. 嵌入式樣式表
< style type=“text/css”>
p{color:red;}
< /style>
3.內(nèi)聯(lián)樣式
標簽屬性名為style
< p style=“color:red;”>< /p>
優(yōu)先級級別:內(nèi)聯(lián)定義最高、內(nèi)部CSS次之、外部CSS優(yōu)先級最低。。
盒子模型類似于生活中的盒子,具有4個屬性,外邊距,內(nèi)邊距,邊框,內(nèi)容。
外邊距:margin,用于設(shè)置元素和其他元素之間的距離。
內(nèi)邊距:padding,用于設(shè)置元素內(nèi)容和邊框之間的距離。
邊框:border,用于設(shè)置元素邊框粗細,顏色,線型。
內(nèi)容:width,height,用于設(shè)置元素內(nèi)容顯示的大小。
例如:
<style>
body{
margin: 0; /*取消body默認的外邊距*/
}
#img1{
width:200px; /*設(shè)置圖片的寬度*/
border: 2px solid black; /*設(shè)置圖片邊框*/
margin: 5px;
/*設(shè)置圖片外邊距(表示該圖片與其他圖片的距離為5px)*/
padding:10px; /*設(shè)置圖片與邊框之間的距離*/
}
#img2{
height: 200px; /* 設(shè)置圖片的高度*/
border: 2px solid black; /*設(shè)置圖片的邊框*/
margin: 5px; /*設(shè)置圖片外邊距*/
padding: 20px; /*設(shè)置圖片與邊框之間的距離*/
}
</style>
<img id="img1" src="img/2.jpg" />
<img id="img2" src="img/lss.jpg" />
Javascript一種基于對象(object-based)和事件驅(qū)動(Event Driven)的簡單的并具有安全性能的腳本語言。特點:
解釋性: JavaScript不同于一些編譯性的程序語言,例如C、C++等,它是一種解釋性的程序語言,它的源代碼不需要經(jīng)過編譯,而直接在瀏覽器中運行時被解釋。
基于對象: JavaScript是一種基于對象的語言。這意味著它能運用自己已經(jīng)創(chuàng)建的對象。因此,許多功能可以來自于腳本環(huán)境中對象的方法與腳本的相互作用。
事件驅(qū)動: JavaScript可以直接對用戶或客戶輸入做出響應(yīng),無須經(jīng)過Web服務(wù)程序。它對用戶的響應(yīng),是以事件驅(qū)動的方式進行的。所謂事件驅(qū)動,就是指在主頁中執(zhí)行了某種操作所產(chǎn)生的動作,此動作稱為“事件”。比如按下鼠標、移動窗口、選擇菜單等都可以視為事件。當(dāng)事件發(fā)生后,可能會引起相應(yīng)的事件響應(yīng)。
跨平臺:JavaScript依賴于瀏覽器本身,與操作環(huán)境無關(guān),只要能運行瀏覽器的計算機,并支持JavaScript的瀏覽器就可正確執(zhí)行。
1、數(shù)值型(Number):整數(shù)和浮點數(shù)統(tǒng)稱為數(shù)值。例如85或3.1415926等。
2、字符串型(String):由0個,1個或多個字符組成的序列。在JavaScript中,用雙引號或單引號括起來表示,如“您好”、‘學(xué)習(xí)JavaScript’等。 不區(qū)分單引號、雙引號。
3、邏輯(布爾)型(Boolean):用true或false來表示。
4、空(null)值(Null):表示沒有值,用于定義空的或不存在的引用。
要注意,空值不等同于空字符串""或0。
5、未定義(Undefined)值:它也是一個保留字。表示變量雖然已經(jīng)聲明,但卻沒有賦值。
除了以上五種基本的數(shù)據(jù)類型之外,JavaScript還支持復(fù)合數(shù)據(jù)類型,包括對象和數(shù)組兩種。
A. | < TD> |
B. | < BR> |
C. | < P> |
D. | < H1> |
分析: A < td>定義標準表格 C < p>表示文本一個段落 D < h1>表示對文本標題進行強調(diào)的一種標簽 |
優(yōu)點:減輕服務(wù)器的負擔(dān),按需取數(shù)據(jù),最大程度的減少冗余請求,局部刷新頁面,減少用戶心理和實際的等待時間,帶來更好的用戶體驗,基于xml標準化,并被廣泛支持,不需安裝插件等,進一步促進頁面和數(shù)據(jù)的分離
缺點:AJAX大量的使用了javascript和ajax引擎,這些取決于瀏覽器的支持.在編寫的時候考慮對瀏覽器的兼容性.
JS腳本方式:
第一種:定義全局變量,在form提交前判斷是否已有提交過
<script>
var checkSubmitFlg=false;
function checkSubmit(){
if(checkSubmitFlg==true){
return false;
}
checkSubmitFlg=true;
return true;
}
</script>
<form action="" onsubmit="return checkSubmit();">
</form>
第二種:單擊提交按鈕后,立刻禁用改按鈕
第三種:單擊提交按鈕后,彈出屏蔽層,防止用戶第二次點擊
JQuery.ajax()是對原生的javaScript的ajax的封裝,簡化了ajax的步驟,用戶可用JQuery.ajax()發(fā)送get或者post方式請求,Jquery.get()是對ajax的get方式的封裝,只能發(fā)送get方式的請求。
$.ajax()請求時候加上cache:false的參數(shù),如:
$.ajax({
type : "get",
url : "XX",
dataType : "json",
cache:false,
success : function(json) {
}
});
$.get()請求時候加上時間,如:
$.get("url","data"+new Date(),function(data){});
Javascript里面沒有像java那樣的繼承,javascript中的繼承機制僅僅是靠模擬的,可以使用prototype原型來實現(xiàn)
可以分為三種
1、原生類型(string,number,boolean)
2、對象(Date,Array)
3、特殊類型(var vara;(只什么沒有定義),var varb=null;(定義一個變量并賦值為null))
1、直接獲取
//1.1 -- id方式獲取
var varid=document.getElementById("unameid");
//1.2 -- name獲取(獲取的是數(shù)組對象)
var varname=document.getElementsByName("sex");
//1.3 -- 元素獲取(獲取的是數(shù)組對象)
var varinput=document.getElementsByTagName("input");
2、間接方式獲取
//2.1 父子關(guān)系 --childNodes
var varchilds=document.getElementById("div01").childNodes;
//2.2 子父關(guān)系--parentNode
var varfather2=document.getElementById("unameid").parentNode;
//2.3 兄弟之間相互獲取 nextSibling:下一個節(jié)點 previousSibling:上一個節(jié)點
答:為實現(xiàn)程序的模塊化,就需要保證在不同的Servlet之間可以相互跳轉(zhuǎn),而Servlet中主要有兩種實現(xiàn)跳轉(zhuǎn)的方式:FORWARD方式與redirect方式。
Forward() : 是服務(wù)器內(nèi)部的重定向,服務(wù)器直接訪問目標地址的URL,把那個URL的響應(yīng)內(nèi)容讀取出來,而客戶端并不知道,因此在客戶端瀏覽器的地址欄里不會顯示跳轉(zhuǎn)后的地址,還是原來的地址。由于在整個定向的過程中用的是同一個Request,因此FORWARD會將Request的信息帶到被定向的JSP或Servlet中使用。
Redirect():則是客戶端的重定向,是完全的跳轉(zhuǎn),即客戶端瀏覽器會獲取跳轉(zhuǎn)后的地址,然后重新發(fā)送請求,因此瀏覽器中會顯示跳轉(zhuǎn)后的地址。同時,由于這種方式比FORWARD方式多了一次網(wǎng)絡(luò)請求,因此其效率低于FORWARD方式,需要注意到的是,客戶端的重定向可以通過設(shè)置特定的HTTP 頭或?qū)慗avaScript腳本來實現(xiàn)。
鑒于以上的區(qū)別,一般當(dāng)FORWARD方式可以滿足需求時,盡可能的使用FORWARD方式。但在有些情況下,例如,需要跳轉(zhuǎn)到一個其他服務(wù)器上的資源時,則必須使用redirect 方式。
作用域:存放數(shù)據(jù),獲取數(shù)據(jù)(傳遞數(shù)據(jù))
有效的作用域:生命周期,作用范圍
httpServeltRequest:
生命周期:一次請求之間
作用范圍:所有被請求轉(zhuǎn)發(fā)過的servlet都能獲取到
httpSession:
生命周期:一次會話
作用范圍:所有的servlet都可以獲取到
servletContex:
生命周期:從項目開始運行到服務(wù)器關(guān)閉
作用范圍:所有的servlet都可以獲取到
作用域如何選用?
httpServeltRequest:和當(dāng)前請求有關(guān)的信息
httpSession:和當(dāng)前用戶有關(guān)的信息
servletContex:訪問量比較大,不易更改
var a=document.getElementsByName("bankNo")[0].value;
var b=$("select[name=bankNo]").val();
^[1-9]\d{10}$
js:
id--document.getElementById("id");
name--document.getElementsByName("name");
jquery
id--$("#id");
name--$("元素名稱[name="name值"]");
用id方式獲取;document.getElementById("id");
可見 : document.getElementById("divid").style.display="block";
隱藏 : document.getElementById("divid").style.display="none";
動態(tài)導(dǎo)入
1、會將多個jsp頁面分別再編寫成java文件,編譯成class文件
2、jsp文件中允許有相同的變量名,每個頁面互不影響
3、當(dāng)java代碼比較多優(yōu)先選用動態(tài)導(dǎo)入
4、效率相對較低,耦合性低
靜態(tài)導(dǎo)入
1、會將多個jsp頁面合成一個jsp頁面,再編寫成java文件,編譯成class文件
2、jsp文件中不允許有相同的變量名
3、當(dāng)java代碼比較少或者沒有java代碼是優(yōu)先選用靜態(tài)導(dǎo)入
4、效率相對較高,耦合性高
request表示HttpServletRequest對象。它包含了有關(guān)瀏覽器請求的信息,并且提供了幾個用于獲取cookie, header, 和session數(shù)據(jù)的有用的方法。
response表示HttpServletResponse對象,并提供了幾個用于設(shè)置送回 瀏覽器的響應(yīng)的方法(如cookies,頭信息等)
out對象是javax.jsp.JspWriter的一個實例,提供了幾個方法使你能用于向瀏覽器回送輸出結(jié)果
pageContext表示一個javax.servlejt.sp.PageContext對象。它是用于方便存取各種范圍的名字空間、servlet相關(guān)的對象的API,并且包裝了通用的servlet相關(guān)功能的方法。
session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態(tài)信息
applicaton 表示一個javax.servle.ServletContext對象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息
config表示一個javax.servlet.ServletConfig對象。該對象用于存取servlet實例的初始化參數(shù)。
page表示從該頁面產(chǎn)生的一個servlet實例
Exception異常
page、request、session、application
HTML與XHTML之間的差別,粗略可以分為兩大類比較:一個是功能上的差別,另外是書寫習(xí)慣的差別。關(guān)于功能上的差別,主要是XHTML可兼容各大瀏覽器、手機以及PDA,并且瀏覽器也能快速正確地編譯網(wǎng)頁。
因為XHTML的語法較為嚴謹, 所以如果你是習(xí)慣松散結(jié)構(gòu)的HTML編寫者,那需要特別注意XHTML的規(guī)則。但也不必太過擔(dān)心,因為XHTML的規(guī)則并不太難。下面列出了幾條容易犯的錯誤,供大家引用。
1:所有標簽都必須小寫
在XHTML中,所有的標簽都必須小寫,不能大小寫穿插其中,也不能全部都是大寫。看一個例子。
錯誤:< Head>< /Head>< Body>< /Body>
正確:< head>< /head>< body>< /body>
2:標簽必須成雙成對
像是< p>...< /p>、< a>...< /a>、< div>...< /div>標簽等,當(dāng)出現(xiàn)一個標簽時,必須要有對應(yīng)的結(jié)束標簽,缺一不可,就像在任何程序語言中的括號一樣。
錯誤:大家好< p>我是muki
正確:< p>大家好< /p>< p>我是muki< /p>
3:標簽順序必須正確
標簽由外到內(nèi),一層層包覆著,所以假設(shè)你先寫div后寫h1,結(jié)尾就要先寫h1后寫div。只要記住一個原則“先進后出”,先彈出的標簽要后結(jié)尾。
錯誤:< div>< h1>大家好< /div>< /h1>
正確:< div>< h1>大家好< /h1>< /div>
4:所有屬性都必須使用雙引號
在XHTML 1.0中規(guī)定連單引號也不能使用,所以全程都得用雙引號。
錯誤:< div style=font-size:11px>hello< /div>
正確:< div style="font-size:11px">hello< /div
5:不允許使用target="_blank"
從XHTML 1.1開始全面禁止target屬性,如果想要有開新窗口的功能,就必須改寫為rel="external",并搭配JavaScript實現(xiàn)此效果。
錯誤:< a href="http://blog.mukispace.com" target="_blank">MUKI space< /a>
正確:< a href="http://blog.mukispace.com" rel="external">MUKI space< /a>
1、Trident內(nèi)核代表產(chǎn)品Internet Explorer,又稱其為IE內(nèi)核。 Trident(又稱為MSHTML),是微軟開發(fā)的一種排版引擎。使用Trident渲染引擎的瀏覽器包括:IE、傲游、世界之窗瀏覽器、Avant、騰訊TT、Netscape 8、NetCaptor、Sleipnir、GOSURF、GreenBrowser和KKman等。
2、Gecko內(nèi)核代表作品Mozilla ,FirefoxGecko是一套開放源代碼的、以C++編寫的網(wǎng)頁排版引擎。Gecko是最流行的排版引擎之一,僅次于Trident。使用它的最著名瀏覽器有Firefox、Netscape6至9
3、WebKit內(nèi)核代表作品Safari、Chromewebkit , 是一個開源項目,包含了來自KDE項目和蘋果公司的一些組件,主要用于Mac OS系統(tǒng),它的特點在于源碼結(jié)構(gòu)清晰、渲染速度極快。缺點是對網(wǎng)頁代碼的兼容性不高,導(dǎo)致一些編寫不標準的網(wǎng)頁無法正常顯示。主要代表作品有Safari和Google的瀏覽器Chrome。
4、Presto內(nèi)核代表作品OperaPresto, 是由Opera Software開發(fā)的瀏覽器排版引擎,供Opera 7.0及以上使用。它取代了舊版Opera 4至6版本使用的Elektra排版引擎,包括加入動態(tài)功能,例如網(wǎng)頁或其部分可隨著DOM及Script語法的事件而重新排版。
答:因為不同的瀏覽器對同一段代碼有不同的解析,造成頁面顯示效果不統(tǒng)一的情況;這是我們常見的兼容性問題。
解決方法:
1、針對不同的瀏覽器寫不同的代碼
2、使用jquery屏蔽瀏覽器差異
遇到不同的兼容問題,需要針對前端進行兼容適配;
1.moment.js
舉個例子:
用js轉(zhuǎn)換時間戳為日期
let date=new Date(1437925575663);
let year=date.getFullYear() + '-';
let month=( date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) :
date.getMonth() + 1 ) + '-';
let day=date.getDate();
...
return year + month + day;
用moment.js
return moment(1437925575663).format('YYYY-MM-DD HH:mm:ss')
2.chart.js
繪制簡單的柱狀圖,曲線圖,蛛網(wǎng)圖,環(huán)形圖,餅圖等完全夠用,用法比較簡單。
3.D3.js
功能太強大了,看首頁就知道了,感覺沒有什么圖d3繪不出來的。
4.Rx.js
很好的解決了異步和事件組合的問題。
5.lodash.js
alter(),confirm(),prompt()
答:閉包無處不在,比如:jQuery、zepto的核心代碼都包含在一個大的閉包中,所以下面我先寫一個最簡單最原始的閉包,以便讓你在大腦里產(chǎn)生閉包的畫面:
function A(){
function B(){
console.log("Hello Closure!");
}
return B;
}
var C=A();
C();//Hello Closure!
這是最簡單的閉包。
有了初步認識后,我們簡單分析一下它和普通函數(shù)有什么不同,上面代碼翻譯成自然語言如下:
(1)定義普通函數(shù) A
(2)在 A 中定義普通函數(shù) B
(3)在 A 中返回 B
(4)執(zhí)行 A, 并把 A 的返回結(jié)果賦值給變量 C
(5)執(zhí)行 C
把這5步操作總結(jié)成一句話就是:
函數(shù)A的內(nèi)部函數(shù)B被函數(shù)A外的一個變量 c 引用。
把這句話再加工一下就變成了閉包的定義:
當(dāng)一個內(nèi)部函數(shù)被其外部函數(shù)之外的變量引用時,就形成了一個閉包。
因此,當(dāng)你執(zhí)行上述5步操作時,就已經(jīng)定義了一個閉包!
這就是閉包。
<body>
<ul>
<li>張三:123</li>
<li>李四:456</li>
<li>王五:789</li>
<li>趙六:147</li>
<ul>
<body>
function test(){
var varli=document.getElementsByTagName("li");
for (var i=0;i<varli.length;i++) {
alert(varli[i].innerText);
}
}
//全選
function checkAll(){
//獲取復(fù)選框?qū)ο?-數(shù)組對象
var varcheck=document.getElementsByName("name");
//alert(varcheck.length);
//遍歷for
for(var i=0;i<varcheck.length;i++){
varcheck[i].checked=true;
}
}
<script type="text/javascript" src="js/jquery-1.9.1.js" charset="utf-8"></script>
<script type="text/javascript">
function testJqAjax(){
//url :請求地址
//type :請求的方式 get/post
//data :請求的參數(shù)(json/String)
//cache:true(走緩存 ) false(不走緩存)
//result:當(dāng)ajax發(fā)送成功后會調(diào)用success后面的函數(shù),result:相當(dāng)于形參,返回的數(shù)據(jù)
//async:是否為異步請求 默認true異步 , false同步
$.ajax({
url:"TestJqAjax",
type:"get",
/* data:"uname=zhangsan&realname=張三豐", */
data:{uname:"zhangsan",realname:"張三豐"},
cache:false,
async:false,
success:function(result){
alert(result);
}
});
}
//ajax的get方式的請求
function jqAjaxGet(){
//url,[data],[callback](當(dāng)ajax發(fā)送成功后調(diào)用的函數(shù))
$.get("TestJqAjax",{uname:"zhangsan",realname:"張三豐"},function(result){
alert(result);
});
}
function jqAjaxPost() {
//url,[data],[callback](當(dāng)ajax發(fā)送成功后調(diào)用的函數(shù))
$.post("TestJqAjax",{uname:"zhangsan",realname:"張三豐"},function(result){
alert(result);
});
}
</script>
function test2(){
var str="abcdefg";
var substr=str.substring(4);
alert(substr);
}
請求行(請求方式,資源路徑,協(xié)議和協(xié)議版本號)
若干請求頭
請求實體內(nèi)容
200 - 確定。客戶端請求已成功
302 - 臨時移動轉(zhuǎn)移,請求的內(nèi)容已臨時移動新的位置
404 - 未找到文件或目錄
500 - 服務(wù)器內(nèi)部錯誤
/獲取網(wǎng)絡(luò)信息
private void getNet(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("TestHttpRequest.getNet(獲取客戶端的ip):"+req.getRemoteAddr());
System.out.println("TestHttpRequest.getNet(獲取客戶端的端口):"+req.getRemotePort());
System.out.println("TestHttpRequest.getNet(獲取服務(wù)器的ip):"+req.getLocalAddr());
System.out.println("TestHttpRequest.getNet(獲取服務(wù)器的端口):"+req.getLocalPort());
}
//獲取實體內(nèi)容
private void getContent(HttpServletRequest req, HttpServletResponse resp) {
//獲取單條信息
String uname=req.getParameter("uname");
//獲取多條信息,數(shù)組格式
String[] favs=req.getParameterValues("fav");
//遍歷數(shù)組
//判斷
if(favs!=null&&favs.length>0){
for (int i=0; i < favs.length; i++) {
System.out.println("TestHttpRequest.getContent(fav):"+favs[i]);
}
}
String un=req.getParameter("un");
System.out.println("TestHttpRequest.getContent():"+uname+"--"+favs+"--"+un);
}
//獲取請求頭信息
private void getHeads(HttpServletRequest req, HttpServletResponse resp) {
//獲取單條頭信息
//System.out.println("TestHttpRequest.getHeads(獲取請求頭信息-瀏覽器頭信息):"+req.getHeader("User-Agent"));
//獲取所有頭信息--返回枚舉類型
Enumeration strHeads=req.getHeaderNames();
//遍歷枚舉類型
while (strHeads.hasMoreElements()) {
String strhead=(String) strHeads.nextElement();
System.out.println("TestHttpRequest.getHeads(獲取頭信息):"+req.getHeader(strhead));
}
}
//獲取請求行的信息
private void getLines(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("TestHttpRequest.getLines(請求方式***):"+req.getMethod());
System.out.println("TestHttpRequest.getLines(資源路徑):"+req.getRequestURI());
System.out.println("TestHttpRequest.getLines(地址):"+req.getRequestURL());
System.out.println("TestHttpRequest.getLines(協(xié)議):"+req.getScheme());
System.out.println("TestHttpRequest.getLines(協(xié)議的版本號):"+req.getProtocol());
System.out.println("TestHttpRequest.getLines(獲取參數(shù)信息):"+req.getQueryString());
System.out.println("TestHttpRequest.getLines(項目名稱***):"+req.getContextPath());
}
常用對象包括日期對象Date,字符串對象String,數(shù)組對象Array
//獲取并顯示系統(tǒng)當(dāng)前時間
function testDate(){
var date=new Date();
var fmtDate=date.getFullYear()+"-"+(date.getMonth()+1)+
"-"+date.getDate()+"-"+date.getHours()
+":"+date.getMinutes()+":"+date.getSeconds();
alert(fmtDate);
}
//獲取出’sxt’的下標位置
function testString(){
var str='welcome to beijingsxt';
alert(str.indexOf('sxt'));
}
//遍歷數(shù)組信息
function testArray(){
var arr=new Array('a',123,'c',true,'e');
for(var item in arr){
document.write(arr[item]+" ");
}
}
BOM瀏覽器對象模型,由一系列對象組成,是訪問、控制、修改瀏覽器的屬性的方法。
DOM文檔對象模型,由一系列對象組成,是訪問、檢索、修改XHTML文檔內(nèi)容與結(jié)構(gòu)的標準方法。
所有的面試題目都不是一成不變的,特別是像一線大廠,上面的面試題只是給大家一個借鑒作用,最主要的是給自己增加知識的儲備,有備無患。最后給大家分享Spring系列的學(xué)習(xí)筆記和面試題,包含spring面試題、spring cloud面試題、spring boot面試題、spring教程筆記、spring boot教程筆記、最新阿里巴巴開發(fā)手冊(63頁PDF總結(jié))、2022年Java面試手冊。一共整理了1184頁PDF文檔。私信博主(777),祝大家更上一層樓!!!
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。