C语言面试题.pdf

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5、问:林锐面试题中四个有关内存操作的问题: 第一题、运行会出现段错误(崩溃) : 答:因为参数是值传递,所以主调函数中的 str 指针已然指向空,不能向 里面拷数据,除非加上取地址,采用二维指针接收才能传递动态内存; 第二题:乱码: 答:实际上可能是乱码,也可能显示出一部分内容,显示乱码是因为刚才 那段栈内存空间全部被覆盖,如果未完全覆盖则显示一部分内容; 第三题:能够输出 hello 答:但由于没有在同一层释放内存,容易导致内存泄露; 第四题:对已经释放的内存进行操作 答:会破坏其它有用数据,后果难以预料,通常提示出现段错误。
c 参数本身为常量不可变; void function (char *const Var);
六、 系统编程 1、问:什么是程序?什么是进程?本质区别? 答:程序是存放在磁盘上一些指令的有序集合; 进程是程序执行的实例,是个动态的过程; 本质区别:程序是静态的,进程是动态的。 2、问:无名管道为什么只能在具有公共祖先的进程间通信?管道的特点? 答:因为无名管道没有名字,没法通过 open 的方法打开,进程只能通过 继承的方法获取管道文件描述符。 管道的特点: 1、半双工,数据在同一时刻只能在一个方向上流动。 2、只能在具有公共祖先的进程之间使用,通常用在父子管道之间。 3、管道对于管道两端的进程而言,就是一个文件,但他不是普通的 文件,不属于某个文件系统,并且只存在于内存中。 4、数据从管道的一端写入,从另一端读出。 5、没有名字。 6、管道的缓冲区是有限的。 7、管道所传送的数据是无格式的,这要求管道的读出方与写入方必 须事先约定好数据的格式,如多少字节算一个消息等。 8、写入管道的数据读完以后就从管道中消失。 3、问:管道与消息队列的区别? 答:管道与无名管道收发数据都是先进先出的, 消息队列可以实现按 消息的类型随机读取。 4、问: select()函数的作用? 答:用于一个进程同时监听多个文件描述符, 还可以设置监听超时时 间。 5、问:有名管道相比无名管道最大的优点是什么? 答:可以实现毫无干系的进程间通信。 6、问:什么是信号量,有什么特点,简述 PV 操作? 答:信号量就是个计数器,计数器的值只能是非负的。 操作计数器的方法是 PV 操作, PV 操作具有原子性(不可中断) ,要 执行就一定要执行成功,要么就不执行。 P 操作使信号量的值减一 当进行带堵塞的 P 操作的时候,如果信号量的值已经是 0 了,P 操 作就会堵塞。 V 操作使得信号量的值加一 7、问:什么是进程、什么是线程,它们之间的关系?实现多任务的优缺
八、 C++与 QT 1、问: QT区别于其他应用开发工具有什么优点及缺点? 答:有较强的移至性; 开源的开发工具;
用 C++语言实现,效率相对于其他面向对象语言执行效率较高; 强大的通信机制(信号和槽,比 MFC回调好); 支持 openGL可得到更加完美的 2D/3D 效果。 2、问:怎样理解 QT,QT是一种语言吗? 答:QT是一套应用程序开发框架, 也叫是开发工具或一套图形库, 用 C++ 语言来实现的。 3、问: QT 中信号与槽的主要作用是什么? 答:主要是在对象之间进行通信。 4、问: QT对信号间进行处理是通过什么方法实现的? 答:通过虚函数的方法,重新实现相应的事件函数。 5、问:面向对象设计与面向过程设计最大区别是什么? 答:面向对象的设计中, 程序是由一个或多个对象组成的, 每个对象负责 不同的任务, 一起让整个运行程序运行起来, 每一个对象又是由不同的类 实现,使得程序模块化更强。 而面向过程的设计, 就是程序从头到尾执行 的一个过程,需要自己去划分模块。
点? 答:进程是系统资源分配的最小单位,线程是 CPU 调度和分配的最 小单位; 每个进程都拥有自己独立的系统资源, 而线程基本上没有自 己独立的系统资源。 关系:
1、一个进程中可以有多个线程, 线程必须依赖于进程存在, 如 果进程结束了,线程也就不存在了。
2、每个进程都至少有一个线程,称为主线程。 多任务优缺点:
Const char *const pConten 3、函数中使用 CONST
(1)const 修饰函数的参数
a 传递过来的参数在函数内不可以改变; void function (const int var);
b 参数指针所指内容为常量不可变; void function(const char *Var);
6、问:哪些地方可以用到 const? const 变量和函数输入参数用 const 修饰有 哪些作用? 答: 1、定义常量 ( 1) const 修饰变量, const TYPE ValueName=value;value 是不可变的。 ( 2) 将 const 改为外部链接, 作用于扩大至全局, 编译时分配内存, 并 且可以不进行初始化,仅仅作为声明,编译器认为在在程序其他 地方进行了定义; Extend const int ValueName = value; 2、指针使用 CONST (1)指针本身是常量不可变 (char *) const pContent; Const ( char*) pContent; (2)指针指向的内容是常量不可变 Const char *pContent; Char const *pContent; (3)两者都不可变
一、 C语言面试题:
1、问:在嵌入式开发中,为什么能通过 C语言直接操作硬件? 答:因为 C有指针,它是 C语言的灵魂,它可以直接访问内存。
2、问:链表的作用? (这是上一个问题的延申,学员一般会举一堆例子来说 明它的作用,但这都不是重点,没有抓住主要矛盾 ) 答:链表用于内存管理, 链表节点中的指针域可以将不连续的内存彼此关 联起来,实现内存的动态管理。
3、问:什么变量不能用指针指向? 答:寄存器变量( register 修饰),因为这个变量会优先选择存放到 CPU 寄存器中,而指针只能指向内存的任务区域,但不能指向寄存器。
4、问: 有符号字符型和无符号字符型变量的最大值和最小值分别是多少 (十 六进制多少),为什么? 答:有符号( -128 —127,-0X80— 0X7F),无符号( 0-255,0X00 —0XFF)。
缺点:中间包含了多次的搬运过程,效率稍微有点低。 2、问 : 为 什 么 Bootloader 大 多 由 两 个 阶 段 启 动 构 成 ? 以 你 熟 悉 的
bootloader 为列讲解一下两阶段分别干什么事情? 答: Bootloader 会直接对硬件进行操作,为了分离硬百度文库相关性,一般 Bootloader 有两部分代码组成,第一部分一般由汇编来完成,完成与体 系相关的代码、功能的实现。 第二部分由 c 语言完成,完成与系统机构无关的通用功能的实现。 Vivi 的 stage l 实际完成的主要任务: 1、禁用看门狗、关闭所有中断、初始化系统时钟 2、设置 s3c2410 的内存相关的 13 个寄存器 3、初始化调试指示灯 4、初始化 uart ,作为调试口 5、从 NAND或 nor Flash 复制代码到 SDRAM 6、跳转到 main,进入 stage 2 Vivi 的 stage 2 实际完成的主要任务 1、step1 :打印版本信息 2、step2: 初始化 GPIO 3、step3 :MMU初始化 4、step4 :堆初始化 5、step5 :MTD设备初始化 6、step6 :存放 vivi 的私有参数
2 、问:简述 s3c2440 NAND/NOR两种启动方式的异同? 答: Nor 启动: 系统加电后会从 0X000000 开始的三总线位置读取第一条指令 进 行 工 作 , norFLASH 采 用 总 线 结 构 可 以 直 接 连 在 三 总 线 0X000000位置上,所以将 bootloader 烧到 norflash 0X000000 位置上,系统加电后即可运行 bootloader 的第一条代码,单 片机一般采用此种启动方式。 优点:硬件连接简单、可靠。 缺点: nor flash 由于结构的原因一般做不了太大,而且其读写速度 比较慢。 Nand 启动: 因为 nand 不支持总线线性寻址, 所以 cup 会从 nand 自动拷 4K 代码到内部 RAM,并从这段 RAM开发运行程序,所以这 4K 代码 往往是 Bootloader 的第一段代码,起作用为将 Bootloader 的 主要部分搬到内存中运行,然后进行后续工作。 优点:此方案充分利用了 nand 大容量存储、 sdram 高速运行的特点, 解决了嵌入式系统存储与运行的容量与速度问题;
进程: 优点:父子进程资源独享,不用考虑两进程利用公共资 源出现冲突。 缺点:资源开销比较大,子进程完全复制父进程的地址 空间,父子进程共享数据不方便。
线程: 优点:资源开销小,共享数据比较方便 缺点:因为资源共享,多个线程对公共资源进行访问的 时候要进行同步和互斥比较麻烦。
七、 网络编程 1、问: tcp 、udp、ip 、http 、telnet 协议分别位于 TCP/IP 协议哪一次? 答: tcp 、udp 位于传书层; ip 位于网络层; http 及 telnet 位于应用层。 2、问:路由器工作在 TCP/UDP的哪一次? 答:网络层 3、问: DNS是什么协议? 答:域名解析协议。 4、问:什么是 tcp 协议与 udp 协议?它们的区别及优缺点? 答: 1、用户数据报协议( UDP),UDP 协议是面向无连接的不可靠服务, 在传输数据之前不需要先建立连接。远地主机的运输层收到 UDP报文后, 不需要给出任何确认,传输数据快,能广播。 2 、传输数据报协议( TCP),TCP 则提供面向连接的可靠服务。在传 输数据前必须先建立连接,传输数据慢,不能广播。 5、问: ip 地址 192.168.220.22 属于什么 ip ? 答:属于私有 ip 7、问:什么是大端什么是小端字节序?网络字节序是大端还是小端? 答:小端:低地址存放低字节,高地址存放高字节; 大端:相反; 网络字节序是:大端。
九、 平台与驱动部分: 1、问:Bootloader 在嵌入式系统中处于什么地位? bootloader 的主要作用 是什么? 答: Bootloader 是系统加电后、内核运行之前执行的一段代码,处于嵌 入式的最底层。 作用: 一、为启动内核准备好正确的软硬件、软件主要指堆、栈等; 硬件主要指内存、系统时钟等,最终将内核由固态存储器加载到内存中; 二、是为了更新、备份、回复系统提供控制平台。
相关文档
最新文档