记录C++准备面试的问题

(还在学习中会一直更新,也算是为明年秋招的准备有一个记录,希望有错误的部份大佬们一定指教更正,谢谢!)

C++部份

static关键字用途

答:static关键字主要有两个作用
(1)改变变量的作用域
(2)改变变量的存储域,使变量只在声明的源文件可使用

当static修饰局部变量时,该变量就会变成局部静态变量,和普通局部变量有以下几点的差别:

(1)普通局部变量存储在栈内存中,而静态局部变量则存储在静态存储区,普通局部变量的生命周期同函数, 当函数结束调用后自动释放,而静态局部变量的生命周期则与整个程序一起,不会因为函数结束调用结束而释放,而静态局部变量在编译前就会初始化,如果不赋初值则默认初始化为0或者空,并且静态局部变量在整个程序运行的期间只会被初始化一次,举个例子当一个函数被调用两次时,普通的局部变量会被重复初始化,并且内存的地址会改变,而静态局部变量在第二次调用函数时会沿用第一次调用函数结束后的值。

(2)静态全局函数和全局变量,主要体现在改变了全局函数和变量的存储域,使得静态全局函数和变量只在声明该函数和变量的源文件可以调用。

(3)静态成员函数和静态成员变量,和普通成员函数和变量不同的是,静态的成员函数会变量属于类而不是属于特定的任何一个类对象,举个例子当我们实例化了一个类三次会得到三个不同的对象,而这三个对象中,每一个对象都有自己的成员函数和成员变量,但他们并没有自己的静态成员函数和变量,静态成员函数和变量是属于类中的。

计算机网络部份

从浏览器输入url到返回页面经历了什么(以www.baidu.com为例)

答:(因为每一个步骤都能大做文章,笔者这里,列出如果是在面试时应该怎么回答)
(1) 输入一个url地址

(2) DNS域名解析:(将域名解析为ip)
2.1 浏览器会先检查浏览器中是否有缓存,如果没有则浏览器会查找操作系统缓存(hosts文件),如果操作系统缓存也没有则再查找路由器的DNS缓存,还是没有则会查找网络运营商的DNS缓存,若还是没有,则就会开始向DNS服务器发送请求
注意在检查本地的缓存中,如果在缓存中有找到了该域名对映的ip则就不会再向DNS服务器发送请求

2.2 当在缓存中都没有找到域名对应的ip则会根据TCP/IP参数中设置的DNS服务器向该DNS服务器(后面称作本地DNS服务器)发出查找请求,如果本地DNS服务器发现要查找的域名正是本地DNS服务器配置区域中的资源,则返回解析结果给客户,完成域名解析。

2.3 如果没有则本地DNS服务器向根DNS服务器发起请求,而此时根DNS服务器是不会记录具体域名映射ip,DNS根服务器会回传给本地DNS服务器一个顶级域DNS服务器(.com),告诉本地DNS该域名是属于哪一个顶级域DNS服务器管理。

2.4 本地服务器接着就会向顶级域DNS服务器发出请求,如果这个顶级域DNS服务器有该域名映射的ip则回传给本地DNS服务器对应的ip此时本地DNS就会将ip回传给浏览器,并把这个映射关系记录在缓存中,如果无法解析域名,则会回传一个的权威DNS服务器(baidu.com)的地址,而本地DNS服务器收到后则向权威DNS发出请求,最后得到映射,会传给浏览器并缓存在本地DNS中

(3) 当收到该url对应的ip后,浏览器就向ip所在的服务器发送TCP的连接请求(TCP三次握手),然后建立了TCP/IP连接

(4) 建立连接后,浏览器开始发送HTTP请求报文给服务器

(5) 服务器接受到HTTP请求报文后开始处里请求

(6) 服务器发送http响应报文给浏览器(注意服务器不会马上主动断开TCP连接)

(7) 关闭TCP链接(TCP四次挥手)

(8) 浏览器根据http响应报文中的html数据构建dom树再根据css文件构建render树,接着开始布局render树,最后绘制render树
(此处有兴趣的读者可以去查找一些前端相关的知识,再面试时可以说页面渲染即可 p.s笔者也不是很了解…)

简述TCP三次握手的过程

(1) TCP数据包格式:
在这里插入图片描述
1.1 源端口号、目的端口号:简而言之就是发送方和接收方的地址

1.2 序列号(seq)、确认号(ack):都是32位元,可以理解成两个进程在收发之间的应答消息,序列号是进程发送到发送的号码,而确认号是期望目的进程返回的确认号码,目的是验证发送的数据是否正确。
(在TCP中序列号如果为i,则确认号为i+1)
举个例子:如果发送端进程传了两个数据,序列号分别为100,200,而目的端返回的确认号只有101则发送端进程就可以知道200序列号的数据丢失了

1.3 URG,ACK,PSH,RST,SYN,FIN=>这些都是标志位,主要是来表示TCP报文中数据的状态(默认标志位为1时代表有效)

  • URG:表示紧急指针有效
  • ACK:确认序号有效
  • PSH:接收方应该将这个报文赶快交给应用层
  • RST:重置连接
  • SYN:连接建立时用来同步序号。当SYN=1,ACK=0时,表明这是一个连接请求报文段
  • FIN:释放连接

(1)第一次握手:
客户端将标置位SYN置为1,产生一个seq=k,打包发送给服务器,客户端进入SYN_SENT状态

(2)第二次握手:
服务器接收到客户端的数据包后,由SYN=1知道客户端请求连接,并将标置位SYN,ACK置为1,产生一个新的seq*=j,以及ack=k+1(即seq+1)打包发给客户端,确认连接请求,服务器端进入SYN_RCVD状态

(1)第三次握手:
客户端收到服务器的确认后,检查ack是否为k+1,ACK是否为1,如果正确,则将标置位ACK置为1,以及一个新的ack*=j+1(就是seq*+1)打包传给服务器,服务器检查ack*是否为j+1以及ACK是否为1,如果正确则连接建立成功,双方进入ESTABLISH状态
在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值