美文网首页
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