见面会面试题

没做过linux开发,被问了最简单的东西都不会。

1、linux中的用户空间和内核空间的区别?

Linux操作系统对自身进行了划分:一部分核心软件独立于普通应用程序,运行在较高的特权级别上,(Linux使用Intel体系的特权级3来运行内核。)它们驻留在被保护的内存空间上,拥有访问硬件设备的所有权限,Linux将此称为内核空间。

相对的,其它部分被作为应用程序在用户空间执行。它们只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,不能直接访问硬件,不能直接访问内核空间,当然还有其他一些具体的使用限制。(Linux使用Intel体系的特权级0来运行用户程序。)

简单来说:内核空间是内核使用,用户空间是应用程序使用;除非编译内核要考虑内核空间,其余情况都可以按照用户空间处理

2、linux下程序如何通信?

进程通信有如下一些目的:
A、数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间
B、共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。
C、通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
D、资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。
E、进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

现在Linux的通信机制包括:

(1)管道(pipe)和有名管道(FIFO):ps | grep vsftpd .管道是单向的、先进先出的、无结构的、固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起。管道主要用于不同进程间通信。实际上,通常先创建一个管道,再通过fork函数创建一个子进程。

(2)信号(signal):信号是软件中断。信号(signal)机制是Unix系统中最为古老的进程之间的能信机制。它用于在一个或多个进程之间传递异步信号。很多条件可以产生一个信号。

(3)消息队列

(4)共享内存
(5)信号量;内核为进程生产信号,来响应不同的事件,这些事件就是信号源。
(6)套接字(socket)

3、C++和Java的区别?

(1)Java比C++程序可靠性更高,任何一个C++程序员都不得不承认C++语言在提供强大的功能的同时也提高了程序含BUG的可能性。Java语言通过改变语言的特性大大提高了程序的可靠性。

(2)Java语言不需要程序对内存进行分配和回收,Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,Examda提示: 在Java语言中,内存的分配和回收都是自动进行的,程序员无须考虑内存碎片的问题。

(3)Java语言中没有指针的概念,引入了真正的数组。不同于C++中利用指针实现的“伪数组”,Examda,Java引入了真正的数组,同时将容易造成麻烦的指针从语言中去掉,这将有利于防止在c++程序中常见的因为数组操作越界等指针操作而对系统数据进行非法读写带来的不安全问题。

(4)Java用接口(Interface)技术取代C++程序中的多继承性。接口与多继承有同样的功能,但是省却了多继承在实现和维护上的复杂性。

4、虚拟资源和物理资源的优势在哪?

5、说一下你所理解的soap?

     SOAP=RPC+HTTP+XML

     采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,XML作为数据传送的格式,允许服务提供者和服务客户经过防火墙在INTERNET进行通讯交互。

 6、有一个单向链表的长度未知,怎样从中随机取出一个节点?要求每个节点被选中的概率相等。(原来是百度的一道面试题)

 网上答案: 设置两个指针,p1,p2, 开始p1,p2均位于链接的头部。
  p1 每次步进两步,
  p2 每次步进一步
  当p1到达链表的末尾时,p2所在的位置就是链表的中间元素

  时间复杂度为O(n)

 我的回答:我没有比较好的方法,首先遍历一遍单链表以确定单链表的长度L。然后再次从头节点出发循环L/2次找到单链表的中间节点。

7、说说哈希算法?

哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

HASH主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系

最后总结一下,一定要有方向地找工作

posted on 2014-11-20 22:50  楼兰过客  阅读(259)  评论(0编辑  收藏  举报

导航