澳门新葡萄京官网注册PHP初级面试题整理

今天看到一份PHP初级面试题给大家分享下,好像挺逗比的。其实自己也挺头疼面试的,老是搞那种理论。习惯百度谷歌的人,真想回答句自己百度去。

一、前端部分

编程题:

一、前端部分

Firefox和google浏览器使用的引擎是什么?(前段最起码最起码的基础,调流浏览器兼容性必知。也是使用CSS3和HTML5是必知)
Firefox 使用的是 Gecko,而 Safari 和 Chrome 浏览器使用的都是
Webkit。最新版的opera也使用了webkit
 
如何用CSS实现水平居中和垂直居中?(基础的基础)
水平居中:text-align:center;margin:0 auto
垂直居中:可以将容器设置为display:table,然后将子元素也就是要垂直居中显示的元素设置为display:table-cell,然后加上vertical-align:middle来实现。或者使用{top:50%;transform:
translateY(-50%);}
以上都是不完美实现,但都是基础。根本没思路的是骗子。
 
如何处理jQuery冲突?(基础的基础)
jQuery.noConflict(); 或者用闭包
(function($){})(jQuery);
 
二、数据存储部分
怎样定位MySQL中效率较低的语句?
使用show full processlist和慢查询日志。
 
数据库的增量备份主从服务做过没?
关键点在binlog,也就是二进制日志。
 
MYISAM引擎和INNODB引擎的对比?
关键点:表锁行锁,是否支持事务,索引的存储,适用场景
 
如果面试者简历中提到了熟悉memcache,那么就问:memcache的默认端口是啥?Value的最大长度是啥?默认的缓存有效期是多久?
答案:端口:11211
,value最大1M,有效期30天。这三个问题有两个回答错的就是骗子。
如果提到redis,就问redis的最大value值是多少?存储有序和无序集合用哪种数据类型?哪个命令发起事务?哪两种持久化方式?
答案:value最大512M,有序用list和sorted set,无序用
set;发起事务用multi;持久化方式为内存快照和日志追加。
 
PHP部分:

  1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名

Firefox和google浏览器使用的引擎是什么?(前段最起码最起码的基础,调流浏览器兼容性必知。也是使用CSS3和HTML5是必知)Firefox
使用的是 Gecko,而 Safari 和 Chrome 浏览器使用的都是
Webkit。最新版的opera也使用了webkit如何用CSS实现水平居中和垂直居中?水平居中:text-align:center;margin:0
auto垂直居中:可以将容器设置为display:table,然后将子元素也就是要垂直居中显示的元素设置为display:table-cell,然后加上vertical-align:middle来实现。或者使用{top:50%;transform:
translateY(-50%);}以上都是不完美实现,但都是基础。根本没思路的是骗子。如何处理jQuery冲突?jQuery.noConflict();
或者用闭包(function($){})(jQuery);二、数据存储部分怎样定位MySQL中效率较低的语句?使用show
full
processlist和慢查询日志。数据库的增量备份主从服务做过没?关键点在binlog,也就是二进制日志。MYISAM引擎和INNODB引擎的对比?关键点:表锁行锁,是否支持事务,索引的存储,适用场景如果面试者简历中提到了熟悉memcache,那么就问:memcache的默认端口是啥?Value的最大长度是啥?默认的缓存有效期是多久?答案:端口:11211
,value最大1M,有效期30天。这三个问题有两个回答错的就是骗子。如果提到redis,就问redis的最大value值是多少?存储有序和无序集合用哪种数据类型?哪个命令发起事务?哪两种持久化方式?答案:value最大512M,有序用list和sorted
set,无序用
set;发起事务用multi;持久化方式为内存快照和日志追加。PHP部分:

类的自动加载怎么实现?
spl_autoload_register,回答__autoload 的是没做过,人云亦云的瞎扯。
 
列举几个PHP的魔术方法?
__set(),__get(),__construct(),__call(),__toString()。一共有14,5个,回答不出4个的说熟悉面向对象是在瞎扯。
 
正则表达式只能怪不区分大小写的修饰符是哪个?不用正则如何判断email格式是否正确?
答案:i;使用filter系列函数,如果能输出这个系列函数的缺陷更佳。
 
4.MVC的基本流程,每层都干些什么?自己是否实现过MVC框架?
 
 
服务器及其它

例如:http://www.sina.com.cn/abc/de/fg.PHP?id=1需要取出
php 或 .php

类的自动加载怎么实现?spl_autoload_register,回答__autoload
的是没做过,人云亦云的瞎扯。列举几个PHP的魔术方法?__set(),__get(),__construct(),__call(),__toString()。一共有14,5个,回答不出4个的说熟悉面向对象是在瞎扯。正则表达式只能怪不区分大小写的修饰符是哪个?不用正则如何判断email格式是否正确?答案:i;使用filter系列函数,如果能输出这个系列函数的缺陷更佳。4.MVC的基本流程,每层都干些什么?自己是否实现过MVC框架?服务器及其它

linux中类似win的资源管理器命令是哪个?怎样查看开机自启动有哪些服务?计划任务是哪个服务实现?删除非空文件夹用什么命令?
答案:top;chkconfig –list;crontab;rm -r;
 
平常经常去的技术社区。

答案1:

linux中类似win的资源管理器命令是哪个?怎样查看开机自启动有哪些服务?计划任务是哪个服务实现?删除非空文件夹用什么命令?答案:top;chkconfig
list;crontab;rm -r;平常经常去的技术社区。

再附一款

function getExt($url){

再附一款

*
1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的URL记录在预定义变量(2)中。
2.执行程序段<?php echo 8%(-2) ?>将输出(3)。
3.在HTTP 1.0中,状态码 401
的含义是(4);如果返回“找不到文件”的提示,则可用 header
函数,其语句为(5)。
4.数组函数 arsort 的作用是(6);语句
error_reporting(2047)的作用是(7)。
5.PEAR中的数据库连接字符串格式是(8)。
6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):(9)。
7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句(10)动态装载PHP模块,
然后再用语句(11)使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
8.语句 include 和 require
都能把另外一个文件包含到当前文件中,它们的区别是(12);为了避免多次包含同一文件,可以用语句(13)来代替它们。
9.类的属性可以序列化后保存到 session
中,从而以后可以恢复整个类,这要用到的函数是(14)。
10.一个函数的参数不能是对变量的引用,除非在php.ini中把(15)设为on.
11.SQL 中LEFT JOIN的含义是(16)。
如果 tbl_user记录了学生的姓名(name)和学号(ID),
tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),
要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句(17)。

$arr = parse_url($url);

*
1.在PHP中,当前脚本的名称记录在预定义变量中;而链接到当前页面的URL记录在预定义变量中。2.执行程序段?php
echo 8%(-2) ?将输出。3.在HTTP 1.0中,状态码 401
的含义是;如果返回找不到文件的提示,则可用 header
函数,其语句为。4.数组函数 arsort 的作用是;语句
error_reporting(2047)的作用是。5.PEAR中的数据库连接字符串格式是。6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本:。7.以Apache模块的方式安装PHP,在文件中首先要用语句动态装载PHP模块,然后再用语句使得Apache把所有扩展名为php的文件都作为PHP脚本处理。8.语句
include 和 require
都能把另外一个文件包含到当前文件中,它们的区别是;为了避免多次包含同一文件,可以用语句来代替它们。9.类的属性可以序列化后保存到
session
中,从而以后可以恢复整个类,这要用到的函数是。10.一个函数的参数不能是对变量的引用,除非在php.ini中把设为on.11.SQL
中LEFT JOIN的含义是。如果
tbl_user记录了学生的姓名(name)和学号(ID),tbl_score记录了学生的学号(ID)和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句。

12.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须(18)。

$file = basename($arr[‘path’]);

12.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须。

 

$ext = explode(“.”,$file);

13.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。14.简述论坛中无限分类的实现原理。15.设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。

13.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
14.简述论坛中无限分类的实现原理。
15.设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。

return $ext[1];

//答案:

//答案(填空):

}

  1. echo $_SERVER[‘PHP_SELF’]; echo $_SERVER[HTTP_REFERER];2. 03.
    (4)未授权 (5) header(HTTP/1.0 404 Not Found);4.
    (6)对数组进行逆向排序并保持索引关系 (7)All errors and warnings5.
    没弄明白6. /script[^].*?.*?/script/si7.(10) LoadModule php5_module
    D:/xampp/apache/bin/php5apache2.dll (11) AddType application/x- .phps
    AddType application/x- .php .php5 .php4 .php3 .phtml8.(12)
    发生异常时include产生警告require产生致命错误 (13)
    require_once()/include_once()9. serialize() /unserialize()10.
    allow_call_time_pass_reference11. (16) 自然左外连接 (17) select name
    , count(score) as sum_score from tbl_user left join tbl_score on
    tbl_user.ID=tbl_score.ID group by tbl_user.ID12.
    结束标识符所在的行不能包含任何其它字符除;
  1. echo $_SERVER[‘PHP_SELF’]; echo $_SERVER[“HTTP_REFERER”];
  2. 0
  3. (4)未授权 (5) header(“HTTP/1.0 404 Not Found”);
  4. (6)对数组进行逆向排序并保持索引关系    (7)All errors and warnings
  5. 没弄明白
  6. /<script[^>].*?>.*?</script>/si
    7.(10)    LoadModule      php5_module
    “D:/xampp/apache/bin/php5apache2.dll”
     
         (11) AddType application/x-httpd-php-source
    .phps
            AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml
    8.(12) 发生异常时include产生警告require产生致命错误    (13)
    require_once()/include_once()
  7. serialize() /unserialize()
  8. allow_call_time_pass_reference
  9. (16) 自然左外连接
           (17) select name ,
    count(score) as sum_score from tbl_user left join tbl_score on
    tbl_user.ID=tbl_score.ID    group
    by tbl_user.ID
  10. 结束标识符所在的行不能包含任何其它字符除”;”

答案2:

13.

 

function getExt($url) {

/***
遍历目录,结果存入数组。支持php4及以上。php5以后可用scandir()函数代替while循环。*
@param string $dir* @return array*/function my_scandir($dir){ $files
= array(); if ( $handle = opendir($dir) ) { while ( ($file =
readdir($handle)) !== false ) { if ( $file != .. $file != . ) { if (
is_dir($dir . / . $file) ) { $files[$file] = rec_scandir($dir . / .
$file); }else { $files[] = $file; } } } closedir($handle); return
$files; }}

13.

$url = basename($url);

/**
*
遍历目录,结果存入数组。支持php4及以上。php5以后可用scandir()函数代替while循环。
* @param string $dir
* @return array
*/
function my_scandir($dir)
{
     $files = array();
     if ( $handle =
opendir($dir) ) {
         while ( ($file = readdir($handle)) !== false ) {
             if ( $file != “..” && $file != “.” ) {
                 if ( is_dir($dir . “/” . $file) ) {
                     $files[$file] = rec_scandir($dir . “/” .
$file);
                 }else {
                     $files[] = $file;
                 }
             }
         }
         closedir($handle);
         return $files;
     }
}

$pos1 = strpos($url,”.”);

$pos2 = strpos($url,”?”);

if(strstr($url,”?”)){

return substr($url,$pos1 + 1,$pos2 -$pos1 – 1);

} else {

return substr($url,$pos1);

}

}

  1. 在 HTML 语言中,页面头部的
    meta标记可以用来输出文件的编码格式,以下是一个标准的 meta 语句

请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的
charset 部分值改为 big5

请注意:

  1. 需要处理完整的 html 页面,即不光此 meta 语句

  2. 忽略大小写

  3. ‘ 和 ” 在此处是可以互换的

  4. ‘Content-Type’ 两侧的引号是可以忽略的,但 ‘text/html; charset=gbk’
    两侧的不行

  5. 注意处理多余空格

$str=File_get_contents(‘xxx.php’);

Preg_replace(‘//’,‘//’,$str)

  1. 写一个函数,算出两个文件的相对路径

如 $a =’/a/b/c/d/e.php’;

$b =’/a/b/12/34/c.php’;

计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上

答:function getRelativePath($a, $b) {

$returnPath = array(dirname($b));

$arrA = explode(‘/’, $a);

$arrB = explode(‘/’, $returnPath[0]);

for ($n = 1, $len = count($arrB); $n <$len; $n++) {

if ($arrA[$n] != $arrB[$n]) {

break;

}

}

if ($len – $n > 0) {

$returnPath = array_merge($returnPath,array_fill(1, $len – $n, ‘..’));

}

$returnPath = array_merge($returnPath,array_slice($arrA, $n));

return implode(‘/’, $returnPath);

}

echo getRelativePath($a, $b);

填空题:

1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量__$_SERVER[‘PHP_SELF’]__中;而链接到当前页面的URL记录在预定义变量__$_SERVER[‘HTTP_REFERER’]__

2.执行程序段将输出__0__。

3.在HTTP 1.0中,状态码 401
的含义是__未被授权__;如果返回“找不到文件”的提示,则可用 header
函数,其语句为__header(‘location:xxx.php’)__。

4.数组函数 arsort
的作用是__对数组进行逆向排序并保持索引关系__;语句error_reporting(2047)的作用是__报告所有错误和警告__。

5.PEAR中的数据库连接字符串格式是__。

6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把scrīpt标记及其内容都去掉):preg_replace(“/].*?>.*?/si”,”newinfo”,
$script);

7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。

LoadModule php5_module “c:/php/php5apache2.dll” ,

AddTypeapplication/x-httpd-php .php,

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

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

10.一个函数的参数不能是对变量的引用,除非在php.ini中把__allow_call_time_pass_reference
boolean__设为on.

11.SQL中LEFT JOIN的含义是__自然左外链接__。如果
tbl_user记录了学生的姓名(name)和学号(ID),tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)

和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句__select 
*  fromtbl_user left jion tbl_score on
tbl_user.id=tbl_score.uid__。

12.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须____。

<<

Sdashkdhklahdklh

EOT

编程题:

13.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。

答:

function my_scandir($dir)

{

$files = array();

if ( $handle = opendir($dir) ) {

while ( ($file = readdir($handle)) !==false ) {

$file=$dir.’/’.$file

if ( $file != “..”&& $file != “.” ) {

if ( is_dir($dir .”/” . $file) ) {

$files[$file] =scandir($dir . “/” . $file);

}else {

$files[] = $file;

}

}

}

closedir($handle);

return $files;

}

}

14.简述论坛中无限分类的实现原理。

答:

/*

数据表结构如下:

CREATE TABLE `category` (

`categoryID` smallint(5) unsigned NOT NULLauto_increment,

`categoryParentID` smallint(5) unsigned NOTNULL default ‘0’,

`categoryName` varchar(50) NOT NULL default”,

PRIMARY KEY (`categoryID`)

) ENGINE=MyISAM DEFAULTCHARSET=gbk;

INSERT INTO `category` (`categoryParentID`, `categoryName`) VALUES

(0, ‘一级类别’),

(1, ‘二级类别’),

(1, ‘二级类别’),

(1, ‘二级类别’),

(2, ‘三级类别’),

(2, ‘333332’),

(2, ‘234234’),

(3, ‘aqqqqqd’),

(4, ‘哈哈’),

(5, ‘66333666’);

*/

//指定分类id变量$category_id,然后返回该分类的所有子类

//$default_category为默认的选中的分类

functionGet_Category($category_id = 0,$level = 0, $default_category =
0)

{

global $DB;

$sql = “SELECT * FROM category ORDER BYcategoryID DESC”;

$result = $DB->query( $sql );

while ($rows = $DB->fetch_array($result))

{

$category_array[$rows[categoryParentID][$rows[categoryID]=
array(‘id’ => $rows[categoryID], ‘parent’ =>
$rows[categoryParentID],’name’ => $rows

[categoryName]);

}

if (!isset($category_array[$category_id]))

{

return “”;

}

foreach($category_array[$category_id] AS $key=> $category)

{

if ($category[‘id’] == $default_category)

{

echo “

}else

{

echo “

}

if ($level > 0)

{

echo “>” . str_repeat( “”, $level ) . ” ” . $category[‘name’]
.”n”;

}

else

{

echo “>” . $category[‘name’] .”n”;

}

Get_Category($key, $level + 1,$default_category);

}

unset($category_array[$category_id]);

}

/*

函数返回的数组格式如下所示:

Array

(

[1] => Array ( [id] => 1 [name] => 一级类别[level]
=> 0 [ParentID] => 0 )

[4] => Array ( [id] => 4 [name] => 二级类别[level]
=> 1 [ParentID] => 1 )

[9] => Array ( [id] => 9 [name] => 哈哈[level] => 2
[ParentID] => 4 )

[3] => Array ( [id] => 3 [name] => 二级类别[level]
=> 1 [ParentID] => 1 )

[8] => Array ( [id] => 8 [name] =>aqqqqqd [level] =>
2 [ParentID] => 3 )

[2] => Array ( [id] => 2 [name] => 二级类别[level]
=> 1 [ParentID] => 1 )

[7] => Array ( [id] => 7 [name] =>234234 [level] =>
2 [ParentID] => 2 )

[6] => Array ( [id] => 6 [name] =>333332 [level] =>
2 [ParentID] => 2 )

[5] => Array ( [id] => 5 [name] => 三级类别[level]
=> 2 [ParentID] => 2 )

[10] => Array ( [id] => 10 [name] =>66333666 [level]
=> 3 [ParentID] => 5 )

)

*/

//指定分类id,然后返回数组

functionCategory_array($category_id = 0,$level=0)

{

global $DB;

$sql = “SELECT * FROM category ORDER BYcategoryID DESC”;

$result = $DB->query($sql);

while ($rows = $DB->fetch_array($result))

{

$category_array[$rows[‘categoryParentID’][$rows[‘categoryID’]=
$rows;

}

foreach ($category_array AS $key=>$val)

{

if ($key == $category_id)

{

foreach ($val AS $k=> $v)

{

$options[$k] =

array(

‘id’ => $v[‘categoryID’], ‘name’ =>$v[‘categoryName’], ‘level’
=> $level, ‘ParentID’=>$v[‘categoryParentID’]

);

$children = Category_array($k, $level+1);

if (count($children) > 0)

{

$options = $options + $children;

}

}

}

}

unset($category_array[$category_id]);

return $options;

}

?>

class cate

{

function Get_Category($category_id =0,$level = 0, $default_category =
0)

{

echo $category_id;

$arr = array(

‘0’ => array(

‘1’ =>array(‘id’ => 1, ‘parent’ => 0, ‘name’ => ‘1111’),

‘2’ =>array(‘id’ => 2, ‘parent’ => 0, ‘name’ => ‘2222’),

‘4’ =>array(‘id’ => 4, ‘parent’ => 0, ‘name’ => ‘4444’)

),

‘1’ => array(

‘3’ =>array(‘id’ => 3, ‘parent’ => 1, ‘name’ => ‘333333’),

‘5’ =>array(‘id’ => 5, ‘parent’ => 1, ‘name’ => ‘555555’)

),

‘3’ => array(

‘6’ =>array(‘id’ => 6, ‘parent’ => 3, ‘name’ => ‘66666’),

‘7’ =>array(‘id’ => 7, ‘parent’ => 3, ‘name’ => ‘77777’)

),

‘4’ => array(

‘8’ =>array(‘id’ => 8, ‘parent’ => 4, ‘name’ => ‘8888’),

‘9’ =>array(‘id’ => 9, ‘parent’ => 4, ‘name’ => ‘9999’)

)

);

if (!isset($arr[$category_id]))

{

return “”;

}

foreach($arr[$category_id] AS $key=> $cate)

{

if ($cate[‘id’] ==$default_category)

{

$txt = “

}else{

$txt = “

}

if ($level > 0)

{

$txt1 = “>” .str_repeat( “-“, $level ) . ” ” . $cate[‘name’]
.”n”;

}else{

$txt1 = “>” .$cate[‘name’] . “n”;

}

$val = $txt.$txt1;

echo $val;

self::Get_Category($key,$level + 1, $default_category);

}

}

function getFlush($category_id =0,$level = 0, $default_category = 0)

{

ob_start();

self::Get_Category($category_id,$level, $default_category);

$out = ob_get_contents();

ob_end_clean();

return $out;

}

}

$id =$_GET[‘id’];

echo””;

$c = new cate();

//$c->Get_Category();

$ttt=  $c->getFlush($id,’0′,’3′);

echo $ttt;

echo””;

?>

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。互联网+时代,时刻要保持学习,携手千锋PHP,Dream
It Possible。

发表评论

电子邮件地址不会被公开。 必填项已用*标注