某跳动面试凉经

面试题

    • 1.自我介绍完,聊一下做过的项目,(我这里说了我在某讯开发部署的经验,所以这里聊了下)
    • 2.简单的出个题,用两个栈Stack实现一个队列Queue,栈用数组模拟(手写代码而且是,你写一行面试官就能看见一行的那种)
    • 3.那我们换一个,斐波那契数列计算出fn(100)吧
    • 4.三次握手,四次挥手分别是什么
    • 5.那做个this的指向题吧

以前也只是听说大厂面试要手撕代码,今天确实亲身体会了,接下来就奉献出机会不多的经验

1.自我介绍完,聊一下做过的项目,(我这里说了我在某讯开发部署的经验,所以这里聊了下)

2.简单的出个题,用两个栈Stack实现一个队列Queue,栈用数组模拟(手写代码而且是,你写一行面试官就能看见一行的那种)

//两个数组模拟栈的行为
var stack1=[],//存储栈
    stack2=[];//辅助栈
 
//栈是后入先出(LIFO,last in first out),队列是先入先出(FIFO,first in first out)
 
//队列插入元素函数
function push(ele)
{
     
    //模拟队列的push操作,直接往存储栈stack1中推入即可
    //但是要考虑辅助栈stack2中还存在值的情况,需要先将辅助栈中的值推回存储栈中
    while(stack2.length !== 0){
     
        stack1.push(stack2.pop());
    }
    stack1.push(ele);
}
 
//队列删除元素函数
function pop()
{
     
    //模拟队列的pop操作则要考虑栈的后入先出特性,需要先将存储栈stack1中的数组,推入辅助栈stack2,然后辅助栈弹出元素
    while(stack1.length !== 0){
     
        stack2.push(stack1.pop());
    }
    return stack2.pop();
}

当然我是没能写出来,一直在写项目,没有复习过数据结构的面试题,以为只问项目,是我单纯了,

3.那我们换一个,斐波那契数列计算出fn(100)吧

function fb1(n){
     
    if(n <= 2){
     
        return 1;   
    }else{
     
        return fb1(n-1) + fb1(n-2);
    }
}
 

这个就还好,不记得现做也行,然后问这个实现的时间复杂度是多少
我:???
正解:o(2^n)
某跳动面试凉经_第1张图片

4.三次握手,四次挥手分别是什么

三次握手
首先客户端,服务端,TCP三次握手:

握手过程中使用了TCP的标志,SYN和ACK。

初始化状态:客户端处于close关闭状态,服务器处于Listen监听状态。

第一次握手:客户端发送请求报文将 SYN=1 同步序列号和初始化 seq=x发送给服务端,服务端从初始化状态,创建连接,等待客户端,确认接收后的状态为SYN_Receive。这个时候客户端处于等待状态为SYN_Send。

第二次握手,服务器接收到报文后(SYN=1,seq=x)收到请求后请求报文变为同步序列号SYN=1,初始化序列号seq=1,确认号ACK=1,ack=x+1,服务器为SYN_Receive状态,发送端的状态为:SYN_Send。

第三次握手,客户端收到服务端的数据包(收到响应后),然后发送同步序列号ack=y+1和数据包的序列号seq=x+1和ACK=1确认包作为应答(第三次握手:ACK=1,seq=x+1,ack=y+1),客户端和服务端变化为established状态。
四次挥手
第一次挥手

客户端设置seq和 ACK ,向服务器发送一个 FIN=1报文段。此时,(第一次挥手,FIN=1,seq=u)客户端进入 FIN_WAIT 状态,表示客户端没有数据要发送给服务端了。

第二次挥手

服务端收到了客户端发送的 FIN 报文段,向客户端回了一个 ACK 报文段。

第三次挥手

服务端向客户端发送FIN 报文段,请求关闭连接,同时服务端进入 LAST_ACK 状态。

第四次挥手

客户端收到服务端发送的 FIN 报文段后,向服务端发送 ACK 报文段,然后客户端进入 TIME_WAIT 状态。服务端收到客户端的 ACK 报文段以后,就关闭连接。此时,客户端等待 2MSL(指一个片段在网络中最大的存活时间)后依然没有收到回复,则说明服务端已经正常关闭,这样客户端就可以关闭连接了。
到这基本已经凉了,我问不问点别的吗?

5.那做个this的指向题吧

var length = 10;
function fn() {
     
	console.info(this.length)
}
fn();  // A   10
let Person = {
     
	len: 5,
	say: function() {
     
		fn();  // B  10
		arguments[0]();  // C  1
	}
}
Person.say(fn);

细细品尝,你品,

你可能感兴趣的:(前端面经,堆栈,javascript)