嵌入式Linux工程师笔试记录 -- 2020.8.12 (八)

广州CVTE2018嵌入式软件工程师笔试题

1. 考察文件打开方式:

open

方式作用
O_RDONLY只读打开
O_WRONLY只写打开
O_RDWR读写打开
O_CREAT文件不存在则创建文件
O_TRUNC存在则清零
O_APPEND以追加方式打开
O_NONBLOCK非阻塞方式打开

fopen

方式作用
r / rb只读打开
w / wb只写打开
r+ / w+ / rb+/ wb+读写打开
a / ab追加方式打开
a+/ab+追加方式打开,可读可写

2. 谈谈COM的线程模型。然后讨论进程内/外组件的差别。

以下来自《COM原理与应用》一书

COM线程模型:

  1. COM规范本身没有定义特有线程模型,但因为在Win32平台上程序的运行是以线程为单位的,但线程环境与多线程环境下的客户程序或COM应用程序,情况有所不同。Win32有两种线程:UI线程和辅助线程,COM与之对应为套间线程和自由线程。
  2. COM对象运行在套间线程中,该对象属于此套间线程所有,并永远运行在此线程中。虽然线程供用一个进程地址空间,套间线程的"套间"的概念与进程一致,套间线程中的COM对象不需要进行同步处理,但线程外调用只能通过代理/存根调用套间线程的对象。
  3. COM对象运行在自由线程中,那么同一进程中其他线程可以直接调用该对象成员函数。但对象成员函数必须进行同步处理,以保证其线程安全特性。
  4. 依据以上概念,一个进程可以包括多个线程,这些线程可以是套间线程,也可以是自由线程。所有的自由线程组合形参自由线程组。有时会将套间线程称为单线程公寓(STA),将自由线程组称为多线程公寓(MTA),所以一个进程中只能由一个MTA,可以由多个STA。

进程内/外组件的差别:

  1. 进程内组件通常是动态链接库(DLL)形式。动态链接库是在执行过程中动态装入到进程的内存空间,当不需要时,系统可以把动态链接库卸出内存,以便释放内存供其他程序使用。进程内组件和客户程序执行在同一进程地址空间中,所以一旦客户程序与组件程序建立通信关系后,客户程序直接调用组件接口,效率非常高;但同时,组件程序中的严重错误会直接导致客户程序崩溃。

  2. 进程外组件运行独占一个进程,与客户程序互相独立,并且可以位于不同机器上(远程组件)。本地组件一般为EXE程序,远程组件可以是DLL,也可以是EXE。客户程序调用进程外组件显然涉及到进程间通信,甚至在不同机器上要涉及网络过程的调用,效率相对会比较低,但是更加稳定。

3. 多态类中的虚函数表建立时机?

虚函数表是在编译时期建立的,各个虚函数编译时组成一个虚函数入口地址数组,而对象的虚函数表指针式在运行期,也就是在构造函数被调用的时候进行初始化的,这是实现多态的关键。

4. 判别一个数式unsigned

#define ISUNSIGNAL(x)  ( ( (x)>=0 && ~(x)>=0 ) ? 1 : 0 )
// 1:无符号  2:有符号

5. 已知一个数组table,用一个宏定义,求出数据的元素个数

#define NTBL ( sizeof(table) / sizeof(table[0]) )
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值