一些面试题(网上找的)
来源:互联网 发布:淘宝如果投诉最有效 编辑:程序博客网 时间:2024/04/29 00:52
$str = '2e33ez869';$pattern = "/[a-zA-Z]/";var_dump(preg_replace($pattern,'*', $str));
Q:用PHP实现英文字符串翻转
A:
1)strrev()函数
2)自定义函数
function strrevv($str){ $len=strlen($str); $newstr = ''; for($i = $len-1; $i >= 0; $i--){ $newstr .= $str{$i}; }}
Q:写一段PHP代码,确保多个进程同时写入同一个文件(提示:文件锁)
A:
function write_file($filename, $content){ $lock = $filename . '.lck'; $write_length = 0; while(true) { if( file_exists($lock) ) { usleep(100); } else { touch($lock); $write_length = file_put_contents($filename, $content, FILE_APPEND); break; } } if( file_exists($lock) ) { unlink($lock); } //返回写入结果 return $write_length;}
Q:在HTTP1.0中,状态码200、301、302、403、404、500、502的含义
A:
200:成功。服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。如果是对您的 robots.txt 文件显示此状态码,则表示 Googlebot 已成功检索到该文件。
301:永久移动。请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302:临时移动。服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。
403:禁止。服务器拒绝请求。
404:未找到。服务器找不到请求的网页。
500:服务器遇到错误,无法完成请求。
502:错误网关。服务器作为网关或代理,从上游服务器收到无效响应。
Q:写出一个正则表达式,过滤网页上的JS/VBS脚本;写一个正则表达式验证电子邮件的格式
A:
/<script[^>]*?>.*?<\/script>/si
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/
Q:用php写一个函数数将一,二,十一,十二,二十二,四十三,一百一十八,七百五十八,一千五十六,一千九百四十二这样的中文数字转换成1,2,11,12,22,43,118,758,1056,1942这样阿拉伯数字,6000以内的能转换就行了。
A:
function abc($str){$arr = array('零'=>0,'一'=>1,'二'=>2,'三'=>3,'四'=>4,'五'=>5,'六'=>6,'七'=>7,'八'=>8,'九'=>9,'十'=>10,'百'=>100,'千'=>1000,'万'=>10000,);$len = mb_strlen($str, 'utf-8');$res = array();for($i = 0; $i<$len; $i++){$single = mb_substr($str, $i, 1, 'utf-8');$res[] = $arr[$single];}$result = 0;for($i = 0; $i<count($res); $i++){if ($i == 0 && $res[$i] == 10){$result += 10;}else if ($res[$i] > 9 || $res[$i] == 0 ) {continue;} else if (isset($res[$i+1]) && $res[$i+1] > 9){$tmp = $res[$i] * $res[$i+1];$result += $tmp;} else {$result += $res[$i];}}return $result;}
Q:php面向对象中的魔术方法
A:
__construct() 实例化对象是被自动调用。当__construct和以类名为函数名的函数 同时存在时调用__construct,另一个不背调用。类名为函数名的函数为老版的构造函数。
__destruct() 当删除一个对象或一个对象操作结束是被调用。
__call() 对象调用某个方法。若方法不存在,这调用__call 这个方法
__get() 读取一个对象属性,如果对象属性是私有的会调用它
__set() 给一个对象属性赋值时如果属性是私有的会调用它
__toString() 打印一个对象的时候会被调用。
__clone() 克隆对象时被调用,如:$a=new test(); $a1=clone $a;
__sleep() Serialize 之前被调用,若对象比较大,想删减一点东西在序列化可以用它。
__wakeup() Unserialize时被调用,做些对象的初始化工作。
__isset() 检测一个对象的属性是否存在如果 检测的属性是私有的时候会被调用。
__unset() 删除一个对象属性时如果 删除的对象属性是私有的会被调用
__set_state() 调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
__autoload() 实例化一个对象时,如果对应的类不存在,则该方法被掉用。
Q:将字符串“2a3E33Z55”中的数字转为星号(*),字母转为小写
A:
$str = '2a3E33Z55';$pattern = "/\d/";var_dump(preg_replace($pattern,'*', strtolower($str)));
Q:常见的设计模式
A:
参考自:https://www.ibm.com/developerworks/cn/opensource/os-php-designptrns/
一、工厂模式
工厂模式 是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。
二、单例模式
某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。
三、观察者模式
观察者模式为您提供了避免组件之间紧密耦合的另一种方法。该模式非常简单:一个对象通过添加一个方法(该方法允许另一个对象,即观察者 注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。
四、命令链模式
命令链 模式以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求。如果可以,该请求被处理,进程停止。您可以为系统添加或移除处理程序,而不影响其他处理程序。
五、策略模式
在此模式中,算法是从复杂类提取的,因而可以方便地替换。例如,如果要更改搜索引擎中排列页的方法,则策略模式是一个不错的选择。思考一下搜索引擎的几个部分 —— 一部分遍历页面,一部分对每页排列,另一部分基于排列的结果排序。在复杂的示例中,这些部分都在同一个类中。通过使用策略模式,您可将排列部分放入另一个类中,以便更改页排列的方式,而不影响搜索引擎的其余代码。Q:快速排序
A:
/* 快速排序*/function quickSort($array){ if(!isset($array[1])) return $array; $mid = $array[0]; //获取一个用于分割的关键字,一般是首个元素 $leftArray = array(); $rightArray = array(); foreach($array as $v) { if($v > $mid) $rightArray[] = $v; //把比$mid大的数放到一个数组里 if($v < $mid) $leftArray[] = $v; //把比$mid小的数放到另一个数组里 } $leftArray = quickSort($leftArray); //把比较小的数组再一次进行分割 $leftArray[] = $mid; //把分割的元素加到小的数组后面,不能忘了它哦 $rightArray = quickSort($rightArray); //把比较大的数组再一次进行分割 return array_merge($leftArray,$rightArray); //组合两个结果}
- 一些面试题(网上找的)
- 在网上找的一些java面试题,特经典
- 一些从网上来的面试题(笔记)
- 网上的一些java面试题整理
- 网上的一些it面试题
- 网上搜集的一些FLEX面试题
- 网上搜集的一些FLEX面试题
- 网上搜集的一些FLEX面试题
- 网上找的阿里的一个面试题
- 网上找的IOS开发面试题,暂无答案
- 网上找的前端面试题--持续更新
- 从网上找了一些开源spider的相关资料,整理在下面
- 网上面试题(二)
- 网上找的一些DB2资料,备忘
- 网络数据库网上找的一些题目
- 网上找的一些django教程
- 网上找的一些效果代码
- 网上的一个面试题 (c#)(配有解答)
- Java 重写tostring方法
- oc混编
- App的基本测试点
- linux用户切换su sudo
- jquey ajax 发送数组
- 一些面试题(网上找的)
- java TCP UDP网络部分总结
- leetcode-34. Search for a Range
- iOS基础:UITableView简单使用
- Tomcat项目加载错误之不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
- 完整详解GCD系列(四)dispatch_semaphore(信号量)
- Netty之Java堆外内存
- web day18 事务,数据库连接池(DBCP,C3P0,),DBUtils,装饰模式,Tomcat配置JNDI资源,ThreadLocal,BaseServlet
- memcached基本操作