t1. 介绍下TCP三次握手、四次挥手

(问题彩蛋):
在这之前问一下大家 当客户端和服务器建立三次握手后,客户端突然断网,这时候服务器会知道客户端掉线了嘛?然后客户端网恢复了,还需要在建立TCP的三次握手嘛? 那时候会有四次挥手嘛?

知道答案的可在评论区留言

  1. 三次握手过程理解

    (1)第一次握手:建立连接时,客户端到服务器,并进入SYN_SENT状态,等待服务器确认。

    (2)第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。

    (3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

有资料需求的可以了解下,有关于包括 数据结构、底层进阶、图形视觉、音视频、架构设计、逆向安防、RxSwift、flutter,算法等方面的资料,面试资料就在群文件里面可自行下载,891点击 488进入 181
有什么问题也可以直接在里面提出来,互相交流,同时内有好友发内推机会,一起共同进步!

  1. 四次挥手过程理解

    (1)第一次挥手:客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u,此时,客户端进入FIN-WAIT-1(终止等待1)状态。

    (2)第二次挥手:服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

    (3)第三次挥手:服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

    (4)第四次挥手:客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB(传输控制块)后,才进入CLOSED状态。而服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

t1.在不借助临时变量的前提下,交换两个变量的值?

一般而言,我们的代码是这样的:

void swap(int& a, int& b) {int tmp = a;a = b;b = tmp;
}

这是因为在 a = b a = b a=b 语句执行中,只能进行这一次值的转移,转移过后变量 a a a 原来的值就丢失了。所以需要一个辅助变量 t m p tmp tmp 暂存 a a a 的值。同理,我们还可以利用临时变量暂存 a + b a + b a+b 的值,并在一次值转移后通过暂存的两数之和以及已经改变了存储值的一个数相减得到另一个数:

void swap2(int& a, int& b) {int tmp = a + b;a = b;b = tmp - a;
}

我们可以进一步地利用 b b b 代替 t m p tmp tmp 实现这一功能:

void swap3(int& a, int& b) {b = a + b; // 现在 b = sum{a, b}a = b - a;// a = sum{a, b} - a = b// 此时 a 中存放的是原来 b 的值b = b - a; // b = sum{a, b} - b = a// 此时 b 中存放的是原来 a 的值
}

加法与减法互补,所以可以通过先暂存两数之和,再通过减法达到交换的目的;而异或运算与自己互补,更加便利,且不会溢出:

void swap4(int& a, int& b) {b = a ^ b; // 现在 b = a ^ ba = b ^ a;// a = (a ^ b) ^ a = b// 此时 a 中存放的是原来 b 的值b = b ^ a; // b = (a ^ b) ^ b = a// 此时 b 中存放的是原来 a 的值
}

有资料需求的可以了解下,有关于包括 数据结构、底层进阶、图形视觉、音视频、架构设计、逆向安防、RxSwift、flutter,算法等方面的资料,面试资料就在群文件里面可自行下载,891点击 488进入 181
有什么问题也可以直接在里面提出来,互相交流,同时内有好友发内推机会,一起共同进步!

t1. 介绍一下一个进程的内存管理

  1. 在操作系统中,系统会给每个进程分配虚拟地址,虚拟地址的大小与处理器的位数有关,如32位处理器进程可分配4GB的虚拟内存供程序正常运行。这4GB的虚拟内存,存储单元从地址0开始进行排序,此地址为虚拟地址。

  2. 该虚拟地址可分为五个部分:

    (1)栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。线程也有自己维护的栈。

    (2)堆区:程序动态申请的空间,由程序释放或其他方式释放,若没有释放,可能导致内存泄露。

    (3)全局区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放 。

    (4)文字常量区:常量字符串就是放在这里的,程序结束后由系统释放。

    (5)程序代码区:存放函数体的二进制代码。

文章到这里就结束了,你也可以私信我及时获取面试相关资料。如果你有什么意见和建议欢迎给我留言。

请iOS的小伙伴关注 !喜欢的话给一个赞吧!谢谢!谢谢!谢谢!

2021年 百度客户端面经面试题(留有问题彩蛋,请各位尝试回答)相关推荐

  1. 【面试题分析】第九篇 顺丰科技安卓客户端面经【2轮技术+1轮HR面】(21届秋招)

    参考面经:顺丰科技安卓客户端面经[2轮技术+1轮HR面](21届秋招) 第一题:http和https的区别(老HTTP了) 第二题:Http request的几种类型(HTTP请求报文的常用方法) 第 ...

  2. 2021年美容师(中级)新版试题及美容师(中级)免费试题

    题库来源:安全生产模拟考试一点通公众号小程序 美容师(中级)新版试题是安全生产模拟考试一点通总题库中生成的一套美容师(中级)免费试题,安全生产模拟考试一点通上美容师(中级)作业手机同步练习.2021年 ...

  3. 【2021最新版】微服务面试题总结(65道题含答案解析)

    文章目录 1.微服务,又称微服务 架构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 . 2.微服务架构有哪些优势? 3.微服务有哪些特点? 4.设计微服务的最佳实践是什么? ...

  4. 【2021最新版】Spring Boot面试题总结(92道题含答案解析)

    文章目录 1.什么是Spring Boot? 2.为什么要用SpringBoot? 3.Spring Boot有哪些优点? 4.Spring Boot的核心注解是哪个?它主要由哪几个注解组成的? 5. ...

  5. 2021年最新大厂php+go面试题集(四)

    持续更新,每天进步一点点... 微信公众号:码农编程进阶笔记 关注可获得更多的视频教程及面试技巧.问题或建议,请公众号留言! 22.回响科技一面 1.kafka多个分区怎么保证消息顺序(1)首先发送消 ...

  6. 2021年汽车驾驶员(高级)试题及解析及汽车驾驶员(高级)操作证考试

    题库来源:安全生产模拟考试一点通公众号小程序 汽车驾驶员(高级)试题及解析是安全生产模拟考试一点通生成的,汽车驾驶员(高级)证模拟考试题库是根据汽车驾驶员(高级)最新版教材汇编出汽车驾驶员(高级)仿真 ...

  7. 百度linux c面试题,【百度百度糯米算法百度LinuxC语言数据面试题】面试问题:百度笔试题… - 看准网...

    第一部分选择题: 有几道网络相关的题目,巨简单,比如第一题是TCP.RIP.IP.FTP中哪个协议是传输层的.......有一道linux的chown使用题目.其他的全是数据结构的题目!什么链,表,码 ...

  8. 2021年50道Java线程面试题

    2021年50道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作 ...

  9. 2021.4.11 字节跳动实习笔试题---情报解密

    2021.4.11 字节跳动实习笔试题-情报解密 题目内容 题目内容: 给你一个字符串,该字符串中有数字,字母(字母只有大写字母)以及一些其他的字符(例如:%,.等),如果首字母为字母或者数字的话,就 ...

最新文章

  1. Java核心技术笔记 语言基础
  2. Entity Framework 的一些性能建议
  3. macos下使用aria2_macOS下 ansible简单安装及基础使用
  4. 带有返回值的装饰器_如何使用带有工厂功能的装饰器
  5. MATLAB学习笔记(八)
  6. 常用浏览器的编码设置
  7. 【EOS】2.4 EOS数据存储
  8. linux创建线程pthread_create函数
  9. python计算圆的体积_python计算圆周长、面积、球体体积并画出圆
  10. 1、常用DOS命令大全
  11. SpringBoot2.X 单元测试(Junit4.X) 基本配置
  12. oracle11 g ora 03113,解决oracle11g ORA-32004: obsolete or deprecated parameter(s)
  13. 微信小程序前期申请企业认证、后期提审发布流程
  14. 面经分享:网友问我,怎样才能在谷歌匹兹堡办公室里写代码?上篇
  15. 停用所有计算机管理员权限,win10管理员权限被禁用怎么办_win10电脑管理员账户被禁用如何解开-win7之家...
  16. 吃饭。睡觉。打豆豆。
  17. 计算机经常无法打印机,为什么我电脑连接打印机老是出现这种情况~重启也不行...
  18. 动漫免费在线观看,实时更新,资源全
  19. 群晖家用NAS选购心得
  20. 201771010137赵栋《第八周学习总结》

热门文章

  1. matlab expand用法,matlab中repmat函数, ndims 函数 与 expand 函数 reshape函数,shiftdim函数和permute函数的用法...
  2. 类型转换(自动转换,强制转换)
  3. 黑裙不在家无法访问?一招完成在局域网外访问
  4. 计算机24点游戏几把,24点游戏的玩法,要有准确介绍的!谢,这是初一上册数学上的,...
  5. 凌度多功能后视镜行车记录仪HS850B 多重守护行车安全
  6. Orcal 数据库连接工具使用勘测之路(Ora-28754、ocl.dll 87等问题)
  7. 金港赢简述大基建大金融和三赛道
  8. Java中的Request和Response详解
  9. 记我的一次脑残行为-(win10家庭版)修改C盘Users目录下文件夹名
  10. c语言实现面向对象编程