面试难点记录

段错误出现的几种情况

一般是访问了不存在的内存或越界访问。
0、指针未初始化就访问
1、访问NULL或0地址指针(尤其注意0地址)
2、数组越界访问(一般C不会报错,但不可预料结果)

static关键字

局部变量用static修饰

int fun(int a,int b)
{
	static m=0,i=2;
	m+=2;
	i+=a+b;
	return m+i;
} 
int main()
{
	.....//两次调用fun(a,b)
}

多次调用fun(int,int)时,其中的static变量只在第一次被初始化,从第二次起都继承上次调用后的值

字节对齐
  • 结构体变量的首地址能够被其对齐字节数大小所整除。
  • 结构体每个成员相对结构体首地址的偏移都是成员大小的整数倍,如不满足,对前一个成员填充字节以满足。
  • 结构体的总大小为结构体对齐字节数大小的整数倍,如不满足,最后填充字节以满足。
    举例:默认结构体以最大成员类型字节数对齐
 struct A {
    int a;
    char b;
    short c;
};//大小为8
 
struct B {
    char b;
    int a;
    short c;
};//大小为12
与int *p[4]等价的表达式

A int *p
B int *(p[4])
C int (*p)[4]
D int p[4]

首先看int *p[4] ,根据运算符优先级[]>*,所以p先与[]结合构成数组,然后int 代表int类型指针,本质为声明一个int类型指针的数组
根据优先级()>*,所以B中p先与[]结合表示p为数组,p[]再与
结合表示int指针数组,所以答案为B
C中*先与p结合表示p为指针,再与[]结合表示数组指针

char *ptr = “abc”

执行ptr[0] = 'x’后,字符串会不会变为"xbc"?
答案是不一定的,题目没有讲明是在什么编译环境下,有的编译器是允许修改常量的。但在linux下gcc编译时不能的,"abc"相当于const char *类型,不能被指针修改。

Linux内存管理方式
  • 分段式:分段式内存管理是将整体虚拟地址空间划分为多个段(包括代码段、数据段、栈区、堆区等等)。这种内存管理方式的好处是有利于对地址空间进行管理。
  • 分页式:这种内存管理方式是将整体虚拟地址空间划分为很多个小的分页(默认4096字节为一页,每页数据量越小,地址空间利用率越高),分页式的作用是实现离散式存储,提高内存利用率。
  • 段页式:这种内存管理方式就是分段式和分页式的集合,即先将地址分段,然后对每段分页。
传输层的主要作用
  1. 多路复用和分用。封装应用层数据给网络层,将网络层数据分发给应用程序。
  2. 寻址定位。通过端口号定位进程。
  3. 流量控制和拥塞控制。防止接收端速度太慢造成溢出和丢包的现象。
  4. 可靠的数据传输。

总结:弥补网络层的不足

内存申请的过程
DNS解析过程
IO接口多路复用了解多少

(听成了RO接口,以为是什么高端组件,没答上来)
select:
poll:
epoll:

C++ 11新特性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值