本篇記錄一下,最近面試的幾家公司的一下面試題(一些本人的專案中的內容可能就不介紹了)。
一、一個http請求,從客戶端到服務端需要經過哪些步驟?
簡單描述為:
1.域名解析(DNS伺服器)
2.Tcp連線
3.傳送http請求(請求行,請求頭,請求資訊)
4.伺服器響應請求
5.Tcp斷開連線 具體看: 傳送門
二、談談你對js堆和棧的理解?(原始問法是透過 引用型別和值型別的題引申過來的)
三、
① 如何在原型新增屬性或方法。
function person(){}
person.prototype.say = function(){}
複製程式碼
② 通過形參的方式給person新增屬性name,並建立一個叫 zhangsan的物件繼承person的屬性
function Person(name){
this.name = name;
}
Person.prototype.say(){
console.log(this.name);
}
const zhangsan = new Person(‘zhangsan’);
複製程式碼
③ 在建立lisi的物件。
const lisi = new Person(‘lisi’);
複製程式碼
④ 如何讓李四繼承張三的say函式。(如何改變this的指向,讓zhangsan的this指向lisi) 說明:呼叫 lisi.say(); 列印 zhangsan。
用es5新加入的 bind() 來解決。 詳細看:
複製程式碼
四、如果有一個邏輯運算很複雜的程式塊中(比如億),執行時會發生什麼?遇到這種情況通常會如何解決?process.nextTick()瞭解嗎?談談你的理解?
五、
① 宣告一個promise,五秒後輸出helloworld
② promise裡面執行的內容是在 呼叫.then() 之前執行的還是 呼叫.then才執行?
六、
const p1 = function(){
return new promise(resolve=>{});
};
const p2 = function(){
return new promise(resolve=>{});
};
async function f1(){
// 如果要用 p1和p2 的值來作為引數如何接收?如何不用等待 其中p1(或p2)執行完畢之後再去執行p2(或p1)。
}
複製程式碼
七、談談你對物件導向是如何理解的?
八、你們專案中的api通常是如何定的?簡單描述一下rest api。
九、Node 所熟悉的框架,談談 express是如何從一箇中介軟體執行到下一個中介軟體的(express的路由機制)?
十、Express和koa 或者egg的區別?
十一、舉出幾個 你做過的分庫分表的例項。
十二、你通常是如何優化mysql的查詢?
十三、你們專案中用到了redis的那些方法,set 和 mset的區別?
十四、Mysql的索引是如何實現的。
十五、舉例寫出一個Mysql儲存過程和一個事務。
十六、Es5中的普通函式和es6中的箭頭函式有什麼區別?還有this的指向。
十七、你在開發過程中,遇到了哪些難以解決的問題,是如何解決的?(幾乎每一家公司都問)
十八、你常用的系統有哪些?簡述Docker 是如何部署的?
event loop、libuv、事件迴圈 瞭解嗎?談談你的理解。
最後上一張,面試的筆試題