Go面试看这里了~(二十四)

161 篇文章 12 订阅

原文地址:Go面试看这里了~(二十四)

1、循环调用包?

常规解决方案如下:

  1. 新建公共组合包(子包),在组合包中组合调用。

  2. 全局存储需要相互依赖的函数,通过关键字进行调用。

  3. 新建公共接口包(父包),将需要循环调用的函数或方法抽象为接口。

  4. 不需要回调结果的可以通过事件总线(eventBus)解耦。

2、ping执行流程?

以机器A、B为例。

同一网段ping执行流程如下:

  1. ping通知系统建立一个固定格式的ICMP请求数据包。

  2. ICMP协议打包这个数据包和B的IP地址转交给IP协议层(一组后台运行的进程,与ICMP类似)。

  3. IP层协议将以B的IP地址为目的地址,本机IP地址为源地址,加上一些其他的控制信息,构建一个IP数据包。

  4. 获取B的MAC地址,IP层协议通过B的IP地址和本身的子网掩码,发现它跟自己属同一网络,就直接在本网络查找这台机器的MAC,若两台机器之前有过通信,在A的ARP缓存表应该有B的IP与A的MAC的映射关系,若没有,则发送ARP请求广播,得到B的MAC地址,一并交给数据链路层,数据链路层构建一个数据帧,目的地址是IP层传过来的MAC地址,源地址是本机的MAC地址,再附加一些控制信息,依据以太网的介质访问规则,将它们传送出去,B收到这个数据帧后,先检查目的地址,和本机MAC地址对比,符合则接收,接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP协议层协议,IP层检查后,将有用的信息提取交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给A,其过程和A发送ICMP请求包到B类似(此时B已知A的MAC地址,不需再发ARP请求),如不符合则直接丢弃。

不同网段ping执行流程如下:

  1. ping通知系统建立一个固定格式的ICMP请求数据包。

  2. ICMP协议打包这个数据包和B的IP地址转交给IP协议层(一组后台运行的进程,与ICMP类似)。

  3. IP层协议将以B的IP地址为目的地址,本机IP地址为源地址,加上一些其他的控制信息,构建一个IP数据包。

  4. 获取B的MAC地址,IP协议通过计算发现B与本机不在同一网段内,就直接交给路由处理,就是将路由的MAC取过来,至于怎么得到路由的MAC地址,和之前一样,先在ARP缓存表中寻找,找不到可以利用广播,路由得到这个数据帧之后,再跟B联系,若找不到,就向A返回一个超时信息。

接下来对ping后返回信息的分析一下。

Request timed out:表示一是对方已关机,或网络上没有这个地址,二是对方与自己不在同一网段内,通过路由也无法到达,三是对方存在,不过设置了ICMP数据包过滤(比如防火墙设置),最后就是错误设置IP地址。

正常情况下,一台主机一张网卡,一个IP地址或多个网卡,多个IP地址,但如果一台电脑的“拨号网络适配器”(相当于一块软网卡)的TCO/IP设置中,设置了一个与网卡IP地址处于同一子网的IP地址,这样,在IP层协议看来,这台主机就有两个不同的接口处于同一网段内,当从这台主机ping其他机器时,会存在两个问题,一是主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段,二是主机不知道用哪个地址作为数据包的源地址。

因此,从这台主机去ping其它机器,IP层协议会无法处理,超时后,ping就会给出一个“超时无应答”的错误信息提示。但从其它主机ping这台主机时,请求包从特定网卡来,ICMP只须简单的将目的、源地址互换,并更改一些标志即可,ICMP应答包能顺利发出,其它主机就能成功ping通这台主机了。

Destination host Unreachable:表示一是自己未设定默认路由,对方跟自己不在同一网段,二是网线有问题。

Request timed out 与 Destination host Unreachable 的区别:所经过的路由器的路由表具有到达目标的路由,而目标因为原因不可到达,这时出现前者,如果路由表中连到达目标的路由都没有,就会出现后者。

Bad ip address:没有连接到DNS服务器,无法解析IP,也可能是IP不存在。

Source quench received:对方或中途服务器繁忙而无法应答。

Unkonw host:远程主机名字不能被域名服务器转换成IP地址,故障原因可能是DNS服务器有故障,或名字不正确,或网络管理员的系统与远程主机之间的通信线路故障。

No answer:无响应,说明本地系统有一条通向中心主机的路由,却接收不到它发给该中心主机的人和信息,故障原因可能是:中心主机无工作,本地或中心主机网络配置不正确,本地或中心的路由器无工作,通信线路有故障,中心主机存在路由选择问题。

Ping 127.0.0.1:如果ping不通,则表明本地址TCP/IP协议不能正常工作。

no rout to host:网卡工作不正常。

transmit failed:10043网卡驱动不正常。

unknown host name:DNS配置不正确。

3、字符串解析为数字?

标准库strconv的strconv.ParseFloat和strconv.ParseInt等。

至此,本次分享就结束了,后期会慢慢补充。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值