深信服一面

首先问项目,我的项目和软开没啥关系,所以他直接让我手撕代码了。

手撕代码:

给你一个区间数组,每个数组表示一个乘车人员,算出最少需要多少辆车;

示例:[1, 4] [2, 6] 

输出:2

示例:[1, 2][3, 4]

输出:1

然后问问题,malloc最大能分配多少内存,然后free如何判断要释放多少内存;


32位系统,因为映射区是在1G地址位置,而且映射区与栈相对生长,malloc申请的空间大于128KB的话,调用的是mmap函数,因此分配的地址起始在1G位置,末端为3G,最大2G左右,所以一次最大申请为2G左右,如果小块小块累计申请的话算上堆区128M到1G区间的话,小块申请 malloc调用brk总和就0.9G,累计能申请到的为2.9G。

空间的大小记录在参数指针指向地址的前面,free的时候通过这个记录即可知道要释放的内存有多大。

new和delete是如何分配和释放内存的;

new不止分配内存,而且还是调用类的构造函数

delete的时候要执行析构函数

结构体struct内存对齐的意义是什么;

一来简化了处理器与内存之间传输系统的设计,二来可以提升读取数据的速度。

TCP和UDP的报文有什么区别;

TCP报文一般是20个字节,还有40个可选字节,UDP报文一般为8个字节;

TCP报文的内容比UDP丰富很多;

操作系统中进程通信中,信号的方式有多少种信号;

  • 可以在任何时刻给进程发送信号,信号是进程间通信或操作的一种异步通信机制。

    收到信号后进程对信号的处理有三种方式

    1. 如果是系统定义的信号函数,执行默认操作。

      SIGINT:程序终止信号。程序运行过程中,按Ctrl+C键将产生该信号。

      SIGQUIT:程序退出信号。程序运行过程中,按Ctrl+\\键将产生该信号。

      SIGALRM:定时器信号。

      SIGTERM:结束进程信号。shell下执行kill 进程pid发送该信号。

    2. 捕捉信号。用户可以给信号定义信号处理函数,表示收到信号后该进程该怎么做。

    3. 忽略信号。当我们不希望处理某些信号的时候,就可以忽略该信号,不做任何处理。有两个信号是应用进程无法捕捉和忽略的,即 SIGKILLSEGSTOP,它们用于在任何时候中断或结束某一进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值