《嵌入式软件开发笔试与面试手册》:https://blog.nowcoder.net/zhuanlan/jvN8gj 《软件开发笔试汇总》:https://blog.nowcoder.net/zhuanlan/0oDWVm 单选题 关于程序的运行效率,下列说法错误的是? 对二维数组a[M][N]进行遍历时,应该外层循环遍历M,内层循环遍历N,这样执行效率最高 if else的分支语句编写,把最可能发生的条件写在最前面 发生Cache miss时,CPU要到内存中存取数据,这个过程比较慢,所以操作系统一般会调度到其它线程去执行以提升CPU利用率 使用volatile关键字会影响编译的优化,所以只应在必要的情况下使用 解释: 虽然在Cache miss时,CPU确实需要花费更多时间从内存中加载数据,但操作系统的线程调度决策并不基于单个Cache miss事件。操作系统通常在多个任务或线程之间进行调度,以优化整体的CPU利用率,但这是基于时间片或硬件中断,而不是单独的Cache miss事件。Cache miss可以导致延迟,但不直接导致操作系统调度其他线程。 关于静态库和动态库的描述,错误的是() 静态链接库是在编译时编译到源码中的,在运行时刻和静态库就没有任何关系, 不同应用程序如果调用相同的动态库,那么内存里只有一份该动态库的实例。相比静态库,使用动态库更能节省空间和资源。 静态库对函数库的链接是在编译时完成的,而动态库是在程序运行期间进行的链接 多个进程加载使用同一个动态链接库时,该动态链接库的堆栈空间是被多个进程共享的。 解释: 虽然动态链接库的代码段在内存中是共享的,但每个进程都有自己的堆栈空间。堆栈空间包含了函数调用的局部变量、返回地址等,这些信息是独立于每个进程的,不可能在进程间共享。 32位系统中C程序有符号短整型变量的最大值为() 32767 32768 65536 65535 下面程序的运行结果是(): int main(){ const int i=5; const int *ptr; ptr=&i; *ptr=1024; printf("%d\n",i++); return 0;} 5 1024 6 编译出错,无法运行 解释:尝试通过 const int *ptr; 和 ptr=&i; 来修改 i 的值 *ptr=1024; 是不允许的。因为 ptr 是一个指向 const int 的指针,这表示通过 ptr 指针不可以修改它所指向的值。在非 const 环境下修改 const 变量是未定义行为,并且编译器通常会阻止这种操作。 下列关于TCP工作原理,错误的是() TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序,这种情况下应用层收到的数据也是失序 TCP将保持它首部和数据的检验和,这是一个端到端的检验 应用数据被分割成TCP认为最适合发送的数据块。 TCP能提供流量控制 解释:TCP确实在IP数据报上封装其报文段,而IP数据报到达可能会失序。但是,TCP有序列号机制来确保数据可以重新排序,因此即使TCP报文段到达失序,TCP也会在传递数据给应用层之前重新排序。因此,应用层接收到的数据是有序的。 Linux用户空间直接访问的内存地址属于() 虚地址和实地址都有 实地址 虚地址 物理地址 解释:在Linux操作系统中,用户空间程序访问的内存地址通常是虚拟地址(Virtual Address)。这是因为现代操作系统,包括Linux,使用虚拟内存系统来管理程序的内存访问。虚拟内存为每个进程提供了一个独立的地址空间,这个地址空间由操作系统通过内存管理单元(MMU)映射到物理内存上。 不是用户空间与内核通信方式的是() 内存映射 系统调用 驱动程序 信号量 解释:虽然驱动程序是内核的一部分,主要用于操作硬件设备,但它本身并不是一种用户空间与内核通信的方式。用户空间程序通常通过系统调用来与驱动程序交互,而不是直接与驱动程序通信。 存储一个32位数0x1389287到8004H~8007H四个字节单元中,若以大端模式存储,则8004H单元存储的内容为:() 0x87 0x13 0x92 0x01 解释:在大端模式中,最高有效字节(MSB)存储在最低的内存地址,其余字节按照顺序存储在更高的内存地址中。 地址 8004H 将存储最高有效字节(MSB):0x01 地址 8005H 将存储下一个高位字节:0x38 地址 8006H 将存储下一个字节:0x92 地址 8007H 将存储最低有效字节(LSB):0x87 有如下代码: int a =4; int b = 9; 那么表达式a>=(b>8?:sizeof(a=b+1),a)的返回类型、返回值、以及a的值各自是多少? 整型;1;a=4 布尔;1;a=5 整型;0;a=10 布尔;0;a=10 #include <stdio.h>int main() { int a = 4; int b = 9;