美文网首页
PHP常见面试题及答案

PHP常见面试题及答案

作者: 欣博客 | 来源:发表于2018-07-10 13:15 被阅读0次

一.必答题
1.(算法题)有1~5000一组乱序数列,请使用伪代码对该数进行排列.

<?php
// $arr=array(1,2,3,4,5,6,7,8,9.....5000);
$arr = range(1, 50); //生成1-5000数组
shuffle($arr); //乱序

//冒泡排序法
function bubbleSort($arr)
{
    $total = count($arr);
    for ($i = 0; $i < $total; $i++) {
        for ($j = 0; $j < $total - $i - 1; $j++) {
            if ($arr[$j] > $arr[$j + 1]) {
                $tmp         = $arr[$j];
                $arr[$j]     = $arr[$j + 1];
                $arr[$j + 1] = $tmp;
            }
        }
    }
    return $arr;
}

//快速排序
function quick($arr)
{
    $total = count($arr);
    $left  = [];
    $right = [];
    if ($total <= 1) {
        return $arr;
    }
    for ($i = 1; $i < $total; $i++) {
        if ($arr[0] > $arr[$i]) {
            $left[] = $arr[$i];
        } else {
            $right[] = $arr[$i];
        }
    }
    $left  = quick($left);
    $right = quick($right);
    return array_merge($left, [$arr[0]], $right);
}

print_r(bubbleSort($arr));
print_r(quick($arr));

2.(算法题)公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡,请用伪代码写出求公鸡,母鸡和小鸡的数目
答案

<?php
for($y=0;$y<=20;$y++){
    for($x=0;$x<=(100/3);$x++){
        for($z=0;$z<=100;$z++){
            if($x+$y+$z==100 && (($x*3)+($y*5)+($z/3))==100){
                echo '公鸡'.$x.",母鸡".$y.",小鸡".$z."<br>";
            }
        }
    }
}

3.(算法题)1,1,2,3,5,8,13,21,34.。。。 求第30位的数是多少,请用伪代码描述其实现方法

<?php
$f1=1;
$f2=1;
for($i=3;$i<=30;$i++){
    $f3=$f1+$f2;
    $f1=$f2;
    $f2=$f3;
}
echo $f3;

二.基础选答题

1.(基础题)请描述你经常使用的php函数及其主要作用(最少5个)

array_pop() 弹出数组的最后一个元素
explode() 按特点符号,分隔字符串,返回数组
implode() 按特点符号,连接数组成为字符串
substr() 取出字符串中的一部分
strrpos() 获得字符出现的最后的个位置

2.(基础题)请描述一种你常用的开发框架(语言不限), 主要使用方法。

thinkphp laravel
(如果框架是自己开发的,请用类图大致描述框架结构)

3.(基础题)请描述一种你常用的ajax调用方法。
$.ajax $.post $.get
4.(基础题)请描述你常用的HTML标记及其主要作用。(最少5种)
<pre></pre> 原样输出
<table></table> 表格
<script></script> js脚本
<style></style> 页面模式 
<form> 表单
<input type=”text” /> input标记
</form> 表单结束
<div></div> div
<span></span> 行内
<select> 下拉列表 
</select> 下拉列表结束
5.(基础题) 请描述你常用的javascript函数。
document.getElementById();
document.getElementsByTag();
document.getElementsByName();
setInterval()
setTimeOut()

三.论述与扩展选答题——论述与扩展题各选一道作答

1.(论述题)请用类屯举例描述mvc结构

M是model模型,业务逻辑层,V是视图view,C是控制器

2.(论述题)请用简单的语言描述一下HTTP协议

HTTP协议就是客户机与服务器的请求与响应。

  1. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。
  2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
  3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
    客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
3.(扩展题)请描述一下在linux下php的编译过程
  1. 获得源码包
  2. 解压源码包
  3. 使用configure检查并配置安装需要的系统环境
  4. Make编译源代码并生成安装文件
  5. Make install命令进行安装
    整合apache与PHP
4.(扩展题)请描述一下本地字节序于网络字节序的区别

字节序:大于一个字节的数据 ,在内存中的存放顺序。
本地字节序:与系统有关,不同的CPU有不同的字节序。分为两种:小尾字节序就是低位字节排放在内存的低端,高位字节排放在内存的高端。大尾字节序就是高位字节排放在内存的低端,低位字节排放在内存的高端
网络字节序:TCP/IP各层协议将字节序定义为大尾,因此TCP/IP协议中使用的字节序通常称之为网络字节序。

5.请说明表单中 get与post提交方法的区别?

GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。
POST是通过HTTP POST机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
GET传送的数据量较小,不能大于2KB。POST传送的数据量较大,一般被默认为不受限制。但理论上,一般认为不能超过100KB

6.请说明php中include,require,include_once,require_once的区别?

include函数:会将指定的文件读入并且执行里面的程序;
require函数:会将目标文件的内容读入,并且把自己本身代换成这些读入的内容;
include_once 函数:在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次;
require_once 函数:和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
include与require除了在处理引入文件的方式不同外,最大的区别就是:include在引入不存文件时产生一个警告且脚本还会继续执行,而require则会导致一个致命性错误且脚本停止执行。

7.请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?

按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。

8.请说明php中mysql_connect 和 mysql_pconnect两个函数的区别?

mysql_pconnect() 函数打开一个到 MySQL 服务器的持久连接。

mysql_connect() 函数打开非持久的 MySQL 连接。
两者的区别主要有两个:

  1. 在进行数据库连接时,函数会先找同一个host, 用户和密码的persistent(持续的)的链接,如果能找到,则使用这个链接而不返回一个新的链接。

  2. mysql_pconnect()创建的数据库连接在脚本执行完毕后仍然保留,可以被后来的代码继续使用,mysql_close()函数也不会关闭mysql_pconnect()创建的链接。

6.请用正则表达式写出一个函数验证ip地址的格式是否正确?

/^((25[0-5]|2[0-4]d|1d{2}|d{1,2}).){3}(25[0-5]|2[0-4]d|1d{2}|d{1,2})$/

7.SQL查询语句如下:select * from table where (ID = 10) or (ID = 32) or (ID = 22) or (ID = 76) or (ID = 13) or (ID = 44)让结果按10,32,22,76,13,44的顺序检索出来,请问如何书写?
select * from table where (ID = 10) or (ID = 32) or (ID = 22) or (ID = 76) or (ID = 13) or (ID = 44)  order by field(ID,10,32,22,76,13,44)
8.请写出以下三个程序的执行结果
<?php
$empty = '';
$null = NULL;
$bool = FALSE;
$notSet;
$array = array();
$a = "hello";
$b = &$a;
unset($b);
$b = "world"; 
echo $a;  //hello

<?php
$empty = '';
$null = NULL;
$bool = FALSE;
$notSet;
$array = array();

$a = 1;
$x = &$a;
$b = $a++; 

echo $b;
//1


<?php
$a = 1;
fadd($a);
echo $a;
 
function fadd($a){
$a +=100;
}
 
//1

9.请用任何一种语言写出一个函数,能够遍历一个文件夹下的所有文件及文件夹。

<?php
function my_candir($dir)
{
    $files = [];
    if ($handle = opendir($dir)) {
        while (($file = readdir($handle))) {
            
            if ($file != '..' && $file != '.') {
                if (is_dir($dir . '/' . $file)) {
                    $files[$file] = my_candir($dir . '/' . $file);
                    
                } else {
                    $files[] = $file;
                    
                }
            }
        }
        closedir($handle);
        return $files;
    }
}


print_r(my_candir("/Users/admin/Desktop/q"));

相关文章

网友评论

      本文标题:PHP常见面试题及答案

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