腾讯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打印一个对象的时被调用。如echoobj;或printobj;7。__clone克隆对象时被调用。如tnewTest;t1clonet;8。__sleepserialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。9。__wakeupunserialize时被调用,做些对象的初始化工作。10。__isset检测一个对象的属性是否存在时被调用。如issetc-name。11。__unsetunset一个对象的属性时被调用。如unsetc-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_itemsarray1,2,3,4,5,6,7;publicfunction__construct{;//void}publicfunctionrewind{resetthis-_items;}publicfunctioncurrent{returncurrentthis-_items;}publicfunctionkey{returnkeythis-_items;}publicfunctionnext{returnnextthis-_items;}publicfunctionvalid{returnthis-currentfalse;}}sanewsample;foreachsaaskeyval{printkey..val;}7.请写一段PHP代码,确保多个进程同时写入同一个文件成功8.用PHP实现一个双向队列queue,node;this-countqueue;}publicfunctionfrontRemove{nodearray_shiftthis-queue;this-countqueue;returnnode;}publicfunctionrearAddnode{array_pushthis-queue,node;this-countqueue;}publicfunctionrearRemove{nodearray_popthis-queue;this-countqueue;returnnode;}publicfunctioncountqueue{this-lengthcountthis-queue;}}双向队列(deque,全名double-endedqueue)是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。9.使用正则表达式提取一段标识语言(html或xml)代码段中指定标签的指定属性值(需考虑属性值对不规则的情况,如大小写不敏感,属性名值与等号间有空格等)。此处假设需提取test标签的attr属性值,请自行构建包含该标签的串10.请使用socket相关函数(非curl)实现如下功能构造一个post请求,发送到指定httpserver的指定端口的指定请求路径(如http//8080/test)。请求中包含以下变量用户名(username)温柔一刀密码(pwd)123321321123个人简介(intro)Helloworld且该httpserver需要以下cookie来进行简单的用户动作跟踪cur_queryyoumelast_tm...(上次请求的unix时间戳,定为当前请求时间前10分钟)cur_tm...(当前请求的unix时间戳)设置超时为10秒,发出请求后,将httpserver的响应内容输出。复制内容到剪贴板代码Functionencodedata,sep‘’{whilelistk,veachdata{encoded.encodedsep;encoded.rawurlencodek..rawurlencodev;}Returnencoded;}Functionposturl,post,cookie{urlparse_urlurl;postencodedata,‘cookieencodecookieArray,‘;’;fpfsockopenurl[host],url[port]url[port]80,errno,errstr,10;iffpreturnFailedtoopensockettourl[host];fp,sprintfPOSTsssH