2012年5月6日百度PHP开发工程师笔试题(不让带出来,脑子的印象)

Posted by admin on 2012, May 7
  1. 有一个单词a,其中任意字母交换位置变为单词b,我们称单词a,b为兄弟单词,b为a的兄弟单词,例如: army 与 mary为兄弟单词。现给定一个单词字典,用户任意输入一个单词,请从字典中找到所有的兄弟单词,请写出你数据结构和算法以及查找的具体步骤。令时间和空间效率尽可能的高。

本来这道题看起来很简单,就是互换单词中的字母位置而已,可是随便写一个算法,自己都感觉不符合题目的最后一句话,效率并没有想象中的高,而且自己都感觉有些麻烦,还有让写出数据结构,我记得我当时就随意写了一个树。

  1. c与c++分别是怎样动态分配和释放内存的,有什么区别?

这道题还好,是咱们的基础知识,可是当时怎么也想不出一个表达的特专业的说法。

3.线程和进程有什么区别,怎样理解“线程安全”?

这个嘛,也是咱们学的东西,属于操作系统相关的,当时也是找不到很好的专业术语来解释,就写了一通,有些还没写上,比如关于地址空间的,并发执行的。再有就是线程安全,现在查了查相关的如下

如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。

  线程安全问题都是由全局变量及静态变量引起的。

若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。

4、网页爬虫,即从一个网页开始,查找出该页的所有url地址,并进入这些url找到其中包含的url,如此循环,直到某个url连接到回来或者到某个空白页为止。将这些连接url一一连接起来。形成链表并储存起来。为了简单起见,假设每个网页里都只有一个url,例如:www.baidu.com/a.html->www.baidu.com/b.html->www.baidu.com/c.html这样的过程,则存储为单链表a.html->b.html->c.html;现在从两个网页入口开始,做上述操作,那么将形成两个单向链表。请判断这两个爬虫是不是找到了相同的url。请写出判断的思想和代码(只写出判断的代码即可,不比写出爬虫的代码)大概这个样子,题比较长,不过描述起来就是这样。

这题看起来还比较简单,但是让我写代码我不知道从哪下手,让我写思想吧,看起来也不简单,当时考虑了很久,就举了俩例子,哎,各位同学看看你们会吗

  1. 有数组al[0…mid-1]和数组al[mid…num-1]分别有序,现在将这俩数组merge,形成一个新的数组al[0…num-1],要使这个数组依然有序,要求写出算法,并且要求空间复杂度为O(1)。(记不清是时间复杂度还是空间复杂度了,据了解,应该是空间复杂度)

得咧,这个题看起来很简单的感觉,可为啥我就实在想不出这个空间复杂度怎么得呢。如今找到了算法,在铁道出版社的《数据结构》中266页,2-路归并排序。

  1. 现有一个留言系统,拥有千万级的用户量,其中大部分用户每人每天最多发表留言100次,每日不超过100个字,可是有部分用户在系统中大量散播广告和不法信息,现在要对这些信息进行过滤,现在已经有一个过滤词表存储了要筛选的词语,如果用户发表留言,内容一旦命中表中的词语,那么进行过滤。要求设计一个过滤系统如上面的功能,并且要求占用的内存尽可能的少。请写出PHP代码和具体设计方法用图表和语言进行简单描述。

这个题看起来就是我们平时所做,但是他有个条件大用户量,大数据量,占用内存尽可能的少,显然如果一一进行筛选那么我们按一般思路设计的明显不符合标准。

上面是我自己的看法,从这次考试中,明显看到了自己的不足,也看到数据结构的重要。以及算法中重要于写代码。在以后的生活以及学习中,也一定要多看,多思考,多练习。