1. 程式人生 > >前端面試題2019.02.28

前端面試題2019.02.28

javascrip 調用 展示 增加 sibling session new 作用 ont

1、用 js 寫出幾種去除 string 空格的方法。

(1)、使用js循環     

//供使用者調用 
function trim(s){ 
return trimRight(trimLeft(s)); 
} 
//去掉左邊的空白 
function trimLeft(s){ 
if(s == null) { 
return ""; 
} 
var whitespace = new String(" \t\n\r"); 
var str = new String(s); 
if (whitespace.indexOf(str.charAt(0)) != -1) { 
var j=0, i = str.length; while (j < i && whitespace.indexOf(str.charAt(j)) != -1){ j++; } str = str.substring(j, i); } return str; } //去掉右邊的空白 function trimRight(s){ if(s == null) return ""; var whitespace = new String(" \t\n\r"); var str = new String(s); if (whitespace.indexOf(str.charAt(str.length-1)) != -1){
var i = str.length - 1; while (i >= 0 && whitespace.indexOf(str.charAt(i)) != -1){ i--; } str = str.substring(0, i+1); } return str; }

(2)使用正則

String.prototype.Trim = function() 
{ 
return this.replace(/(^\s*)|(\s*$)/g, ""); 
} 
String.prototype.LTrim = function() 
{ 
return this.replace(/(^\s*)/g, ""); 
} 
String.prototype.RTrim = function() 
{ 
return this.replace(/(\s*$)/g, ""); 
}

//去左空格;
function ltrim(s){
return s.replace(/(^\s*)/g, "");
}
//去右空格;
function rtrim(s){
return s.replace(/(\s*$)/g, "");
}
//去左右空格;
function trim(s){
return s.replace(/(^\s*)|(\s*$)/g, "");
}

(3)使用JQ

$trim(str)

2、如何獲取瀏覽器URL中查詢字符串中的參數?

function getQuery(name)

  {

  var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");

  var r = window.location.search.substr(1).match(reg);

  if (r!=null) return unescape(r[2]); return null;
  }

3、比較 typeof 與 instanceof ?

相同點:都常用來判斷一個變量是否為空,或者是什麽類型的。

不同點:tyoeof返回字符串用來說明變量的數據類型,instanceof 返回布爾值,用來判斷變量是否屬於某個對象的實例。

4、如何理解閉包?

一般指可以訪問另一個函數作用域變量的的函數。當一個變量想要反復調用,又想避免全局汙染的情況下,會使用到閉包。缺點是所占用的空間不容易被釋放,需要手動清除。

5、JQuery的幾種選擇器分別是?

(1)、基本選擇器

*
#id
element
.class

(2)、層次選擇器

ancestor descendant
parent > child
prev + next
prev ~ siblings

(3)、基本過濾器選擇器

:first
:last
:not
:even
:odd
:eq
:gt
:lt
:header
:animated

(4)、內容過濾器選擇器

:contains
:empty
:has
:parent

(5)、可見性過濾器選擇器

(6)、屬性過濾器選擇器

(7)、子元素過濾器選擇器

(8)、表單選擇器

(9)、表單過濾器選擇器

具體可參考 http://api.jquery.com/category/selectors/

6、瀏覽器的內核分別是什麽?

IE內核:Trident

Firefox內核:Gecko

Safari內核:Webkit

Opera內核:Presto=>Blink

Chrome內核:Blink

7、瀏覽器本地存儲?

Cookie、LocalStorag、SessinStorage。

LocalStorage讀取數據需要在 協議、主機名和端口相同的情況下,而SessionStorage在滿足上面的條件時還要求在同一窗口(標簽頁)。

Cookie默認關閉窗口清除數據,可通過SetCookie設置存儲時間。

LocalStorage永久存儲,可設置保存時間。

SessionStorage 會話級存儲,關閉頁面自動銷毀。相當於Cookie的默認。

Cookie是數據會在蔑稱發送HTTP請求的時候,同時發送給服務器。 而LocalStorag、SessinStorage 則不會。

8、你了解的Web攻擊技術?

(1)、xss跨站攻擊技術:主要是攻擊者往網頁裏嵌入惡意腳本,或者通過改變html元素屬性來實現攻擊,主要原因在於開發者對用戶的變量直接使用導致進入html中會被直接編譯成js,通常的get請求通過url來傳參,可以在url中傳入惡意腳本,從而獲取信息,解決方法:特殊字符過濾。

(2)、sql註入攻擊:主要是就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令,比如select * from test where username="wuxu" or 1=1,這樣會使用戶跳過密碼直接登錄,具體解決方案:1、特殊字符過濾,不要用拼接字符串的方法來湊sql語句。2、對sql語句進行預編譯,比如java的preparedstatement。3、關閉錯誤信息,攻擊者可能會通過不斷的嘗試來得到數據庫的一些信息,所以關閉錯誤信息變得重要起來。4、客戶端對數據進行加密,使原來傳進來的參數因為加密而被過濾掉。5、控制數據庫的權限,比如只能select,不能insert,防止攻擊者通過select * from test ;drop tables這種操作。

(3)、遠程目錄包含攻擊,原理就是註入一段用戶能控制的腳本或代碼,並讓服務端執行。比如php中的include($filename),而此filename由用戶傳入,用戶即可傳入一段惡意腳本,從而對服務其造成傷害,解決方法:當采用文件包含函數的時候,不應動態傳入,而應該有具體的文件名,如果動態傳入,要保證動態變量不被用戶所控制。
(4)、會話劫持:這是一種通過獲取用戶Session ID後,使用該Session ID登錄目標賬號的攻擊方法,此時攻擊者實際上是使用了目標賬戶的有效Session。會話劫持的第一步是取得一個合法的會話標識來偽裝成合法用戶,因此需要保證會話標識不被泄漏,通俗一點就是用戶在登錄時,唯一標示用戶身份的session id被劫持,使得攻擊者可以用這個session id來進行登錄後操作,而攻擊者主要是通過 竊取:使用網絡嗅探,XSS攻擊等方法獲得。而第一種方式網絡嗅探,我們可以通過ssl加密,也就是https來對報文進行加密,從而防止報文被截獲,而第二種方式xss攻擊,方式在第一種已經給出,不再贅述。此外通過設置HttpOnly。通過設置Cookie的HttpOnly為true,可以防止客戶端腳本訪問這個Cookie,從而有效的防止XSS攻擊,還有就是設置token驗證。關閉透明化Session ID。透明化Session ID指當瀏覽器中的Http請求沒有使用Cookie來存放Session ID時,Session ID則使用URL來傳遞。

9、iframe的優缺點?

優點:(1)、能夠完整展示嵌入網頁。(2)、頁面和程序分類(3)、一個iframe可多次調用,代碼復用性高。(4)、加載第三方內容如:圖標、廣告等可使用 iframe 解決。

缺點:(1)、兼容性差,在移動端無法完全顯示。(2)、結構混亂,多個框架會出現滾動條,用戶體驗差。(3)、會產生多個頁面,不利於管理。(4)、會增加服務器的 http 請求。

10、編寫一個方法,去掉一個數組的重復元素。

function unique(arr){
 //Set數據結構,它類似於數組,其成員的值都是唯一的
 return Array.from(new Set(arr)); // 利用Array.from將Set結構轉換成數組
}

前端面試題2019.02.28