美文网首页
PHP试题-1

PHP试题-1

作者: 后厂村村长 | 来源:发表于2021-08-15 13:19 被阅读0次

    社招笔试题-2014精简版

    PHP系统部分

    1. POST和GET有何区别?

    1、GET方式通过URL提交数据,数据在客户端URL中可见;POST方式,数据放置在HTML HEADER内提交。
    2、GET将表单中de数据按key=value的形式,追加到URL后面,且两者使用“?”连接,而各个变量间使用 “&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到所指向URL。
    3、GET方式提交的数据最多只能有1024字节(1kb),而POST没有此限制。
    4、安全性问题。如(1)中所说,Get 请求的参数会显示在地址栏,而 Post 不会。因此如果数据是中文且非敏感数据,可使用 get;如果用户输入的数据非中文字符且包含敏感数据,建议使用 POST。
    5、特殊字符转义问题,GET请求会导致某些特殊字符无法正常传递到后端,如&#+,需要前端显示转义特殊字符。

    1. 如何通过php的环境变量获取发起请求的客户端 网页地址 和 IP 地址?
    $_SERVSR[‘REQUEST_URI’]
    $_SERVER[‘REMOTE_ADDR’]
    
    1. PHP的当前脚本名称(不包括路径和查询字符串)记录在预定义变量____中;链接到当前页面的URL记录在预定义变量____中。
    $_SERVER['PHP_SELF'];
    $_SERVER["HTTP_REFERER"];
    
    1. 命令行调用php程序,如何传递参数、获取环境参数。
    传参:bin/php  –f  xxxx.php  arg1 arg2 arg3
    获取:使用$argv获取参数,$argv[1] , $argv[2] , $argv[3]
    
    1. HTTP的状态码 401、302 的含义是什么;如果想返回“找不到文件”的提示,可使用 header 函数设置,其语句是什么?

    1、
    401:Unauthorized 客户端试图未经授权访问受密码保护的页面
    302:临时重定向,not Found, 类似于301,但新的URL应该被视为临时性替代,而非永久性。
    2、
    header("HTTP/1.0 404 Not Found");

    PHP语法部分

    1. 语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是____;为了避免多次包含同一文件,可以用语句____来代替它们。

    include() 产生一个警告而require() 则导致一个致命错误。
    Include_once() 和 require_once()

    1. 用PHP打印出前一天的时间,格式是:2011-1-10 10:17:57。

    echo date('Y-m-d H:i:s', strtotime('-1 day'));

    1. 写一个程序,远程抓取图片,并存取在本地服务器。并且被抓取的服务器有对refer做控制,例如refer必须要求是http://www.xxx.com/*)。

    提供一个思路:
    抓取函数可使用:file_get_contents() 、fopen、curl
    refer限制:需要mock对应的header信息规避反爬,然后匹配出<img> 标签,存取到本地。

    1. 请说明在php.ini中safe_mode开启之后对PHP系统函数的影响

    system,passthru,exec,shell_exec,popen,phpinfo等等大部分的文件操作函数

    1. 数组函数 arsort(), sort(),krsort(), ksort() 的作用和应用场景。

    Sort: 对数组值做正向排序
    Arsort: 对数组进行逆向排序并保持索引关系
    Ksort:对数组按照键名排序
    Krsort:对数组按照键名逆向排序

    1. 类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数。

    serialize(), unserialize() 序列化、反序列化

    1. 写一个函数,实现字符串翻转。
    // 1,直接使用现有函数:strrev($str);
    strrev("Hello world!"); // 输出 "!dlrow olleH" ;
    // 2. 简单实现方式
    function myfunc_strrev($tmpstr){
        if (empty($tmpstr)) {
            return '';
        }
        $tmpArr = str_split($tmpstr);
        krsort($tmpArr);
        return implode('', $tmpArr);
    }
    // 3. 复杂实现方式
    function myfunc_strrev2($tmpstr){
        if (empty($tmpstr)) {
            return '';
        } elseif (strlen($tmpstr) === 1) {
            return $tmpstr;
        } else {
            $tmpLen = strlen($tmpstr);
            $retstr = '';
            for ($i=1; $i <= $tmpLen; $i++) { 
                $retstr .= substr($tmpstr, -$i, 1);
            }
            return $retstr;
        }
    }
    
    1. 写出如下程序的输出结果
    <?php
    $str1 = null;
    $str2 = false;
    echo $str1==$str2 ? '相等' : '不相等';
    $str3 = '';
    $str4 = 0;
    echo $str3==$str4 ? '相等' : '不相等';
    $str5 = 0;
    $str6 = '0';
    echo $str5===$str6 ? '相等' : '不相等';
    ?>
    

    答案:相等 相等 不相等(===,全等判断模式会判断变量类型)

    MYSQL部分

    1. SQL 中left join, right join和inner join的含义和区别是什么。

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
    right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
    inner join(等值连接) 只返回两个表中联结字段相等的行

    1. mysql_fetch_row() 和 mysql_fetch_array()的区别。

    mysql_fetch_array() 是 mysql_fetch_row() 的扩展版本。除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。
    另有一点必须指出,用 mysql_fetch_array() 并不明显比用 mysql_fetch_row() 慢,而且还提供了更多的值。
    另外还可以使用,mysql_fetch_assoc() 和用 mysql_fetch_array()加上第二个可选参数 MYSQL_ASSOC 完全相同。它仅仅返回关联数组。

    1. mysql中explain的详细用法,结合空间耗时长的SQL语句进行分析说明。
      TODO:思路:看其对explain用法的理解程度

    2. 用户图片表(图片id,用户id,相册id,图片名称,图片描述,上传时间,审核状态),请完用SQL完成以下需求:
      创建用户图片表,图片id为主键(字段名用英文);
      插入一条数据;
      把表中用户id为1001的用户的图片审核状态修改为0;
      查出用户id为1001的用户最近上传的10张图片;
      查出用户id为1001的用户一共上传过多少张图片;
      查出用户id为1001的用户图片数最多的相册;
      假设以上sql是业务中常用的sql,写出为该表创建索引的语句。
      思路:考察基本的SQL语法(表设计、建表、查询、索引建立)
      (1) create table user_pic (
      pic_id int(10) unsigned NOT NULL auto_increment,
      user_id int(10) unsigned NOT NULL,
      album_id int(10) unsigned NOT NULL,
      pic_name varchar(100) NOT NULL,
      pic_desc varchar(255) default '',
      up_time int(10) unsigned NOT NULL,
      status tinyint(2) unsigned NOT NULL default '1',
      PRIMARY KEY (pic_id)
      )ENGINE=InnoDB DEFAULT CHARSET=utf8;
      图片描述字段内容需要根据内容大小考虑单独拆表。
      (2) INSET INTO user_pic(user_id,album_id,pic_name,pic_desc,up_time,status) VALUES(1,2,'aaa','图片描述',10012312312,1);
      (3) UPDATE user_pic SET status = 0 WHERE user_id=1001;
      (4) SELECT pic_id,pic_name,pic_desc FROM user_pic WHERE user_id=1001 AND stauts=1 ORDER BY up_time DESC LIMIT 10 ;
      (5) SELECT count() as c FROM user_pic WHERE user_id=1001 AND stauts=1;
      (6) SELECT album_id,count(
      ) AS c FROM user_pic WHERE user_id=1001 AND status=1 GROUP BY album_id ORDER BY c DESC LIMIT 1;
      (7) 创建uid_stauts_uptime(user_id,stauts,up_time)联合索引,
      uid_stauts_album(user_id,stauts,album_id)联合索引

    Linux部分

    1. 输入文件的最后5行到另一个文件中。
      tail –n 5 a.txt > b.txt
    1. 查找文件中包含hello的行。
      Grep “hello” a.txt

    2. 查找和删除当前目录下所有目录名为CVS的子目录的命令。
      find ./ -name CVS -exec rm -rf {} ;

    3. Vi编辑器中,如何替换指定的字符串。
      :%s/aaaaa/bbbb/g
      或者使用Visual 的模式、手动寻找替换等

    设计、编程部分

    1. 设计一个Feed系统,主要数据包括用户、最新动态、评论及转发功能,要求系统有很高的实时性,能够支持千万级以上的访问量,如何设计存储架构,能够使用户方便的访问自身及好友最新动态及其评论?当出现突发事件时如何处理?如何实现搜索功能?
      思路:
      Feed就是一条twitter或一条好友动态。该功能面临的挑战是:每天产生成千上万条数据,数据推送的需要实时性等,做网站其实最大的难点就是对海量数据和高并发的处理。
      最常见的是这3种:推模式、拉模式、推拉结合模式。
    1. 使用PHP实现二分查找算法,参数是一个数组。
    //$k为要查找的关键字(注:待查找的数组元素为奇数个)
    function bin_sch($array, $low, $high, $k)
    { 
        if ($low <= $high)
        { 
            $mid = intval(($low+$high)/2); 
            if ($array[$mid] == $k)
            { 
                return true; 
            }
            elseif ($k < $array[$mid])
            { 
                return bin_sch($array, $low, $mid-1, $k); 
            }
            else
            { 
                return bin_sch($array, $mid+1, $high, $k); 
            } 
        } 
        return false; 
    }
    

    相关文章

      网友评论

          本文标题:PHP试题-1

          本文链接:https://www.haomeiwen.com/subject/jclubltx.html