面试笔记三(总结的答案可能有误,感谢批评指正)

持续更新中……

海南船之宝科技有限公司(1~8)
医渡云(北京)有限公司(9~14)

海南船之宝科技有限公司(1~8):

1.websocket的底层实现?

(1)WebSocket 的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等

(2)它在握手阶段采用 HTTP/1.1 协议,首先客户端向服务端发起一个HTTP请求,请求头里有一个Upgrade字段,Upgrade字段的值为websocket,这个请求告诉服务器我已经把请求升级到websocket了,不再使用原先的http,如果服务端支持客户端版本的websocket,就会返回101进行响应,握手完成后接下来的TCP数据包就是websocket协议的帧了。

(3)websocket提供两种协议:不加密的 ws://和 加密的 wss://. 因为是用 HTTP 握手,它和 HTTP 使用同样的端口:ws 是 80(HTTP),wss 是 443(HTTPS)。

2.tcp和udp哪个好?

(1)udp好,虽然说tcp使用三次握手四次挥手实现有序、可靠,而udp会出现丢包,但是tcp自生的慢开始、拥塞控制算法已经不太适用当前的网络环境了,比如无线网络,无线网络可能会出现短暂的信号干扰导致丢包,而一旦出现丢包tcp的拥塞控制算法会认为网络已经饱和,于是采用指数级避让,从而导致无线传输速度急剧下降,所以,在无线网络中丢包时采用指数级避让是不合理的。

(2)对于udp,最新的http3直接是基于udp来设计的,http3的核心是quic协议,quick协议同时具有tcp协议的可靠性和udp协议的速度和效率,所以我觉得udp比tcp更具有发展前景。

3.当你在浏览器地址栏输入一个URL后回车,将会发生的事情?

​  域名解析(浏览器的DNS缓存、操作系统的DNS缓存、DNS服务器缓存) --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

4.内网有哪些ip网段?

  A类:10.0.0.0~10.255.255.255

  B类:172.16.0.0~172.31.255.255

  C类:192.168.0.0~192.168.255.255

5.DNS服务器使用的是什么协议?

  一般是使用udp协议,也可能使用tcp协议,由于udp报文最大长度是512字节,而tcp报文允许超过512字节,当报文长度大于512字节时DNS服务器使用tcp协议,小于或等于512字节时使用udp协议,而域名解析时返回的内容一般都比校短不会超过512节字,所以域名解析时一般是使用udp协议。

6.你知道哪些排序算法?

  十大经典排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、桶排序、计数排序、基数排序

工业界使用的排序算法:Timsort,它是基于归并排序和插入排序优化而来的,并且被用作Java和Python的内置排序算法。

7.linux查看系统的所有进程

  ps -ef 可以列出所有进程
  ps -ef | grep + 服务名 可以列出和某个服务相关的进程,比如ps -ef | grep nginx可以列出和nginx服务相关的进程号
  top命令可以监视系统中不同的进程所使用的资源

8.linux结束一个进程

  ctrl + c 或 kill pid

总结:
这是我第一次参加面试,还是线下,考查的都是比较基础的知识,由于我是裸面的,发挥得并不好,不过面完刚下楼就接到了HR的电话,说我面试通过了。


点击回到目录

医渡云(北京)有限公司(9~11):

9.描述一下raft算法

  raft节点有三种角色,分别是Leader(领导者)、Follower(跟随者)、Candidate(候选者)
  Leader(领导者):接受客户端请求,并向跟随者同步请求日志。当日志同步到大多数节点上后提交日志,并向跟随者告知同步提交的日志。
  Follower(跟随者):接受并持久化领导者同步的日志,在领导者告知日志同步提交之后,提交日志。
  Candidate(候选者):介于跟随者和领导者之间的临时角色,跟随者接收不到领导者的心跳时,跟随者会升级为候选者。
   跟随者和领导者之间存在心跳机制,同时也有一个超时时间,这个超时时间一般是一个150ms到300ms之间。如果在超时时间内追随者没有收到领导者的心跳消息,那么追随者就会变成候选人,然后候选人向其他节点请求投票。如果其他节点没有把自己的票投完就会答应这个投票请求。当候选者获得大多数节点的投票就可以成为领导者。现在所有更改都要通过领导者,每个更改都将添加为节点日志中的条目里,然后领导者把日志条目转发给所有跟随者,当超过一半的跟随者收到日志后,领导者就提交日志,然后通知其他跟随者也可以提交日志了。这样集群的状态就达成了共识,这个过程叫做日志复制。
  raft算法也可以解决分区状态的问题,当一个集群被分成了两个无法互相通行的两个区,那么这两个区都存在一个领导者,这时客户端向节点数目更少的分区里发消息,当领导者收到消息并写入日志后,由于领导者不可能把这些日志复制到超过半数的节点,所以这个分区里的日志是永远无法提交的,当然,若是客户端发给节点数超过一半的分区是可以提交的,当分区解除后,如果某个分区的领导者当前任期内有一条日志同步到了多数节点,那么这个分区的领导者会继续当领导者,而其他分区的领导者会变回跟随者,并把之前没有提交的日志回滚,重新同步最新领导者的日志。

10.raft算法实现了什么一致性

  最终一致性

11.算法题:链表求和

正向链表求和(逐位相加并加上进位,使用尾插法构建结果链表)
leetcode:https://leetcode-cn.com/problems/add-two-numbers-ii/
·
反向链表求和(先存入栈中,然后逐位相加并加上进位,使用头插法构建结果链表)
leetcode:https://leetcode-cn.com/problems/sum-lists-lcci/

点击回到目录

你可能感兴趣的:(面试总结,面试,网络,职场和发展)