(腾讯)后台开发面试题解答
linux 和 os:
netstat :显示网络状态
tcpdump:主要是截获通过本机网络接口的数据,用以分析。能够截获当前所 有通过本机网卡的数据包。它拥有灵活的过滤机制,可以确保得到想要的数据。
ipcs:检查系统上共享内存的分配
ipcrm:手动解除系统上共享内存的分配
(如果这四个命令没听说过或者不能熟练使用,基本上可以回家,通过的概率 较小八_八,这四个命令的熟练掌握程度基本上能体现面试者实际开发和调试程 序的经验)
cpu内存硬盘等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看各进程状态抓包相关等相关命令必须熟练掌握
awk sed需掌握
共享内存的使用实现原理(必考必问,然后共享内存段被映射进进程空间之后, 存在于进程空间的什么位置?共享内存段最大限制是多少?)
共享内存定义:共享内存是最快的可用IPC (进程间通信)形式。它允许多个不 相关的进程去访问同一部分逻辑内存。共享内存是由IPC为一个进程创建的一 个特殊的地址范围,它将出现在进程的地址空间中。其他进程可以把同一段共 享内存段“连接到”它们自己的地址空间里去。所有进程都可以访问共享内存 中的地址。如果一个进程向这段共享内存写了数据,所做的改动会立刻被有访 问同一段共享内存的其他进程看到。因此共享内存对于数据的传输是非常高效 的。
共享内存的原理:共享内存是最有用的进程间通信方式之一,也是最快的IPC 形式。两个不同进程
A、B共享内存的意思是,同一块物理内存被映射到进程A、 B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新, 反之亦然。
C++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高到低分配, 堆从低到高分配)
ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意未初始 化的数据放在bss段) 可执行文件:包含了代码和数据。具有可执行的程序。
可重定位文件:包含了代码和数据(这些数据是和其他重定位文件和共享的 object文件一起连接时使用的)
共享object文件(又可叫做共享库):包含了代码和数据(这些数据是在连接 时候被连接器Id和运行时动态连接器使用的)。
使创建共享库容易,使动态装载和共享库的结合更加容易。在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位
法一:int k=~0;
if((unsigned int)k >63356) cout«*'at least 32 bits"
(腾讯)后台开发面试题解答 来自淘豆网m.daumloan.com转载请标明出处.