一些阿里面试题

##内存泄露最终的结果在操作系统中的表现是什么?
内存泄漏形象的比喻是“操作系统可提供给所有进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。所以“内存泄漏”是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,如果没有任何一个指针指向它,那么这块内存就泄漏了。

从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到。

##malloc-free和new-delete的区别

malloc-free是c/c++中的函数,new-delete是c++中的运算符

##怎么知道http首部结束了?

http首部由一个空行结束,也就是\r\n\r\n,表明了首部的结束和实体主体的开始。

实体的主体部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分。如GET请求就不包含实体

##tcpdump抓包是在哪一层?

Linux下抓取报文的位置,是在链路层处理报文之后,交给网络层之前的位置。

##同一端口可否同时被两个应用监听?
不可以,但是fork的子进程用netstat看确实和父进程监听在同一端口,但是这和两个独立的进程应该是有所区别的

同一机器上的应用如果监听在同一端口,那socket的四元组就是一样的了,这是不可能的

##查看命令的帮助文档的命令

  • man是查看本地
  • info是查看在线

##谁在决定是使用Big-endian,还是Little-endian?

在计算存储中是CPU,也就是CPU的体系结构,还是有点抽象啊。比如x86的是小端,power-pc的是大端。

##线性表的顺序结构和链表结构各有什么优缺点

  • 顺序结构:

    • 优点:易于查询,索引快 list[n]这样的操作,O(1)复杂度
    • 缺点:扩展性弱,不易删除、添加。
  • 链表结构:

    • 优点:扩展性强,易于删除、添加
    • 缺点:不易于查询,索引慢,list[n]这样的操作,复杂度为O(n)

##shell的if和for语句

if语句

if condition;
then
    commands
fi

for语句

for i in ***; do
commands
done