富途網路科技有限公司2019秋招涼經
面試官姓潘,是一位年輕的和善的面試官,曾在tx就職,面試過程很nice。
他只問了我六個問題,我很多都答的不深入或者答不出來,也就是基礎知識不牢固,不透徹。
1.Jquery和vue操作DOM的區別?
Jquery和vue.js都是js的庫,Jquery操作dom本質上與原生js沒區別,只不過Jquery獲取的是Jquery物件,js獲取的是DOM物件,兩者更新資料所使用的方法不一樣,但是兩者可相互轉換。
例如:
var aLink = $("#a"); aLink.attr("disabled","true");
var alink = document.getElementById("a"); alink.disabled = true;
轉換:
$("#a").get(0) => alink
$(alink) => $("#a")
但是vue由於資料是雙向繫結的,其中有一個compile解析器,專用於解析模板指令(例如v-on、v-model等),在初始化解析的時候,將變數和dom物件進行了繫結,所以當監聽器observer發現(監聽)資料發生變化後,會通知訂閱者watcher去執行相應的函式,從而更新檢視。
2.vue在更新資料時,具體是怎麼更新的?
這個問題,當時沒明白麵試官的意圖,可能是想問關於virtual dom。
3.現假設有一段字串,形如:"<li>1<p>2<span>3<span>4</span>.......",把這些字串解析成DOM物件
利用棧資料結構去解析即可。解析第一個<li>的時候就壓入到棧底,依次類推,遇到相對應的閉標籤時,就出棧。
4.http請求快取具體是怎麼樣的?如果快取的檔案未過期,怎麼讓使用者即時獲取到最新的檔案?
請參考:
5.說說XSS、CSRF,詳細的。
中途由於對CSRF理解的不深,終止了回答,甚是尷尬。
6.請你實現一個功能,在呼叫delayHello()時,隔一秒後列印5。
面試官給出的程式碼雛形:
var hello = function(a, b){ console.log(a); } function delay(func, t){ //codes } var delayHello = delay(hello, 1000); delayHello(5, 6);
完成之後的程式碼:
var hello = function(a){
console.log(a);
}
function delay(func, t){
var fn = function(m){
setTimeout(function(){
func(m);
},t)
}
return fn;
}
var delayHello = delay(hello, 1000);
delayHello(5);
其實最後這題很好解決,我當時其實也是這個想法(但是好像return出來的那個函式忘記加引數了),但是不知道為什麼面試官說可不可以不用func(m)的方式呼叫,有沒有其他的方法。
難道要用var f = func; f(m) 的方法?
不知道讀者們有沒有更好的辦法...