1. 程式人生 > >富途網路科技有限公司2019秋招涼經

富途網路科技有限公司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) 的方法?

不知道讀者們有沒有更好的辦法...