腾讯php工程师笔试题.doc
【公司面试题之:腾讯PHP工程师笔试题】1.请对POSIX风格和兼容Perl风格两种正则表达式的主要函数进行类比说明eregpreg_matchereg_replacepreg_replace2.请说明在php.ini中safe_mode开启之后对于PHP系统函数的影响答案:system,passthru,c,shell_c,popen,phpinfo等等大部分的文件操作函数。3.PHP5中魔术方法函数有哪几个,请举例说明各自的用法_1。__construct()实例化对象时被调用,当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。2。__destruct()当删除一个对象或对象操作终止时被调用。3。__call()对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call函数。4。__get()读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。5。__set()设置一个对象的属性时,若属性存在,则直接赋值;若不存在,则会调用__set函数。6。__toString()打印一个对象的时被调用。如echo$obj;或print$obj;7。__clone()克隆对象时被调用。如:$t=newTest();$t1=clone$t;8。__sleep()serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。9。__wakeup()unserialize时被调用,做些对象的初始化工作。10。__isset()检测一个对象的属性是否存在时被调用。如:isset($c->name)。11。__unset()unset一个对象的属性时被调用。如:unset($c->name)。12。__set_state()调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。13。__autoload()实例化一个对象时,如果对应的类不存在,则该方法被调用。4.请写出让,并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?5.PHP的垃圾收集机制是怎样的答案:PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(referencecounting)这种单纯的垃圾回收(garbagecollection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。6.使对象可以像数组一样进行foreach循环,要求属性必须是私有。(Iterator模式的PHP5实现,写一类实现Iterator接口)classsampleimplementsIterator{private$_items=array(1,2,3,4,5,6,7);publicfunction__construct(){;//void}publicfunctionrewind(){reset($this->_items);}publicfunctioncurrent(){returncurrent($this->_items);}publicfunctionkey(){returnkey($this->_items);}publicfunctionnext(){returnnext($this->_items);}publicfunctionvalid(){return($this->current()!==false);}}$sa=newsample();foreach($saas$key=>$val){print$key.“=>“.$val;}7.请写一段PHP代码,确保多个进程同时写入同一个文件成功8.用PHP实现一个双向队列queue,$node);$this->countqueue();}publicfunctionfrontRemove(){$node=array_shift($this->queue);$this->countqueue();return$node;}publicfunctionrearAdd($node){array_push($this->queue,$node);$this->countqueue();}publicfunctionrearRemove(){$node=array_pop($this->queue);$this->countqueue();return$node;}publicfunctioncountqueue(){$this->length=count($this->queue);}}?>双向队列:(deque,全名double-endedqueue)是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。9.使用正则表达式提取一段标识语言(html或xml)代码段中指定标签的指定属性值(需考虑属性值对不规则的情况,如大小写不敏感,属性名值与等号间有空格等)。此处假设需提取test标签的attr属性值,请自行构建包含该标签的串10.请使用socket相关函数(非curl)实现如下功能:构造一个post请求,发送到指定httpserver的指定端口的指定请求路径(如:8080/test)。请求中包含以下变量:用户名(username):温柔一刀密码(pwd):$encoded.=rawurlencode($k).“=“.rawurlencode($v);}Return$encoded;}Functionpost($url,$post,$cookie){$url=parse_url($url);$post=encode($data,‘$cookie=encode($cookieArray,‘;’);$fp=fsockopen($url[ host ],$url[ port ]?$url[ port ]:80,$errno,$errstr,10);if(!$fp)return“Failedtoopensocketto$url[host]“;($fp,sprintf(“POST%s%s%sH