PHP 面試題二

一、抓取遠程圖片到本地,你會用什麼函數?javascript

fsockopen, A

二、用最少的代碼寫一個求3值最大值的函數.php

function get_max($a,$b,$c) {
    return ($a > $b ? $a : $b) > $c ? ($a > $b ? $a : $b) : $c;
}

四、javascript可否定義二維數組,若是不能你如何解決?html

javascript不支持二維數組定義,能夠用arr[0] = new array()來解決

五、假設a.html和b.html在同一個文件夾下面,用javascript實現當打開a.html五秒鐘後,自動跳轉到b.html。java

function test(){ window.location = "b.html"; window.close(); }
setTimeout( "test()",5000 ); //5秒鐘後自動執行test()

八、寫一個函數,可以遍歷一個文件夾下的全部文件和子文件夾。算法

    <?php
     function my_dir($dir){
         $files=array();
         //注意這裏要加一個@,否則會有warning錯誤提示
         if(@$handle=opendir($dir)){
             
             while(($file=readdir($handle))!==false){
                 //排除根目錄;
                 if($file!=".." && $file!="."){
                
                     //若是是子文件夾,就進行遞歸 ;不是就將文件的名字存入數組;
                     if(is_dir($dir."/".$file)){
                         $files[$file]=my_dir($dir."/".$file);
                     }else{
                         $files[]=$file;
                     }
  
                 }
             }
             closedir($handle);
             return $files;
         }
     }
    //如下是測試
     $array=my_dir('C:/test');
     var_dump($array);

九、把 John 新增到 users 陣列?數據庫

$users[] = 'join';   
array_push($users, 'john');

十、在PHP中error_reporting這個函數有什麼做用?編程

error_reporting() 設置 PHP 的報錯級別並返回當前級別。

1六、寫一個函數,儘量高效的,從一個標準 url 裏取出文件的擴展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 須要取出 php 或 .php數組

<?php function getExt($url){ $arr  = parse_url($url); // 解析url爲數組 $file = basename($arr['path']); // $arr['path'] = "/abc/de/fg.php"; $ext  = explode(".",$file); // $file = "fg.php"; explode拆分字符串,返回一個數組 return $ext[1]; }

1七、使用五種以上方式獲取一個文件的擴展名;要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,
必須使用PHP自帶的處理函數進行處理,方法不能明顯重複,能夠封裝成函數,好比 get_ext1($file_name), get_ext2($file_name)瀏覽器

// 方法1:
function
get_ext1($file_name){ return strrchr($file_name, '.'); } // 方法2: function get_ext2($file_name){ return substr($file_name, strrpos($file_name, '.')); } // 方法3: function get_ext3($file_name){ return array_pop(explode('.', $file_name)); } // 方法4: function get_ext4($file_name){ $p = pathinfo($file_name); return $p['extension']; } // 方法5: function get_ext5($file_name){ return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), '.')));
}
1八、如下代碼的輸出結果是?
$str1 = null;
$str2 = false;
echo $str1 == $str2 ? '相等' : '不相等'; // 相等
$str3 = ' '; $str4 = 0; echo $str3 == $str4 ? '相等' : '不相等';     // 相等
 $str5 = 0; $str6 = ’0′; echo $str5 === $str6 ? '相等' : '不相等';   // 不相等

1九、MySQL數據庫中的字段類型varchar和char的主要區別是什麼?那種字段的查找效率要高,爲何?緩存

Varchar是變長,節省存儲空間,char是固定長度。
查找效率: char類型快,由於varchar是非定長,必須先查找長度,而後進行數據的提取,比char定長類型多了一個步驟,因此效率低一些

20、PHP 數組排序

sort() - 以升序對數組排序
rsort() - 以降序對數組排序
asort() - 根據值,以升序對關聯數組進行排序
ksort() - 根據鍵,以升序對關聯數組進行排序
arsort() - 根據值,以降序對關聯數組進行排序
krsort() - 根據鍵,以降序對關聯數組進行排序

2一、一羣猴子排成一圈,按1,2,…,n依次編號。而後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去…,如此不停的進行下去,直到最後只剩下一隻猴子爲止,那隻猴子就叫作大王。要求編程模擬此過程,輸入m、n, 輸出最後那個大王的編號

方法1:
function King($n,$m) { 
    $res=0; 
    for($i=2; $i<=$n; $i++) {
        $res=($res+$m)%$i; 
    }
    return $res+1; 
} 
$leader = King(13,34);
echo $leader;

//方法2,定義函數
function getKing($monkeys , $m , $current = 0){
    $number = count($monkeys);
    $num = 1;
    if(count($monkeys) == 1){
      echo '<font color="red">編號爲'.$monkeys[0].'的猴子成爲猴王了!</font>';
      return;
    }else{
  while($num++ < $m){
    $current++;
    $current = $current%$number;
  }
  echo "編號爲".$monkeys[$current]."的猴子被踢掉了...<br/>";
  array_splice($monkeys , $current , 1);
  getKing($monkeys, $m , $current);
  }
}
$n=13; //總共猴子數目
$m = 34; //數到第幾只的那隻猴子被踢出去
$monkeys = range(1,$n); //將猴子編號放入數組中
getKing($monkeys , $m); //調用函數    

2八、使用過Memcache緩存嗎,若是使用過,可以簡單的描述一下它的工做原理嗎?

Memcahce是把全部的數據保存在內存當中,採用hash表的方式,每條數據又key和value組成,每一個key是獨一無二的,當要訪問某個值的時候先按照找到值,而後返回結果。
Memcahce採用LRU算法來逐漸把過時數據清除掉。

2一、16.請描述出兩點以上XHTML和HTML最顯著的區別
(1)XHTML必須強制指定文檔類型DocType,HTML不須要
(2)XHTML全部標籤必須閉合,HTML比較隨意

2二、寫一個排序算法,能夠是冒泡排序或者是快速排序,假設待排序對象是一個維數組。

//冒泡排序(數組排序)

function bubbleSort($arr){
  // 統計全部元素
  $len = count($arr);

  for($i = 0; $i < $len; $i++) {
    for($k = $i+1; $k < $len; $k++) {
      if($arr[$i] > $arr[$k]) {
        $t = $arr[$k];
        $arr[$k] = $arr[$i];
        $arr[$i] = $t;
      }
    }
  }

  return $arr;
}

2三、寫出三種以上MySQL數據庫存儲引擎的名稱(提示:不區分大小寫)

MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十幾個引擎

2四、求兩個日期的差數,例如2007-2-5 ~ 2007-3-6 的日期差數

方法1:
function get_days($date1, $date2) {
    $time1 = strtotime($date1);
    $time2 = strtotime($date2);
    return ($time2-$time1)/86400;
}
echo get_days(’2007-2-5′, ’2007-3-6′);
方法2:
$temp = explode('-', '2007-2-5');
$time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
$temp = explode('-', '2007-3-6');
$time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
echo ($time2-$time1)/86400;
方法3:
echo abs(strtotime("2007-2-1")-strtotime("2007-3-1"))/60/60/24 計算時間差

2五、請寫一個函數,實現如下功能:字符串「open_door」 轉換成 「OpenDoor」、」make_by_id」 轉換成 」MakeById」。

// 方法一
function str_explode($str){
    $str_arr=explode("_", $str);
    $str_implode=implode(" ",$str_arr);  
    $str_implode=implode("",explode("",ucwords($str_implode)));
    return $str_implode;
}
$strexplode = str_explode("make_by_id");
print_r($strexplode);
// 方法二 $str = "make_by_id!"; $expStr = explode("_", $str); for($i=0;$i<count($expStr);$i++){   echo ucwords($expStr[$i]); }
// 方法三 echo str_replace(' ', '', ucwords(str_replace('_', ' ', 'open_door')));// 替換掉_後,首字母大寫,替換掉空格

2六、一個表中的Id有多個記錄,把全部這個id的記錄查出來,並顯示共有多少條記錄數,用SQL語句及視圖、
存儲過程分別實現。
DELIMITER //
create procedure proc_countNum(in columnId int,out rowsNo int)
begin
select count(*) into rowsNo from member where member_id=columnId;
end
call proc_countNum(1,@no);
select @no;
方法:視圖:
create view v_countNum as select member_id,count(*) as countNum from member group by
member_id
select countNum from v_countNum where member_id=1

 

2七、js中網頁前進和後退的代碼

前進: history.forward();=history.go(1);

後退: history.back();=history.go(-1); 

2八、下列代碼輸出什麼?

echo count(null);     // 0

echo count('  ');        // 1

echo count(false);    // 1

echo count('abc');     // 1

count — 計算數組中的單元數目或對象中的屬性個數
int count ( mixed$var [, int $mode ] ), 若是 var 不是數組類型或者實現了 Countable 接口的對象,將返回1,有一個例外,若是 var 是 NULL 則結果是 0。
對於對象,若是安裝了 SPL,能夠經過實現 Countable 接口來調用 count()。該接口只有一個方法 count(),此方法返回 count() 函數的返回值。

32. php class中static,public,private,protected的區別?

static 靜態,類名能夠訪問

public 表示全局,類內部外部子類均可以訪問;

private  表示私有的,只有本類內部可使用;

protected 表示受保護的,只有本類或子類或父類中能夠訪問;

33. HTTP協議中GET、POST和HEAD的區別?

HEAD: 只請求頁面的首部。

GET: 請求指定的頁面信息,並返回實體主體。

POST: 請求服務器接受所指定的文檔做爲對所標識的URI的新的從屬實體。

(1)HTTP 定義了與服務器交互的不一樣方法,最基本的方法是 GET 和 POST。事實上 GET 適用於多數請求,而保留 POST 僅用於更新站點。

(2)在FORM提交的時候,若是不指定Method,則默認爲GET請 求,Form中提交的數據將會附加在url以後,以?分開與url分開。字母數字字符原樣發送,但空格轉換爲「+「號,其它符號轉換爲%XX,其中XX爲 該符號以16進製表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;

GET方式提交的數據最多隻能有1024字節,而POST則沒有此限制。

(3)GET 這個是瀏覽器用語向服務器請求最經常使用的方法。POST這個方法也是用來傳送數據的,可是與GET不一樣的是,使用POST的時候,數據不是附在URI後面傳 遞的,而是要作爲獨立的行來傳遞,此時還必需要發送一個Content_length標題,以標明數據長度,隨後一個空白行,而後就是實際傳送的數據。網 頁的表單一般是用POST來傳送的
相關文章
相關標籤/搜索