前端面試題2019.02.28

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

(1)、使用js循環     php

//供使用者調用 
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)使用正則html

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)使用JQjava

$trim(str)

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

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;
  }

三、比較 typeof 與 instanceof ?sql

相同點:都經常使用來判斷一個變量是否爲空,或者是什麼類型的。數據庫

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

四、如何理解閉包?數組

通常指能夠訪問另外一個函數做用域變量的的函數。當一個變量想要反覆調用,又想避免全局污染的狀況下,會使用到閉包。缺點是所佔用的空間不容易被釋放,須要手動清除。瀏覽器

五、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/

六、瀏覽器的內核分別是什麼?

IE內核:Trident

Firefox內核:Gecko

Safari內核:Webkit

Opera內核:Presto=>Blink

Chrome內核:Blink 

七、瀏覽器本地存儲?

Cookie、LocalStorag、SessinStorage。

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

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

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

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

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

八、你瞭解的Web攻擊技術?

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

(2)、sql注入攻擊:主要是就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令,好比select * from test where username="wuxu" or 1=1,這樣會使用戶跳過密碼直接登陸,具體解決方案:一、特殊字符過濾,不要用拼接字符串的方法來湊sql語句。二、對sql語句進行預編譯,好比java的preparedstatement。三、關閉錯誤信息,攻擊者可能會經過不斷的嘗試來獲得數據庫的一些信息,因此關閉錯誤信息變得重要起來。四、客戶端對數據進行加密,使原來傳進來的參數由於加密而被過濾掉。五、控制數據庫的權限,好比只能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來傳遞。

九、iframe的優缺點?

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

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

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

function unique(arr){
 //Set數據結構,它相似於數組,其成員的值都是惟一的
 return Array.from(new Set(arr)); // 利用Array.from將Set結構轉換成數組
}
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息