记一次初级 Android 面试

前段时间依然裸辞了,上一份工作是某事业单位,身边的朋友就不明白我为啥要辞掉那么好的工作。其实吧,我觉得对于好这个定义,一直以来都是相对的,而不是绝对的。至于明白的人都知道,事业单位办事情相对于企业而言,还是有很大差别的。比如在工作效率方面,事业单位比较稳打稳扎,效率可能比较慢。企业、公司追求效益,要求的效率极高。这也是我一直想去互联网公司看看,所以就裸辞了,到跟团队老大提离职到交接完成总共就四天。这个我还是比较诧异的。不管怎么说,能这么快离职,也是这篇博客诞生的原因。

  • 之前早就想记录下自己面试的过程,但是入职之后一直比较忙,所以趁着这几天放假,就先立个牌坊,把这次面试记录下来吧。为以后回顾这一路,也好做个准备。

因为刚好那天目前公司的技术刚好在,所以全程都是技术面。面试的大概内容就是以下:

1. Tcp握手过程

TCP 中有三次握手,四次挥手

三次握手

  • 第一次握手:

    建立连接。客户端发送连接请求,发送SYN报文,随机生成seq,本例默认为0。然后,客户端进入SYN_SEND状态,等待服务器的确认。

  • 第二次握手:

    服务器收到客户端的SYN报文段。需要对这个SYN报文段进行确认,发送ACK报文,将ack设置为1(ack值为对方seq+1或者seq+L(数据长度L))。同时,自己还要发送SYN请求信息,将seq为0。服务器端将上述所有信息一并发送给客户端,此时服务器进入SYN_RECV状态。

  • 第三次握手:

    客户端收到服务器的ACK和SYN报文后,进行确认,然后将ack设置为1,seq设置为1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

四次挥手

  • 第一次挥手

    客户端向服务器发送一个FIN报文段,将设置seq为100和ack为120,
    此时,客户端进入 FIN_WAIT_1状态,这表示客户端没有数据要发送服务器了,请求关闭连接;

  • 第二次挥手

    服务器收到了客户端发送的FIN报文段,向客户端回一个ACK报文段,ack设置为101,seq设置为120;
    服务器进入了CLOSE_WAIT状态,客户端收到服务器返回的ACK报文后,进入FIN_WAIT_2状态;

  • 第三次挥手

    服务器会观察自己是否还有数据没有发送给客户端,如果有,先把数据发送给客户端,
    再发送FIN报文;如果没有,那么服务器直接发送FIN报文给客户端。请求关闭连接,
    同时服务器进入LAST_ACK状态;

  • 第四次挥手

    客户端收到服务器发送的FIN报文段,向服务器发送ACK报文段,将seq设置为101,将ack设置为121,
    然后客户端进入TIME_WAIT状态;服务器收到客户端的ACK报文段以后,就关闭连接;此时,客户端等待
    2MSL后依然没有收到回复,则证明Server端已正常关闭,客户端也可以关闭连接了。

2. MQTT 服务质量等级Qos

> QoS(Quality of Service)等级是发送与接收端的一种关于保证交付信息的协议。

一共有三个等级:

  • QoS 0 – 最多一次传输

    消息是基于TCP/IP网络传输的。没有回应,在协议中也没有定义重传的语义。消息可能到达服务器1次,也可能根本不会到达。

  • QoS 1 – 至少一次的传输

    服务器接收到消息会被确认,通过传输一个PUBACK信息。如果有一个可以辨认的传输失败,无论是通讯连接还是发送设备,还是过了一段时间确认信息没有收到,发送方都会将消息头的DUP位置1,然后再次发送消息。消息最少一次到达服务器。SUBSCRIBE和UNSUBSCRIBE都使用level 1 的QoS。如果客户端没有接收到PUBACK信息(无论是应用定义的超时,还是检测到失败然后通讯session重启),客户端都会再次发送PUBLISH信息,并且将DUP位置1。当它从客户端接收到重复的数据,服务器重新发送消息给订阅者,并且发送另一个PUBACK消息。

  • QoS 2 只有一次的传输

    在QoS level 1上附加的协议流保证了重复的消息不会传送到接收的应用。这是最高级别的传输,当重复的消息不被允许的情况下使用。这样增加了网络流量,但是它通常是可以接受的,因为消息内容很重要。

3. Socket长连接断开原因及解决方法

长连接会存在断开的情况,而断开原因主要是:

  • 长连接所在进程被杀死
  • NAT超时
  • 网络状态发生变化
  • 其他不可抗因素(网络状态差、DHCP的租期等等 )

解决方法:

  • 进程保活
  • 心跳保活机制(着重讲了Mina)
  • 断线重连机制

5. 各种类的初始化顺序

6. 如何理解事件驱动

7. 谈谈对路由的理解

8. 口述实现mvp的登录设计

9. mv*系列设计模式/架构的区别与相似

10. 大小端序是什么及其区别

11. 同步、异步区别及实现

12. 如何处理 TCP 粘包

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值