龙空技术网

腾讯面试题(二)——基础知识积累

程序员月下 1107

前言:

此时朋友们对“共享内存和消息队列的区别”大体比较重视,你们都想要分析一些“共享内存和消息队列的区别”的相关资讯。那么小编同时在网络上网罗了一些对于“共享内存和消息队列的区别””的相关资讯,希望各位老铁们能喜欢,看官们快快来了解一下吧!

基础知识积累

1、netstat、tcpdump、ipcs、ipcrm4个命令;

查看系统当前的整体⽹络连接状态:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 查看端⼝的链接状态、接受和发送缓存:netstat -anlp | grep ${port} 

查看和删除共享内存、消息队列、信号量状态:ipcs、ipcrm

2、CPU、内存、硬盘、IO以及系统性能调优;

阅读性能优化笔记

3、网络、接口、进程状态的获取;

阅读排查问题笔记

4、awk、sed命令,sort、uniq命令;

阅读awk命令笔记

5、共享内存的原理、共享内存被映射到进程内存空间后的位置、共享内存段的最大限制;SHMMAX 的默认值是 32MB

6、c++进程内存分布;

正文段:CPU执行的指令部分、共享、只读

初始化数据段(数据段):程序中明确赋值的变量

未初始化数据段(bbs段):未初始化变量

栈:局部变量、函数调用、系统自动分配

堆:动态存储部分、程序员分配

7、进程间的通信(实例);

管道:数据只能单向流通且只能在有亲缘关系的进程间使⽤

有名管道:单向、⽆需亲缘关系

信号量:一个计数器、用来控制多个进程对共享内存的访问,通常用来进行同步

消息队列:由消息的链表、存放在内核中并由消息队列标识符标识。消息队列克服了

信号传递信息少、管道只能传递⽆格式字符流以及受缓存区大小限制等缺点

信号:用于通知某个进程发生了什么事件

共享内存:映射一段能被其他进程访问的内存、由一个进程创建可被多个进程访问。 速度最快,往往与其他的通信机制⼀起使用

套接字:跨机器

管道局限性

管道的主要局限性正体现在它的特点上:

只支持单向数据流;

只能用于具有亲缘关系的进程之间;

没有名字;

管道的缓冲区是有限的(管道只存在于内存中,在管道创建时,为缓冲区分配一个页面大小);

管道所传送的是⽆格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令、或记录)等等

各种IPC之间的一些主要差异:

管道和FIFO是字节流,没有消息边界.Posix消息和System V消息则有从发送者向接受者维护的记录边界(eg:TCP是没有记录边界的字节流,UDP则提供具有记录边界的消息).当有一个消息放置到一个空队列中时,Posix消息队列可向一个进程发送一个信号,或者启动一个新的线程.System V则不提供类似的通知形式.管道和FIFO的数据字节是先进先出的.Posix消息和System V消息具有由发送者赋予的优先级.从一个Posix消息队列读出时,首先返回的总是优先级最高的消息.从一个System V消息队列读出时,读出者可以要求想要的任意优先级的消息.在众多的消息传递技术—管道,FIFO,Posix消息队列和System V消息队列—中,可从一个信号处理程序中调用的函数只有read和write(适用于管道和FIFO).

8、gdb调试;

9、如何定位内存泄漏;

10、多线程与多进程的区别;

多进程:数据是分开的(有独立的内存地址空间)、共享复杂,同步简单,内存占用多,创建、销毁、切换复杂,CPU使用率低,编程和调试简单,相互影响低(安全),扩展简单

多线程:数据是共享的(依赖于所属的进程,共享进程的资源和内存地址)、共享简单,同步复杂,内存占用少,创建、销毁、切换简单,CPU使用率高,编程和调试复杂,一个挂掉会导致整个挂掉(不安全)

11、linux系统的各类同步机制?什么事死锁?怎么避免;

如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合是死锁的。

1、互斥条件。每个资源要么已经分配给了一个进程,要么就是可用的。

2、占有和等待条件。已经得到可某个资源的进程可以在请求新的资源。

3、不可抢占条件。已经分配给一个进程的资源不能强制性地被抢占,它只能占有它的进程显式的释放。

4、循环等待条件。死锁发生时,系统中⼀定有两个或两个以上的进程组成的一条环路,该环路中的每一个进程都在等待着下一个进程所占有的资源。

  死锁发生时,以上四个条件定是同时满足的。如果有任意一条不立成,那么死锁就不会发生。

14、linux内存管理机制; (由于整理好在PDF,格式转化出了点错误,直接私信【资料】获取)

15、linux任务调度机制;

16、标准库和系统调⽤的区别;

17、string类的实现;

18、虚函数的作用和实现;

19、引用和指针的区别;

20、TCP和UDP的区别;

21、epoll有哪些触发方式、区别是什么;

22、IP、TCP头部大小、有哪些字段、分别是什么意思;

23、什么是滑动窗口;

24、TCP避免拥塞的使用了什么,具体实现;

25、keepalive是什么;

26、列举出自己所知道的TCP选项;

27 TCP四种定时器(1)重传定时器(2)保活定时器(3)坚持定时器(4)2MSL定时器

28 智能指针

29、堆和栈的区别;

30、ELF是什么;

(关注+私信【资料】)资料内容涵盖BAT架构技术与面试真题,减少你到处搜索资料的时间,成体系的实战技术知识,让你面试、进阶都更加容易。

标签: #共享内存和消息队列的区别 #共享内存和消息队列的区别是什么