程序员找工做必备PHP基础面试题 - 第十五天

“PHP学习网” 公众号会天天分享一些面试题,正在找工做的小伙伴们能够来看看哦。

1、写出面相对象的三大特性以及定义?

封装 继承 多态
封装:对象之外的部分不能随意存取对象内部数据
继承:经过子类继承父类进行功能扩展
多态:对具备继承关系的不一样类对象,能够对相同名称的成员函数调用,产生不一样的反应效果php

2、用PHP程序写出5种以上方式获取一个文件的扩展名?

//第1种方法mysql

substr(strrchr($file, '.'), 1);

//第2种方法
substr($file, strrpos($file, '.')+1);面试

//第3种方法
end(explode('.', $file));redis

//第4种方法
$info = pathinfo($file);
echo $info['extension'];sql

//第5种方法
pathinfo($file, PATHINFO_EXTENSION);编程

3、写出如下PHP程序的执行结果

<?
$count=5;
function get_count(){
    static $count=0;
    return ++$count;
}
echo $count;
echo $count++;
echo $count;
echo get_count();
echo get_count();
?>
输出为:5 5 6 1 2

4、写出下列代码的输出结果:

function myfunc($argument){
    echo $argunment + 10;
}
$variable = 10;
echo “myfunc($variable)=”.myfunc($variable);

先调用函数输出,后输出字符串
输出为: 20myfunc(10)=数组

5、请用尽量少的语句实现对输出Email地址进行验证的功能

'/[0-9a-zA-Z_]+@[0-9a-zA-Z_]\.com|\.net|\.cn/ism'

6、php是否有安全问题,若是有,请列举说明。

1.过滤用户输入的值 好比从post和get传参得来的值
例:$_POST[‘user’];不过滤,会形成一连串的麻烦安全

2.禁用register_globals 若是不由止,就没法肯定该变量是不是预约义全局变量里的值函数

例:regiseter_globals=on  $var 会代替掉 $_POST['var']

3.防止sql注入
使用 mysql_real_escape_string() 做为用户输入的包装器,就能够避免用户输入中的任何恶意 SQL 注入post

例: $sql = "select count(*) as ctr from users where username='".mysql_real_
_string($username)."' and password='". mysql_real_escape_string($pw)."'
limit 1";

7、如何判断SQL语句的运行效率?如何优化一个查询SQL?

使用explain查看sql语句
最主要的查看type和Extra的值
  1. 避免全表扫描
  2. 如下操做不当也会形成全表扫描
  3. 避免在where子句中使用!=或<>操做符, 还有null值的判断全表扫描
  4. 避免在where子句中使用or in not in
  5. 避免在where子句中对字段使用函数操做
  6. 不要写一些没有意义的查询
  7. 索引尽可能不要过多

8、一群猴子排成一圈,按1,2,…,n依次编号,而后从第一个开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去,……。如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫作大王。要求编程模拟此过程,输入m,n,?输出最后那个大王的编号。

这题和击鼓传花同样,能够用队列的思路实现

//注释不要抄,帮助理解
function king($m ,$n)
{
//构造数组
for($i=1 ;$i<$m+1 ;$i++){
   $arr[] = $i ;
}
$i = 0 ;    //设置数组指针

while(count($arr)>1)
{
   //遍历数组,判断当前猴子是否为出局序号,若是是则出局,不然放到数组最后
   if(($i+1)%$n ==0) {
    unset($arr[$i]) ;
   } else {
    array_push($arr ,$arr[$i]) ; //本轮非出局猴子放数组尾部
    unset($arr[$i]) ;   //删除
   }
   $i++ ;
}
return $arr ;
}

var_dump(king(6,4));

或者

public static function play($first,$m,$k)
  {
   //先要找到是后一个节点
   $tail=$first;
   while ($tail->next!=$first)
    $tail=$tail->next;
   //从第几我的开始数就要将这我的设为头节点,也要找到它的后一个结点,做做辅助结点。
   for($i=0;$i<$k-1;$i++)
   {
    $first=$first->next;
    $tail=$tail->next;
   }
   while($tail!=$first)
   {
    //找到要移出的结点。
    for($j=0;$j<$m-1;$j++)
    {
     $first=$first->next;
     $tail=$tail->next;
    }
    //删除节点
    echo '小孩'.$first->no.'被移除'.'<br>';
    $first=$first->next;
    $tail->next=$first;
   }
   echo '大王是:'.$first->no;
  }
 }

附加题

一、一们猎人带着一只儿狼,一只羊和一捆白菜过河,但他一次只能带三者中的一者过河。问:他怎样过河才能不至于让儿狼吃掉羊或让羊吃掉白菜

先带羊 后带白菜 再带狼

二、用小圆炉烤两个饼,每一个饼正反面都要烤,而每烤一面所须要的时间是半分钟,怎样在一分半钟烤好三个饼?

a饼 b饼 烤 半分钟 把b拿掉 换上c饼 a饼反面 烤 半分钟 再把a饼拿掉 换上b饼反面 c饼反面 烤半分钟

三、一只青蛙掉进一口18英尺深的井,天天白天它向上爬6英尺,晚上向下滑3英尺。按照这个速度多少天能够爬出井口?

5天 第五天白天爬出井口

最后各位能够扫下方二维码关注我公众号,目前我正在更新基础面试题,以后会更新中高级、redis、liunx面试题

weixin.jpg

相关文章
相关标签/搜索