海康威视软件开发工程师-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位数0x13892878004H~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++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。

全部评论

相关推荐

超聚变 bios开发 n*14
点赞 评论 收藏
分享
11-14 23:17
已编辑
门头沟学院 嵌入式工程师
&nbsp;&nbsp;&nbsp;&nbsp;小弟的bg是双非本,十个月左右实习经历,有接触实际开发,走的是嵌入式的linux驱动方向(RTOS也有实习项目经历但是更喜欢linux和安卓这样,综合来看就是BSP的技术栈)。&nbsp;&nbsp;&nbsp;&nbsp;秋招虽然投的很早,总计投了一百多个网申、BOSS之类的加一起,但只有寥寥无几几个面试,最期望的联发科,排序也挂掉了。截至发帖,只拿了一个offer,地点在深圳南山,转正后工资和补贴加起来1.1W这样子,公司规模和平台不算小应该算是中厂,原本我也安慰自己,双非本这样已经还可以了,但是结合租房、吃饭还有其他消费一算,感觉一个月存3K都难。&nbsp;&nbsp;&nbsp;&nbsp;其实难过的点是工资,也不是工资,比起去大厂做侧开、前端或者其他互联网那些同学朋友,工资低了有一倍不止(没骗人,不少朋友拿到了20多K的offer),唉,心理比较失衡。另一个就是横向对比,比起牛客其他走linux驱动的朋友,我的月收入也比别人少几K这样子。唉,还是心理失衡,明明大学期间已经很努力了,成绩、比赛、实习都有尽自己能力去搞,但是还是混成这个样子,感觉还是挺难受的。&nbsp;&nbsp;&nbsp;&nbsp;虽然这样,我也知道应该是不得不签了,后面再争取实习转正或者春招......话说实习转正真难熬,现在的公司要明年五月左右才知道结果......&nbsp;&nbsp;#嵌入式#
点赞 评论 收藏
分享
3 22 评论
分享
牛客网
牛客企业服务