本篇记录一下,最近面试的几家公司的一下面试题(一些本人的项目中的内容可能就不介绍了)。
一、一个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、事件循环 了解吗?谈谈你的理解。
最后上一张,面试的笔试题