class sample implements Iterator
{
private $_items = array(1,2,3,4,5,6,7);
public function __construct() {
;//void
}
public function rewind() { reset($this->_items); }
public function current() { return current($this->_items); }
public function key() { return key($this->_items); }
public function next() { return next($this->_items); }
public function valid() { return ( $this->current() !== false ); }
}
$sa = new sample();
foreach($sa as $key => $val){
print $key . "=>" .$val
}
$array = array(1, 1, 1, 54, 3,4, 3,4, 3, 14, 3,4, 3,7,8,9,12,45,66,5,7,8,9,2,45);
$array2 = array_count_values($array); // 统计数组中所有值出现的次数
arsort($array2); // 按照键值对关联数组进行降序排序
$first = reset($array2);
$first_key = key($array2);
echo("数组中数字{$first_key}重复次数最多,为:{$first}次");
exit;
写出创建多级目录的函数(新浪校招)
/*
写出一个能创建多级目录的PHP函数
*/
function
createdirlist(
$path
,
$mode
){
if
(
is_dir
(
$path
)){
//判断目录存在否,存在不创建
echo
"目录'"
.
$path
.
"'已经存在"
;
//已经存在则输入路径
}
else
{
//不存在则创建目录
$re
=
mkdir
(
$path
,
$mode
,true);
//第三个参数为true即可以创建多极目录
if
(
$re
){
echo
"目录创建成功"
;
//目录创建成功
}
else
{
echo
"目录创建失败"
;
}
}
}
$path
=
"/a/x/cc/cd"
;
//要创建的目录
$mode
=0755;
//创建目录的模式,即权限.
createdirlist(
$path
,
$mode
);
//测试
1.函数内部 static 和 global 关键字的作用,如:
function foo()
{
static $a = 111;
global $b;
}
2.子类重写父类的 protected 方法有什么限制?或者说有什么要遵守的规则?
3.PHP文件末尾是否应该加 ?> 结束符号,为什么?
4.谈一谈 PHP 开源框架 CI,ThinkPHP,Laravel 的优缺点及选型依据
5.Memcache 和 Redis 的读写性能(qps)如何?两者优缺点?Redis 支持哪些数据类型?Redis 如何持久化?6.使用 PHP 下载网络图片,有哪些方法?
7.什么是 CGI?什么是 FastCGI?php-fpm,FastCGI,Nginx 之间是什么关系?8.什么是 CSRF 攻击 ?XSS 攻击?如何防范?
XSS跨站脚本攻击指攻击者在网页中嵌入客户端脚本(例如JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的,比如获取用户的Cookie,导航到恶意网站,携带木马等。
如何防止XSS跨站脚本攻击:
原则:不相信用户输入的数据
< 转化为 <、> 转化为 >、& 转化为 &、' 转化为 '、" 转化为 "、空格 转化为
中 CSRF(XSRF)尽管听起来很想XSS跨站脚本攻击,但是它于XSS完全不同。XSS是利用站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的站点。与XSS相比,CSRF攻击不大流行和难以防范,所以比XSS更具危险性。
如何防止CSRF跨站请求伪造:
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
如何防止SQL注入:
9.列举常用的设计模式并说明?单例模式,观察者模式等等
10.写一段代码,实现PHP内部的通知机制,如当一个类的属性发生变化时,另外一个类就可以收到通知。
1:基础sql语句书写(一般让写关联和子查询语句) 2:索引的创建,优缺点,最左原则 3:存储引擎,常用的几个,优缺点,差别,原理(面试必出) 4:sql注入的处理方法 5:mysql处理函数(PHP中封装的) 6:PDO的使用方法,为什么使用 7:mysql的优化,表拆分等 8:事务处理,sql语句的处理效率等 9:数据表字段的类型,同类型间的区别,改如何选取,int(10)与int(11)的区别等。 10:数据库索引使用的那种数据结构,画出数据结构
1:常用命令的使用,vim编辑器的使用。 2:进程,cpu等信息的查看命令。 3:文件内查看命令(主要涉及统计信息)。 4:Shell的使用,命令操作。
1:Redis的应用场景,结合微博业务说出他的具体应用。 2:Redis与MC支持数据的不同点,两者都支持哪些数据结构的存储,写越多越好。 3:Redis持久化存储的原理,与Mysql的应用区别。怎样保持持久化数据与内存数据同步的关系(Redis同步机制) 4:Redis与MC在并发状态下的性能比较。 5:MC的内存管理机制,当一个数据需要存储的时候怎样分配内存空间 6:Redis的内存管理机制,与MC有哪些不同点。
1:PHP7中的新特性与废弃的特性 2:为什么要使用PHP7,PHP7快在哪里
1:git的使用命令,例如:写出版本回退命令。 2:git与svn的区别。 3:如何进行多分支开发,包括多人开发协同,分段测试,上线。
。
1、HTTP Keep-Alive的作用
2、php数组函数常见的那些? (array_merge、in_array的作用)
3、PHP中几个输出函数echo,print(),print_r(),sprintf(),var_dump()的区别
4、不用新变量直接交换现有两个变量的值
5、heredoc
6、写个函数来解决多线程同时读写一个文件的问题。
7、禁掉cookie的session使用方案,设置session过期的方法,对应函数
8、json格式数据有哪些特点
9、php获取文件内容的方法,对应的函数
10、php魔术方法与魔术常量
11、PHP 如何获取客户端的IP地址
12、写一个函数,可以遍历文件夹下的所有文件和文件夹。
13、有mail.log的一个文档,内容为若干邮件地址,用’\n’分隔换行。挑选sina.com的地址。
14、PHP缓存技术有哪些? tp是局部还是完全缓存?
15、strlen()与mb_strlen的作用与区别
16、写一个函数,尽可能高效的从一个标准url中取出扩展名
17、php.ini 中safe mod关闭 影响哪些函数和参数,至少写6个?
18、 约瑟夫环问题
19、Isset() 、empty()与is_null的区别
20、求两个文件的相对路径
21、MVC的优缺点
22、Session与cookie的联系和区别(运行机制),session共享问题解决方案
23、正则表达式
24、写一个函数得到header头信息
MySQL部分
1、select * from table where (ID = 10) or (ID = 32) or (ID = 22) 让结果按10, 32, 22的顺序检索出来?
Linux部分
1、Core文件是什么,有什么用?
2、共享内存除了文件映射还有什么方式?
3、请解释下列10个shell命令的用途
4、Linux文件属性有哪些?(共十位)
5、Linux查询命令
服务器部分
1、Apache与Nginx的优缺点比较
2、Cgi 与fastcgi的区别
3、Select, poll和epoll的区别
4、Memcache和Redis区别
php部分我是按照面试常问的问题总结的,下面的问题在面试中出场率很高。问题比较基础
作用:Keep-Alive:使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。Web服务器,基本上都支持HTTP Keep-Alive。
缺点:对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,虽然为客户保留打开的连 接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep- Alive功能对资源利用的影响尤其突出。
2、php数组函数常见的那些? (array_merge、in_array的作用)
1 list(); //不是真正的函数,而是PHP的语言结构,用于给一组变量赋值,仅能用于索引数组 2 each(); //返回数组当前元素的键值对,并将指针移动到下一个元素位置 3 while(); //可配合list或each使用:while(list($key, $value) = each($arr)){each $key, $value; }
1 current(); //读取指针位置的内容 2 key(); //读取当前指针指向内容的索引值 3 next(); //将数组中的内部指针指向下一单元 4 prev(); //将数组内部指针倒回一位 5 end(); //将数组内部指针指向最后一个元素 6 reset(); //将目前指针指向第一个索引位置
1 array_values($arr); //获得数组的值 2 array_keys($arr); //获得数组的键名 3 array_flip($arr); //数组中的值与键名互换(如果有重复前面的会被后面的覆盖) 4 array_search('PHP',$arr); //检索给定的值,加true则是严格类型检查 5 array_reverse($arr); //将数组中的元素翻转(前后顺序) 6 in_array("apple", $arr); //在数组中检索apple 7 array_key_exists("apple", $arr); // 检索给定的键名是否存在数组中 8 array_count_values($arr); // 统计数组中所有值出现的次数 9 array_unique($arr); // 删除数组中重复的值
1 array_filter(); //使用回调函数过滤数组中的元素,如果回调返回true则当前的元素被包含到返回数组中 2 array_walk(); //回调函数处理数组,自定义函数要有两个参数,本函数第三个参数可以作为回调第三个参数返回 3 array_map(); //可以处理多个数组,每个数组的长度应该相同,传入数组的个数和回调函数参数个数应该一致
1 array_slice($arr, 0, 3); //将数组中的一段取出,此函数忽略键名(数组的分段) 2 array_splice($arr, 0, 3,array("black","maroon")); //将数组中的一段取出,返回的序列从原数组中删除 3 array_chunk($arr, 3, TRUE); //将一个数组分割成多个,TRUE为保留原数组的键名(分割多个数组)
1 array_push($arr, "apple", "pear"); //将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素的个数 2 array_pop($arr); // 将数组栈的最后一个元素弹出(出栈) 3 array_shift($arr); //数组中第一个元素移出并返回(长度减1,其他元素向前移动一位,数字键名改为从零计数,文字键名不变) 4 array_unshift($arr,"a",array(1,2)); //在数组的开头插入一个或多个元素
1 sort($arr); //由小到大,忽略键名 2 rsort($arr); //由大到小,忽略键名 3 asort($arr); //由小到大,保留键名 4 arsort($arr); //由大到小,保留键名 5 ksort($arr); //按照键名正序排序 6 krsort($arr); //按照键名逆序排序
1 array_sum($arr); //对数组内部的所有元素做求和运算(数组元素的求和) 2 array_merge($arr1, $arr2); //合并两个或多个(相同字符串键名,后面覆盖前面,相同的数字键名,后面的附加到后面) 3 4 array_diff($arr1, $arr2); //返回差集结果数组 array_diff_assoc($arr1, $arr2, $arr3); //返回差集结果数组,键名也做比较 5 array_intersect($arr1, $arr2); //返回交集结果数组 array_intersect_assoc($arr1, $arr2); //返回交集结果数组,键名也做比较
1 array_unique($arr); //移除数组中重复的值,新的数组中会保留原始的键名 2 shuffle($arr); // 将数组的顺序打乱
1:echo:是语句不是函数,没有返回值,可输出多个变量值,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)。
2:print:是语句不是函数,有返回值 1 ,只能输出一个变量,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)。
3:print_r:是函数,可以打印复合类型,例如:stirng、int、float、array、object等,输出array时会用结构表示,而且可以通过print_r($str,true)来使print_r不输出而返回print_r处理后的值
4:printf:是函数,把文字格式化以后输出(参看C语言)
5:sprintf:是函数,跟printf相似,但不打印,而是返回格式化后的文字(该函数把格式化的字符串写写入一个变量中,而不是输出来),其 他的与printf一样。
例如:
1 $str = "Hello"; 2 $number = 123; 3 $txt = sprintf("%s world. Day number %u",$str,$number); 4 //输出: Hello world. Day number 123
6:var_dump():函数,输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。
可以通过function_exists('函数名称')进行测试
1 var_dump(function_exists('print')); //bool(false) 2 3 var_dump(function_exists('echo')); //bool(false) 4 5 var_dump(function_exists('print_r')); //bool(true)
1 1: 3 list($a, $b) = array($b, $a); 4 2: 5 $a = $a . $b; 5 $b = strlen( $b ); 6 $b = substr( $a, 0, (strlen($a) – $b ) ); 7 $a = substr( $a, strlen($b) ); 8 9 3:(必须用一个两个字符串都都不能出现的字符做为分隔符) 10 $a = $b.','.$a ; 11 $a = explode(',', $a); 12 $b = $a[1]; 13 $a = $a[0]; 14 15 4:这个是当两个数都是数字的时候: 16 $a = $a + $b; 17 $b = $a – $b; 18 $a = $a – $b; 19 20 5:借助数组 21 $a = array($a,$b); 22 $b = $a[0]; 23 $a = $a[1];
5、heredoc
Heredoc在正规的PHP文档中和技术书籍中一般没有详细讲述。他是一种Perl风格的字符串输出技术。使用heredoc技术可以实现界面与代码的准分离,比如phpwind模板。
heredoc的语法是用”<<<”加上自己定义成对的标签,在标签范围內的文字视为一个字符串
规则如下:
1、以<<
2、位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在heredoc中,变量不需要用连接符 . 或 , 来拼接,比如:
1 $a=2; 2 $b= <<
3、heredoc常用在输出包含大量HTML语法文档的时候。他要比传统的echo输出精炼很多,如下所示:
1 function getHtml() 2 { 3 echo ""; 4 echo "Title "; 5 echo "Content"; 6 echo "; 7 } 8 9 function getHtml() 10 { 11 echo <<13 Title 14 Content 15