近几天面试总结

1、cpp

malloc

小于128k, 使用brk函数,堆顶会有一个enddata指针记录堆区位置,从而在虚拟内存地址空间中创建内存

真正使用时,还要将其通过映射变成物理地址。

程序第一次读写这块内存后,发生缺页中断(访问的页不在主存,需要操作系统将其调度),这时,才会分配给他物理页。

大于128k

使用mmap,在堆和栈之间分配内存。

free

mmap创建的直接munmap

brk的不释放,当enddata指针后面有128k空余时,指针回移。

 

const

    int a = 0, b = 0;
    const int* c = &a;
    c = &b;   
    int* const d = &b;
    *d = a;

没有直接和const连接的是可以改变的。

 

动态库、静态库

动态库:

exe中只包含它需要的函数的引用表,执行时,需要的函数代码才会拷贝到内存中。

可执行文件小,节省磁盘节省内存,但在运行的时候需要时间去连接库函数,执行速度较慢

动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在

静态库:

将所有需要使用的函数作为机器码拷贝到最终的执行文件中,导致最终生成的则执行文件占用磁盘和内存空间大

但速度较快。

静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。

2、计算机网络

三次握手四次挥手时连接双方各自的状态

三次握手:

1、client----->SYN(1)seq(x)  SYN_SEND

2、server---->SYN(1)ACK(1)seq(y)ack(x+1)   SYN_RECV

3、client------>ACK(1)seq(x+1)ack(y+1)           client/server-->ESTABLISHED 

四次挥手:

1、client---->FIN(M)           FIN_WAIT1

2、server--->ACK(M+1)     CLOSE_WAIT      ----->client      FIN_WAIT2

3、server--->FIN(N)           LAST_ACK

4、client----->ACK(N+1)     TIME_WAIT         ----->server     CLOSED

time_wait过多的原因

过多的主动关闭连接

close_wait过多的原因

应用层关系

对方发起了关闭,但己方依旧在读写,没有关闭连接。

tcp复用

 

3、数据结构

一致性hash

4、操作系统

虚拟内存、物理内存 页 页帧 页表

页:虚拟内存

页帧:物理内存

页表:页和页帧一对一的映射表

页面失效:找到页帧,将其写入磁盘,并让其失效,并将需要访问的页放入页帧中(从虚拟内存转入物理内存)

并修改页表的映射,从而保证所有的也都有被调度的可能。

虚拟页的个数势必比物理页帧的个数大

页号+偏移量 == 虚拟内存地址

页号---》寻找页帧号---》查看是否存在内存中---》调度---》传到MMU组成物理地址

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值