2017年6月9日,我第一次面試,結(jié)果一塌糊涂。
我的筆試題,很基礎(chǔ),不過剛看到也確實是懵逼,以下總結(jié):
js函數(shù)的幾種調(diào)用方式
- 函數(shù)調(diào)用方式
- 方法調(diào)用方式
- 構(gòu)造器調(diào)用方式
- apply|call調(diào)用方式
詳細(xì)說明傳送門
http://www.cnblogs.com/winyh/p/6668811.html
http://www.jb51.net/article/62535.htm
我最常用的是函數(shù)調(diào)用方式,就是寫個function,然后直接名字調(diào)用。
方法其實是在函數(shù)內(nèi)部寫屬性函數(shù)調(diào)用。
構(gòu)造器調(diào)用是在函數(shù)原型鏈上寫屬性函數(shù)調(diào)用,不過不推薦使用了。
apply這種調(diào)用方式的優(yōu)點在于可以指定this指向的對象。
其實幾種調(diào)用方式的區(qū)分都是和this有關(guān)系。
傳送門中有提到call和apply的區(qū)別,但是不是說的很清楚,這里需要信息查閱一下資料!
其實這些JavaScript語言精粹里面都有,只是沒好好看,可惜。
如何提高nodejs服務(wù)器的穩(wěn)定性
這個問題其實以前都沒有怎么關(guān)注過,不過這里提出來了想想似乎是很容易發(fā)生的問題。nodejs作為一種單線程的環(huán)境,一旦崩潰影響的就是所有的軟件模塊,這個很危險。以下是總結(jié)了一些解決方法:
- 當(dāng)然是從要求開發(fā)者的角度出發(fā),多寫try...catch等一些block容錯了
- 有利用一些外部的程序監(jiān)聽,比如forever,supervisor之類
- 增加日志管理,log4js 模塊(這個需要了解以下)
- 有提到domain這個東西,不是很清楚
- process.on('uncaughtException', function(err){...}); 來處理未被捕捉的錯誤。
傳送門
https://cnodejs.org/topic/4f16442ccae1f4aa270010e7
http://www.cnblogs.com/yupeng/p/3472214.html
動態(tài)鏈接和靜態(tài)鏈接的區(qū)別
其實這個問題我是很好奇和js的關(guān)系,總感覺這個是c++鏈接庫的知識。
明天查一下
http從發(fā)起請求到接受響應(yīng)的整個過程
傳送門
http://www.cnblogs.com/YeChing/p/6337378.html
js原型鏈理解
//js的變量和函數(shù)聲明都會提升,但是函數(shù)提升在變量提升之上,所以如果重名,變量會覆蓋函數(shù)。
function Foo(){
getName = function() {console.log(1);}
return this;
}
Foo.getName = function() {console.log(2);}
Foo.prototype.getName = function(){console.log(3);}
var getName = function(){console.log(4);}
function getName(){console.log(5);}
//函數(shù)的本身屬性
Foo.getName();2
//函數(shù)提升
getName();4
//不知道為什么這個無法運行。
Foo().getName();
//函數(shù)提升
getName();4
// new Foo.getName();2
//構(gòu)造器調(diào)用函數(shù),只會調(diào)用原型鏈上的屬性
new Foo().getName();3
new new Foo().getName();3
傳送門
http://www.cnblogs.com/wangfupeng1988/p/3977924.html
js this的理解
分為兩個部分,一個是瀏覽器中的this,另一個是node中的this。
- 瀏覽器中的this遵從函數(shù)調(diào)用四種方式,分別指向?qū)?yīng)的對象。
- node中的this卻不太一樣。
node函數(shù)中的this指向global。
全局中的this是一個空的對象,也就是module.exports。
構(gòu)造對象中的this指向這個對象。
傳送門
http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html
http://www.jb51.net/article/81556.htm
js call和apply的區(qū)別與作用
-
對來call和apply這兩個函數(shù)沒有太大的區(qū)別,唯一就是傳入?yún)?shù)一個是不定長(call),一個是數(shù)組(apply),而這兩個函數(shù)的第一個參數(shù)其實都是你想指定的上下文。
function add() { this.a = 1; this.b = 2; this.showResult = function(){ console.log(this.a + this.b); } } function sub() { this.a = 3; this.b = 4; } var add1 = new add(); var sub1 = new sub(); add1.showResult.call(sub1); --7 add1.showResult.apply(sub1,[]); --7
-
bind沒有參數(shù),只綁定上下文。
var num = 9;function Module(){ this.num = 81; this.getNum = function(){ console.log(this.num); } } var mymodule = new Module(); mymodule.getNum(); // var getNum = mymodule.getNum; function getNum(){ console.log(num); } // 9, 因為在這個例子中,"this"指向全局對象 getNum();//undefined // 創(chuàng)建一個'this'綁定到module的函數(shù) var boundGetNum = getNum.bind(mymodule); boundGetNum(); // 81
傳送門
http://uule.iteye.com/blog/1158829
https://segmentfault.com/q/1010000003494514
https://segmentfault.com/a/1190000002662251
時間復(fù)雜度計算
閑聊
期間技術(shù)也有問到一些網(wǎng)絡(luò)方面的基礎(chǔ),網(wǎng)絡(luò)各層是負(fù)責(zé)什么的。
還有是promise的狀態(tài)轉(zhuǎn)換。
大boss有問到數(shù)據(jù)庫三大原則和樂觀鎖、悲觀鎖等,還有hashmap數(shù)據(jù)結(jié)構(gòu)怎么實現(xiàn)。
相關(guān)
偏函數(shù)
返回一個函數(shù),返回的函數(shù)是根據(jù)入?yún)⑸傻呐袛囝愋偷暮瘮?shù)。利用了js閉包。
閉包
閉包的最大用處有兩個,一個是前面提到的可以讀取函數(shù)內(nèi)部的變量,另一個就是讓這些變量的值始終保持在內(nèi)存中。
使用注意點
- 由于閉包會使得函數(shù)中的變量都被保存在內(nèi)存中,內(nèi)存消耗很大,所以不能濫用閉包,否則會造成網(wǎng)頁的性能問題,在IE中可能導(dǎo)致內(nèi)存泄露。解決方法是,在退出函數(shù)之前,將不使用的局部變量全部刪除。
- 閉包會在父函數(shù)外部,改變父函數(shù)內(nèi)部變量的值。所以,如果你把父函數(shù)當(dāng)作對象(object)使用,把閉包當(dāng)作它的公用方法(Public Method),把內(nèi)部變量當(dāng)作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數(shù)內(nèi)部變量的值。
傳送門
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html