(腾讯)后台开发面试题解答.doclinux 和 os: netstat :显示网络状态
tcpdump :主要是截获通过本机网络接口的数据,用以分析。能够截获当前所有 通过本机网卡的数据包。它拥有灵活的过滤机制,可以确保得到想要的数据。
ipcs :检查系统上共享内存的分配
ipcrm :手动解除系统上共享内存的分配
(如果这四个命令没听说过或者不能熟练使用, 基本上可以回家, 通过的概率较 小A_A,这四个命令的熟练掌握程度基本上能体现面试者实际开发和调试程序 的经验)
cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp 网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握
awk sed 需掌握
共享内存的使用实现原理 (必考必问,然后共享内存段被映射进进程空间之后, 存在于进程空间的什么位置?共享内存段最大限制是多少?)
共享内存定义:共享内存是最快的可用IPC (进程间通信)形式。它允许多个不 相关的进程去访问同一部分逻辑内存。 共享内存是由IPC为一个进程创建的一个 特殊的地址范围, 它将出现在进程的地址空间中。 其他进程可以把同一段共享内 存段“连接到”它们自己的地址空间里去。 所有进程都可以访问共享内存中的地 址。如果一个进程向这段共享内存写了数据, 所做的改动会立刻被有访问同一段 共享内存的其他进程看到。因此共享内存对于数据的传输是非常高效的。
共享内存的原理:共享内存是最有用的进程间通信方式之一,也是最快的 IPC 形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程 A、 B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新, 反之亦然。
C++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高到低分配, 堆从低到高分配)
ELF 是什么 ?其大小与程序中全局变量的是否初始化有什么关系(注意未初始 化的数据放在 bss 段)
可执行文件:包含了代码和数据。具有可执行的程序。
可重定位文件:包含了代码和数据(这些数据是和其他重定位文件和共享的 object文件一起连接时使用的)
共享 object 文件(又可叫做共享库):包含了代码和数据(这些数据是在连接 时候被连接器 ld 和运行时动态连接器使用的)。
使创建共享库容易,使动态装载和共享库的结合更加容易。在 ELF 下,在 C++ 中,全局的构造函数和析构函数在共享库和静态库中用同样方法处理。
使用过哪些 进程间通讯机制 ,并详细说明(重点)
makefile 编写,虽然比较基础,但是会被问到
mkdir mf
cd mf
vim makefile
:
gcc -c -Lm
make
./hello
gdb 调试相关的经验,会被问到
如何定位内存泄露?
内存泄漏是指堆内存的泄漏。 堆内存是指程序从堆中分配的、 大小任意的 (内存 块的大小可以在程序运行期决定) 、使用完后必须显示释放的内存。 应用程序一 般使用 malloc、realloc、new 等函数从堆中分配到一块内存,使用完后,程序 必须负责相应的调用 free 或 delete 释放该内存块。否则,这块内存就不能被再 次使用,我们就说这块内存泄漏了。
C++ 程序缺乏相应的手段来检测内存信息, 只能使用 top 指令观察进程的动态内 存总额。而且程序退出时,我们无法获知任何内存泄漏信息
使用 Linux 命令回收内存,可以使用 ps、kill 两个命令检测内存使用情况和进行 回收。在使用超级用户权限时使用命令 “PS”它会列出所有正在运行的程序名称 和对应的进程号 (PID)。 kill 命令的工作原理是向 Linux 操作系统的内核送出一 个系统操作信号和程序的进程号( PID)
动态链接和静态链接的区别 动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件, 因 为有许多函数在操作系统带的 dll 文件中,当程序运行时直接从操作系统中找。 而静态链接就是把所有用到的函数全部链接到 exe 文件中。 动态链接是只建立一个引用的接口, 而真正的代码和数据存放在另外的可执行模 块中,在运行时再装入;而静态链接是把所有的代码和数据都复制到本模块中, 运行时就不再需要库了。
32 位系统一个进程最多有多少堆内存
多线程和多进程的区别(重点 面试官最最关心的一个问题,必须从 cpu 调度, 上下文切换,数据共享,多核 cup 利用率,资源占用,等等各方面回答,然后 有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存
器,否则悲催)
写一个 c 程序辨别系统是 16 位 or32 位
法一:
(腾讯)后台开发面试题解答 来自淘豆网m.daumloan.com转载请标明出处.