| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 2017安联锐视嵌入式笔试题 -> 正文阅读 |
|
[嵌入式]2017安联锐视嵌入式笔试题 |
1.全局变量和局部变量在内存中的区别内存空间分布为 代码段,数据段,未初始化数据段,堆 栈。 全局变量在数据段,局部变量在栈内,随着子程序的运行结束被自动释放。 2.c++如何声明一个函数为c函数前面加个extern "c" #ifdef __cplusplus extern "C" { #endif int dofunc(); #ifdef __cplusplus } #endif 第二种写法既能用c编译也可以用c库编译 3.const和define的区别const有类型检查 cons定义的变量t在内存中的拷贝只有一份,而define定义的变量可能有很多份。 1.编译器处理方式不同 ? ? 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高 4.引用和对象的区别2.1本质: 引用是别名,指针是地址 2.2.1 从现象上看: 指针在运行时可以改变所指向的值,而引用一旦与某个对象绑定后就不再改变。意思是:指针可以被重新赋值以指向另一个对象,但是引用则总是在初始化时被指定的对象,以后不能改变,但是指向的内容可以改变。(下面是这个规则的理解) 程序为指针变量分配区域,而不为引用分配内存区域。因为引用生命时必须初始化,从而指向一个已经存在的对象,引用不能为空值。 从编译角度上看 程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说引用可以被认为是不能改变的指针。 符号表本质上是一种数据库,用来存储代码中的变量,函数调用等相关信息。该表以key-value 的方式存储数据。变量和函数的名字就用来对应表中的key部分,value部分包含一系列信息,例如变量的类型,所占据的字节长度,或是函数的返回值。 5.写出你所知道的stL容器1.顺序容器
2.关联容器->红黑树实现
3.容器适配器->无序容器 hashmap 6.构造函数的调用顺序基类构造函数、对象成员构造函数、派生类本身的构造函数?? 7.调用动态链接库的两种方式显式调用:使用LoadLibrary载入动态链接库、使用GetProcAddress获取某函数地址 隐式调用:可以使用#pragma comment(lib, “XX.lib”)的方式,也可以直接将XX.lib加入到工程中 8.类成员的重载,覆盖,隐藏的区别重载: 1.相同的范围 2.函数名字相同 3.参数不同 4.virtual关键字可有可无 覆盖 1.覆盖是指派生类函数覆盖基类函数,2.函数名字相同 3.参数相同 4.基类函数必须有virtual关键字。 隐藏 1.隐藏是指派生类的成员函数与基类的成员函数同名,但是参数不同,导致基类函数将被隐藏。 2.如果派生类函数与基类函数同名 参数相同,基类成员函数没有关键字,那么基类函数也将被隐藏 9.列出linux和windows线程同步的方法windows线程同步 1.关键代码区 ->每次只能有一个线程进入(静态变量和全局变量) 2.互斥mutex 每次只运行一个线程访问。 互斥锁环境下,线程挂了操作系统会通知其他线程,因为是在内核区 关键代码区情况下,线程挂了,其他线程也不知道,傻等,是在用户区,所以关键代码区的性能会高一点 3.信号量 计数器大于0,意味着被保护的对象可用,每次申请计数器就减一,释放就加一。信号量允许多个线程访问。 LINUX线程同步 1.互斥锁 2.条件变量 3.信号量->ipc和posix 下面给出条件变量的一些api 1.初始化条件变量 int pthread_cond_init(pthread cond_t*t,pthread_*cond_attr) 参数为条件变量值和条件变量属性 2.释放条件变量 int pthread_cond_destroy(cond)条件变量值 3.堵塞条件变量 int pthread_cond_wait(&cv,&mutex) 解锁互斥锁,将堵塞cv参数指向的条件变量。 怎么唤醒? p_c_signal? p_c_boardcast 10.进程间通信的方式有哪些内存通信,消息队列,管道通信(有名,无名), 11.数组下标越界
1.首先要明白这个问题,unsigned char i是个无符号数,int i是有符号数,所以int i的最高位为符号位,所以u_char的范围是0-256也就是0到2的八次幂 一个32位的signed int类型整数表示的范围:-2^31~2^31-1 一个32位的unsigned int类型整数表示的范围: 0~2^32-1 一个8位的signed char类型整数表示的范围:-2^7~2^7-1 一个8位的unsigned char类型整数表示的范围: 0~2^8-1 所以当i=255是如果此时i再加1,它会等于等于0,所以会产生死循环 正确做法应该改为i<255 11.linux中有哪些内核同步方法1.每cpu变量 每个cpu仅访问自己的每cpu变量 2.原子操作 原子操作就是不可中断的一个操作,不会被线程调度机制打断,运行期间不会有上下文切换 一个指令可以完成的, 3.优化和内存屏障? 4.自旋锁? 锁住临界区 进入临界区需要获得自旋锁,离开需要释放自旋锁 5.读写自旋锁 分为读锁和写锁 读锁可以实现多个进程读同一数据,但不能写,写锁则仅有一个进程可以进入临界区去进行写操作。 6.顺序锁 7.信号量 信号量和自旋锁最大的差别是信号量中存在一个进程等待队列,未获取锁的进程将被放到等待队列中,主动切换进程,调用schedule(),让出cpu。 12.简述一下交叉编译器的作用在该平台可以编译出可以在另一个平台上运行的程序 13.用shell脚本,编写一个简单的判断程序
这个写了个大概。。。 不知道对不对。 14.用linux命令查找当前文件下所有的点.c文件? ? ? ? find ./ ".c" 15.简述boatloader ,kernel,filesystem3者之间的关系。1.linux按照3者现在的顺序进行启动 boatloader 是linux-kernel移植的基础,是在系统启动之后,kernel启动之前运行的第一段代码。 2.完成boatloader的移植后,就是kernel的移植。包括添加特定模块的驱动,正对具体要求对内核进行配置, 3.由kernel重新驱动文件系统。(最后一步挂载文件系统) ???????? ? |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 18:53:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |