




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 / 32 腾讯后台开发面试总结 (转载 ) 前段时间专心面过腾讯,经过了 N 轮的技术面,结果还是挂了,但没挂在技术面,比较欣慰,回来之后写一点总结,以供有梦想进入腾讯做后台服务器开发的同学参考,本文章为胡成精心总结,胡成原创, copy 和转载请通知。 ps:之内的文字由作者点评,非面试题文字。 linux和 os: netstat tcpdump ipcs ipcrm 。这一部分是作为内存来用的磁盘,而磁盘速度比内存慢,所以最好优先使用物理内存,交换内存则较少使用。 top 在本书第三章我们已经介绍过了 top 命令,它可以动态实时的察看系统性能,分析 CPU、内存的使用资源以及相关进程的信息等。关于 top命令的具体的使用方法和命令参数这里就不再谈及了,如果读者还不了解,请参看第三章 top 2 / 32 命令 小节的内容。 top会显示系 统现在的负载情况,如下所示: # top 2:58pm up 3:40, 1 user, load average: , , 37 processes: 35 sleeping, 2 running, 0 zombie, 0 stopped CPU states: % user, % system, % nice, % idle Mem:190776K av,183588K used,7188K free,0K shrd, 80180K buff Swap: 385520K av,1476K used, 384044K free 65096K cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 6 root 10 0 0 0 0 SW 0:18 find 3 / 32 9 root 9 0 1036 1036 860 R 0:00 top 1 root 8 0 100 84 52 S 0:03 init 2 root 9 0 0 0 0 SW 0:00 kevent 3 root 9 0 0 0 0 SW 0:00 kapmd 5 root 9 0 0 0 0 SW 0:00 kswapd 7 root 9 0 0 0 0 SW 0:00 bdflus 8 root 9 0 0 0 0 SW 0:00 kdated 9 root -1 -20 0 0 0 SW top 显示的系统信息包括运行时间、进程的数量和状态、 CPU 周期的百分比和每个进程占用的存储空间、每个进程运行的时间,以及大量的其它信息。进程是按使用资源的多少来排列的,显示每 5秒钟自动更新一次。在显示过程中,也可以按下空格键手动更新显示。在查找并解决系统性能故障时,这些信息是相当有用的。 4 / 32 在上面显示的信息中,大家可以看到显示的系统情况,运行中的进程有正在使用的 top程序,它使用了 %的 CPU 和 %的存储空 间;还有 find 进程使用了 %的 CPU和 %的存储空间。而其它进程要么处于睡眠状态 (S),要么处于睡眠并被换出状态。 vmstat vmstat 是 Virtual Meomory Statistics 的缩写,可对操作系统的虚拟内存、进程、 CPU 活动进行监视。它对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。 vmstat 命令我们也曾在本书第三章简单提及过,现在让我们详细了解一下它。 vmstat 的语法为: vmstat -V -n delay count 其中, V 表示打印出版本信息; n 表示在周期性循环输出时,输出的头部信息仅显示一次; delay 是两次输出之间5 / 32 的延迟时间; count 是指按照这个时间间隔统计的次数。对于 vmstat输出各字段的含义,可运行 man vmstat 查看。 当我们运行 vmstat 命令后,显示结果如下: $ vmstat procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 0 0 0 1460 7768 79864 65040 0 0 12 10 103 25 1 0 98 设置修改权限 tcp 网络状态查看 各进程状态 抓包相关等相关命令 tcpdump netstat ps? awk sed需掌握 6 / 32 共享内存的使用实现原理 将一块内存映射到两个或者多个进程地址空间。通过指针访问该共享内存区。 一般通过 mmap将文件映射到进程地址共享区。 存在于进程数据段,最大限制是 0x2000000Byte c+进程内存空间分布 ELF 是什么?其大小与程序中全局变量的是否初始化有 什么关系 使用过哪些进程间通讯机制,并详细说明 makefile编写,虽然比较基础,但是会被问到 gdb调试相关的经验,会被问到 如何定位内存泄露? 7 / 32 也可以用 top实时观察 动态链接和静态链接的区别 动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的 dll 文件中,当程序运行时直接从操作系统中找 。 而静态链接就是把所有用到的函数全部链接到 exe 文件中。 动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入; 而静态链接是把所 有的代码和数据都复制到本模块中,运行时就不再需要库了。 32位系统一个进程最多多少堆内存 4G Linux实现的是 虚拟地址的前 3G供给用户态的进程 . 后 1G是内核的部分 . 也就是用户态的进程不能访问 0xc00000008 / 32 以上的虚拟地址 前段时间专心面过腾讯,经过了 N 轮的技术面,结果还是挂了,但没挂在技术面,比较欣慰,回来之后写一点总结,以供有梦想进入腾讯做后台服务器开发的同学参考,本文章为胡成精心总结,胡成原创, copy 和转载请通知。 ps:之内的文字由作者点评,非面试题文字。 linux和 os: netstat tcpdump ipcs ipcrm c+进程内存空间分布 ELF 是什么?其大小与程 序中全局变量的是否初始化有什么关系 使用过哪些进程间通讯机制,并详细说明 makefile编写,虽然比较基础,但是会被问到 gdb调试相关的经验,会被问到 如何定位内存泄 露? 9 / 32 动态链接和静态链接的区别 32位系统一个进程最多多少堆内存 多线程和多进程的区别 写一个 c 程序辨别系统是 64位 or 32位 写一个 c 程序辨别系统是大端 or小端字节序 信号:列出常见的信号,信号怎么处理? i+是否原子操作?并解释为什么? 说出你所知道的各类 linux系统的各类同步机制,什么是 死锁?如何避免死锁 列举说明 linux系统的各类异步机制 exit() _exit()的区别? 10 / 32 如何实现守护进程? linux的内存管理机制是什么? linux的任务调度机制是什么? 标准库函数和系统调用的区别? 补充一个坑爹坑爹坑爹坑爹的问题:系统如何将一个信号通知到进程? c 语言: 宏定义和展开 位操作 指针操作和计算 内存分配 sizeof 必考 11 / 32 各类库函数必须非常熟练的实现 哪些库函数属于高危函数,为什么? c+: 一个 String类的完整实现必须很快速写出来 虚函数的作用和实现原理 sizeof 一个类求大小 指针和引用的区别 多重类构造和析构的顺序 stl各容器的实现原理 extern c 是干啥的, volatile是干啥用的, static const 等等的用法, 12 / 32 数据结构或者算法: 离散数学范围内的一切问题皆由可能被深入问到 各类排序:大根堆的实现,快排, bitmap的运用等等 hash, 任何一个技术面试官必问 网络编程: tcp与 udp 的区别 udp调用 connect 有什么作用? tcp连接中时序图,状态图,必须非常非常熟练 socket 服务端的实现, select 和 epoll的区别 (必问 ) epoll哪些触发模式,有啥区别? 大规模连接上来,并发模型怎么设计 13 / 32 tcp结束连 接怎么握手, time_wait 状态是什么 ,为什么会有time_wait 状态?哪一方会有 time_wait 状态,如何避免time_wait 状态占用资源 tcp头多少字节?哪些字段 ?(必问 ) 什么是滑动窗口 connect会阻塞,怎么解决 ?(必考必问,提示:设置非阻塞,返回之后用 select 检测状态 ) 如果 select返回可读,结果只读到 0 字节,什么情况? keepalive 是什么东东?如何使用? 列举你所知道的 tcp选项,并说明其作用。 socket 什么情况下可读? db: mysql,会考 sql语言,服务器数据库大规模数据怎么设计,db各种性能指标 14 / 32 最后:补充一个最最重要,最最坑爹,最最有难度的一个题目:一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和 I/O操作,如果让你设计,你怎么设计? 前段时间专心面过腾讯,经过了 N 轮的技术面,结果还是挂了,但没挂在技术面,比较欣慰,回来之后写一点总结,以供有梦想进入腾讯做后台服务器开发的同学参考,本文章为胡成精心总结,胡成原创 , copy 和转载请通知。 ps:之内的文字由作者点评,非面试题文字。 linux和 os: netstat tcpdump ipcs ipcrm c+进程内存空间分布 ELF 是什么?其大小与程序中全局变量的是否初始化有什么关系 使用过哪些进程间通讯机制,并详细说明 makefile编写,虽然比较基础,但是会被问到 15 / 32 gdb调试相关的经验,会 被问到 如何定位内存泄露? 动态链接和静态链接的区别 32位系统一个进程最多多少堆内存 多线程和多进程的区别 写一个 c 程序辨别系统是 64位 or 32位 写一个 c 程序辨别系统是大端 or小端字节序 信号:列出常见的信号,信号怎么处理? i+是否原子操作?并解释为什么? 说出你所知道的各类 linux系统的各类同步机制,什么是死锁?如何避免死锁 列举说明 linux系统的各类异步机制 16 / 32 exit() _exit()的区别? 如何实现守护进程? linux的内存管理机制是什么? linux的任务调度机制是什么? 标准库函数和系统调用的区别? 补充一个坑爹坑爹坑爹坑爹的问题:系统如何将一个信号通知到进程? c 语言: 宏定义和展开 位操作 指针操作和计算 17 / 32 内存分配 sizeof 必考 各类库函数必须非常熟练的实现 哪些库函数属于高危函数,为什么? c+: 一个 String类的完整实现必须很快速写出来 虚函数的作用和实现原理 sizeof 一个类求大小 指针和引用的区别 多重类构造和析构的顺序 stl各容器的实现原理 extern c 是干啥的 , volatile是干啥用的, 18 / 32 static const 等等的用法, 数据结构或者算法: 离散数学范围内的一切问题皆由可能被深入问到 各类排序:大根堆的实现,快排, bitmap的运用等等 hash,任何一个技术面试官必问 网络编程: tcp与 udp 的区别 udp调用 connect 有什么作用? tcp连接中时序图,状态图,必须非常非常熟练 socket 服务端的实现, select 和 epoll的区别 (必问 ) epoll哪些触发模式,有啥区别? 19 / 32 大规模连接上来,并发模型怎么设计 tcp结束连接怎么握手, time_wait 状态是什么 ,为什么会有time_wait 状态?哪一方会有 time_wait 状态,如何避免time_wait 状态占用资源 tcp头多少字节?哪些字段 ?(必问 ) 什么是滑动窗口 connect会阻塞,怎么解决 ?(必考必问,提示:设置非阻塞,返回之后用 select 检测状态 ) 如果 select返回可读,结果只读到 0 字节,什么情况? keepalive 是什么东东?如何使用? 列举你所知道的 tcp选项,并说明其作用。 socket 什么情况下可读? db: 20 / 32 mysql,会考 sql语言,服务器数据库大规模数据怎么设计,db各种性能指标 最后:补充一个最最重要,最最坑爹,最最有难度的一个题目:一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和 I/O操作,如果让你设计,你怎么设计? linux和 os: netstat :显示网络状态 tcpdump:主要是截获通过本机网络接口的数据,用以分析。能够截获当前所有通过本机网卡的数据包。它拥有灵活的过滤机制,可以确保得到想要的数据。 ipcs:检查系统上共享内存的分配 ipcrm:手动解除系统上共享内存的分配 共享内存定义:共享内存是最快的可用 IPC形式。它允许多个不相关的进程去访问同一部分逻辑内存。共享内存是由21 / 32 IPC 为一个进程创建的一个特殊的地址范围,它将出现在进程的地址空间中。其他进程可以把同一段共享内存段 连接到 它们自己的地址空间里去。所有进程都可以访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会立刻被有访问同一段共享内存的其他进程看到。因此共享内存对于数据的传输是非常高效的。 共享内存的原理:共享内存是最有用的进程间通信方式之一,也是最快的IPC形式。两个不同进程 A、 B 共享内存的意思是,同一块物理内存被映射到进程 A、 B 各自的进程地址空间。进程 A 可以即时看到进程 B 对共享内存中数据的更新,反之亦然。 c+进程内存空间分布 ELF 是什么?其大小与程序中全局变量的是否初始化有什么关系 可执行文件:包含了代码和数据。具有可执行的程序。 可重定位 文件:包含了代码和数据 共享 object 文件:包含了代码和数据。 22 / 32 使创建共享库容易,使动态装载和共享库的结合更加容易。在 ELF 下,在 C+ 中,全局的构造函数和析构函数在共享库和静态库中用同样方法处理。 使用过哪些进程间通讯机制,并详细说明 makefile编写,虽然比较基础,但是会被问到 mkdir mf cd mf vim makefile : gcc c -Lm make ./hello gdb调试相关的经验,会被问到 23 / 32 如何定位内存泄露? 内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的、大小任意的、使用完后必须显示释放的内存。应用程序一般使用 malloc、 realloc、 new 等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用 free 或 delete释放该内存块。否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。 C+程序缺乏相应的手段来检测内存信息,只能使用 top 指令观察进程的动态内存总额。而且程序退出时, 我们无法获知任何内存泄漏信息 使用 Linux 命令回收内存,可以使用 ps、 kill 两个命令检测内存使用情况和进行回收。在使用超级用户权限时使用命令 ps ,它会列出所有正在运行的程序名称和对应的进程号。 kill命令的工作原理是向 Linux 操作系统的内核送出一个系统操作信号和程序的进程号 动态链接和静态链接的区别 24 / 32 动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的 dll 文件中,当程序运行时直接从操作系统中找。 而静态链接就是把所有用到的函数全部链接到 exe文件中。 动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入;而静态链接是把所有的代码和数据都复制到本模块中,运行时就不再需要库了。 32位系统一个进程最多有多少堆内存 多线程和多进程的区别 写一个 c 程序辨别系统是 16位 or32 位 法一: int k=0; if(unsigned int)k 63356) cout else cout 法二:/32为系 统 int i=65536; 25 / 32 cout int j=65535; cout 写一个 c 程序辨别系统是大端 or小端字节序 用联合体:如 char 类型的,可以看他输出的是 int 的高字节还是低字节 信号:列出常见的信号,信号怎么处理? i+是否原子操作?并解释为什么? 说出你所知道的 linux系统的各类同步机制,什么是死锁?如何避免死 锁 死锁的条件。: 1、资源不能被共享,只能由一个进程使用。2、请求与保持条件:已经得到资源的进程可以再次申请新的资源。 3、非剥夺条件:已经分配的资源不能从相 应的进程中被强制地 剥夺。 4、循环等待条件:系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。处理死锁的策略: 1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能26 / 32 鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。2.检测死锁并且恢复。 3.仔细地对资源进行动态分配,以避免死锁。 4.通过破除死锁四个必要条件之一,来防止死锁产生。) 列举说明 linux系统的各类异步机制 exit()与 _exit()的区别? _exit 终止调用进程,但不关闭文件,不清除输出缓存,也不调用出口函数。 exit函数将终止调用进程。在退出程序之前,所有文件关闭,缓冲输出内容将刷新定义,并调用所有已刷新的 出口函数 。 ?exit()?与 ?_exit()?有不少区别在使用 ?fork()?,特别是 ?vfork()?时变得很突出。 exit() 与 _exit()的基本区别在于前一个调用实施与调用库里用户状态结构(user-mode constructs)有关的清除工作 (clean-up),而且调用用户自定义的清除程序 如何实现守护进程? 27 / 32 守护进程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。 Linux 的大多数服务器就是用守护进程实现的。比如, Internet 服务器 inetd, Web 服务器 httpd 等。同时,守护进程完成许多系统任务。比如,作业规划进程 crond,打印进程 lpd等。 守护进程的编程本身并不复杂,复杂的是各种版本的 Unix的实现机制不尽相同,造成不同 Unix 环境下守护进程的编程规则并不一致。需要注意,照搬某些书上的规则到 Linux会出现错误的。下面将给出 Linux 下守护进程的编程要点和详细实例。 一 守护进程及其特性 守护进程最重要的特性是后台运行。在这一点上 DOS 下的常驻内存程序 TSR与之相似。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程中继承下来的。最后,守护进程的启动方式有其特殊之处。它可以在 Linux 系统启动时从启动脚本 28 / 32 /etc/中启动,可以由作业规划进程 crond 启动,还可以由用户终端执行。 总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。如果对进程有比较深入的认识就更容易理解和编程了。 二 守护进程的编程要点 前面讲过,不同 Unix环境下守护进程的编程规则并不一致。所幸的是守护进程的编程原则其实都一样,区别在于具体的实现细节不同。这个原则就是要满足守护进程的特性。同时,Linux 是基于 Syetem V 的 SVR4 并遵循 Posix 标准,实现起来与 BSD4相比更方便。编程要点如下; 1. 在后台运行。 为避免挂起控制终端将 Daemon 放入后台执行。方法是在进程中调用 fork使父进程终止,让 Daemon 在子进程中后台执行。 29 / 32 if(pid=fork() exit(0); /是父进程,结束父进程,子进程继续 2. 脱离控制终端,登录会话和进程组 有必要先介绍一下 Linux 中的进程与控制终端,登录会话和进程组之间的关系:进程属于 一个进程组,进程组号就是进程组长的进程号。登录会话可以包含多个进程组。这些进程组共享一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度海绵城市建设施工履约保证金合同
- 高三试卷:江苏省常州市2024-2025学年高三上学期期中质量调研数学试题答案
- 二零二五年度水力发电机工程设计与心得总结合同
- 二零二五版地毯产品绿色家居定制化采购合同
- 2025版楼板浇注材料环保认证与检测合同
- 早期阅读课件
- 二零二五版船舶行业外包工安全培训及管理服务协议
- 二零二五年度钢结构预制构件生产与施工承包合同样本
- 二零二五年度会所装修工程合同范本指南
- 二零二五年度车辆维修配件供应合同
- 人民医院心血管外科临床技术操作规范2023版
- 主要组织相容性复合体及其编码分子
- 助理工程师考试试题以及答案
- 送东阳马生序
- 2017年全国大学生数学建模A题
- 2023年专升本计算机题库含答案专升本计算机真题
- GB/T 1685-2008硫化橡胶或热塑性橡胶在常温和高温下压缩应力松弛的测定
- GB/T 16674.1-2016六角法兰面螺栓小系列
- 固定资产清查工作报告
- 住宅项目景观工程施工策划(图文并茂)
- 怀念汪世清先生
评论
0/150
提交评论