国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前端知識點(diǎn)總結(jié)---面試專用

yy736044583 / 687人閱讀

摘要:加上等于在頁面完全載入后再執(zhí)行,相當(dāng)于文檔載入后即執(zhí)行,不用等包括圖片在內(nèi)的資源下載完畢。對于請求,表示請求還沒有被處理,客戶端應(yīng)該向里的重新發(fā)起請求。

1.關(guān)于基礎(chǔ)css html js部分 1.1基本算法 1)快速排序

時(shí)間復(fù)雜度 nlogn

function quickSort(arr){
    if (arr.length<=1){
        return arr;
    }
   var pivotIndex = 0,
        pivort = arr.splice(pivortIndex, 1)[0];
    var left = [],
        right = [];
    for (var i = 1, length = arr.length; i < length; i++) {
        if (arr[i] < pivort) {
            left.push(arr[i]);
        }else if (arr[i] > = pivort) {
            right.push(arr[i]);
        }
    }
   return quickSort(left).concat([pivort], quickSort(right));
}
2) 二分查找算法

時(shí)間復(fù)雜度:logn(以2為底n的對數(shù))

二分查找的基本思想是將n個(gè)元素分成大致相等的兩部分,去a[n/2]與x做比較,如果x=a[n/2],則找到x,算法中止;如果xa[n/2],則只要在數(shù)組a的右半部搜索x.

時(shí)間復(fù)雜度無非就是while循環(huán)的次數(shù)!

總共有n個(gè)元素,

漸漸跟下去就是n,n/2,n/4,....n/2^k,其中k就是循環(huán)的次數(shù)

由于你n/2^k取整后>=1

即令n/2^k=1

可得k=log2n,(是以2為底,n的對數(shù))

所以時(shí)間復(fù)雜度可以表示O()=O(logn)
function binarySearch (arr, value) {
    var low = 0,
        high = arr.length - 1,
        mid;
    while (low <= high) {
        mid = Math.floor((low + high)/2);
      if (arr[mid] == value) {
          return mid;
      }else if (arr[mid] < value) {
          low = mid +1;
      }else if (arr[mid] > value) {
          high = mid -1;
      }else {
          return -1;
      }
    }
}
3)單向鏈表反轉(zhuǎn)

依次將第2---N個(gè)節(jié)點(diǎn)逐次插入到第一個(gè)節(jié)點(diǎn)后,最后將第一個(gè)節(jié)點(diǎn)挪到新表的結(jié)尾

例子為單向鏈表,頭結(jié)點(diǎn)為空

時(shí)間復(fù)雜度:N

function reverse (list) {

//空鏈表

    if (list.head.next == null) {
        return list;
    }
//非空鏈表
    var p = list.head.next,
        q;
    while (p.next !== null) {
        q = p.next;
      p.next = q.next;
      q.next = list.head.next;
      list.head.next = q;
    }
    return list;
}
4)查找單向鏈表的倒數(shù)第K個(gè)節(jié)點(diǎn)
function searchK (list, k) {
    var head = list.head;
    if (head == null || k == 0) {
        return null;
    }
    //第一個(gè)節(jié)點(diǎn)先向前走K-1步
    var firstNode = head;
    for (var i = 0; i < k-1; i++) {
        firstNode = firstNode.next;
    }
    //判斷鏈表長度是否有K長
    if (i!== k-1) { 
        return null;
   }
   //兩個(gè)節(jié)點(diǎn)同時(shí)走
   var secondNode = head;
   while (firstNode.next !== null) {
           secondNode = secondNode.next;
      firstNode = firstNode.next;
   }
   return secondNode;
}
5)深度克隆
function clone (test) {
    if (Array.isArray(test)) {
        var arr = [];
       for (var i = 0, length = test.length; i < length; i++) {
               arr.push(clone(arr[i]));
       }
    }else if (typeOf test === "object") {
        var obj = {};
       for (var j in test) {
               obj[j] = clone(test[j]);
       }
       return obj;
    }else {
        return test;
    }
}
6)數(shù)組去重

例如去重["1",1,2,2,NaN,NaN,null,undefined]

尤其注意1,"1"

NaN

function _isNaN (value) {
    return typeof value === "number" && isNaN(value);
}
function unique (arr) {
    var type = "",
        key = "",
        res = [],
        hash = {};
    for(var i= 0,len=arr.length;i

7)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
https://segmentfault.com/a/11...

1.2 replace,match,search正則匹配是string的方法
str.replace(/ /g,"20%");
g表示全局匹配,不會匹配完第一個(gè)就不匹配了

i忽略大小寫

m多行匹配
1.3 Rexg正則匹配test,exec
test,返回一個(gè) Boolean 值,它指出在被查找的字符串中是否存在模式。
如果存在則返回 true,否則就返回 false。

exec,用正則表達(dá)式模式在字符串中運(yùn)行查找
var str=" 12 er 45 ;; ";var rexg=/ /;rexg.exec(str);

Array[1]
0: " "
index: 0
input: " 12 er 45 ;; "
length: 1
__proto__: Array[0]
var str=" 12 er 45 ;; ";var rexg=/ /;rexg.exec(str);
[" "]0: " "index: 0input: " 12 er 45 ;; "length: 1__proto__: Array[0]

var str=" 12 er 45 ;; ";str.match(/ /g,"20%");
[" ", " ", " ", " ", " "]

var str=" 12 er 45 ;; ";str.replace(/ /,"20%");
"20%12 er 45 ;; "

var str=" 12 er 45 ;; ";str.match(/ /,"20%");
[" "]

var str=" 12 er 45 ;; ";str.search(/ /,"20%");
0

var str=" 12 er 45 ;; ";str.search(/ /g,"20%");
0

var str=" 12 er 45 ;; ";var rexg=/ /;rexg.test(str);
true
1.4 閉包

定義:

可以訪問外部函數(shù)作用于中變量的函數(shù)

被內(nèi)部函數(shù)引用的外部函數(shù)的變量保存在外部作用域中而不被回收

優(yōu)缺點(diǎn):

優(yōu)點(diǎn):

變量私有化

減少全局變量污染

可以讓一個(gè)變量常駐內(nèi)存

缺點(diǎn):

內(nèi)存泄漏

閉包會攜帶包含它的函數(shù)的作用域,因此會比其他函數(shù)占用更多的內(nèi)存

1.5 js數(shù)組

數(shù)組可以當(dāng)棧用:

arr.unshift(val)進(jìn)棧,依次向前插入

arr.pop()出棧 取得數(shù)組最后一項(xiàng),原數(shù)組改變減少最后一項(xiàng)

實(shí)現(xiàn)了先進(jìn)后出

數(shù)組當(dāng)隊(duì)列或者正常數(shù)組用:

arr.push(val),順序添加
arr.shift(),拋出第一個(gè)值即arr[0],原數(shù)組改變減少第一項(xiàng)
2.關(guān)于JS延遲加載
       JS延遲加載的方式:
    
    1.位置,js放在結(jié)束標(biāo)簽前 
    
    2.監(jiān)聽,window.onload后再添加script標(biāo)簽
    
    3.屬性,為script標(biāo)簽添加屬性defer或async 
    
    4.ajax下載js腳本后eval()執(zhí)行
    
3.defer和async的比較
3.1 defer="defer",defer默認(rèn)false:
該屬性用來通知瀏覽器,這段腳本代碼將不會產(chǎn)生任何文檔內(nèi)容。
例如 JavaScript代碼中的document.write()方法將不會騎作用,瀏覽器遇到這樣的代碼將會忽略,并繼續(xù)執(zhí)行后面的代碼。
屬性只能是 defer,與屬性名相同。
在HTML語法格式下,也允許不定義屬性值,僅僅使用屬性名。

3.2 async="true/false",只寫async省略屬性值的情況下為true:
該屬性為html5中新增的屬性,它的作用是能夠異步地下載和執(zhí)行腳本,不因?yàn)榧虞d腳本而阻塞頁面的加載。
一旦下載完畢就會立刻執(zhí)行。

加上defer 等于在頁面完全載入后再執(zhí)行,相當(dāng)于文檔載入后即執(zhí)行,不用等包括圖片在內(nèi)的資源下載完畢。
async和defer一樣,都不會阻塞其他資源下載,所以不會影響頁面的加載,
但在async的情況下,js文檔一旦下載完畢就會立刻執(zhí)行,所以很有可能不是按照原本的順序來執(zhí)行,如果js有依賴性,就要注意了。

3.3 相同點(diǎn):    
加載文件時(shí)不阻塞頁面渲染;
使用這兩個(gè)屬性的腳本中不能調(diào)用document.write方法;
允許不定義屬性值,僅僅使用屬性名;

 3.4 不同點(diǎn):
html的版本html4.0中定義了defer;html5.0中定義了async;這將造成由于瀏覽器版本的不同而對其支持的程度不同;
 執(zhí)行時(shí)刻:每一個(gè)async屬性的腳本都在它下載結(jié)束之后立刻執(zhí)行,同時(shí)會在window的load事件之前執(zhí)行。
所以就有可能出現(xiàn)腳本執(zhí)行順序被打亂的情況;
每一個(gè)defer屬性的腳本都是在頁面解析完畢之后,按照原本的順序執(zhí)行,同時(shí)會在document的DOMContentLoaded之前執(zhí)行。

3.5 混合用
如果async為true,那么腳本在下載完成后異步執(zhí)行。
如果async為false,defer為true,那么腳本會在頁面解析完畢之后執(zhí)行。
如果async和defer都為false,那么腳本會在頁面解析中,停止頁面解析,立刻下載并且執(zhí)行。
4.關(guān)于ajax

var xhr = new XMLHttpRequest(); IE new ActiveXObject("Microsoft.XMLHTTP");

1.xhr.open()

三個(gè)參數(shù):

1)請求方式,post/get

2)請求的URL

3)是否發(fā)送異步請求 true/false

注意: 只是啟動,并未發(fā)送請求,要調(diào)用send

2.xhr.send()

一個(gè)參數(shù):必須有

參數(shù)為http請求的主體

post請求一般傳入

get請求必須傳入null

發(fā)送后得到服務(wù)器的響應(yīng),響應(yīng)的數(shù)據(jù)會自動填充xhr的屬性

responseText,響應(yīng)主體

responseXML

status,http狀態(tài)碼

statusText,狀態(tài)說明

3.xhr.readyState

如何判斷服務(wù)器響應(yīng)已到位,如何判斷響應(yīng)所處階段

xhr.readyState:0,1,2,3,4
4表示完成,收到全部響應(yīng)

4.xhr.status

((status >= 200 && status <300) || status = = = 304 )

表示請求成功

5.xhr.onreadystatechange事件

readyState改變一次,onreadystatechange事件觸發(fā)一次

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
    try {
        if((xhr.status >= 200 && xhr.status <300) || xhr.status == 304){
            console.log(xhr.responseText);
        }else{
            console.log("erro:" + xhr.status);
        }
    }catch(ex){
        //ontimeout處理
    }
    }
};
xhr.open("get","example.js",true);//異步
xhr.send(null);

6.對GET,POST請求參數(shù)的處理

GET

1) encodeURIComponent()對參數(shù)鍵和值進(jìn)行編碼,保證格式正確

2) 鍵=值對之間以 & 分隔
function addURLParam(url,name,value){
    url + = (url.indexOf("?") = = -1 ? "?" : "&");
    url + = encodeURIComponent(name) + "=" + encodeURIComponent(value);
    return url;
}

POST

XMLHttpRequest 1級的實(shí)現(xiàn):

1)Content-Type的設(shè)置:xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

2)serialize()序列化數(shù)據(jù)

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
    try {
        if((xhr.status >= 200 && xhr.status <300) || xhr.status == 304){
            console.log(xhr.responseText);
        }else{
            console.log("erro:" + xhr.status);
        }
    }catch(ex){
        //ontimeout處理
    }
    }
};
xhr.open("post",url,true);//異步
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
var form = document.getElementById("exampleID");
xhr.send(serialize(form));
XMLHttpRequest 2級
增加了FormData:不必明確頭部類型

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
    try {
        if((xhr.status >= 200 && xhr.status <300) || xhr.status == 304){
            console.log(xhr.responseText);
        }else{
            console.log("erro:" + xhr.status);
        }
    }catch(ex){
        //ontimeout處理
    }
    }
};
xhr.open("post",url,true);//異步

var form = document.getElementById("exampleID");
xhr.send(new FormData(form));

7.XMLHttpRequest 2 級

xhr.timeout = 屬性值

xhr.ontimemout = function(){
 console.log("超時(shí)未收到響應(yīng)");
};

在規(guī)定時(shí)間內(nèi)瀏覽器未收到響應(yīng)就觸發(fā) ontimeout 事件
5.關(guān)于web存儲

5.1 cookie,sessionStorage,localStorage區(qū)別?

sessionStorage,loalStorage統(tǒng)稱webStorage;

Cookie的作用是與服務(wù)器進(jìn)行交互,作為HTTP規(guī)范的一部分而存在,而Web Storage僅僅是為了在本地“存儲”數(shù)據(jù)而生

(1)存儲大小:

    cookie,4k;  sessionStorage,localStorage,5M或更大;

(2)過期時(shí)間:

       cookie,過期時(shí)間前一直有效,默認(rèn)cookie(沒有設(shè)置expires的cookie)失效時(shí)間直到關(guān)閉瀏覽器,設(shè)置方式
    
    保留COOKIES一個(gè)小時(shí)------Response.Cookies("MyCookie").Expires = DateAdd("h", 1, Now());
    
   sessionStorage關(guān)閉即刪除,只要同源的同窗口(或tab)中,刷新頁面或進(jìn)入同源的不同頁面,數(shù)據(jù)始終存在
   
   loalStorage永不丟失

(3)服務(wù)器交互帶寬使用情況:

       
    cookie放在請求頭發(fā)送給服務(wù)端,浪費(fèi)帶寬
    
    sessionStorage,loalStorage無于服務(wù)端交互

(4)存儲位置:

       cookie以鍵值對形式存儲在http請求的header中發(fā)送給服務(wù)端,同時(shí)從服務(wù)端獲得的cookie是 鍵=值分號隔開的形式存儲 
    
   sessionStorage,localStorage存儲在本地

(5)共享:

       cookie受同源策略限制
    
    sessionStorage同一窗口共享
    
    localStorage受同源限制
    

(6)用法:

       
    cookie需要自己封裝方法
    
    * escape()函數(shù)是JS內(nèi)置函數(shù),編碼將字符串編碼為16進(jìn)制,unescape()解碼
1.添加一個(gè)cookie

2.獲取指定名稱的cookie值:getcookie(name)
該函數(shù)返回名稱為name的cookie值,如果不存在則返回空,其實(shí)現(xiàn)如下:

3.刪除指定名稱的cookie:deletecookie(name)
該函數(shù)可以刪除指定名稱的cookie,其實(shí)現(xiàn)如下:
cookie 的屬性:Domain(設(shè)置子域該域下才可訪問cookie)

HttpOnly(設(shè)置后將不能用JS腳本操作cookie),

Secure(設(shè)置后將只能通過HTTPS協(xié)議訪問),

Expiress(過期時(shí)間,不設(shè)置默認(rèn)關(guān)閉瀏覽器cookie失效),目前已被max-age屬性所取代 max-age用秒來設(shè)置cookie的生命周期

Path(設(shè)置路徑的頁面才可訪問cookie)

sessionStorage,localStorage有接口:

setItem,getItem,removeItem,clear

例如清除所有的key/value
sessionStorage.clear(); localStorage.clear(); 
sessionStorage.setItem("key", "value");
var value = sessionStorage.getItem("key");
sessionStorage.removeItem("key");
5.關(guān)于http 5.1 狀態(tài)碼
200 OK - [GET]:服務(wù)器成功返回用戶請求的數(shù)據(jù),該操作是冪等的(Idempotent)

 201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數(shù)據(jù)成功
 
202 Accepted - [*]:表示一個(gè)請求已經(jīng)進(jìn)入后臺排隊(duì)(異步任務(wù))

204 NO CONTENT - [DELETE]:用戶刪除數(shù)據(jù)成功。

301,302,303 redirect:重定向;

    301永久性重定向 增加SEO排名,說說
    
    302臨時(shí)重定向,
    
  303:對于POST請求,它表示請求已經(jīng)被處理,客戶端可以接著使用GET方法去請求Location里的URI。
  
    307:對于POST請求,表示請求還沒有被處理,客戶端應(yīng)該向Location里的URI重新發(fā)起POST請求。
    
304not modified:未修改返回緩存的內(nèi)容不再請求新的;request If-None-Match

400:客戶端的URL輸入有問題,瀏覽器解析不出來 
 
401:需要身份驗(yàn)證

403:已經(jīng)驗(yàn)證身份通過,但是服務(wù)器不予執(zhí)行

404:對客戶端請求服務(wù)端找不到資源

406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是只有XML格式)

410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再得到的

422 Unprocesable entity - [POST/PUT/PATCH] 當(dāng)創(chuàng)建一個(gè)對象時(shí),發(fā)生一個(gè)驗(yàn)證錯(cuò)誤

503:服務(wù)器暫時(shí)無法提供服務(wù),過一會就好了
5.2 GET和POST的區(qū)別?

GET - 從指定的資源請求數(shù)據(jù)

POST - 向指定的資源提交要被處理的數(shù)據(jù)

大小限制

get 1024字節(jié)

post 無限制,但可以自行設(shè)定

安全性

post較get安全

數(shù)據(jù)存放

get傳輸?shù)膮?shù)附在URL后面

post傳輸?shù)臄?shù)據(jù)放在HTTP請求體中

冪等

get是冪等的,post不是 

緩存,收藏,歷史

get都可以,post沒有

6.關(guān)于網(wǎng)絡(luò)安全
xss(cross site script)跨站腳本攻擊:

 Reflected XSS(基于反射的XSS攻擊):搜索框內(nèi)鍵入惡意代碼
 
 Stored XSS(基于存儲的XSS攻擊):發(fā)布的帖子/文章鍵入惡意代碼
 
 DOM-based or local XSS(基于DOM或本地的XSS攻擊):免費(fèi)WIFI中間網(wǎng)關(guān)對網(wǎng)頁修改嵌入惡意代碼
 
 防范:前端對要顯示的內(nèi)容和服務(wù)端返回的內(nèi)容進(jìn)行轉(zhuǎn)碼htmlencode
 
     服務(wù)端對請求的內(nèi)容進(jìn)行驗(yàn)證防范攻擊
     
     xss攻擊主要是拿到cookie,所以可以禁止操作cookie,設(shè)置HttpOnly屬性
 
 詳細(xì)見  https://segmentfault.com/a/1190000008423064
 

CSRF跨站請求偽造 cross site request forgery

   詳情:https://segmentfault.com/a/1190000008424201

   冒充用戶發(fā)起請求(在用戶不知情的情況下),完成一些違背用戶意愿的請求
(比如散布的小廣告點(diǎn)進(jìn)去就完成轉(zhuǎn)正操作了假如你剛剛登錄過網(wǎng)上銀行session依舊未過期)

   防御方法:

          驗(yàn)證HTTP請求頭部的referer即可知道是否是bank.com發(fā)起的請求;
          
       請求地址中添加token并驗(yàn)證;
       
       HTTP頭部添加自定義屬性并驗(yàn)證;
       
       驗(yàn)證碼

XSS:

攻擊者發(fā)現(xiàn)XSS漏洞——構(gòu)造代碼——發(fā)送給受害人——受害人打開——攻擊者獲取受害人的cookie——完成攻擊

CSRF:

攻擊者發(fā)現(xiàn)CSRF漏洞——構(gòu)造代碼——發(fā)送給受害人——受害人打開——受害人執(zhí)行代碼——完成攻擊

SQL注入攻擊

構(gòu)造巧妙的SQL語句,從而成功獲取想要的數(shù)據(jù);黑客的填空游戲

某個(gè)網(wǎng)站的登錄驗(yàn)證的SQL查詢代碼為:

strSQL = "SELECT * FROM users WHERE (name = "" + userName + "") and (pw = ""+ passWord +"");"

惡意填入

userName = "1" OR "1"="1";

passWord = "1" OR "1"="1";

時(shí),將導(dǎo)致原本的SQL字符串被填為

strSQL = "SELECT * FROM users WHERE (name = "1" OR "1"="1") and (pw = "1" OR "1"="1");"

也就是實(shí)際上運(yùn)行的SQL命令會變成下面這樣的

strSQL = "SELECT * FROM users;"

防御方法 : 對輸入進(jìn)行驗(yàn)證 整形參數(shù)判斷 unicode轉(zhuǎn)換等

7.關(guān)于跨域

同源策略

1 協(xié)議相同

2 域名相同

3 端口相同

跨域的方法

1.window.postMessage(message,targetOrigin) (雙向跨域)

2.document.domain = 共同的主域名 跨子域 (雙向跨域)

   http://www.a.com/a.js
 http://script.a.com/b.js
 統(tǒng)一為主域名a.com

----------------------------------------------------------

3.jsonp(單向跨域)

   只支持get請求
    

4.CORS跨域資源共享 (單向跨域)

   比JSONP強(qiáng)大,支持各種類型的HTTP請求

允許瀏覽器向跨源服務(wù)器,發(fā)出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制

A跨域訪問B,需要在B的響應(yīng)頭加入  Access-Control-Allow-Origin:http://A

5.服務(wù)器代理 (單向跨域)

   跨域的HTTP請求是在服務(wù)器端

6.window.name (單向跨域)

8.關(guān)于構(gòu)建工具gulp git grunt fis3

gulpjs是一個(gè)前端構(gòu)建工具,與gruntjs相比:

gulpjs無需寫一大堆繁雜的配置參數(shù),

而且gulpjs使用的是nodejs中stream來讀取和操作數(shù)據(jù),其速度更快

npm install -g gulp  全局安裝到本機(jī)c盤data中

npm install gulp  
安裝到本項(xiàng)目的node moudule模塊中

npm install --save-dev gulp  
將gulp依賴添加到本項(xiàng)目的packge.json的依賴內(nèi)

就可以運(yùn)行g(shù)ulp命令執(zhí)行g(shù)ulpfile.js文件內(nèi)定義的default任務(wù)了

gulpfile.js內(nèi)

常用的四個(gè)API:gulp.task(), gulp.src(), gulp.dest(),gulp.watch()

gulp.src

gulp.src(globs) 獲取文件流對象,是虛擬文件對象流,進(jìn)而調(diào)用stream.pipe()繼續(xù)操作流
       
通過指定gulp.src()方法配置參數(shù)中的base屬性,我們可以更靈活的來改變gulp.dest()生成的文件路徑。
       
當(dāng)我們沒有在gulp.src()方法中配置base屬性時(shí),base的默認(rèn)值為通配符開始出現(xiàn)之前那部分路徑。
          
例子:
gulp.src(script/lib/*.js, {base:"script"}) //配置了base參數(shù),此時(shí)base路徑為script
//假設(shè)匹配到的文件為script/lib/jquery.js
  .pipe(gulp.dest("build")) //此時(shí)生成的文件路徑為 build/lib/jquery.js

gulp.dest

    gulp.dest(path) 用來寫文件,path替換掉基本路徑就是生成的文件的路徑
    

gulp.task

gulp.task(name,[deps],fn) 任務(wù)的名字,依賴的任務(wù),執(zhí)行的方法
    
deps只有一個(gè)也要用數(shù)組括起來
    
如果任務(wù)A依賴B,B有異步編碼,A不會等B的異步代碼執(zhí)行完而是直接執(zhí)行,解決辦法:
   
1,執(zhí)行一個(gè)回調(diào)函數(shù)通知gulp異步完成
2,返回一個(gè)流對象
3,require Q;返回promise對象
   

gulp.watch

gulp.watch(glob,tasks) 匹配文件路徑  文件改變后執(zhí)行tasks(之前定義好的task,gulp.task(name,[deps],fn))
    
詳情見 https://segmentfault.com/a/1190000008427866

對于GIT的提問

git rebase

git merge

等等 詳情見 https://segmentfault.com/a/11...

9.關(guān)于框架vue angularjs
v-for  ng-repeat

new vue({el:data:methods:})  

angular.module(name,[]) 繼而controller

angular controller之間通信方式:

上下級之間通信:作用域繼承、事件觸發(fā)($on、$emit 和 $boardcast)

同級之間通信:注入服務(wù) service、借助父級controller實(shí)現(xiàn)子級controller之間的通信、借助$rootScope實(shí)現(xiàn)同級之間的通信

10.關(guān)于nodejs

創(chuàng)建簡單的服務(wù)器

var http = require("http"); 
 
http.createServer(function(request, response) { 
 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
 
    response.write("Hello World"); 
 
    response.end(); 
 
}).listen(8888);
11.關(guān)于restfulAPI

1.協(xié)議

HTTPS協(xié)議

2.域名

可以添加次級域名

https://api.example.com

如果不需要擴(kuò)展,可以放在主域名下

https://example.com/api

3.版本

為API添加版本

https://api.example.com/v1/

4.不允許動詞

路徑名詞一般與數(shù)據(jù)庫表格一直

https://api.example.com/v1/animals

5.參數(shù)設(shè)計(jì)

參數(shù)鍵值形式 & 符號分開

https://api.example.com/v1/animals?name="cat"&sex="1"

6.錯(cuò)誤處理

請求結(jié)果是錯(cuò)誤的4xx

一般返回的JSON數(shù)據(jù)中設(shè)置erro鍵

{
    error: "Invalid API key"
}

7.HTTP動詞

常用的:GET,POST

GET(SELECT):從服務(wù)器取出資源(一項(xiàng)或多項(xiàng))

POST(CREATE):在服務(wù)器新建一個(gè)資源

另有:

PUT(UPDATE):在服務(wù)器更新資源(客戶端提供改變后的完整資源)

PATCH(UPDATE):在服務(wù)器更新資源(客戶端提供改變的屬性)

DELETE(DELETE):從服務(wù)器刪除資源

HEAD:獲取資源的元數(shù)據(jù)

OPTIONS:獲取信息,關(guān)于資源的哪些屬性是客戶端可以改變的

8.狀態(tài)碼

上翻有

12.關(guān)于異步編程

ES 6以前:

回調(diào)函數(shù)(ajax實(shí)現(xiàn)異步的原理就是采用了回調(diào)函數(shù))

function f1(callback){
    setTimeout(function () {
      // f1的任務(wù)代碼
      callback();
    }, 1000);
      }

f1(f2);

問題:多層嵌套很混亂,異常難以捕獲

事件驅(qū)動/事件監(jiān)聽 發(fā)布/訂閱模式(觀察者模式)

原理同 回調(diào)

promise對象

promise模式在任何時(shí)刻都處于以下三種狀態(tài)之一:
未完成(unfulfilled)、已完成(resolved)和拒絕(rejected)

promise對象上的then方法負(fù)責(zé)添加針對已完成和拒絕狀態(tài)下的處理函數(shù)。
then(resolvedHandler, rejectedHandler); 
then方法會返回另一個(gè)promise對象,以便于形成promise管道,
這種返回promise對象的方式能夠支持開發(fā)人員把異步操作串聯(lián)起來

ES 6:

* Generator函數(shù)(協(xié)程coroutine)

ES 7:

* async和await
13.關(guān)于模塊化編程 requirejs seajs commonjs

AMD(Require遵循的規(guī)范)define, require

CMD(SeaJS遵循的規(guī)范)經(jīng)常使用的 API 只有 define, require, require.async, exports, module.exports 這五個(gè)

promise(commonJS提出的規(guī)范)

1.對于依賴的模塊,AMD 是提前執(zhí)行,CMD 是延遲執(zhí)行。
不過 RequireJS 從 2.0 開始,也改成可以延遲執(zhí)行(根據(jù)寫法不同,處理方式不同)

2.CMD 推崇依賴就近,AMD 推崇依賴前置。

14.關(guān)于面向?qū)ο?/b> 14.1封裝性

JS沒有類,怎么談封裝呢。有對象,對象有屬性

有構(gòu)造函數(shù),構(gòu)造函數(shù)有基本屬性值和引用屬性值

函數(shù)有prototype原型,可以實(shí)現(xiàn)屬性方法共享

14.2多態(tài)性 14.3繼承性

某一對象的實(shí)例 賦值給 另一個(gè)對象的原型 實(shí)現(xiàn)繼承

構(gòu)造函數(shù)、實(shí)例、原型的關(guān)系:

var a = function(){...};

var b = new a();//b 是由 a 構(gòu)造出來的

var c = function(){...};

c.prototype = b;//c 繼承了 a
15.關(guān)于跨設(shè)備響應(yīng)式

1.百分比

2.移動端禁viewport縮放功能

width:viewport 的寬度,可以指定一個(gè)固定值,如650;或者可以是device-width,表示設(shè)備的寬度

height:和 width 相對應(yīng),可指定高度

initial-scale:頁面初始縮放比例(0-1)

maximum-scale:允許用戶縮放到的最大比例(0-1)

minimum-scale:允許用戶縮放到的最小比例(0-1)

user-scalable:用戶是否可以手動縮放(yes/no)
禁用chrome 自調(diào)節(jié)字體大小

body {
    -webkit-text-size-adjust: 100%;
}

3.CSS3 media queries

@media only screen and (max/min-width/height: 960px) {
  /* 樣式定義 */
}

@media only screen and (max-width:500px){
  .outDiv {
      margin: 0 auto;
  }
}
16.關(guān)于瀏覽器兼容

簡單總結(jié)

css 樣式加前綴 -webkit這樣子的

js 冒泡事件和阻止冒泡

很多見:http://blog.csdn.net/xingxing...

http://blog.csdn.net/comeonj/...

17.關(guān)于linux

暫且放兩個(gè)鏈接 之前寫過的:

https://segmentfault.com/a/11...

https://segmentfault.com/n/13...

18. 前端性能優(yōu)化

HTTP:減少HTTP請求;解決辦法:合并圖片,合并css,js文件,lazzyload懶加載圖片

CSS:合理用reflow,repaint:style變一次就reflow一次,因此盡可能設(shè)一個(gè)新的class,改變className,reflow一次

DOM:減少DOM操作,多用innerHTML一次添加

JSON格式交換數(shù)據(jù),輕量級數(shù)據(jù)

css放在頭部,js放在尾部,外部引用

6.CDN內(nèi)容分發(fā)網(wǎng)絡(luò),實(shí)時(shí)性不太好

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/50474.html

相關(guān)文章

  • 前端識點(diǎn)總結(jié)---面試專用

    摘要:加上等于在頁面完全載入后再執(zhí)行,相當(dāng)于文檔載入后即執(zhí)行,不用等包括圖片在內(nèi)的資源下載完畢。對于請求,表示請求還沒有被處理,客戶端應(yīng)該向里的重新發(fā)起請求。 1.關(guān)于基礎(chǔ)css html js部分 1.1基本算法 1)快速排序 時(shí)間復(fù)雜度 nlogn function quickSort(arr){ if (arr.length = pivort) { ri...

    dabai 評論0 收藏0
  • 前端識點(diǎn)總結(jié)---面試專用

    摘要:加上等于在頁面完全載入后再執(zhí)行,相當(dāng)于文檔載入后即執(zhí)行,不用等包括圖片在內(nèi)的資源下載完畢。對于請求,表示請求還沒有被處理,客戶端應(yīng)該向里的重新發(fā)起請求。 1.關(guān)于基礎(chǔ)css html js部分 1.1基本算法 1)快速排序 時(shí)間復(fù)雜度 nlogn function quickSort(arr){ if (arr.length = pivort) { ri...

    sf190404 評論0 收藏0
  • 計(jì)算機(jī)常識 - 收藏集 - 掘金

    摘要:使用簡記后端掘金全稱為即消息隊(duì)列。優(yōu)測優(yōu)社區(qū)干貨精選老司機(jī)亂談編輯器之神掘金前言是一種信仰,我自從年有了這個(gè)信仰,已經(jīng)個(gè)年頭了。 PHP 程序員進(jìn)階學(xué)習(xí)書籍參考指南 - 后端 - 掘金PHP程序員進(jìn)階學(xué)習(xí)書籍參考指南 @heiyeluren lastmodify: 2016/2/18 ... 當(dāng)我們在談?wù)撉岸思用軙r(shí),我們在談些什么 - 前端 - 掘金潘建旭,豈安科技(www.bigse...

    Yi_Zhi_Yu 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<