admin管理员组

文章数量:1531792

笔试知识杂碎

  • 杂碎知识
    • 关于网络通信
    • 关于C++
    • 关于操作系统
    • 关于算法
    • 关于嵌入式知识
    • 软件开发
    • 控制方面
    • 程序管理
    • 综合面

杂碎知识

遇到的问题的杂碎整理学习

关于网络通信

1.ping 过程中用到的协议
a. DNS 域名转化为ip地址
b. ARP 解析服务 由ip地址转化为MAC地址
c. ICMP internet control message protocol tcp/ip协议族的一个子协议,可用于在ip主机,路由器之间传递消息

2.拥塞控制
拥塞控制是TCP避免网络拥塞的算法。主要的目的是提高网络利用率、降低丢包率,保证网络资源对每条数据流的公平性。
主要包括四个部分:
慢启动:初始化拥塞窗口cwnd, 大小为n,慢开始门限ssthresh初始值
每收到一个ACK, cwnd大小加一,呈线性上升
每过一个往返延时时间RTT,cwnd=cwnd*2
当cwnd>=ssthreshs时,进入拥塞避免算法
拥塞避免算法
没收到一个ACK,cwnd加1
每经过一个RTT的时长,cwnd增加一个MSS(报文)大小
快速重传
当出现RTO超时,重传数据包,将ssthresh值设为当前cwnd的一半
将cwnd值设置为新的ssthresh的值
重新进入拥塞避免阶段
快速恢复算法
(在进入快速恢复前,cwnd 和 sshthresh已被更新为:ssthresh = cwnd /2,cwnd = ssthresh)
cwnd设置为ssthresh+3,重传duplicated Acks指定的数据包
如果再收到duplicated acks,那么cwnd=cwnd+1
收到的是ACK而非duplicated Ack,将cwnd重新设置为ssthresh,进入拥塞避免状态

3.二三层交换机
OSI 模型分为7层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。二层交换机工作在OSI模型的二层,数据链路层,故称为二层交换机,主要功能包括物理编址,错误校验,帧序列以及流控。而三层交换机位于三层(网络层),是一个具有三层交换功能的设备,即带有三层路由功能的二层交换机。

4.三次握手和四次挥手
三次握手:
第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
四次挥手:
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
5.2.4G协议及其特点

6.私有网段
因特网分配编号***会(IANA)保留了3块IP地址做为私有IP地址:
A类:10.0.0.0 ——— 10.255.255.255

B类:172.16.0.0——— 172.31.255.255

C类:192.168.0.0———192.168.255.255

7.网络协议

8.在TCP/IP模型中,数据从应用层到网际接口层所经历的传输格式:
报文或字节流-》传输协议分组-》ip数据报-》网络帧
9.网络状态
1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码
2xx(成功) 表示成功处理了请求的状态代码
3xx(重定向) 表示要完成请求需要进一步操作。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理。
403 (禁止) 服务器拒绝请求。
404 (未找到) 服务器找不到请求的网页。
5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

关于C++

1.程序开发过程中的六大原则
a、单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。
避免一个类负责多个功能的实现,当发生更改时影响其他功能而致使复用成为不可能。
b、里氏替换原则:派生类(子类)对象能够替换其基类(父类)对象被调用。
即在程序中,任何调用基类对象实现的功能,都可以调用派生类对象来替换。
c、依赖倒置原则:程序设计应该依赖抽象接口,而不应该依赖具体实现。
即接口编程思想,接口是稳定的,实现是不稳定的,一旦接口确定,就不应该再进行修改了。根据接口的实现,是可以根据具体问题和情况,采用不同的手段去实现。
d、接口隔离原则:使用多个隔离接口,比使用单个接口要好。
经常提到的降低耦合,降低依赖,主要也是通过这个原则来达到的
e、迪米特法则:一个实体应当尽可能少的与其他实体之间发生相互作用。
f、开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

2.友元函数
友元是一种允许非类的成员函数访问类非公有成员的一种机制。
友元函数在类的作用域外定义,但需要在类体中加上关键字friend进行说明
作用:提高程序的效率——类的非公有成员,在类外访问需要通过函数调用和返回来实现,若定义友元函数,则不需要,效率会提高
注意点:

  1. 友元函数不是类的成员函数,在函数体中访问对象的成员,要用对象名加运算符”.”加对象成员名。
  2. 友元函数可以访问类中的所有成员,不受publicprivate protected 的限制
  3. 友元函数的作用域不是该类的作用域。
  4. 友元函数破坏了类的封装性,尽量少用

3.c++ 和c的区别
C是C++的子集。
C是面向过程编程,C++支持面向过程和面向对象的编程范式,支持多态,封装和继承。
C++支撑函数和运算符重载,而C不支持。
C++使用Namespace 来避免名称冲突而C没有
C++使用对象作为输入输出,例如cin,cout。C使用函数进行输入/输出,例如scanf,printf。
C++支持引用变量而C不支持。
C++支撑虚函数和友元函数而C不支持。
C++提供new内存分配和delete内存释放操作符。C提供malloc()用于动态储存器分配功能,free()为储存器解除分配。
C++提供对异常

本文标签: 杂碎知识