【Linux】linux经典面试题目---其他类

一、程序加载到内存上有哪些段,运行时的临时变量放在哪?
1、.text段指令段:通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
2、.data段数据段:通常是指用来存放程序中已始化且不为0的全局变量和静态变量的一块内存区域。数据段属于静态内存分配。常量也放在这个区域。
3、.bss段数据段:通常是指用来存放程序中未初始化或者初始化为0的全局变量的一块内存区域,在程序载入时由内核清0。bss段属于静态内存分配。
4、stack
栈,由编译器自动分配释放,行为类似数据结构中的栈(先进后出)。
栈主要有三个用途:
①函数的返回地址(以便从被调用者返回)和参数
②存放临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量
③保存上下文:包括在函数调用前后需要保持不变的寄存器
运行时的临时变量放在stack区。
二、内存分配方式都有什么
内存分配方式有三种:
1、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3、 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。
三、 阻塞和非阻塞的区别
阻塞就是说在煮水的过程中,你不可以去干其他的事情,非阻塞就是在同样的情况下,可以同时去干其他的事情。阻塞和非阻塞是相对于线程是否被阻塞。其实,这两者存在本质的区别,它们的修饰对象是不同的。阻塞和非阻塞是指进程访问的数据如果尚未就绪,进程是否需要等待,简单说这相当于函数内部的实现区别,也就是未就绪时是直接返回还是等待就绪。
四、linux 下是如何生成可执行文件,它的组织格式是怎么样的 ?
1、linux下不论是.c文件还是.o文件,都是无法执行的,最终还要生成可执行的文件。
它的生成格式是:
gcc –o 目标文件名 源文件名(列表)库文件名(列表)
如果工程包含多个 .c 和 .h 那么在源文件名列表中只列出所有的 .c 文件和库文件
例:工程文件夹里有 main.c enc.so 要将他们编译成 EncApp 可执行文件,则使用下面的命令gcc –o EncAp main.c enc.so
注意: .so 文件必须事先复制到 /usr/lib 目录下
gcc a.c b.c c.c -o run 将c文件编译后链接,生成可执行文件
gcc a.o b.o c.o -o run 将目标文件链接为可执行文件
2、它的组织格式是:ELF;
五、 什么是库文件, 静态库和动态库的区别
(一)什么是库文件
库文件即DLL文件,是动态链接库文件,又称应用程序拓展,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。
(二)静态库和动态库的区别

  1. 静态函数库 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。
  2. 动态函数库 这类库的名字一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候 并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。
    linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib。

六、手写 makefile
七、memcache 了解吗

memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。起初作者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统, 这种方法不仅解决了共享内存只能是单机的弊端,同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!基于memcache作者对分布式cache的理解和解决方案。 memcache完全可以用到其他地方 比如分布式数据库, 分布式计算等领域

你可能感兴趣的:(面试题,linux)