当前位置: > 财经>正文

软件开发笔试题 信托公司 产品研发 笔试题及答案详解

2023-09-05 04:44:14 互联网 未知 财经

软件开发笔试题

4、有两个线程,最初 n=0,一个线程执行 n++; n++; 另一个执行 n+=2; 问,最后可能的 n 值?() A. 1 B. 2 C. 3 D. 4 解析:【BCD】大家要知道 C语言中的 ++ 和 += 并不是原子操作,而是通过多条微程序组成的,因此 ++ 和 += 在执行过程中可能被中断的 第一种可能情况:现在假设两个线程没有并行顺序执行的那么结果显然是 4。 第二种可能情况:再假设现在第一个n++ 已经执行完了 但是结果还没有写回内存 这个时候 n+=2 已经全部执行完 2 写进了内存 结束 然后回到n++的写回操作 这个时候内存就从2被改回1了,后面再来一次n++ 结果就为2。 第三种可能情况: 第n+=2 先读取n的值到寄存器 即0入寄存器 这个时候被中断 第一个n++开始执行 并直到结束 内存被改成了1 ,然后 n+=2 继续执行 结束后内存变为2 第二个n++再执行 结果就是3了 我个人看了网上的这个解析后也觉得,肯定不可能为1了。

5、死锁 产生死锁的原因主要是: (1) 因为系统资源不足。 (2) 进程运行推进的顺序不合适。 (3) 资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之

6、在32位little endian机器上运行该程序,得到结果是什么?

#include int main(){ long long a = 1, b = 2, c = 3; printf("%d %d %d ", a, b, c); return 0;} 1234567

解析:【1 0 2】因为long long 是8个字节的,%d是4个字节的,溢出覆盖了后面,然后又是小端规则的。 【传入参数,由右往左,栈空间内存从高往低,little endian, 栈空间如下: 内存高位-> 00000000 00000011 00000000 0000001000000000 00000001

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。