腾讯后台面试题及答案

上传人:飞****9 文档编号:132402017 上传时间:2020-05-15 格式:PDF 页数:45 大小:434.70KB
返回 下载 相关 举报
腾讯后台面试题及答案_第1页
第1页 / 共45页
腾讯后台面试题及答案_第2页
第2页 / 共45页
腾讯后台面试题及答案_第3页
第3页 / 共45页
腾讯后台面试题及答案_第4页
第4页 / 共45页
腾讯后台面试题及答案_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《腾讯后台面试题及答案》由会员分享,可在线阅读,更多相关《腾讯后台面试题及答案(45页珍藏版)》请在金锄头文库上搜索。

1、简单归纳 fd只是一个整数 在open时产生 起到一个索引的作用 进程通过PCB中的文 件描述符表找到该 fd 所指向的文件指针 filp 文件描述符的操作 如 open 返回的是一个文件描述符 内核会在每个进程空间中维护一个文 件描述符表 所有打开的文件都将通过此表中的文件描述符来引用 而流 如 fopen 返回的是一个 FILE 结构指针 FILE 结构是包含有文件描述符的 FILE 结构 函数可以看作是对 fd 直接操作的系统调用的封装 它的优点是带有 I O 缓存 每个进程在 PCB Process Control Block 即进程控制块中都保存着一份文件描述符表 文 件描述符就是这

2、个表的索引 文件描述表中每个表项都有一个指向已打开文件的指针 现 在我们明确一下 已打开的文件在内核中用 file 结构体表示 文件描述符表中的指针指向 file 结构体 linux 和 os netstat 显示网络状态 Netstat 命令用于显示各种网络相关信息 如网络连接 路由表 接口状态 Interface Statistics masquerade 连接 多播成员 Multicast Memberships 等等 从整体上看 netstat 的输出结果可以分为两个部分 一个是 Active Internet connections 称为有源 TCP 连接 其中 Recv Q 和 S

3、end Q 指 0A 的 是接收队列和发送队列 这些数字一般都应该是 0 如果不是则表示软件包正在队列中堆 积 这种情况只能在非常少的情况见到 另一个是 Active UNIX domain sockets 称为有源 Unix 域套接口 和网络套接字一样 但是 只能用于本机通信 性能可以提高一倍 Proto 显示连接使用的协议 RefCnt 表示连接到本套接口上的进程号 Types 显示套接口的类 型 State 显示套接口当前的状态 Path 表示连接到套接口的其它进程使用的路径名 tcpdump 主要是截获通过本机网络接口的数据 用以分析 能够截获当前所有通过本机网 卡的数据包 它拥有灵活

4、的过滤机制 可以确保得到想要的数据 用简单的话来定义tcpdump 就是 dump the traffic on a network 根据使用者的定义对网络 上的数据包进行截获的包分析工具 tcpdump 可以将网络中传送的数据包的 头 完全截获 下来提供分析 它支持针对网络层 协议 主机 网络或端口的过滤 并提供 and or not 等逻辑语句来帮助你去掉无用的信息 ipcs 检查系统上共享内存的分配 用途 报告进程间通信设施状态 ipcs 命令往标准输出写入一些关于活动进程间通信设施的信息 如果没有指定任何标志 ipcs 命令用简短格式写入一些关于当前活动消息队列 共享内存段 信号量 远

5、程队列和 本地队列标题 Linux 下 ipcs 指令的用法详解 ipcs 是 Linux 下显示进程间通信设施状态的工具 可以显示 消息队列 共享内存和信号量的信息 对于程序员可能更有用些 普通的系统管理员一般 用不到此指令 ipcrm 手动解除系统上共享内存的分配 用途 删除消息队列 信号集 或者共享内存标识 如果这四个命令没听说过或者不能熟练使用 基本上可以回家 通过的概率较小 这四个命令的熟练掌握程度基本上能体现面试者实际开发和调试程序的经验 查看 cpu 信息 cat proc cpuinfo cat proc meminfo 查看硬盘信息 df lh 更详细的信息 cat proc

6、 scsi scsi 查看网卡信息 dmesg grep eth 更常用的命令 显示系统核心版本号 名称 机器类型等 uname a cpu 内存硬盘等等与系统性能调试相关的命令必须熟练掌握 设置修改权限 tcp 网络状态 查看各进程状态抓包相关等相关命令必须熟练掌握 awk sed 需掌握 共享内存的使用实现原理 必考必问 然后共享内存段被映射进进程空间之后 存在于进 程空间的什么位置 共享内存段最大限制是多少 sysctl kern ipc shmmax kern ipc shmmax 33554432 Linux 的 2 2 x 以后的内核版本支持多种共享内存方式 比如 内存映射 mma

7、p POSIX 共享内 存 System V 共享内存 共享内存定义 共享内存是最快的可用 IPC 进程间通信 形式 它允许多个不相关的进 程去访问同一部分逻辑内存 共享内存是由 IPC 为一个进程创建的一个特殊的地址范围 它将出现在进程的地址空间中 其他进程可以把同一段共享内存段 连接到 它们自己的地 址空间里去 所有进程都可以访问共享内存中的地址 如果一个进程向这段共享内存写了 数据 所做的改动会立刻被有访问同一段共享内存的其他进程看到 因此共享内存对于数 据的传输是非常高效的 共享内存的原理 共享内存是最有用的进程间通信方式之一 也是最快的 IPC 形式 两个 不同进程 A B 共享内存

8、的意思是 同一块物理内存被映射到进程 A B各自的进程地址空 间 进程 A 可以即时看到进程 B 对共享内存中数据的更新 反之亦然 c 进程内存空间分布 注意各部分的内存地址谁高谁低 注意栈从高到低分配 堆从低 到高分配 ELF 是什么 其大小与程序中全局变量的是否初始化有什么关系 注意未初始化的数据放 在 bss 段 Linux ELFELF Executable and Linkable Format 可执行连接格式 是 UNIX 系统实验室 USL 作为应用程序二进制接口 Application Binary Interface ABI 而开发和发布的 扩展名为 elf 工具接口标准委员

9、会 TIS 选择了正在发展中的 ELF 标准作为工作在 32 位 INTEL 体系上不同操作系统之间可移植的二进制文件格式 假定开发者定义了一个二进制 接口集合 ELF 标准用它来支持流线型的软件发展 应该减少不同执行接口的数量 因此 可以减少重新编程重新编译的代码 BSS 段 可执行程序包括 BSS 段 数据段 代码段 也称文本段 BSS Block Started by Symbol 通常是指用来存放程序中未初始化的全局变量和静态变量 的一块内存区域 特点是 可读写的 在程序执行之前 BSS 段会自动清 0 所以 未初始的 全局变量在程序执行之前已经成 0 了 注意和数据段的区别 BSS

10、存放的是未初始化的全局变量和静态变量 数据段存放的是初 始化后的全局变量和静态变量 UNIX 下可使用 size 命令查看可执行文件的段大小信息 如 size a out 可执行文件 包含了代码和数据 具有可执行的程序 可重定位文件 包含了代码和数据 这些数据是和其他重定位文件和共享的 object 文件一起连接时使用的 共享 object 文件 又可叫做共享库 包含了代码和数据 这些数据是在连接 时候被连接器 ld 和运行时动态连接器使用的 使创建共享库容易 使动态装载和共享库的结合更加容易 在 ELF 下 在 C 中 全局的构造函数和析构函数在共享库和静态库中用同样方法处理 使用过哪些进程

11、间通讯机制 并详细说明 重点 makefile 编写 虽然比较基础 但是会被问到 mkdir mf cd mf vim makefile hello o hello c hello h gcc c hello o Lm make hello gdb 调试相关的经验 会被问到 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具 或许 各位比较喜欢那 种图形界面方式的 像 VC BCB 等 IDE 的调试 但如果你是在 UNIX 平台下做软件 你 会发现GDB这个调试工具有比VC BCB的图形化调试器更强大的功能 所谓 寸有所长 尺有所短 就是这个道理 一般来说 GDB 主要帮助你完成

12、下面四个方面的功能 1 启动你的程序 可以按照你的自定义的要求随心所欲的运行程序 2 可让被调试的程序在你所指定的调置的断点处停住 断点可以是条件表达式 3 当程序被停住时 可以检查此时你的程序中所发生的事 4 动态的改变你程序的执行环境 GDB 使用手册 gcc g o hello hello c GDB 常用命令简介 GDB 的命令很多 本文不会全部介绍 仅会介绍一些最常用的 在介绍之前 先介绍 GDB中的一个非常有用的功能 补齐功能 它就如同Linux下 SHELL中的命令补齐一样 当你输入一个命令的前几个字符 然后输入 TAB 键 如果没有其它命令的前几个字符与此 相同 SHELL 将

13、补齐此命令 如果有其它命令的前几个字符与此相同 你会听到一声警告 声 再输入 TAB 键 SHELL 将所有前几个字符与此相同的命令全部列出 而 GDB 中的补 齐功能不仅能补齐 GDB 命令 而且能补齐参数 本文将先介绍常用的命令 然后结合一个具体的例子来演示如何实际使用这些命令 下面的所有命令除了第一条启动 GDB 命令是在 SHELL 下输入的 其余都是 GDB 内的命 令 大部分 GDB 内的命令都可以仅输入前几个字符 只要不与其它指令冲突 如 quit 可以 简写为 q 因为以 q 打头的命令只有 quit List 可以简写为 l 等等 3 1启动 GDB 你可以输入 GDB 来启

14、动 GDB 程序 GDB 程序有许多参数 在此没有必要详细介绍 但一个最为常用的还是要介绍的 如果你已经编译好一个程序 我们假设文件名为 hello 你想用 GDB 调试它 可以输入 gdb hello 来启动 GDB 并载入你的程序 如果你仅仅启动了 GDB 你必须在启动后 在 GDB 中再载入你的程序 3 2载入程序 file 在 GDB 内 载入程序很简单 使用 file 命令 如 file hello 当然 程序的路径名要正 确 退出 GDB quit 在 GDB 的命令方式下 输入 quit 你就可以退出 GDB 你也可以输入 C d 来退出 GDB 3 3运行程序 run 当你在

15、GDB 中已将要调试的程序载入后 你可以用 run 命令来执行 如果你的程序需 要参数 你可以在 run 指令后接着输入参数 就象你在 SHELL 下执行一个需要参数的命令 一样 3 4查看程序信息 info info指令用来查看程序的信息 当你用help info查看帮助的话 info指令的参数足足占 了两个屏幕 它的参数非常多 但大部分不常用 我用 info 指令最多的是用它来查看断点 信息 3 4 1查看断点信息 info br br 是断点 break 的缩写 记得 GDB 的补齐功能吧 用这条指令 你可以得到你所设置的所 有断点的详细信息 包括断点号 类型 状态 内存地址 断点在源程

16、序中的位置等 3 4 2查看当前源程序 info source 3 4 3查看堆栈信息 info stack 用这条指令你可以看清楚程序的调用层次关系 3 4 4查看当前的参数 info args 3 5列出源一段源程序 list 3 5 1列出某个函数 list FUNCTION 3 5 2以当前源文件的某行为中间显示一段源程序 list LINENUM 3 5 3接着前一次继续显示 list 3 5 4显示前一次之前的源程序 list 3 5 5显示另一个文件的一段程序 list FILENAME FUNCTION 或 listFILENAME LINENUM 3 6设置断点 break 现在我们将要介绍的也许是最常用和最重要的命令 设置断点 无论何时 只要你的 程序已被载入 并且当前没有正在运行 你就能设置 修改 删除断点 设置断点的命令 是 break 有许多种设置断点的方法 如下 3 6 1在函数入口设置断点 如何定位内存泄露 内存泄漏是指堆内存的泄漏 堆内存是指程序从堆中分配的 大小任意的 内存块的大小 可以在程序运行期决定 使用完后必须显示释放的内存 应用程序一般使用 m

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 经营企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号