海康威视软件开发工程师-BSP笔试 10-10
《嵌入式软件开发笔试与面试手册》: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;
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。