Fork me on GitHub

记录一次阿里的电话面试

        上周日,和钉钉团队的服务器组有一次电话面试。面试的知识点都很细,虽然之前都有深入了解过,但项目中没有使用,有些没能有效的回答出来。

现在把面试内容做一次记录,方便下次面试前准备下。。。

        1、tcp的三次握手详细过程。

             

  (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  (3)第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

     备注:面试官会问,各过程的各标记为的使用情况。最好能把整个过程记住。

 

    2、hash_map 与map的使用场景。

        总 体来说,hash_map 查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级别;而map的查找速度是log(n)级别。hash还有hash函数的耗时。当有100w条记录的时候,map也只需要20次的比较,200w也只需要21次的比较!所以并不一定常数就比log(n) 小!

    hash_map对空间的要求要比map高很多,所以是以空间换时间的方法,而且,hash_map如果hash函数和hash因子选择不好的话,也许不会达到你要的效果,所以至于用map,还是hash_map,从3个方面来权衡:查找速度, 数据量, 内存使用,还有一个就是你的经验!没有特别的标准

 

    3、http1.0 与http2.0的区别

        1) 多路复用

        2)头部压缩与二进制格式

        3)服务端推送

 

    4、auto的作用

 

    5、share_ptr的介绍与循环引用

 

    6、进程间通信的种类与区别

 

     7、select、poll和epoll的区别

 

      8、假设现在一个服务器的cpu 100% 如何排查。

           我回答到了windbg,面试官又问windbg如何查看堆栈。 

posted @ 2018-03-20 10:53  烟波--钓徒  阅读(280)  评论(0编辑  收藏  举报