程序员笔试面试总结_第1页
程序员笔试面试总结_第2页
程序员笔试面试总结_第3页
程序员笔试面试总结_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 Static 作用 作用 限制变量的作用域 设置变量的存储域 1 在函数体 一个被声明为静态的变量在这一函数被调用过程中维持其值不变 2 在模块内 但在函数体外 一个被声明为静态的变量可以被模块内所用函数访问 但不能被模块外其它函数访问 它是一个本地的全局变量 3 在模块内 一个被声明为静态的函数只可被这一模块内的其它函数调用 那就是 这 个函数被限制在声明它的模块的本地范围内使用 即 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期 把全局变 量改变为静态变量后是改变了它的作用域 限制了它的使用范围 2 进程 线程 进程 线程 定义 定义 一 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 是系统 进行资源分配和调度的一个独立单位 二 线程是进程的一个实体 是 CPU 调度和分派的基本单位 他是比进程更小的能独立运 行的基本单位 线程自己基本上不拥有系统资源 只拥有一点在运行中必不可少的资源 如程序计数器 一组寄存器和栈 一个线程可以创建和撤销另一个线程 进程和线程的关系 进程和线程的关系 1 一个线程只能属于一个进程 而一个进程可以有多个线程 但至少有一个线程 2 资源分配给进程 同一进程的所有线程共享该进程的所有资源 3 线程在执行过程中 需要协作同步 不同进程的线程间要利用消息通信的办法实现 同步 4 处理机分给线程 即真正在处理机上运行的是线程 5 线程是指进程内的一个执行单元 也是进程内的可调度实体 线程与进程的区别 线程与进程的区别 1 调度 线程作为调度和分配的基本单位 进程作为拥有资源的基本单位 2 并发性 不仅进程之间可以并发执行 同一个进程的多个线程之间也可以并发执行 3 拥有资源 进程是拥有资源的一个独立单位 线程不拥有系统资源 但可以访问隶 属于进程的资源 4 系统开销 在创建或撤销进程的时候 由于系统都要为之分配和回收资源 导致系 统的明显大于创建或撤销线程时的开销 但进程有独立的地址空间 进程崩溃后 在保护 模式下不会对其他的进程产生影响 而线程只是一个进程中的不同的执行路径 线程有自 己的堆栈和局部变量 但线程之间没有单独的地址空间 一个线程死掉就等于整个进程死 掉 所以多进程的程序要比多线程的程序健壮 但是在进程切换时 耗费的资源较大 效 率要差些 线程的划分尺度小于进程 使得多线程程序的并发性高 另外 进程在执行过程中拥有独立的内存单元 而多个线程共享内存 从而极大的提 高了程序运行效率 线程在执行过程中 每个独立的线程有一个程序运行的入口 顺序执行序列和程序的 出口 但是线程不能够独立执行 必须依存在应用程序中 有应用程序提供多个线程执行 控制 从逻辑角度看 多线程的意义子啊与一个应用程序中 有多个执行部分可以同时执行 但 操作系统并没有将多个线程看做多个独立的应用 来实现进程的调度和管理以及资源分配 这就是进程和线程的重要区别 3 进程间通信 进程间通信 管道管道 pipe 管道是一种半双工的通信方式 数据只能单向流动 而且只能在具有 亲缘关系的进程间使用 进程的亲缘关系通常是指父子进程关系 有名管道有名管道 named pipe 有名管道也是半双工的通信方式 但是它允许无亲缘关 系进程间的通信 信号量信号量 semophore 信号量是一个计数器 可以用来控制多个进程对共享资源 的访问 它常作为一种锁机制 防止某进程正在访问共享资源时 其他进程也访问该资源 因此 主要作为进程间以及同一进程内不同线程之间的同步手段 消息队列消息队列 message queue 消息队列是由消息的链表 存放在内核中并由消息 队列标识符标识 消息队列克服了信号传递信息少 管道只能承载无格式字节流以及缓冲 区大小受限等缺点 信号信号 sinal 信号是一种比较复杂的通信方式 用于通知接收进程某个事件已 经发生 共享内存共享内存 shared memory 共享内存就是映射一段能被其他进程所访问的内存 这段共享内存由一个进程创建 但多个进程都可以访问 共享内存是最快的 IPC 方式 它是针对其他进程间通信方式运行效率低而专门设计的 它往往与其他通信机制 如信号 两 配合使用 来实现进程间的同步和通信 套接字套接字 socket 套接字也是一种进程间通信机制 与其他通信机制不同的是 它可用于不同及其间的进程通信 4 gcc 预处理 编译 汇编 链接 gcc c hello c o hello o o 为产生的可执行文件指定文件名 c 选项告诉 GCC 仅把源代码编译为目标代码 缺省时 GCC 建立的目标代码文件有一 个 o 的扩展名 g gdb 显示调试信息 5 Makefile Makefile 的规则 目标 需要的条件 注意冒号两边有空格 命令 注意前面用 tab 键开头 Makefile 有三个非常有用的变量 其意义为 目标文件 所有的依赖文件 gcc g tst c o tst 使用 GDB 调试 hchen test gdb tst 启动 GDB gdb l l 命令相当于 list 从第一行开始例出原 码 gdb break 16 设置断点 在源程序第 16 行处 gdb break func 设置断点 在函数 func 入口处 gdb info break 查看断点信息 gdb run 运行程序 run 命令简写 gdb next 在断点处停住 gdb n 单条语句执行 next 命令简写 gdb continue 继续运行程序 continue 命令简 写 gdb quit 退出调试 7 Shell bin sh 指定该脚本的解析程序 表注释 例 bin sh A hello worl set a variable a Echo a is print a Ehco a 字符变量打印要加 8 BootLoader 9 驱动 驱动 10 字符设备驱动和块设备驱动的不同 字符设备驱动和块设备驱动的不同 11 内核处理并发的机制 信号量 自旋锁 内核处理并发的机制 信号量 自旋锁 12 堆栈溢出一般是由什么原因导致的 堆栈溢出一般是由什么原因导致的 答 1 没有回收垃圾资源 2 层次太深的递归调用 13 全局变量可不可以定义在可被多个全局变量可不可以定义在可被多个 C 文件包含的头文件中 为什么 文件包含的头文件中 为什么 答 可以 extern 和 static 都行 但有一点需要注意 static 在 h 头文件中声明 static int a 在某一个 C 文件中初始化 a 0 Extern 在某个 C 文件中定义 int b 在 h 头文件中声明为 extern int b 14 论述含参数的宏与函数的优缺点论述含参数的宏与函数的优缺点 答 带参宏 函数 处理时间 编译时 程序运行时 参数类型 没有参数类型问题 定义实参 形参类型 处理过程 不分配内存 分配内存 程序长度 变长 不变 运行速度 不占运行时间 调用和返回占用时间 15 用两个栈实现一个队列的功能 要求给出算法和思路 用两个栈实现一个队列的功能 要求给出算法和思路 答 设 2 个栈为 A B 一开始均为空 入队 将新元素 push 入栈 A 判断栈元素个数是否为 1 为 1 则直接弹栈 否则 出队 为什么要判断是否为空 1 判断栈 B 是否为空 2 如果栈 B 不为空 直接弹出栈 B 的数据 3 如果栈 B 为空 则依次弹出栈 A 的数据 放入栈 B 中 再弹出栈 B 的数据 16 虚拟存储器 虚拟存储器 虚拟存储器的三个重要功能 1 它将主存看成一个存储在磁盘上的地址空间的高速缓存 在主存中只保存活动区域 并 根据需要在磁盘和主存之间来回传送数据 通过这种方式 它高效地使用了主存 2 它为每个进行提供了一致的地址空间 从而简化了存储器管理 3 它保护了每个进程的地址空间不被其他进程破坏 1 计算机系统的主存被组织成一个由 M 个连续的字节大小的单元组成的数据 每个字节 都有一个唯一的物理地址 cpu 访问存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论