PHP笔试(持续更新...)
2017-09-24 22:10
357 查看
笔试易入雷区
基础篇
1.写出如下程序的输出结果<?php $test = ‘aaaaaa’; $abc = & $test; unset($test); echo $abc;
输出结果是“aaaaaa”分析如下:
首先PHP内置有一种规则是:当有两个变量同时指向一个内存地址时,这时若其中一个被销毁,但另一个仍然指向该地址。那么内存中存放的数据不会被回收机制处理。因此仍然输入aaaaaa。
网上别人的理解:
因为变量abc引用的是指向aaaaa的路径,而不是引用变量text本身。就好比路径是钥匙的话。现在$abc是配的钥匙, aaaaaa是门后面的内容。现在你毁坏了原装的钥匙,但是门后面的内容,和配的钥匙是不变的。因为还有变量指向aaaaaa,所以aaaaaa也不会被php回收机制销毁。
2.写出如下程序的输出结果
<?php $count = 5; function get_count(){ static $count = 0; return $count++; } echo $count; echo get_count(); echo get_count(); ?>
上方代码答案是:5 0 1 。重点分析后两个:由于在函数内定义的是静态变量count,因此每次函数结束之后仍能保持原来的值。又由于是return $count++,所以第一次返回的是0,之后再在之前的基础上加一。
3.$GLOBALS[‘a’]与global ¥a的区别
<?php $GLOBALS['var1']=5; $var2=1; function get_value(){ global $var2; $var1 = 0; return $var2++; } get_value(); echo $var1; echo $var2; ?>
<?php $var1 = 1; $var2 = 2; function test(){ global $var1, $var2; $var2 = &$var1; echo $var2; $var2 = 'snsgou.com'; } test(); // 输出 1 echo $var2; // 输出 2 echo $var1; // 输出 snsgou.com ?>
附上参考链接:有关上述两者的区别
4.下面输出结果是多少?
$arr = array(0=>1,"aa"=>2, 3, 4); foreach($arr as $key=>$val){ print($key == "aa" ? 5 : $val); }
结果:5534
解析:遍历每一个元素的key看等不等于aa,等于就用5替代。当我告诉你答案是5534的时候,你会不会有点惊讶!难道0等于”aa”吗?是的,0就等于”aa”,这道题重点就考你这个。在PHP中两个值进行逻辑判断时,如果两个值的类型不一致PHP会自动把右边的值转换到左边的类型,然后再进行判断。因此”aa”转换整形等于0,自然也就等于左边的0了。
5.请指出下面结果
$a = 3; $b = 5; if($a = 5 || $b = 7) { $a++; $b++; } echo $a . " " . $b;
结果:1 6
解析:执行结果是多少?如果你回答 6 8 or 4 6 or 6 6,那你就掉入陷阱了。
第一个陷阱,认为答案等于 4 6 。估计你粗心把 a=5||b = 7 看成 a==5||b == 7 ,这是新手常犯的错误。
第二个陷阱,认为答案等于 6 8。 你识破了 a=5||b = 7 这个骗局,但你没有注意到,逻辑或里只要依次执行直到某个表达式结果为true,表达式后边的就不再执行,a=5返回true,后边的b=7就不执行了。
第三个陷阱,认为答案等于 6 6。 OK,你识破了 逻辑或的规则,于是a=5执行,b=7不执行,但是你没有考虑到这里是逻辑表达式,返回给a的值是要转换为布尔值的。这样看。所以经过以上三个陷阱,你应该知道答案是多少了,其实a等于true以后,echo a输出就是1,b值不变,结果就是 1 6 。
6.输出结果
$a = count ("567") + count(null) + count(false); echo $a;
结果:2
解析:如果你回答 3 or 1,恭喜,掉入陷阱了。
因为count(null)等于0,false也算一个值。所以count(false)等于1。
算法篇
二、算法题1. 使用 PHP 描述冒泡排序和快速排序算法,对象可以是一个数组
//冒泡排序(数组排序)
function bubble_sort($array) { $count = count($array); if ($count <= 0) return false; for($i=0; $i<$count; $i++){ for($j=$count-1; $j>$i; $j–){ if ($array[$j] < $array[$j-1]){ $tmp = $array[$j]; $array[$j] = $array[$j-1]; $array[$j-1] = $tmp; } } } return $array; }
//快速排序(数组排序)
function quick_sort($array) { if (count($array) <= 1) return $array; $key = $array[0]; $left_arr = array(); $right_arr = array(); for ($i=1; $i<count($array); $i++){ if ($array[$i] <= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i]; } $left_arr = quick_sort($left_arr); $right_arr = quick_sort($right_arr); return array_merge($left_arr, array($key), $right_arr); }
2 .使用 PHP 描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,
对象可以是一个有序数组
//二分查找(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){ if ($low <= $high){ $mid = intval(($low+$high)/2); if ($array[$mid] == $k){ return $mid; }elseif ($k < $array[$mid]){ return bin_sch($array, $low, $mid-1, $k); }else{ return bin_sch($array, $mid+1, $high, $k); } } return -1; }
//顺序查找(数组里查找某个元素)
function seq_sch($array, $n, $k){ $array[$n] = $k; for($i=0; $i<$n; $i++){ if($array[$i]==$k){ break; } } if ($i<$n){ return $i; }else{ return -1; } }
3 . 写一个二维数组排序算法函数,能够具有通用性,可以调用 php 内置函数
//二维数组排序, arr是数据,keys 是排序的健值,$order 是排序规则,1 是升序,0是降序
function array_sort($arr, $keys, $order=0) { if (!is_array($arr)) { return false; } $keysvalue = array(); foreach($arr as $key => $val) { $keysvalue[$key] = $val[$keys]; } if($order == 0){ asort($keysvalue); }else { arsort($keysvalue); } reset($keysvalue); foreach($keysvalue as $key => $vals) { $keysort[$key] = $key; } $new_array = array(); foreach($keysort as $key => $val) { $new_array[$key] = $arr[$val]; } return $new_array; }
都是基本又常见的算法题,好好看,好好练。
今天在刷题时发现了一个小坑,不小心就会栽进去。
当我们用echo指令输出布尔类型时,如果是true则输出的是1,false则什么也不输出。我们可以使用var_dump函数,获取它真正的数据类型。
相关文章推荐
- 笔试面试题整理,慢慢搜集....持续更新
- PHP代码片段(持续更新)
- 前端笔试算法题,提高笔试存活率!(持续更新)
- php 魔术方法总结(持续更新)
- C++笔试题(2),持续更新中……
- 【持续更新中】腾讯软件测试笔试20150905
- PHP.INI常用设置一览表(持续更新)
- PHP版今日头条算法面试题(持续更新)
- Android系统基础面试笔试题积累,持续更新。。。。
- php木马样本,持续更新
- Mac各种安装记录:homebrew,zsh,Nginx,MySQL,PHP 等持续更新
- php7注意事项及遇到的问题 持续更新....
- 无刷新上传图片 此版本基于原生php,并且会持续更新
- PHP项目中可能用到的函数(持续更新)
- 前端笔试题及资料集锦(一)(持续更新....)
- php常用函数(持续更新)
- ios笔试题收集(持续更新)
- Android开发经典笔试面试题汇总(持续更新中)
- 阿里巴巴技术笔试心得《技术之瞳》例题错误答案汇总(持续更新)
- Android开发经典笔试面试题汇总(持续更新中)