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