PHP 精典面試題(附答案)

1.輸出Mozilla/4.0(compatible;MISIE5.01;Window NT 5.0)是,可能輸出的語句是?javascript

  A:$_SERVER['HTTP_USER_AGENT_TYPE'];php

  B: $_SERVER['HTTP_USER_AGENT'];html

  C: $_SERVER['USER_ACENT'];前端

  D: $_SERVER['AGENT'];java

2.下面功能php沒法實現的是?mysql

  A: 服務端腳本運行;linux

  B: 命令行腳本運行;nginx

  C: 客戶端圖形界面(GUI)程序;git

  D: 瀏覽器執行DOM操做web

3.下面說法不正確的是?

  A: PHP有四種標量類型:布爾型,整型,浮點型,字符串;

  B: 浮點型與雙精度是同一種類型

  C: 複合類型包括:數組,對象,資源;

  D: 僞類型:混合型,數字型,回調;

4.執行代碼後

<?php
      echo function_exists('print');
  ?>

輸出的結果是?

  A: 空

  B: true

  C: false

  D: FALSE

5.下面不是PHP語法的組成部分的函數是?

  A: array

  B: eval

  C: each

  D: list

6.執行下面代碼的結果是什麼?

<?php
      $bool = true;
      echo gettype($bool);
      echo is_string($bool);
  ?>

  A: boolean  

  B: boolean0

  C: booleanFalse

  D: booleanfalse

7.寫出下面程序代碼執行結果

<?php
      $a = 12;
      $b = 012;
      $c = 0x12;
      echo $a,"\n",$b,"\n",$c;
  ?>

  A: 22

  B: 10

  C: 6

  D: 12

8下面代碼的執行結果是?

<?php
      echo 1+2+"3+5+6";
  ?>

  A: 0

  B: 3

  C: 6

  D: "33+4+5"

9.下面代碼加入下面那個函數後返回true?

return ? == 'A';

  A: ord(65)

  B: chr(65)

  C: 65+"

  D: "65+

10.下面代碼輸出正確的是?

  

<?php
      $a = array(1=>5,5=>8,22,2=>'8',81);
      echo $a[7];
      echo $a[6];
      echo $a[3];
  ?>

  A: 空 22 81

  B: 空 81 22

  C: 81 22 空

  D: 空 空 空

11.下面代碼的輸出結果是?

  

<?php
      $a[bar] = 'hello';
      echo $a[bar];
      echo $a['bar'];
  ?>

  A: hello

  B: 空空

  C: 報錯

  D: hello hello

12.寫出下面代碼的結果:

  

<?php
      echo 1>>0;
      echo 2>>1;
      echo 3<<2;
  ?>

  A: 012

  B: 106

  C: 1112

  D: 123

13.下面代碼執行結果?

  

<?php
      for($i=1;$i<10;$i++){
          print $i;
      }
  ?>

  A: 0123456789

  B: 01234567890

  C: 無輸出

  D: 死循環

14.下面對於echo,print 的描述正確的是?

  A: echo,print均可以打印多個參數

  B: print 能夠打印多個參數,echo不能夠

  C: echo能夠打印多個參數,print不能夠

  D: echo,print 都不能夠打印多個參數

15.對於如下的代碼

  

<?php
        $fruits = array('strawberry'=>'red','banana'=>'yellow'); 
   ?>

  可以正確獲得結果'yellow' 的代碼是?

  A: echo "A banana is {$fruits['banana']}";

  B: echo "A banana is $fruits['banana']";

  C: echo "A banana is {$fruits[banana]}";

  D: echo "A banana is $fruits[banana]";

16.下面代碼執行結果是?

  

<?php
        function change(){
            static $i = 0;
            $i++;
            return $i;
        }
        print change();
        print change();
   ?>
正確答案:1,2

17.

<?php 
          $foo = 'test';
          $bar = <<<EOT
              $foo bar
          EOT;
          echo $bar;
  ?>

上面語句輸出的結果是?

  A: $foo bar;

  B: 'EOT' $foo bar EOT

  C:  test bar

  D: 'EOT' test bar EOT

18.

$a = 3;
$b = 4;
 if($a || $b = 5){
   echo 'tudou';
 }
    

  $b的值是?

  A: 4;

  B: 5

  C: 3;

  D: false;

19.下面那個表達式不能將兩個字符串$s1和$s2串聯成一個單獨的字符串?

  A: $s1+$s2

  B: "{$s1}{$s2}"

  C: $s1.$s2

  D: implode(",array($s1,$s2))

    E: 以上方法都能實現

20.下面的腳本運行之後,$array數組所包含的值是什麼?

<?php
$array = array('1','1');
  foreach($array as $k => $v){
      $v = 2;
  }
?>

  A: array('2','2')

  B: array('1','1')

  C: array(2,2)

  D: array(Null,Null)

21.cron後臺常駐程序(daemon)用於?

  A: 負責文件在網絡中共享

  B: 管理打印子系統Manages theprinting subsystem

  C: 跟蹤管理系統信息和錯誤

  D: 管理系統平常任務的調度(scheduing)

22.怎麼了解您在當前的目錄下還有多大空間?

  A: Use df

  B: Use du /

  C: Use du .

  D: Use df .

23.有一個備份程序mybackup,須要在週一至週五下午一點和晚上八點各運行次,下面那一條crontab的項能夠完成工做?

  A: 0 13,20 * * 1,5 mybackup

  B: 0 13,20 * * 1,2,3,4,5 mybackup

  C: *13,20 * * 1,2,3,4,5, mybackup

  D: 0 13,20 1,5 * * mybackup

24.下面那條命令能夠吧f1.txt複製爲f2.txt ?

  A: cp f1.txt f2.txt

  B: cat f1.txt|f2.txt

  C: cat f1.txt||f2.txt

  D: copy f1.txt|f2.txt

25.使用命令能夠查看linux的啓動信息?

  A: mesg -d

  B: dmesg

  C: cat /etc/mesg

  D: cat /var/mesg

26.在vi 中退出不保存的命令是?

  A: :qt

  B: :r

  C: :wq

  D: :q!

27.下面那個選項沒有將john添加到users數組中?

  A: $users[] = 'john';

  B: array_add($users,'john');

  C: array_push($users,'john');

  D: $users ||= 'john';[a,c]

28.下列不屬於Javascript語法關鍵字/保留字的是?

  A: var

  B: $

  C: functiom

  D: while

29.下列不屬於JavaScript DOM事件的是?

  A: onclick

  B: onkeydown

  C: onbodyload

  D: onmouseover

30.下列PHP函數中不能直接在頁面上輸出字符串的函數是?

  A: echo

  B: sprintf

  C: printf

31.在PHP中,'+'操做符的功能不包括

  A: 字符串鏈接

  B: 數組數據合併

  C: 變量數據相加

32.用php獲取當前時間並打印,打印格式爲2006-5-10 22:21:21

echo date('Y-n-m H:i:s');

33,字符串轉數組,數組轉字符串,字符串截取,字符串替換,字符串查找的函數分別是什麼?

  字符串轉數組函數:

    str_split()

    explode()

  數組轉字符串

    join()

    implode()

  字符串截取

    substr()

    mb_substr()

  字符串替換

    str_replace()

    preg_replace()

  字符串查找

    preg_match()

    preg_match_all()

    strops()

    strrops()

34.解釋一下php類中pretect,public,private,interface,abstract,final,static的含義

  pretect:受保護的

  public:公有的

  private:私有的

  interface:接口

  abstract:抽象類或者抽象方法

  final:最終版本的類或者方法

  static:靜態屬性或者方法

35.如何把字符串'08/26/2004'替換成'2004-08-26'?

  

$date = '08/26/2004';
echo preg_replace('/(\d+)\/(\d+)\/(\d+)/',$3-$1-$2,$date);

36.從表login中選出name字段包含admin的前10條結果全部信息的sql語句

  

select * from login where name '%admin%' limit 10;

 

37.解釋左鏈接,右鏈接,內鏈接,索引:

  左鏈接: left join on

  左鏈接是以左邊的表爲主表,先輸出左邊表的全部數據,右邊匹配輸出,不匹配的爲null

  右鏈接:right join on

  右鏈接是以右邊的表爲主表,先輸出右邊表的全部數據,左邊匹配輸出,不匹配的爲null

  內鏈接:inner join on

  內鏈接必須同時符合條件的內容纔會輸出,相等於普通的多表查詢

38.寫一個函數。儘量高效的。從一個標準的url裏取出文件的擴展名,已知url以下: $url = 'http://www.baidu.com/web/index.php?id=4&name=lisi';

  

$arr = parse_url($url);
$arr2 = path_info($arr['path']);
$ext = $arr2['extension'];

39.解決網站服務器大流量高併發的問題:

  把apache服務器(3000)換成nginx服務器(30000)

  修改Apache或者nginx的默認配置,把其中的併發數調到最高

  多增長几臺服務器同時對用戶提供服務(負載均衡技術)

  減小客戶在服務器上的連接時間斷開時間

  php代碼的優化

  數據緩存(文件緩存,或者內存緩存redis,memcache等)

40.如何設計或者配置mysql ,才能達到高效的目的

  服務器優化:max_connections = 1500 併發連接數調到最大

        wait_timeout = 10 連接關閉時間

  表優化:字段索引:主鍵索引,惟一索引,普通索引

  負載均衡(mysql主從複製)

41.如何進行防sql注入

  表單儘可能使用post提交

  使用HTTP_REFERER檢查源文件

  開啓addslashes在特殊符號前加\

  使用htmlspecialchars對字符進行轉義

42.防止盜鏈

  使用HTTP_REFERER檢查源文件

43.用PHP寫出一個安全的用戶登陸系統須要注意哪些方面?

  表單使用post提交

  限制錯誤登陸次數

  使用驗證碼防止機器破解

  同時作先後端表單驗證

44.使用過哪些版本控制工具?

  svn

  git

45.什麼是面向對象?主要特徵是什麼?

  面向對象是程序的一種設計方式,它利用提升程序的重用性,使程序結構更加清晰

  主要特徵:封裝,繼承,多態

46.HTTP狀態中302,403,500代碼的含義:

  302重定向,403服務器拒絕訪問,500服務器內部錯誤

47.linux下創建壓縮包,解壓縮包的命令是?

  tar czf test.tar.gz test.php

  tar xzf test.tar.gz

48.myisam和innodb的基本區別:

  在增刪改查方面,myisam要優於innodb表引擎,當數據量特別大時,他們的速度相差不大,
       innodb支持事務,存儲過程,行鎖等等

49.isset()和empty()的區別:

  isset 是判斷變量是否存在,是否認義

  empty 是判斷變量是是否爲空

50.如何在頁面之間傳遞變量(至少兩種)

  get,post,ajax,curl,cookie,session

51.寫出匹配url的正則表達式:

$url = "wwww.baidu.com";
preg_match('/^(\w+\.)?\w+\.\w+$/',$url);

52.請寫出常見的排序算法,並用PHP實現冒泡排序,將數組$a = array()按照從小到大的方式進行排序:

  冒泡排序,快速排序

function mysort($arr){
            for($i=0;$i<count($arr)-1;$i++){
                for($j=0;$j<count($arr)-$i-1;$j++){
                    if($arr[$i]>$arr[$j+1]){
                        $x = $arr[$j];
                        $arr[$j] = $arr[$j+1];
                        $arr[$j+1] = $x;
                    }
                }
           }
      return $arr
 }

53.在數據庫test中的一個表student,字段是name,class,score,分別表明姓名,所在班級,分數

  查出每一個班級中的學生,按照成績降序排序

  select * from student order by class asc,score desc;

  查出每一個班的及格人數和不及格人數,格式爲:class,及格人數,不及格人數

  select class,sum(if(score>=60,1,0)) jige,sum(if(score<60,1,0)) bujige from student group by class;

54.請寫出你認爲語言中的高級函數

  array_filter()

  array_map()

  array_multisort()

  array_count_values()

  array_splice()

  htmlspecialchars()

55.表結構入下

名稱 類型
uid int
name varchar
age tinyint

  

 

 

需求:

  增長一個字段性別sex,寫出修改語句

alter table user add sex varchar(10) not null default '男';

  查詢出年齡介於20到30歲之間的用戶

select uid,name,age from user where age>20 && age<30;

  若是提個web頻繁的訪問查詢,上題的查詢如何優化?

給age字段添加索引
create index in_age on user(age);

 

56.web開發的遇到的問題有哪些?

  功能需求分析

  數據庫設計

  sql語句的優化

  前端編寫js特效

57.求兩個日期的差數,例如:2007-2-5~2007-3-6的日期差數

  

$s = strtotime('2007-3-6') - strtotime('2007-2-5');//秒差
echo $s/86400;//相差天數

58.寫出以下程序運行結果

<?php
 $test = 'hello';
 $abc = &$test;
 unset($test);
 echo $abc;
?>

正確答案:hello

59.在空表news中,字段id爲自增主鍵,批量插入17條記錄後,發現最後三條數據有誤,刪除此三條數據後重啓mysql數據庫,再從新插入三條記錄,請問最後一條記錄值的id是多少?

  myisam 引擎 18

  innodb 引擎 20

60.至少寫出一種驗證139開頭的11位手機號碼的正則表達式:

$str = "13911111111";
preg_match('/^139\d{8}$/',$str);

61.請寫出一個函數,實現以下功能:

  字符串"open_door" 轉換爲 "OpenDoor","make_id"轉換爲"MakeId"

<?php
         $str = "make_hello";
         $arr = explode('_',$str);
         $str2 = '';
         foreach($arr as $val){
             $str2.=ucfirst($val);
         }
         echo $str2;
     ?>

62.請寫一個函數將1234567890轉成1,234,567,890,每3位用逗號隔開的形式 

<?php
         $str = "1234567890";
         $str2 = strrev($str);//翻轉字符串
         $arr = str_split($str2,3);
         $str3 = join(',',$arr);
         $str4 = strrev($str3);
         echo $str4;
         //還有一個函數直接能搞定:
         $str = "1234567890";
         echo number_format($str);
     ?>

63.有A(id,sex,par,c1,c2),B(id,age,c1,c2)兩張表,其中A.id與B.id關聯,如今要求寫出一條sql語句,將B中的age>50的記錄的c1,c2更新到A表中統一記錄中的c1,c2字段中:

update A,B set A.c1 = B.c1,A.c2 = B.c2 where A.id = B.id and B.age>50;

64.如何實現天天的0點鐘重啓linux服務器?

crontab -e
00 00 * * * /sbin/init 6

65.當前目錄下有一個文件showdown.sh,如何修改文件,將其指定爲使用/bin/bash運行,如何修改其權限爲全部用戶可讀寫,全部用戶可執行?

vim showdown.sh
#!/bin/bash

chmod 777 showdown.sh

66.當前目錄下有一個文件爲showdown.sh,如何修改其全部人爲root

chown root showdown.sh
chown root:root showdown.sh//修改全部人爲root,而且修改所屬組爲root

67.請用用php程序,編寫讀取www.baidu.com 的首頁的內容,並將其存入字符串$str中

$str = file_get_contents('http://www.baidu.com');

68.請用php將上題中讀取出來的網頁內容的<title>標籤的值解析出來

preg_match('/<title>(.*)<\/title>/',$str,$arr);

69.經過php函數的方式對目錄進行遍歷,寫出程序:

<?php
     function delDir($dir){
         $files = scandir($dir);
         foreach($files as $file){
             if($file!='.' && $file!='..'){
                 $path = $dir.'/'.$file;
                 if(is_dir($path)){
                     delDir($path);
                 }else{
                     unlink($path);
                 }
             }
         }
     rmdir($dir);
     }
 ?>

70.什麼是數據庫索引,主鍵索引,惟一索引的區別,索引的缺點是什麼?

  數據庫索引是給數據庫中的每張表創建索引,便於提升查詢檢索效率

  主鍵索引是給每張表的主鍵設置索引

  惟一索引是給每張表的惟一值字段設置索引

  索引的缺點是創建索引須要增長存儲空間,空間利用率低,而且當數據發生變化時改索引資源消耗比較大

71.經過js 實現前進和後退操做:

<a href="javascript:Window.history.go(1)">前進</a>
<a href="javascript:Window.history.go(-1)">後退</a>

72.寫出程序運行結果:

<?php
     $a = 0;
     $b = 0;
     if($a=3 || $b = 3){
         $a++;
         $b++;
     }
      echo $a.",".$b; 
?>
正確答案是:1,1
<?php
     $a = 0;
     $b = 0;
     if($a = 4 | $b = 3){
         $a++;
         $b++;
     }
     echo $a.",".$b;
 ?>
正確答案是:8,4(未或運算)

73.寫出下列代碼的輸出結果?

  

<?php
     function myfunc($argument){
         echo $argument+10;
     }
     $variable = 10;
     echo "myfunc($variable)=".myfunc($variable);
 ?>
正確答案是:10myfunc(10)=;

74.請用盡量少的語句實現對輸出email地址進行驗證功能:

$email = "test@qq.com";
preg_match('/^\w+@\w+\.\w+$/',$email,$arr);

75.如何判斷sql語句的運行效率,如何優化一個查詢sql

desc select * from table;
explain select * from table;
給查詢條件增長索引

76.apache默認使用的是進程管理仍是線程管理?

  apache默認使用的是進程管理

77.實現中文字符串截取無亂碼的方法是?

  mb_substr();

78.用php寫出顯示客戶端ip和服務端的ip代碼:

  $_SERVER['REMOTE_ADDR']

  $_SERVER['SERVER_ADDR']

79.在http1.0中,狀態碼爲401的含義是?若是返回"找不到文件"的提示,則用header函數,其語句爲?

  401表明未被受權

  header("HTTP/1.0 404 Not Found");

80.在php中error_reporting這個函數的做用是?

  設置錯誤級別與錯誤信息回報

81.簡述如何獲得當前執行腳本路徑,包括所獲得的參數?

  $_SERVER['REQUEST_URI'];

82.mysql_fetch_row和mysql_fetch_array之間的區別?

  mysql_fetch_row獲取一個索引數組

  mysql_fetch_assoc獲取一個關聯數組

83.下面程序會輸出什麼?

<?php
     $num = 10;
     function multiply(){
         $num = $num*10;
     }
     multiply();
     echo $num;
 ?>
正確答案是:10

84.寫出下面程序的輸出結果?

  

<?php
     $b = 201;
     $c = 40;
     $a = $b>$c:4:5;
     echo $a;
 ?>
正確答案是:4

85.$a = 'abcdef';請取出$a的值並打印第一個字母:

  echo $a{0};

86.請寫出php5的權限修飾符

  public 公有的

  private 私有的

  protected 受保護的

87.ftp://pub.foo.bar.com:2121/incoming/rls.sfv請給出這個url的各部分的含義

  ftp:// 是協議

  pub.foo.bar.com 是域名

  2121 是端口

  /incoming/ 是目錄

  rls.sfv 是文件

88.服務器經常使用端口?

  80 http協議

  21 ftp協議

  22 ssh協議

  53 dns協議

  443 https協議

89.請寫出5條linux命令

  ls

  cd

  pwd

  mkdir

  rmdir

90.請列出5個經常使用的php操做mysql函數:

  mysql_connect()

  mysql_query();

  mysql_select_db()

  mysql_fetch_assoc()

  mysql_fetch_row

91.有兩張數據表,表user(id,name)記錄了用戶的id和暱稱,表article(id,uid,title,content,time)記錄了用戶發表的文章標題,內容和時間,寫一個sql語句打印出每一個用戶的暱稱及其發表的文章總數?

select user.name,count(*) from user left join article on user.id = article.id group by user.id;

92.把左鏈接中產生的null替換成"0":

select user.name,count(article.uid) from user left join article on user.id = article.uid group by user.id;

93.請寫出3個php中預約義全局變量

  __LINE__

  __FILE__

  __FOUCTION__

94.請寫出下列代碼的執行結果

<?php
               $var1 = 5;
               $var2 = 10;
               function foo(&$my_var){
                   global $var1;
                   $var1 +=2;
                   $var2 = 4;
                   $my_var +=3;
                   return $var2;
               }
               $my_var = 5;
               echo foo($my_var);//4
               echo $my_var;//8
               echo var1;//7
               echo $var2;//10
               $bar = 'foo';
               $my_var = 10;
               echo $bar($my_var);//4

           ?> 

95.輸出用戶的ip地址,並判斷用戶的IP地址是否在192.168.1.100-----192.168.1.150之間

$sip = ip2long('192.168.1.100');
$eip = ip2long('192.168.1.150');
$getip = ip2long('192.168.1.120');
if($getip>=$sip and $getip<=$eip){
    echo 'yes';
}else{
     echo 'no';
}

96.將二維數組按照name的長度進行從新排序,按照順序將id賦值(從1開始),二維數組以下:

$arr = array(
                  array('id'=>0,'name'=>'123833'),
                  array('id'=>0,'name'=>'aaa'),
                  array('id'=>0,'name'=>'dfsdfsdfsdfs'),
                  array('id'=>0,'name'=>'12245'),
                  array('id'=>0,'name'=>'122lll')
   );

實現代碼以下:
          foreach($arr as $val){
                 $arr2[] = strlen($val['name']);
          }
          array_multisort($arr2,$arr);
          foreach($arr as &$val2){
                  $val2['id'] = ++$i;
          }
          print_r($arr);

97.實現不用第三個變量交換,$a,$b的值,$a,$b的初始值本身定:

  $a = "linux";
  $b = "php";
  $b = array($a,$b);
  $a = $b[1];
  $b = $b[0];
  echo $a;

98.用php打印前一天的日期格式爲:2006-5-10 22:22:21:

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

99.下面程序輸出什麼?

<?php
        $int_a = 5;
       function factorial(){
         for($int_i=$int_a;$int_i>0;$int_i--){
             $int_a = $int_a * $int_i;
       }
    }
   factorial();
   echo $int_a;
  ?>
正確答案是:5

100.在項目開發中,須要上傳超過8M的文件時,請說明php.ini須要修改的配置項

upload_max_filesize = 8
post_max_size = 9必定要大於等於上面的那個

101.php代碼以下

<?php
    $data = array('a','b','c');
    foreach($data as $key => $val){
       $val = &$data[$key];
    }
  ?>

  問題1:程序執行時,每一次循環結束後變量$data的值是什麼?請解釋

    第一次:

      $data = array('a','b','c');

    第二次:

      $data = array('b','b','c');

    第三次:

      $data = array('b','c','c');

  問題2:程序執行完成後,變量$data的值是什麼?請解釋

    $data = array('b','c','c');

相關文章
相關標籤/搜索