1、設計模式 知道什么是singleton, factory, strategy, decrator么?
設計模式主要分三個類型:創(chuàng)建型、結構型和行為型。
其中創(chuàng)建型有:
一、Singleton,單例模式:保證一個類只有一個實例,并提供一個訪問它的全局訪問點
二、Abstract?Factory,抽象工廠:提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無須指定它們的具體類。
三、Factory?Method,工廠方法:定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類,F(xiàn)actory?Method使一個類的實例化延遲到了子類。
四、Builder,建造模式:將一個復雜對象的構建與他的表示相分離,使得同樣的構建過程可以創(chuàng)建不同的表示。
五、Prototype,原型模式:用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型來創(chuàng)建新的對象。
行為型有:
六、Iterator,迭代器模式:提供一個方法順序訪問一個聚合對象的各個元素,而又不需要暴露該對象的內部表示。
七、Observer,觀察者模式:定義對象間一對多的依賴關系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知自動更新。
八、Template?Method,模板方法:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中,TemplateMethod使得子類可以不改變一個算法的結構即可以重定義該算法得某些特定步驟。?? ? 九、Command,命令模式:將一個請求封裝為一個對象,從而使你可以用不同的請求對客戶進行參數(shù)化,對請求排隊和記錄請求日志,以及支持可撤銷的操作。?? ? 十、State,狀態(tài)模式:允許對象在其內部狀態(tài)改變時改變他的行為。對象看起來似乎改變了他的類。
十一、Strategy,策略模式:定義一系列的算法,把他們一個個封裝起來,并使他們可以互相替換,本模式使得算法可以獨立于使用它們的客戶。
十二、China?of?Responsibility,職責鏈模式:使多個對象都有機會處理請求,從而避免請求的送發(fā)者和接收者之間的耦合關系
十三、Mediator,中介者模式:用一個中介對象封裝一些列的對象交互。
十四、Visitor,訪問者模式:表示一個作用于某對象結構中的各元素的操作,它使你可以在不改變各元素類的前提下定義作用于這個元素的新操作。
十五、Interpreter,解釋器模式:給定一個語言,定義他的文法的一個表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
十六、Memento,備忘錄模式:在不破壞對象的前提下,捕獲一個對象的內部狀態(tài),并在該對象之外保存這個狀態(tài)。
結構型有:
十七、Composite,組合模式:將對象組合成樹形結構以表示部分整體的關系,Composite使得用戶對單個對象和組合對象的使用具有一致性。
十八、Facade,外觀模式:為子系統(tǒng)中的一組接口提供一致的界面,fa?ade提供了一高層接口,這個接口使得子系統(tǒng)更容易使用。
十九、Proxy,代理模式:為其他對象提供一種代理以控制對這個對象的訪問
二十、Adapter,適配器模式:將一類的接口轉換成客戶希望的另外一個接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些類可以一起工作。
二十一、Decrator,裝飾模式:動態(tài)地給一個對象增加一些額外的職責,就增加的功能來說,Decorator模式相比生成子類更加靈活。
二十二、Bridge,橋模式:將抽象部分與它的實現(xiàn)部分相分離,使他們可以獨立的變化。
二十三、Flyweight,享元模式
2、頁面重構怎么操作?
頁面重構就是根據(jù)原有頁面內容和結構的基礎上,通過div+css寫出符合web標準的頁面結構。
具體實現(xiàn)要達到以下三點:
1. 結構完整,可通過標準驗證
2. 標簽語義化,結構合理
3. 充分考慮到頁面在站點中的“作用和重要性”,并對其進行有針對性的優(yōu)化
About JS、CSS
CSS:
樣式表置于頂部
避免CSS表達式
使用外部JS、CSS
削減JS、CSS
,@import
避免濾鏡
JS:
腳本置于底部
使用外部JS、CSS
削減JS、CSS
不用重復腳本
減少訪問和操作DOM
事件委托
守則分為7大類34條,包括內容、服務器、cookie、CSS、Javascript、圖片、移動應用。
1、盡量減少HTTP請求
2、減少DNS查找次數(shù)
3、避免跳轉
4、可緩存AJAX
5、推遲加載內
6、預加載
7、減少DOM元素個數(shù)
8、根據(jù)域名劃分頁面內容
9、避免404
列舉IE與其他瀏覽器不一樣的特性?
a. IE的排版引擎是Trident (又稱為MSHTML)
b. Trident內核曾經(jīng)幾乎與W3C標準脫節(jié)(2005年)
c. Trident內核的大量 Bug等安全性問題沒有得到及時解決
d. JS方面,有很多獨立的方法,例如綁定事件的attachEvent、創(chuàng)建事件的createEventObject等
e. CSS方面,也有自己獨有的處理方式,例如設置透明,低版本IE中使用濾鏡的方式
參考《Trident(排版引擎)》
什么叫優(yōu)雅降級和漸進增強?
優(yōu)雅降級:Web站點在所有新式瀏覽器中都能正常工作,如果用戶使用的是老式瀏覽器,則代碼會檢查以確認它們是否能正常工作。由于IE獨特的盒模型布局問題,針對不同版本的IE的hack實踐過優(yōu)雅降級了,為那些無法支持功能的瀏覽器增加候選方案,使之在舊式瀏覽器上以某種形式降級體驗卻不至于完全失效.
漸進增強:從被所有瀏覽器支持的基本功能開始,逐步地添加那些只有新式瀏覽器才支持的功能,向頁面增加無害于基礎瀏覽器的額外樣式和功能的。當瀏覽器支持時,它們會自動地呈現(xiàn)出來并發(fā)揮作用。
是否了解公鑰加密和私鑰加密。
如果只是單方面采用非對稱性加密算法,其實有兩種方式,用于不同用處.
第一種是簽名,使用私鑰加密,公鑰解密,用于讓所有公鑰所有者驗證私鑰所有者的身份并且用來防止私鑰所有者發(fā)布的內容被篡改.但是不用來保證內容不被他人獲得.*
第二種是加密,用公鑰加密,私鑰解密,用于向公鑰所有者發(fā)布信息,這個信息可能被他人篡改,但是無法被他人獲得.如果甲想給乙發(fā)一個安全的保密的數(shù)據(jù),那么應該甲乙各自有一個私鑰,甲先用乙的公鑰加密這段數(shù)據(jù),再用自己的私鑰加密這段加密后的數(shù)據(jù).最后再發(fā)給乙,這樣確保了內容即不會被讀取,也不會被篡改.
WEB應用從服務器主動推送Data到客戶端有那些方式?
post和get兩種
對Node的優(yōu)點和缺點提出了自己的看法?
*(優(yōu)點)因為Node是基于事件驅動和無阻塞的,所以非常適合處理并發(fā)請求,
因此構建在Node上的代理服務器相比其他技術實現(xiàn)(如Ruby)的服務器表現(xiàn)要好得多。
此外,與Node代理服務器交互的客戶端代碼是由javascript語言編寫的,
因此客戶端和服務器端都用同一種語言編寫,這是非常美妙的事情。
*(缺點)Node是一個相對新的開源項目,所以不太穩(wěn)定,它總是一直在變,
而且缺少足夠多的第三方庫支持??雌饋?,就像是Ruby/Rails當年的樣子。
http狀態(tài)碼有那些?分別代表是什么意思?
狀態(tài)代碼狀態(tài)信息含義
100 ?Continue ?初始的請求已經(jīng)接受,客戶應當繼續(xù)發(fā)送請求的其余部分。(HTTP 1.1新)
101 ?Switching Protocols ?服務器將遵從客戶的請求轉換到另外一種協(xié)議(HTTP 1.1新)
200 ?OK ?一切正常,對GET和POST請求的應答文檔跟在后面。
201 ?Created服務器已經(jīng)創(chuàng)建了文檔,Location頭給出了它的URL。
202 ?Accepted ?已經(jīng)接受請求,但處理尚未完成。
203 ?Non-Authoritative Information
? ? ? ? 文檔已經(jīng)正常地返回,但一些應答頭可能不正確,因為使用的是文檔的拷貝(HTTP 1.1新)。
204 ?No Content ?沒有新文檔,瀏覽器應該繼續(xù)顯示原來的文檔。
205 ?Reset Content ?沒有新的內容,但瀏覽器應該重置它所顯示的內容。
206 ?Partial Content ?客戶發(fā)送了一個帶有Range頭的GET請求,服務器完成了它
300 ?Multiple Choices ?客戶請求的文檔可以在多個位置找到,這些位置已經(jīng)在返回的文檔內列出。如果服務器要提出優(yōu)先選擇,則應該在Location應答頭指明。
301 ?Moved Permanently ?客戶請求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL。
302 ?Found ?
類似于301,但新的URL應該被視為臨時性的替代,而不是永久性的。注意,在HTTP1.0中對應的狀態(tài)信息是“Moved Temporatily”。出現(xiàn)該狀態(tài)代碼時,瀏覽器能夠自動訪問新的URL,因此它是一個很有用的狀態(tài)代碼。注意這個狀態(tài)代碼有時候可以和301替換使用。例如,如果瀏覽器錯誤地請求http://host/~user(缺少了后面的斜杠),有的服務器 返回301,有的則返回302。嚴格地說,我們只能假定只有當原來的請求是GET時瀏覽器才會自動重定向。請參見307。
303 ?See Other ?類似于301/302,不同之處在于,如果原來的請求是POST,Location頭指定的重定向目標文檔應該通過GET提?。℉TTP 1.1新)。
304 ?Not Modified ?客戶端有緩沖的文檔并發(fā)出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告 訴客戶,原來緩沖的文檔還可以繼續(xù)使用。
305 ?Use Proxy ?客戶請求的文檔應該通過Location頭所指明的代理服務器提?。℉TTP 1.1新)。
307 ?Temporary Redirect ?和302 (Found)相同。許多瀏覽器會錯誤地響應302應答進行重定向,即使原來的請求是POST,即使它實際上只能在POST請求的應答是303時才能重定 向。由于這個原因,HTTP 1.1新增了307,以便更加清除地區(qū)分幾個狀態(tài)代碼:當出現(xiàn)303應答時,瀏覽器可以跟隨重定向的GET和POST請求;如果是307應答,則瀏覽器只 能跟隨對GET請求的重定向。(HTTP 1.1新)
400 ?Bad Request ?請求出現(xiàn)語法錯誤。
401 ?Unauthorized ?客戶試圖未經(jīng)授權訪問受密碼保護的頁面。應答中會包含一個WWW-Authenticate頭,瀏覽器據(jù)此顯示用戶名字/密碼對話框,然后在填 寫合適的Authorization頭后再次發(fā)出請求。
403 ?Forbidden ?資源不可用。服務器理解客戶的請求,但拒絕處理它。通常由于服務器上文件或目錄的權限設置導致。
404 ?Not Found ?無法找到指定位置的資源。這也是一個常用的應答。
405 ?Method Not Allowed ?請求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)對指定的資源不適用。(HTTP 1.1新)
406 ?Not Acceptable ?指定的資源已經(jīng)找到,但它的MIME類型和客戶在Accpet頭中所指定的不兼容(HTTP 1.1新)。
407 ?Proxy Authentication Required ?類似于401,表示客戶必須先經(jīng)過代理服務器的授權。(HTTP 1.1新)
408 ?Request Timeout ?在服務器許可的等待時間內,客戶一直沒有發(fā)出任何請求。客戶可以在以后重復同一請求。(HTTP 1.1新)
409 ?Conflict ?通常和PUT請求有關。由于請求和資源的當前狀態(tài)相沖突,因此請求不能成功。(HTTP 1.1新)
410 ?Gone ?所請求的文檔已經(jīng)不再可用,而且服務器不知道應該重定向到哪一個地址。它和404的不同在于,返回407表示文檔永久地離開了指定的位置,而 404表示由于未知的原因文檔不可用。(HTTP 1.1新)
411 ?Length Required ?服務器不能處理請求,除非客戶發(fā)送一個Content-Length頭。(HTTP 1.1新)
412 ?Precondition Failed ?請求頭中指定的一些前提條件失?。℉TTP 1.1新)。
413 ?Request Entity Too Large ?目標文檔的大小超過服務器當前愿意處理的大小。如果服務器認為自己能夠稍后再處理該請求,則應該提供一個Retry-After頭(HTTP 1.1新)。
414 ?Request URI Too LongURI ?太長(HTTP 1.1新)。
416 ?Requested Range Not Satisfiable ?服務器不能滿足客戶在請求中指定的Range頭。(HTTP 1.1新)
500 ?Internal Server Error ?服務器遇到了意料不到的情況,不能完成客戶的請求。
501 ?Not Implemented ?服務器不支持實現(xiàn)請求所需要的功能。例如,客戶發(fā)出了一個服務器不支持的PUT請求。
502 ?Bad Gateway ?服務器作為網(wǎng)關或者代理時,為了完成請求訪問下一個服務器,但該服務器返回了非法的應答。
503 ?Service Unavailable ?服務器由于維護或者負載過重未能應答。例如,Servlet可能在數(shù)據(jù)庫連接池已滿的情況下返回503。服務器返回503時可以提供一個 Retry-After頭。
504 ?Gateway Timeout ?由作為代理或網(wǎng)關的服務器使用,表示不能及時地從遠程服務器獲得應答。(HTTP 1.1新)
505 ?HTTP Version Not Supported ?服務器不支持請求中所指明的HTTP版本。(HTTP 1.1新)
一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發(fā)生了什么?(流程說的越詳細越好)
分為4個步驟:
(1),當發(fā)送一個URL請求時,不管這個URL是Web頁面的URL還是Web頁面上每個資源的URL,瀏覽器都會開啟一個線程來處理這個請求,同時在遠程DNS服務器上啟動一個DNS查詢。這能使瀏覽器獲得請求對應的IP地址。
(2),?瀏覽器與遠程Web服務器通過TCP三次握手協(xié)商來建立一個TCP/IP連接。該握手包括一個同步報文,一個同步-應答報文和一個應答報文,這三個報文在?瀏覽器和服務器之間傳遞。該握手首先由客戶端嘗試建立起通信,而后服務器應答并接受客戶端的請求,最后由客戶端發(fā)出該請求已經(jīng)被接受的報文。
(3),一旦TCP/IP連接建立,瀏覽器會通過該連接向遠程服務器發(fā)送HTTP的GET請求。遠程服務器找到資源并使用HTTP響應返回該資源,值為200的HTTP響應狀態(tài)表示一個正確的響應。
(4),此時,Web服務器提供資源服務,客戶端開始下載資源。
請求返回后,便進入了我們關注的前端模塊
簡單來說,瀏覽器會解析HTML生成DOM?Tree,其次會根據(jù)CSS生成CSS?Rule?Tree,而javascript又可以根據(jù)DOM?API操作DOM