1. 程式人生 > >10-撩課大前端-面試寶典-第十篇

10-撩課大前端-面試寶典-第十篇

1. px和em的區別?

px和em都是長度單位;

區別是: 
px的值是固定的,指定是多少就是多少,
計算比較容易。

em得值不是固定的,並且em會繼承父級元素的字型大小。

瀏覽器的預設字型高都是16px;
所以未經調整的瀏覽器都符合: 1em=16px;
那麼12px=0.75em, 10px=0.625em

2. CSS 去掉inline-block元素間隙的幾種方法?

間隙是怎麼來的:

間隙是由換行或者回車導致的;
只要把標籤寫成一行或者
標籤直接沒有空格,就不會出現間隙;

怎麼去除?

方法1:
元素間的間隙出現的原因
是元素標籤之間的空格,
把空格去掉間隙自然就會消失。

<div class="itlike">
  <span>撩課itlike</span><span>撩課itlike</span>
</div>

方法2:
利用HTML註釋標籤

<div class="demo">
    <span>撩課itlike</span><!-- 
    --><span>撩課itlike</span>
</div>

方法3:
取消標籤閉合
<div class="demo">
    <span>撩課itlike
    <span>撩課itlike
    <span>撩課itlike
    <span>撩課itlike
</div>

方法4:
在父容器上使用font-size:0;可以消除間隙
<div class="demo">
    <span>撩課itlike</span>
    <span>撩課itlike</span>
    <span>撩課itlike</span>
    <span>撩課itlike</span>
</div>
.demo {font-size: 0;}

3. 在Javascript中什麼是偽陣列?如何將偽陣列轉化為標準陣列?


偽陣列(類陣列):
無法直接呼叫陣列方法,
 length屬性有什麼特殊的行為,
但仍可以對真正陣列遍歷方法來遍歷它們。

典型的是函式的argument引數,還有像調
getElementsByTagName,
document.childNodes之類的,
它們都返回NodeList物件,  這些都屬於偽陣列。

可以使用Array.prototype.slice.call(fArray)將陣列
轉化為真正的Array物件。

4. 一次完整的HTTP事務是怎樣的一個過程?

基本流程:
a. 域名解析;
b. 發起TCP的3次握手;
c. 建立TCP連線後發起http請求;
d. 伺服器端響應http請求,瀏覽器得到html程式碼;
e. 瀏覽器解析html程式碼,並請求html程式碼中的資源;
f. 瀏覽器對頁面進行渲染呈現給使用者

5. 陣列快速排序?

思路:
a)  在資料集之中,選擇一個元素作為"基準"(pivot)。
b)  所有小於"基準"的元素,都移到"基準"的左邊;
    所有大於"基準"的元素,都移到"基準"的右邊。
c)  對"基準"左邊和右邊的兩個子集,
    不斷重複第一步和第二步,
    直到所有子集只剩下一個元素為止。

 var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};

6. 開發中有哪些常見的Web攻擊技術?


a) XSS(Cross-Site Scripting,跨站指令碼攻擊):
指通過存在安全漏洞的Web網站註冊使用者的瀏覽器
內執行非法的HTML標籤或者JavaScript進行的一種攻擊。

b)SQL注入

c) CSRF(Cross-Site Request Forgeries,跨站點請求偽造):
指攻擊者通過設定好的陷阱,強制對已完成的認證使用者進行
非預期的個人資訊或設定資訊等某些狀態更新。

7. 正則表示式驗證郵箱格式?

var reg = /^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$/;
var email = "[email protected]";
console.log(reg.test(email));  // true  

8. 正則表示式清除字串前後的空格?

function trim(str) {
    if (str && typeof str === "string") {
        // 去除前後空白符
        return str.replace(/(^\s*)|(\s*)$/g,""); 
    }
}