笔试题目记录

简介: 32位机器上,以下结构的sizeof(P)为struct A { int a; char b; int c; char d;}struct P { struct A w[2]; short b; struct A* p;} /*考察结构体对齐和填充:结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如果不是,编译器会自动在成员间填充。

32位机器上,以下结构的sizeof(P)为

struct A {

 int a;

 char b;

 int c;

 char d;

}

struct P {

 struct A w[2];

 short b;

 struct A* p;

} 

/*考察结构体对齐和填充:

结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如果不是,编译器会自动在成员间填充。*/

- struct A { 
  int a;                            //4 bytes 
  char b;                        //1 bytes 
  //char pad[3]               //3 bytes 

int c;                           //4 bytes

  char d;                       //1 bytes 

  //char pad[3]              //3 bytes 

  }                            // total = 16 bytes 

  

/* P中有结构体A的成员,但是计算时按照A中数据类型确定的*/

struct P {

struct A w[2];    // 2 * 16 bytes

  short b;            //2 bytes 

  //char pad[2]    //2 bytes 

struct A* p;      //4 bytes

}  // total = 40 bytes

下列关于const和#define定义常量的区别,说法不正确的有?

  • define宏是在预处理阶段展开。const常量是编译运行阶段使用
    
  • 宏没有类型,不做任何类型检查,仅仅是展开。const常量有具体的类型,在编译阶段会执行类型检查
    
  • define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。const常量会在内存中分配(可以是堆中也可以是栈中)
    
  • const定义和#define定义的常量在程序运行过程中只有一份拷贝
    

A,正确,#define定义的宏是在预处理阶段进行替换的,const常量是在编译、运行阶段进行使用的。

注意是仅仅的字符串替换,并不会检查其合法性。

预处理阶段做了的任务:
1:将头文件中的内容(源文件之外的文件)插入到源文件中
2:进行了宏替换的过程(简单的字符串替换),定义和替换了由#define指令定义的符号
3:删除掉注释的过程,注释是不会带入到编译阶段
4:条件编译

B,正确,所有的宏替换只是简单的字符串替换,注意是字符串替换,所以并不会检查其合法性,而const定义的常量依然是内置类型等,所以会对其进行类型安全检查。

C,正确,宏定义在程序中使用了几次在预处理阶段就会被展开几次,并不会增加内存占用,但是宏定义每展开一次,代码的长度就要发生变化(所以有利必有弊啊!),而const常量也会为其分配内存(如果是动态申请空间肯定就是堆中了)。

D,错误,const定义的常量只有一次拷贝没毛病,而define定义的变量在内存中并没有拷贝,因为所有的预处理指令都在预处理时进行了替换。

img_29a0dfcf60f9fdb3a7c62e056b17fd8e.png
02.png

解答:


img_9ce848580587807e417d44df6303d13b.png
03.png

在TCP/IP中,ICMP属于哪一层协议?**

答:ICMP协议是IP层的附属协议,是介于IP层和TCP层之间的协议,一般认为属于IP层协议。IP协议用它来与其他主机或路由器交换错误报文和其他的一些网络情况。在ICMP包重携带了控制信息和故障恢复信息。

ICMP报文有两种类型,即ICMP差错报告报文和ICMP询问报文。

设在一棵度数为3的树中,度数为3的结点数有2个,度数为2的结点数有1个,度数为1的结点数有2个,那么度数为0的结点数有( )个。

答:根据图论中树的公式:顶点数 - 1 = 边数,设出度为0的结点有y个,列方程求解。其中顶点数为2+1+2+x,边数为2 x 3+1 x 2+2 x 1。解出来得 y = 6

500张骨牌整齐地排成一行,按顺序编号为1、2、3、……、499、500。第一次拿走所有奇数位置上的骨牌,第二次再从剩余骨牌中拿走奇数位置上的骨牌,以此类推。请问最后剩下的一张骨牌的编号是?

答:

第一次后剩下250个偶数:2,4,6,8......498,500(2的倍数留下,2的一次方)

第二次后剩下125个偶数:4,8,12,16......496,500(4的倍数留下,2的二次方)

第三次后剩下62个偶数:8,16,24....488,496(8的倍数留下,2的三次方)

..........................................................................

第八次后留下的1个偶数:256(2的八次方倍数留下)

所以答案选C

Linux 文件权限一共 10 位长度,从前数第 5-7 位表示的内容是

答:第一位表示是文件或者目录,2~4是用户权限, 5~7是组权限 ,8~10是其他用户权限

关于TCP可靠数据传输服务的论述,正确的是

答:

A.错误。不一定需要超时才重传,出错了也可以重传;      

B.错误。错在于这个时间间隔不是固定的。超时时间间隔 RTO,如果太短可能导致大量不必要的重传,如果太长则会导致性能下降;所以超时时间间隔 RTO是通过往返时间RTT算出来的。TCP 采用了一个高度动态的算法,来不断的调整时间间隔,总之超时时间间隔不是固定的~      

C.错误。TCP是面向连接的,提供可靠服务的,所以需要对乱序到达的分组进行确认以及重排。      

D.正确。如果发送方收到连续3条的同一个序列号的ACK,那么就会启动快速重传机制,不需要等到timeout,把这个ACK对应的发送包重新发送一次。

引入二叉线索树的目的是()

答:加快查找结点的前驱或后继的速度。

用邻接表表示图进行广度优先遍历时,通常是采用()来实现算法的

答:记得广度优先用队列,深度优先用栈。

ava中用正则表达式截取字符串中第一个出现的英文左括号之前的字符串。比如:北京市(海淀区)(朝阳区)(西城区),截取结果为:北京市。正则表达式为()

答:

(?=Expression)

顺序肯定环视,表示所在位置右侧能够匹配Expression

(?=()*就是匹配正括号, 因为(需要转义, 所以要再前面加斜线

前面的.*?是非贪婪匹配的意思, 表示找到最小的这样的匹配即可。

否则, 因为后面也有括号, 会匹配到 北京市(海淀区)(朝阳区)

编程:今年的第几天?输入年,月,日,计算该天是本年的第几天。

tips:这里的重点主要就是有关闰年的判断?在二月的天数 + 1;

代码截图:

img_1cf0285a80b7c7b079b6698305d8cfdf.png
04.png

问:计算机系统中判别是否有中断事件发生应是在()

答:应该发生在执行完一条指令后。

问:某系统中有 3 个并发进程,都需要同类资源 4 个,试问该系统不会发生死锁的最少资源数是:

答:注意极限情况问题,极限情况是每个并发进程都已经有了三个资源,此时一共有9个,那么只需要再有一个资源就可以使一个进程完成操作任务,释放资源之后循环。所以需要的最少资源数是 10 个。

问:下面有关共享内存,说法不正确的是?

答:共享内存不提供同步 参考 JMM java内存模型

尽管每个进程都有自己的内存地址,不同的进程可以同时将同一个内存页面映射到自己的地址空间中,从而达到共享内存的目的。(这句话是正确的)

目录
相关文章
|
7月前
|
存储 编译器 C语言
数组、指针练习题及解析(含笔试题目讲解)其一(上)
数组、指针练习题及解析(含笔试题目讲解)其一
35 0
|
1月前
|
编译器 C++ 容器
刷题日记② --- 选择题
刷题日记② --- 选择题
41 1
|
10月前
|
JavaScript Java 关系型数据库
小菜鸟初始java项目出错解决思路
java中的第一个项目SSH完成了,并且找师傅验收了,在实现功能的时候,出现了许多的问题,那么对于一个刚接触java刚开始使用myeclipse软件的小菜鸟来说,针对这些问题如何寻找思路很重要,下面就将小编的一些经历以及总结经验分享给大家。
|
5月前
leetcode-经典面/笔试题目
leetcode-经典面/笔试题目
21 0
|
7月前
|
存储 Serverless
数组、指针练习题及解析(含笔试题目讲解)其一(下)
数组、指针练习题及解析(含笔试题目讲解)其一(下)
44 0
|
7月前
|
存储 C++
数组、指针练习题及解析(含笔试题目讲解)(二)
数组、指针练习题及解析(含笔试题目讲解)(二)
19 0
|
9月前
|
存储 C语言
深度讲解指针的笔试题目
主页:C语言的前男友 知识讲解:C语言指针 创作者:C语言的前男友 开发环境:VS2022 前言:前面学了好久的指针,今天来看一些组织的面试题,来帮助我们加深理解。今天主要看一些关于sizeof(),和strlen(),对数组,字符串的操作。通过练习深度理解指针。深刻理解数组与指针,数组名与指针,字符串与指针,二维数组指针之间的关系。欢迎大家前来指正,如果觉得作者写的还不错的话,请麻烦动动发财的小手,关注,点赞,收藏,评论
深度讲解指针的笔试题目
|
Java
JDK打印的疑问:CUPSPrinter有何用处?
JDK打印的疑问:CUPSPrinter有何用处?
72 0