3.22来之即战

1.关于epoll和select的区别,说法错误的是?

  • A、 epoll和select都是I/O多路复用的技术,都可以实现同时监听多个I/O事件的状态
  • B、 epoll相比select效率更高,主要是基于其操作系统支持的I/O事件通知机制,而select是基于轮询机制
  • C、 epoll支持水平触发和边沿触发两种模式
  • D、 select能并行支持I/O比较小,且无法修改

epoll,select,poll是io复用技术中常见的
select查询速度较慢,因为他每次产生fd时候会有整体fdset的拷贝,而且每次有回送,select要查询整个fdset

select支持io较少,这个是根据操作系统支持的数量定的,数值可以用sysctl修改

2.描述http请求get和post的区别,下面描述不正确的是:

  • A、 GET用于信息获取,而且应该是安全的和幂等的,POST表示可能修改变服务器上的资源的请求
  • B、 POST比GET安全,因为采用了SSL加密
  • C、 GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据
  • D、 POST提交,把提交的数据放置在是HTTP包的包体中,GET提交的数据会在地址栏中显示出来

两者最基本区别

  1. GET请求通过URL(请求行)提交数据,在URL中可以看到所传参数。POST通过“请求体”传递数据,参数不会在url中显示
  2. GET请求提交的数据有长度限制,POST请求没有限制。
  3. GET请求返回的内容可以被浏览器缓存起来。而每次提交的POST,浏览器在你按 下F5的时候会跳出确认框,浏览器不会缓存POST请求返回的内容。
  4. GET对数据进行查询,POST主要对数据进行增删改!简单说,GET是只读,POST是写。

 HTTP协议中提到GET是安全的方法(safe method),其意思是说GET方法不会改变服务器端数据,所以不会产生副作用。

3.文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下列哪个命令是对的?

  • A、 chmod a+x,g+w exer1
  • B、 chmod g+w exer1
  • C、 chmod 765 exer1
  • D、 chmod o+x exer1

4.关于 Linux 系统上同一个程序的多个进程实例共享一个 TCP 监听端口的说法, 哪个不正确?

  • A、 每个进程都使用 SO_REUSEPORT 选项,然后绑定同一个地址和端口
  • B、 每个进程分别绑定不同的网卡地址的同一端口
  • C、 第一个进程先绑定到监听地址端口, 然后 fork 子进程共享使用
  • D、 每个进程分别绑定一次, 但只有最后一个调用的进程才能收到数据

D是竞争调度的结果,而不是最后调用的进程收到数据。

A使用SO_REUSEPORT,绑定统一地址和端口。

B分别绑定 不同的网卡地址的同一端口,TCP的四元组并不冲突。

C使用fork创建子进程共享,也没有问题。 

5.Linux下的进程有哪三种状态?()

  • A、 精确态,模糊态和随机态
  • B、 运行态,就绪态和等待态
  • C、 准备态,执行态和退出态
  • D、 手动态,自动态和自由态

 

 

6.对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。这样的排序方法是()

  • A、 直接选择排序
  • B、 直接插入排序
  • C、 快速排序
  • D、 起泡排序

插入排序

算法思想:逐步将记录插入到已排好序的有序表中。

起泡排序(Bubble Sort)

算法思想:从前向后依次检查每一对相邻元素,一旦发现逆序即交换二者的位置。

对于长度为n的序列,共需做n - 1次比较不超过n - 1次交换,这一过程称作一趟扫描交换。每一趟扫描都至少会有一个元素就位。

快速排序(Quick Sort)

算法思想: 通过一趟排序将第一个记录排好位置,同时将待排序记录分割成独立的两部分。其中前部分的关键字都比后部分的关键字小。然后再分别对这两部分继续递归排序,以达到整个序列有序。

简单选择排序(Simple Selection Sort)

算法思想:

    第一趟:
    在n个记录中选一个最小关键字的记录与第一个记录进行交换;
    第二趟:
    在后n-1个记录中选一个最小关键字的记录与第二个记录交换;
    第 i 趟:
    在后n-(i-1)个记录中选一个最小关键字的记 与第i个记录交换; 共需n-1趟。

7.用选择排序方法对线性表(17,9,20,21,1,7,4,11,5)进行升序排序时,第3趟排序的结果是( )

  • A、 9,17,20,21,1,7,4,11,5
  • B、 1,4,5,21,17,7,9,11,20
  • C、 1,4,5,17,9,20,21,7,11
  • D、 9,1,7,4,11,15,17,20,21

 8.下列关于shared_ptr说法正确的是:

  • A、 shared_ptr 不能作为容器的元素
  • B、 shared_ptr 是100%线程安全的
  • C、 容器可以作为share_ptr 管理的对象
  • D、 使用shared_ptr 一定可以避免内存泄漏

shared_ptr是一种智能指针,记录有多少个shared_ptrs共同指向一个对象,即引用计数。shared_ptr不能管理循环引用的对象,如果使用不当的话,会引起内存泄漏。(为了解决这个问题引入了弱指针 weak_ptr) 

9.下列为纯虚函数的正确声明的是()

  • A、 void virtual print()=0;
  • B、 virtual void print()=0;
  • C、 virtual void print(){};
  • D、 virtual void print();

10.什么是虚拟内存?

内存对用户来说就是一段字节数组,根据地址访问某个字节或者某些字节。早期的计算机只有单个程序,内存中除了操作系统的部分,都可以分配给程序使用,后来计算机上为了运行多个程序,这些程序共享一个内存条的不同部分,对内存空间进行了划分。但是这样的问题在于,当前程序所使用的内存空间可能会被其他的进程有意无意的使用,既有安全问题,对于程序便携人员也很麻烦。后来为了解决用户所面临的问题,直接让操作系统解决内存的分配问题。结果就是对于用户而言,每个程序都感觉到自己拥有一个非常大的字节数组也就是内存,可以在该字节数组上任意操作,而这个字节数组就被称为虚拟内存,由操作系统完成虚拟内存到真实内存的地址之间的映射。但是实际情况是,程序越来越多,并且有的程序自己都需要很大的内存空间。所以操作系统将磁盘也用作程序虚拟内存使用,完成由虚拟内存到物理内存地址或者磁盘地址之间的映射工作,这样可以提供的虚拟内存地址空间就很大了。对于用户程序很久都用不到的内存空间由操作系统放在磁盘上存储,需要的时候由操作系统从磁盘上加载到真实内存中。

使用页表实现虚拟内存和物理内存数据页映射的的办法,页表存放着各个虚拟页的状态,该页是否可以直接映射,存放在物理内存等,通过页表中的虚拟页号可以找到对应的物理页号,然后再根据偏移量定位到真实数据存储的物理地址。

当一个进程试图访问虚拟地址空间的数据时:CPU想要访问某个虚拟内存地址,进程会找到页表中的条目,判断有效位是否有效,如果有效说明,数据在物理内存,可以直接访问物理内存地址中的数据。如果无效,则会发生缺页中断,去磁盘中拷贝数据页到物理内存,并更新页表。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值