huawei

指针占用的内存空间大小

在不同的操作系统及编译环境中,指针类型占用的字节数是不同的。一般而言,
编译生成16位的代码时,指针占2个字节
编译生成32位的代码时,指针占4个字节
编译生成64位的代码时,指针占8个字节

进程是如何执行的

进程的实体是由程序段、数据段和进程控制块组成
单道程序系统中,程序是顺序执行的。
多道程序系统中,程序是并发运行的。
进程一般存在三种情况:
(1)就绪状态:我已经准备好,给我处理器,我就能够运行,这时的进程状态就是就绪状态;
(2)运行状态:我已经获得资源。而且正在工作中。这时的进程状态就是运行状态;
(3)堵塞状态:我刚刚正在工作,突然“断电”了,我被迫停止。这时的进程状态就是堵塞状态。

进程的控制
进程控制主要是负责进程的创建与撤销,进程状态之间的切换以及进程之间的通信等。

链表与数组的主要区别

(1)数组的元素个数是固定的,而组成链表的结点个数可按需要增减;
(2)数组元素的存诸单元在数组定义时分配,链表结点的存储单元在程序执行时动态向系统申请:
(3)数组中的元素顺序关系由元素在数组中的位置(即下标)确定,链表中的结点顺序关系由结点所包含的指针来体现。
(4)对于不是固定长度的列表,用可能最大长度的数组来描述,会浪费许多内存空间。
(5)对于元素的插人、删除操作非常频繁的列表处理场合,用数组表示列表也是不适宜的。若用链表实现,会使程序结构清晰,处理的方法也较为简便。

数组的特点
1.在内存中,数组是一块连续的区域。
2.数组需要预留空间,在使用前要先申请占内存的大小,可能会浪费内存空间。
3.插入数据和删除数据效率低,插入数据时,这个位置后面的数据在内存中都要向后移。
4.随机读取效率很高。因为数组是连续的,知道每一个数据的内存地址,可以直接找到给定地址的数据。
5.并且不利于扩展,数组定义的空间不够时要重新定义数组。

链表的特点
1.在内存中可以存在任何地方,不要求连续。
2.每一个数据都保存了下一个数据的内存地址,通过这个地址找到下一个数据。
3.增加数据和删除数据很容易。
4.查找数据时效率低,因为不具有随机访问性,所以访问某个位置的数据都要从第一个数据开始访问,然后根据第一个数据保存的下一个数据的地址找到第二个数据,以此类推。
5.不指定大小,扩展方便。链表大小不用定义,数据随意增删。

数组的优点
随机访问性强
查找速度快
数组的缺点
插入和删除效率低
可能浪费内存
内存空间要求高,必须有足够的连续内存空间。
数组大小固定,不能动态拓展

链表的优点
插入删除速度快
内存利用率高,不会浪费内存
大小没有固定,拓展很灵活。
链表的缺点
不能随机查找,必须从第一个开始遍历,查找效率低

Osi网络模型和tcp/ip网络模型

在这里插入图片描述

ISO/OSI的参考模型共有7层,由低层至高层分别为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
物理层:在物理媒体上传输原始的数据比特流。
数据链路层:将数据分成一个个数据帧,以数据帧为单位传输。有应有答,遇错重发。
网络层:将数据分成一定长度的分组,将分组穿过通信子网,从信源选择路径后传到信宿。
传输层:提供不具体网络的高效、经济、透明的端到端数据传输服务。
会话层:进程间的对话也称为会话,会话层管理不同主机上各进程间的对话。
表示层: 为应用层进程提供格式化的表示和转换数据服务。
应用层:提供应用程序访问OSI环境的手段。

tcp/ip网络模型

应用层:应用层是在用户空间实现的,负责处理众多业务逻辑,如文件传输、网络管理。
传输层:为应用程序隐藏了数据包跳转的细节,负责数据包的收发、链路超时重连等。
网络层:能够使得不同应用类型的数据在Internet上通畅地传输。
数据链路层:实现网卡接口的网络驱动,以处理数据在以太网等物理媒介上的传输。

C++内存分配的方式有三种:分别是从静态存储区分配,从栈上分配内存和从堆上分配内存。

从静态存储区分配内存
从静态存储区域分配的内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。静态分配的区域的生命期是整个软件运行期,就是说从软件运行开始到软件终止退出。只有软件终止运行后,这块内存才会被系统回收。

从栈上分配内存
在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但 是分配的内存容量有限。在栈中分配的空间的生命期与这个变量所在的函数和类相关。如果是函数中定义的局部变量,那么它的生命期就是函数被调用时,如果函数运行结束,那么这块内存就会被回收。如果是类中的成员变量,则它的生命期与类实例的生命期相同。

从堆上分配内存
亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存 期由我们决定,使用非常灵活,但问题也最多。在堆上分配的内存,生命期是从调用new或者malloc开始,到调用delete或者free结束。如果不 掉用delete或者free。则这块空间必须到软件运行结束后才能被系统回收。

static关键字的作用是什么?

static的作用:常用来修饰变量。
全局变量被static修饰后,就称之为静态全局变量;局部变量被static修饰后,就称之为静态局部变量。统称为静态变量。
如果需要进一步解释下面的现象,可以了解iOS的内存管理方面的知识,比如局部变量是放置在栈区,而全局变量和静态变量是放置在静态区的。

进程调度策略有哪几种

4.1先来先服务(FCFS,First-Come-First-Served)
    按照进程进入就绪队列的先后次序来选择进程。
4.2、短进程优先(SPF,Shortest Process Next)
    从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它。
4.3、优先权调度算法(Priority)
    按照进程的优先权大小来调度。
4.4、高响应比优先调度算法(HRRN,Highest Response Ratio Next)
    按照高响应比((已等待时间+要求运行时间)/ 要求运行时间)优先的原则【等待时间长和运行时间短都会增加其优先值】,每次先计算就绪队列中每个进程的响应比,然后选择其值最大的进程投入运行。
4.5、时间片轮转调度算法(RR,Round-Robin)
    当某个进程执行的时间片用完时,调度程序便停止该进程的执行,并将它送就绪队列的末尾,等待分配下一时间片再执行。然后把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片处理机执行时间。
4.6、多级队列调度算法
    多队列调度是根据进程的性质和类型的不同,将就绪队列再分为若干个子队列,所有的进程按其性质排入相应的队列中,而不同的就绪队列采用不同的调度算法。

常见的路由协议

一、内部网关协议
1、RIP(Routing Information Protocol):路由信息协议。
是一种比较简单的内部网关协议,主要用于规模较小的网络,比如校园网以及结构较简单的地区性网络。对于更为复杂的环境和大型网络,一般不使用RIP。
2、IGRP(Interior Gateway Routing Protool):内部网关路由协议。
属于Cisco的私有协议,最大跳数默认为100,现已被Cisco独立开发的EIGRP协议取代。
3、OSPF(Open Shortest Path First):开放式最短路径优先协议。
属于链路状态路由协议,OSPF提出了“区域(area)”的概念,每个区域中所有路由器维护着一个相同的链路状态数据库 (LSDB),其使用链路状态数据库,通过最短生成树算法(SPF算法)计算得到路由表,因此其收敛速度较快。
4、IS-IS(Intermediate System-to-Intermediate System):中间系统到中间系统路由协议。
属于链路状态路由协议。与OSPF协议相似,其使用最短路径优先SPF(Shortest Path First)算法进行路由计算。

二 域间路由协议
BGP(Border Gateway Protocol):边界网关协议。
为了维护各个ISP的独立利益,标准化组织制定了ISP间的路由协议BGP,其用来处理各ISP之间的路由传递。

HTTP协议:

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件,图片文件,查询结果等)。

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

2)HTTP协议特点
1、简单快速:

客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

2、灵活:
HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

3、无连接:
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

4、无状态:
HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

5、支持B/S及C/S模式。
6、默认端口80
7、基于TCP协议

3)HTTP过程概述:

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
请你来说一说http协议
HTTP 请求/响应的步骤如下:
1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.baidu.com。

2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

请你来说一下socket编程中服务器端和客户端主要用到哪些函数

1)基于TCP的socket:
1、服务器端程序:

1创建一个socket,用函数socket()
2绑定IP地址、端口等信息到socket上,用函数bind()
3设置允许的最大连接数,用函数listen()
4接收客户端上来的连接,用函数accept()
5收发数据,用函数send()和recv(),或者read()和write()
6关闭网络连接

2、客户端程序:
1创建一个socket,用函数socket()
2设置要连接的对方的IP地址和端口等属性
3连接服务器,用函数connect()
4收发数据,用函数send()和recv(),或read()和write()
5关闭网络连接

基于UDP的socket:

1、服务器端流程
1建立套接字文件描述符,使用函数socket(),生成套接字文件描述符。
2设置服务器地址和侦听端口,初始化要绑定的网络地址结构。
3绑定侦听端口,使用bind()函数,将套接字文件描述符和一个地址类型变量进行绑定。
4接收客户端的数据,使用recvfrom()函数接收客户端的网络数据。
5向客户端发送数据,使用sendto()函数向服务器主机发送数据。
6关闭套接字,使用close()函数释放资源。UDP协议的客户端流程

2、客户端流程
1建立套接字文件描述符,socket()。
2设置服务器地址和端口,struct sockaddr。
3向服务器发送数据,sendto()。
4接收服务器的数据,recvfrom()。
5关闭套接字,close()。

请你讲述一下Socket编程的send() recv() accept() socket()函数?
send函数用来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答,send的作用是将要发送的数据拷贝到缓冲区,协议负责传输。
recv函数用来从TCP连接的另一端接收数据,当应用程序调用recv函数时,recv先等待s的发送缓冲中的数据被协议传送完毕,然后从缓冲区中读取接收到的内容给应用层。
accept函数用了接收一个连接,内核维护了半连接队列和一个已完成连接队列,当队列为空的时候,accept函数阻塞,不为空的时候accept函数从上边取下来一个已完成连接,返回一个文件描述符。

请你说一下阻塞,非阻塞,同步,异步

阻塞和非阻塞:调用者在事件没有发生的时候,一直在等待事件发生,不能去处理别的任务这是阻塞。调用者在事件没有发生的时候,可以去处理别的任务这是非阻塞。
同步和异步:调用者必须循环自去查看事件有没有发生,这种情况是同步。调用者不用自己去查看事件有没有发生,而是等待着注册在事件上的回调函数通知自己,这种情况是异步

标题路由算法

1.静态路由算法(非自适应)
2.动态路由算法(自适应)
在这里插入图片描述

在这里插入图片描述

IP协议有哪些

ARP协议
源主机和目的主机在同一个网关里:
在这里插入图片描述

源主机和目的主机不在同一个网关里:
在这里插入图片描述

DHCP协议
在这里插入图片描述

ICMP协议
支持主机或者路由器:
差错/异常报告
网络探寻
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值