1、网络模型的每一层及作用

在网络七层模型中

物理层:底层数据传输,如网线,网卡标准

数据链路层:负责数据的封装和差错检测,以及MAC寻址(ARP协议)

网络层:定义IP编制,负责数据的路由、转发、分片

传输层:端到端数据传输的基本功能,如TCP/UDP

会话层:控制应用程序之间的会话能力,不同软件数据分发给不同软件

表示层:数据转换成另一个兼容另一个系统能识别的格式

应用层:应用程序提供统一的接口

在四层模型中:

TCP/IP 网络模型共有 4 层,分别是应用层、传输层、网络层和网络接口层,每一层负责的职能如下:

应用层:HTTP(基于TCP协议的可靠传输)、DNS(是将域名和IP相互映射的分布式数据库一般基于UDP协议)、TFTP(基于UDP协议),负责向用户提供一组应用程序。

传输层:TCP(基于字节流的面向连接的可靠传输)、UDP(基于数据报的面向不连接的不可靠传输),负责端到端的传输。

网络层:IP、ICMP(ping的过程),负责网络包的封装、分片、路由、转发。

网络接口层:MAC寻址、通过网卡传输网络帧,负责网络在物理网络中的传输。

2、常见状态码

200 ok表示一切正常

301表示请求的资源已经不存在,永久重定向,需改用新的URL重新访问

302 资源还在,但是暂时需要一临时URL来访问

400 客户端请求的报文有错

403服务器禁止访问资源

404请求资源未找到或禁止反访问

500请求没有问题,服务器内部出现了错误

501请求的功能暂时不支持

502服务器工作正常,访问后端服务器发生了错误

503当前非常忙,稍后再试一下

3、web服务器http如何解析的?

HTTP请求报文由请求行、请求头部、空行和请求数据四个部分组成。报文的请求方法,本项目只用到GET和POST;

**GET**
​
GET /562f25980001b1b106000338.jpg HTTP/1.1
​
Host:[http://img.mukewang.com](https://link.zhihu.com/?target=http%3A//img.mukewang.com)
​
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64)
​
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
​
Accept:image/webp,image/*,*/*;q=0.8
​
Referer:[http://www.imooc.com/](https://link.zhihu.com/?target=http%3A//www.imooc.com/)
​
Accept-Encoding:gzip, deflate, sdch
​
Accept-Language:zh-CN,zh;q=0.8
​
空行
​
请求数据为空
​
**POST**
​
POST / HTTP1.1
​
Host:[http://www.wrox.com](https://link.zhihu.com/?target=http%3A//www.wrox.com)
​
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
​
Content-Type:application/x-www-form-urlencoded
​
Content-Length:40
​
Connection: Keep-Alive
​
空行
​
name=Professional%20Ajax&publisher=Wiley

由于在HTTP报文中,每一行的数据由\r\n作为结束字符,空行则是仅仅是字符\r\n。因此,可以通过查找\r\n将报文拆解成单独的行进行解析,项目中便是利用了这一点。

为什么要用状态机?它能处理任何顺序的事件,并能提供有意义的响应——即使这些事件发生的顺序和预计的不同

strbrk( t1, t2)用来查找t2在t1中第一次出现的位置,没有返回NULL。

4、内存泄漏及其排查

内存泄漏问题在工程代码中是非常严重的问题,有些公司会通报批评这类代码, 内存泄漏并不是指物理上的消失,而是指由于程序员的失误导致对该片内存失去控制,造成内存的浪费。

常见的内存排查手段,cppcheck是静态检查方法,最好的是valgrind,是Linux下的一个开源工具,

实战检测泄漏,编译程序(四个阶段-预处理,编译,汇编,链接)

编译 gcc -g -o text.cpp

检查内存泄漏 valgrind --tool=memcheck --leak-check = full ./mem_discover

5、get和post的报文有什么不同

1.报文上的区别 GET 和 POST 只是 HTTP 协议中两种请求方式,所以在传输上,没有区别,因为HTTP 协议是基于 TCP/IP 的应用层协议 报文格式上,不带参数时,最大区别仅仅是第一行方法名不同,一个是GET,一个是POST 带参数时报文的区别呢?在约定中,GET 方法的参数应该放在 url 中,POST 方法参数应该放在 body 中 举个例子,如果参数是 name=qiming.c, age=22。 GET 方法简约版报文可能是这样的
 GET /index.php?name=qiming.c&age=22 HTTP/1.1 Host: localhost

POST 方法简约版报文可能是这样的
 
POST /index.php HTTP/1.1 
Host: localhost
 
Content-Type: application/x-www-form-urlencoded name=qiming. c&age=22

2.GET 方法参数写法是固定的吗? 在约定中,一般我们的参数是写在 ? 后面,用 & 分割。 我们知道,解析报文的过程是通过获取 TCP 数据,用正则等工具从数据中获取 Header 和 Body,从而提取参数。 也就是说,我们可以自己约定参数的写法,只要服务端能够解释出来就行,一种比较流行的写法是这样 : http://www.example.com/user/name/yourname/age/22

3、POST 方法比 GET 方法安全? 按照网上大部分文章的解释,POST 比 GET 安全,因为数据在地址栏上不可见。 然而从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输,只要在网络节点上抓包,就能完整地获取数据报文。 要想安全传输,就只有加密,也就是 HTTPS

6、TCP的为什么可以可靠传输

TCP有序列号(防止乱序)、确认应答(防止丢包)、重传机制(超时重传、快速重传、SACK方法选择性确认)、滑动窗口、流量控制、拥塞控制。

滑动窗口:窗口大小用无需等待确认应答,可以继续发送数据的最大值。

流量控制:发送方根据接收方的实际接受能力控制发送数据量。

拥塞控制:慢启动呈指数增长,在小于慢启动门限时,使用慢启动算法。

当大于慢启动门限时,拥塞避免算法。

7、url网址键入浏览器时发生的一系列过程

首先浏览器做的第一步工作就是要对 URL 进行解析,从而生成发送给 Web 服务器的请求信息。

在发送之前,还有一项工作需要完成,那就是查询服务器域名对应的 IP 地址,因为委托操作系统发送消息时,必须提供通信对象的 IP 地址。

所以,有一种服务器就专门保存了 Web 服务器域名与 IP 的对应关系,它就是 DNS 服务器。

在域名中,越靠右的位置表示其层级越高。(老外习惯地名从小到大)

浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。

  1. 客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。

  2. 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大, 能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。

DNS获得IP之后,就可以把HTPP的传输工作交给协议栈;

可靠传输HTTP,HTTP是基于TCP协议传输的。

远程定位IP

两点之间传输MAC

一般在 TCP/IP 通信里,MAC 包头的协议类型只使用:

  • 0800 : IP 协议

  • 0806 : ARP 协议

    出口: 网卡

    送别:交换机

    路由器

    服务端层层剥开

    先开数据包的MAC头部,如何和自己的MAC地址符合,就包收起来。

    继续扒开IP头,发现IP地址符合,根据IP头部的协议栈,知道自己的上层是TCP协议。

    扒开TCP的头,里面有序列号,看一看这个序列包是不是想要的,如果是放入缓存中并返回ACK,不是则丢弃,TCP的头部还有端口号,HTTP的服务器正在监听这个端口号,服务器知道是HTTP进程想要这个包,于是就将包发给HTTP进程,HTTP将网页封装在HTTP响应报文中,HTTP响应报文以此穿上TCP、IP、MAC头部从网卡出去,由交换机发给路由器,路由器将响应数据发到下一个路由器,最后到客户端,从下往上扒开到剩下HTTP响应报文, 浏览器开始渲染页面,显示在屏幕上。客户端离开后,四次挥手,断开连接。

  • 8、常见哈希表的实现

    实质上要问哈希的应用:位图和布隆过滤器,

    9、布隆过滤器:

    前提是位图,位图是内存中连续的二进制位,位图的下标是整数,位图存储的是0和1,0代表不存在,1代表存在。

    位图的实现:位图的映射:一个char是8个bit位,如果整数10要映射到位图中,就需要找到第二个char数据,然后在找到第二个char的第二个bit位,并将其改变为1即可。任何数 | 1都为1,| 0为原来的数。

    一个二进制位就能存一个数,一个int数要占四位,32个bit,所以一个数相差32倍。

  •     void Set(size_t x)//将x映射到位图中{   //找相对应的位图下标int index = x / 8 + 1;//x在位图中的第几个char中int place = x % 8;//在这个数的第几个bit位v[index] |=(1 << place);}//删除x在位图中的映射void ReSet(size_t x){//找相对应的位图下标int index = x / 8 + 1;//x在位图中的第几个char中int place = x % 8;//在这个数的第几个bit位v[index] &=(~(1 << place));}//判断一个数据是否在位图中bool Test(size_t x){//找相对应的位图下标int index = x / 8 + 1;//x在位图中的第几个char中int place = x % 8;//在这个数的第几个bit位return v[index] &(1 << place);}
    };

    可以快速判断一个元素一定不存在和可能存在一个集中的方法,用多个哈希函数将一个数据映射到位图中,核心思想一个值对应多个位。

一个CPP程序猿的第一篇博客相关推荐

  1. 程序猿小张的第一篇博客

    第一篇博客我想从以下五个方面来记录: a. 写一个自我介绍: b. 列出编程的目标: c. 打算怎么学习编程? d. 打算在学习编程这件事上每周花费多少时间? e. 最想进入的一家IT公司. a.本人 ...

  2. Python 用pygame 做一个游戏的开始界面(小白第一篇博客)

    Python 用pygame 做一个游戏的开始界面(小白第一篇博客) 主要功能实现 本篇文章主要是实现了一个游戏开始界面的两个功能: 1,将鼠标放到"开始游戏"或"结束游 ...

  3. 第一篇博客,用以规划我的编程人生

    本人编程小白.第一次写技术博客,希望制定一个学习计划,让自己慢慢成长为一名优秀的程序猿. 学习方向是成为一名全栈工程师. 前端方面:会用bootstrap设计网页,会用jQuery完成动作. 后端方面 ...

  4. Carrey的第一篇博客

    Carrey的第一篇博客 为什么要写这篇博客 回顾一下猿生 总结一下 为什么要写这篇博客 你好! 我是Carrey,这是我的第一篇博客.我是一个有将近三年工作经验的java后端程序员,今天写这篇博客绝 ...

  5. csapp实验摘选 I Data Lab ——小小菜下士的第一篇博客

    csapp实验摘选 I Data Lab --小小菜下士的第一篇博客 注:这是我的第一篇博客,试图在通往程序猿的路上踏出坚实的一步. --小小菜下士 实验来自: [读厚 CSAPP]I Data La ...

  6. 人生第一篇博客,欢迎大佬莅临指导!

    前话 大家好 ,这是我的第一篇博客 ,我今年是一名大二的学生 ,今年21岁, 最近听到许多程序员有写博客的想法 ,所以我就有了突发奇想,准备开始写博客.记得我大一开学的时候 我申请了一个公众号:计算机 ...

  7. C博客作业00--我的第一篇博客

    这个作业属于哪个班级 C语言–网络2011/2012 这个作业的地址 C博客作业00–我的第一篇博客 这个作业的目标 学习Makdown语法,对本专业及C语言课程有个简单了解,记录自学慕课视频的笔记. ...

  8. 第一篇博客------自我介绍

    目录 自我介绍 编程目标 如何编程 希望进入的公司 自我介绍:       Hello!!!我是一名即将步入大二的计算机小白. 小白 姓名:###(三个字) 性别:男 年龄:大二(大概也就0--100 ...

  9. 2017年终总结——第一篇博客开端

    2017的总结: 2017年过去了,真的好快,可以清晰的记得我去年除夕的晚上我干了啥.但是2017年也是我改变比较大的一年,何出此言呢,总结了几点: 1.变的更加稳重成熟了,这种感觉的由来,其实是有时 ...

最新文章

  1. 驭势科技引入国家队战略注资,完成超10亿元人民币融资
  2. 为什么处理有序数组比无序数组快?
  3. 大厂首发:java转算法工程师
  4. jquery学习手记(3)属性
  5. xmldocument如何创建一个不带结尾的节点_LDF文件是个啥?如何创建一个LDF文件
  6. C语言去括号编程题,数据结构课件.ppt
  7. EXP-00091 正在导出有问题的统计信息 问题的解决(转)
  8. eggjs的参数校验模块egg-validate的使用和进一步定制化升级
  9. 电脑音频服务未运行怎么解决_电脑提示音频服务未运行怎么办,快来看看吧,图片描述(最多50字)...
  10. mysql并发_MySQL并发更新数据时的处理方法
  11. border:0 none,border:none;,border:0;三者之间的区别
  12. FL Studio常见问题之通道窗口和步进音序器的设置
  13. 安卓开发仿微信图片拖拽_Android 仿微信朋友圈发表图片拖拽和删除功能
  14. 提高sql性能的方法_三种提高T-SQL性能的方法
  15. InVEST实践与进阶及在生态系统服务供需、固碳、城市热岛、论文写作等实际项目中的具体应用
  16. linux 小度 驱动_360WiFi 小度WiFi 无线网卡驱动下载
  17. pta C语言选择题
  18. 《陶哲轩教你学数学》读后感
  19. 基于C#+ASP.NET 毕业设计526套(保持更新)(建议CTRL+D)
  20. 解决安装虚拟机vmware无法打开注册表项的问题

热门文章

  1. Excel VBA 指定区域内的数据 导出为图片
  2. Android Studio最完整的插件整理
  3. python+selenium+webdriver 截取全页面长图
  4. 投:分众传媒相关文章
  5. 自监督学习和计算机视觉
  6. mysql timestamp 比较_解析mysql TIMESTAMP(时间戳)和datetime不同之处比较
  7. 计算机网络断网吗,教您解决电脑网络常常断网掉线的方法?
  8. Ubuntu的快乐学习1——Ubuntu18.04的ROS平台搭建
  9. 无法加载文件 C:\Users\Administrator\PycharmProjects\pythonProject\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本。
  10. java pdf 用系统字体大小_java - Java PDFBox设置PDF表单中几个字段的自定义字体 - 堆栈内存溢出...