笔试题考点

1 内存对齐规则(TX):

   ① 对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是min(#pragma pack()指定的数,这个数据成员的自身长度) 的倍数

   ② 在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。

  三个数据,一共6种排列:

  int 4B   char 1B   short 2B  指针占八字节(64位机器上) 指针占四字节(32位机器上)
  根据内存对齐原则:
    1. char int short:   char1 + 空3 + int4 + short2 + 空2 = 12
    2. char short int:     char1 + 空1 + short2 + int4 = 8
    3. int short char:   int4 + short2 + char1 + 空1 = 8
    4. int char short:   int4 + char1 + 空1 + short2 = 8
    5. short int char:   short2 + 空2 + int4 + char1 + 空3 = 12
    6. short char int:   short2 + char1 + 空1 + int4 = 8
2 操作系统的系统开销比率计算(TX)
  • 操作系统的调度逻辑是:发生中断->处理调度->发生中断->处理调度...

一个时间片长度就是两次中断发生之间的间隔。因此,系统开销比率 = 调度耗时/时间片长度

3使用sizeof计算类的大小(TX)
类的sizeof大小一般是类中的所有成员的sizeof大小之和。
1)当类中含有虚成员函数的时候,例如:
class B
{
float a;
public:
virtual void fun(void);
}
此时sizeof(B)的大小为8,而不是4。因为在类中隐藏了一个指针,该指针指向虚函数表,正因为如此,
使得C++能够支持多态,即在运行时绑定函数的地址。
2)当类中没有任何成员变量,也没有虚函数的时候,
例如:
class B2
{
void fun(void);
}
此时sizeof(B2)的值是多少呢?在C++早期的编译器中,这个值为0;然而当创建这样的对象时,
它们与紧接着它们后面的对象有相同的地址。比如:
B2 b2;
int a;
那么对象b2与变量a有相同的地址,这样的话对对象b2地址的操作就会影响变量a。所以在现在大多数编译器中,该值的大小为1。
如果有虚函数,则sizeof值为类的数据成员的大小加上VTBL(指针,4字节),再加上其基类的数据成员的大小。如果是多重继承,还得加上各基类的VTBL。
4 在Linux系统中,可以用来查找可执行文件的是?(WY)
(1)whereis
(2)locate
(3)which
(4)type
(5)find
5 python装饰器functools.wraps
functools.wraps 则可以将原函数对象的指定属性复制给包装函数对象, 默认有  __module____name____doc__,或者通过参数选择 @functools.wraps(fn)
6 时间片轮转

假设某分时系统采用时间片轮转法,进程A,B,C,D需要运行的时间分别为20ms,10ms,15ms,5ms,时间片选用5ms,则平均周转时间是:每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。

系统按照时间片轮转,进程运行顺序为A B C D A B C A C A,A执行4次,B执行2次,C执行3次,D执行一次,按执行完的时间算:A在第10个时间片后,B在第6个时间片后,C在第9个时间片后,D在第4个时间片后,平均时间为(10+6+9+4)*5/4 = 36.25    总时间和除以进程数目

3使用sizeof计算类的大小(TX)

猜你喜欢

转载自www.cnblogs.com/yun1006/p/9371915.html