画江湖之面试篇 [第三篇] tip:生活没你想的那么容易~你不努力没人能帮你

krisji 带你分析以往php面试题,各位小伙伴们赶紧上车咯~ 

第一题:写出你认为语言中的高级函数?

这道题呢?主要考察你的知识面

1 数组里面 
   array_filter
   array_map
   array_multisort
   array_count_values
   array_splice  
2 字符串
   htmlspecialchars
   json_encode
   json_decode
   substr_count //计算一个字符串在字符串出现的次数
   pathinfo
   parse_url
   parse_str //把查询字符串解析到变量中
3 正则
   preg_match_all
   preg_replace 
get_class_methods() 得到类的方法名的数组

第二题:

请写一个函数,实现以下功能:

字符串"open_door" 转换成 "OpenDoor"、"make_by_id" 转换成 "MakeById"。

这道题呢?主要考察你的基础是否扎实

function demo($string){
    $arr=explode('_',$string); 
    foreach($arr as $key=>$val){
        $arr[$key]=ucfirst($val); 
    }
    return implode('',$arr);
}

请写一个函数将 1234567890 转换成 1,234,567,890 每 3 位用逗号隔开的形式:

<?php 
$str='1234567890';
function demo($str){
  $str=strrev($str);//先翻转字符串
  $arr=str_split($str,3);//每3个隔开
  $str=strrev(implode(',',$arr));//在把数组以,变成字符串 在翻转
  echo $str;
}
demo($str);

第三题:通过PHP函数的方式对目录进行遍历,写出程序

这道题呢?主要考察你的基础是否扎实

dirs('F:\wwwroot');
function dirs($path){ 
     $path=str_replace('\\','/',$path); //替换下转义的问题
     $res=opendir($path); //打开文件
     while($filename=readdir($res)){//循环读取文件
           $newpath=$path.'/'.$filename; //拼接文件名
           if(is_dir($newpath)){//如果还是个目录
               echo '<font color="red">目录:</font>'.$filename.'<br />';//输出目录名
               dirs($newpath); //递归遍历此目录
            }else{
              echo '文件:'.$filename.'<br />';//输出文件名
            }   
      }     
}

第四题:写出程序运行的结果

这道题呢?主要考察你的优先级的问题 这边有个坑 仔细看

<?php 
$a=0;
$b=0;
If($a=3 || $b=3){ //仔细分析下 其实是3 || $b=3 3 就是真 $a=3 就是true 后面$b=3 不会执行
    $a++;//true++ 就是1
    $b++;//0++ 就是1
}

Echo $a.",".$b; 所以最后就是1 1
?>

第五题:写出程序运行的结果

这道题呢?主要考察你的排坑能力 什么是函数里面的返回 echo return

function myfunc($argument){
   echo $argument+10;
}
echo $argunment + 10; //这里多了一个 n 字母,变量为空,就相当于直接 echo 10  这边函数并没有返回只是输出

$variable = 10;

echo "myfunc($variable)=".myfunc($variable);

答案是10myfunc(10)=

第六题:试写出 mysql 数据库优化的一些方法

这道题呢?主要考察你对mysql 优化的能力

(1)  选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置 NOT NULL,例如'省 份,性别',最好设置为 ENUM
(2) 使用连接(JOIN)来代替子查询:
(3) 建立索引:
(4) 使用扩展库 PDO 或者 mysqli 使用预处理 stmt 缓存字段
(5) 优化查询语句最好在相同字段进行比较操作 ,select 查询的时候尽量少用*,用到什么
字段查什么字段在 sql 语句中尽量少用 mysql 的函数,我们在 PHP 端处理好后再交给mysql
(6) 不要用 like 来查询 这样很不效率,用 Sphinx 全文检索
(7) 分区技术
(8) 主从数据库
(9) 结合 memcache
(10)结合 sphinx es 全文检索
(11).数据库优化和服务器优化 
  Mysql 主从
  Mysql 集群

第七题:echo(),print(),print_r()的区别

这道题呢?主要考察你的php的基础理解 而且经常考这个 我发现

echo 是 PHP 语句,
print 和 print_r 是函数,
语句没有返回值,函数可以有返回值(即便没 有用)
print() 只能打印出简单类型变量的值(如 int,string) 
print_r() 可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串

第八题:用PHP 写出客户端ip和服务端ip的区别?

这道题呢?主要考察你的php的基础理解 而且经常考这个 我发现

答:
打印客户端 IP:
echo $_SERVER['REMOTE_ADDR']; 
打印服务端IP
echo $_SERVER['SERVER_ADDR']

第九题:请写一个函数验证电子邮箱的格式是否正确?

这道题呢?主要考察正则

答:
function  c_email($email){
    $reg='/^
    ([a-zA-Z0-9]{1,20})//
    (([\_\-\.])?//
    中间可以有"-"与"_"符号
    ([a-zA-Z0-9]{1,20}))*//
    * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \* 
    @
    ([a-zA-Z0-9]{1,20})(([\-\_])?([a-zA-Z0-9]{1,20}))*// 同上
    (\.[a-z]{2,4}){1,2}//
    支持.net.cn,.com.cn这样的域名后缀;
    $/';
}
1,不做总长度判断,长度判断可以自己加上;

2,支持.net.cn,.com.cn这样的域名后缀;

3,邮箱名部分以字母或者数字开头,中间可以有"-"与"_"符号;

4,域名部分以字母或者数字开头,中间可以有"-"与"_"符号;

第十题:请将2维数组按照name的长度进行重新排序?按照顺序将id 赋值(从1开始)

这道题呢?主要考察你对php 数组的操作能力

<?php
$Tarray = [['id'=>0,'name'=>'123833'],['id'=>1,'name'=>'44'],['id'=>3,'name'=>'22'],['id'=>2,'name'=>'3232']];
//定义一个二维数组

foreach($Tarray as $key=>$value) {
  $long[$key] = strlen($value['name']);//定义一个关联数组 以key 和value 为name的长度
}

array_multisort($long, SORT_ASC, $Tarray);
//使用这个函数 第一个是要排序的字段的数组 第二个按照什么方式排序 //要处理的二维数组

$i = 1;
foreach($Tarray as &$value) {
  $value['id'] = $i;
  $i++;
}//按照顺序将id 赋值(从1开始)

var_dump($Tarray);die();
php
本帖由系统于 3个月前 自动加精
Krisji
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 9

验证邮箱可以这样 filter_var($email,FILTER_VALIDATE_EMAIL)

5个月前 评论

第二题,直接number_format()

5个月前 评论

print也是语言结构

5个月前 评论

你的第四题解释的有问题的 || 运算 优先级要大于=号的

3个月前 评论

true++ 还是等于true,true 转换成字符串才是1

3个月前 评论
liuzhaobo1999

第五题答案是:1020myfunc(10)=

3个月前 评论
<?php
$a=0;
$b=0;
if ($a=3){   // 去掉 b=3 的条件判断
   $a++;
   $b++;
}

echo $a." ".$b;  // 最后就是 4 1
?>

第三道题目,因为 b=3 的条件判断没有执行,我尝试去掉 b=3 的条件判断,但 $a 的值从1变到了4,这是什么原因...

3个月前 评论

@ljheisenberg

$a=3 || $b=3 因为有 || 这个逻辑运算符,所以变量$a会被转换成布尔类型
3个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!