1. 程式人生 > >史上前端面試最全知識點(附答案)

史上前端面試最全知識點(附答案)

一.html & js & css

1.AMD和CMD是什麼?它們的區別有哪些?

AMD和CMD是二種模組定義規範。現在都使用模組化程式設計,AMD,非同步模組定義;CMD,通用模組定義。AMD依賴前置,CMD依賴就近。CMD的API職責單一,沒有全域性require,AMD的一個API可以多用。

2.web開發常見的漏洞。

XSS(跨站指令碼攻擊):其原理是攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML程式碼,當其它使用者瀏覽該網站時,這段HTML程式碼會自動執行,從而達到攻擊的目的。如,盜取使用者Cookie、破壞頁面結構、重定向到其它網站等。

SQL注入:使用者可以提交一段資料庫查詢程式碼,根據程式返回的結果,獲得某些他想得知的資料,這就是所謂的SQL Injection,即SQL注入。

3.cookie和session

當你在瀏覽網站的時候,WEB 伺服器會先送一小小資料放在你的計算機上,Cookie 會幫你在網站上所打的文字或是一些選擇,

都紀錄下來。當下次你再光臨同一個網站,WEB 伺服器會先看看有沒有它上次留下的 Cookie 資料,有的話,就會依據 Cookie
裡的內容來判斷使用者,送出特定的網頁內容給你。
 當程式需要為某個客戶端的請求建立一個session時,伺服器首先檢查這個客戶端的請求裡是否已包含了一個session標識
(稱為session id),如果已包含則說明以前已經為此客戶端建立過session,伺服器就按照session id把這個session檢索出來
使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則為此客戶端建立一個session並且生成一個與此session相
關聯的session id

4.MVC BFC

mvc是模型(model)-檢視(view)-控制器(controller)的縮寫,一種軟體設計典範使用MVC的目的是將M和V的實現程式碼分離,從而使同一個程式可以使用不同的表現形式。MVC對應Html,CSS,js。

BFC全稱”Block Formatting Context”, 中文為“塊級格式化上下文”。流體特性:塊狀水平元素,如div元素(下同),在預設情況下(非浮動、絕對定位等),水平方向會自動填滿外部的容器;BFC元素特性表現原則就是,內部子元素不會影響外部的元素。

5.HTTP狀態碼:

 1.訊息  2.成功 3.重定向 4.請求錯誤 5.伺服器錯誤 304:響應禁止包含訊息體,如果客戶端傳送了一個帶條件的 GET 請求且該請求已被允許,而文件的內容(自上次訪問以來或者根據請求的條件)並沒有改變,則伺服器應當返回這個狀態碼。 305:被請求的資源必須通過指定的代理才能被訪問。 400:語義有誤,當前請求無法被伺服器理解。除非進行修改,否則客戶端不應該重複提交這個請求,或者請求引數有誤。 403:伺服器已經理解請求,但是拒絕執行它。 404:請求失敗,請求所希望得到的資源未被在伺服器上發現。 500:伺服器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。一般來說,這個問題都會在伺服器端的原始碼出現錯誤時出現。

6.HTML 5 增加了一項新功能是 自定義資料屬性 ,也就是  data- 自定義屬性。在HTML5中我們可以使用以 data- 為字首來設定我們需要的自定義屬性,來進行一些資料的存放。
<div id = "user" data-uid = "12345" data-uname = "愚人碼頭" > </div>

// 使用getAttribute獲取 data- 屬性
var user = document . getElementById ( 'user' ) ;
var userName =user . getAttribute ( 'data-uname' ) ; // userName = '愚人碼頭'
var userId = user . getAttribute ( 'data-uid' ) ; // userId = '12345'
 
使用setAttribute設定 data- 屬性
user . setAttribute ( 'data-site' , 'http://www.css88.com' ) ;

7.使div水平垂直都居中

知道DIV的自身長度和寬度,其實解決的思路是這樣的:首們需要position:absolute;絕對定位。而層的定位點,使用外補丁margin負值的方法。負值的大小為層自身寬度高度除以二。[style="position: absolute;top:50%;left: 50%"]只能實現DIV離左邊框和上邊框的距離為螢幕的物理尺寸的一半,忽略了DIV本身的長度和寬度,所以不會實現DIV的水平垂直居中。
不知道DIV的本身長度和寬度時:

        $(window).load(function(){
            $(".mydiv").css({                position: "absolute",                left: ($(window).width() - $(".mydiv").width())/2,                top: ($(window).height() - $(".mydiv").height())/2
            });
        });

8.Call()和apply()
建構函式:

 function showname(){    this.name="zygg";
}var qq=new showname();console.log(qq.name);

我們發現apply()和call()的真正用武之地是能夠擴充函式賴以執行的作用域,可以改變函式體內部 this 的指向:

      window.firstName = "diz";        window.lastName = "song";        var myname = { firstName: "my", lastName: " " };        function show() {        console.log("Hello " + this.firstName + " " +this.lastName, " glad to meet you!");
        }
        show();
        show.call(myname);//如果不這樣寫,物件myname是沒法呼叫函式 show()的。

二者作用類似,區別就是引數不同:
call(thisObj, )
apply(thisObj,[argArray])

9.動態節點繫結事件

Live() delegate() bind()【處理文件中的靜態部分,不用於。。。】
delegate()和live()作用類似,附加的事件處理程式適用於匹配選擇器的當前及未來的元素(比如由指令碼建立的新元素)。但二者引數不一樣。
$(selector).delegate(childSelector,event,function)

$(selector).live(event,function)

$("div").delegate("p","click",function(){

$(this).slideToggle();

});//只有DIV內的p元素會被繫結事件。
$("p").live("click",function(){

$(this).slideToggle();

});//文件內所有p元素都會被繫結事件
bind()可以向元素新增的一個或多個事件處理程式,以及當事件發生時執行的函式。
$(selector).bind(event,function)
$("button").bind("click",function(){