PHP面試題

1)求出下面的結果。php

$arr = array('1','2','3');
unset($arr[0]);
list($a,$b) = $arr;
echo $a;
echo $b;html

$a 結果爲:空並報錯(Undefined offset: 0)。$b結果爲 2;mysql

注意:因爲list()函數,該函數只用於數字索引的數組,且假定數字索引從0開始正則表達式

2)書寫一個單例模式;redis

答案算法

3)排序算法以及複雜度sql

選擇排序(時間複雜度爲:O(n^2))數據庫

冒泡排序(時間複雜度爲:O(n^2))數組

 4)php中有哪些魔術方法緩存

  __construct() :構造方法,實例化對象時調用

    __destruct():析構方法,銷燬對象時調用

  __call():對象調用某個方法是,若屬性存在該方法,則直接調用,若不存在改方法,則調用__call函數

  __get():讀取一個對象屬性時,若該屬性存在,則直接返回,若不存在,則調用__get函數

  __set():設置一個對象屬性時,若該屬性存在,則直接賦值,若不存在,則調用__set函數

  __isset():檢測一個對象屬性是否存在時被調用

  __unset():銷燬一個對象屬性時被調用

  __wekeup():預先準備對象須要的資源,常常用在反序列化unserialize()時被調用,例如從新創建數據庫連接,或執行其它初始化操做。

  __sleep():執行serialize()函數時被調用,此功能能夠用於清理對象,並返回一個包含對象中全部應被序列化的變量名稱的數組,若是該方法未返回任何內容,則null被序列化,併產生一個E_NOTICE級錯誤

  __toString():打印一個對象時被調用,此方法返回的必須是一個字符串,不然會發出一條E_RECOVERABLE_ERROR級別的錯誤。

  __clone():克隆對象時被調用

5)php數組經常使用函數

   連接

6)寫出下列函數的意義

  split——用正則表達式將字符串分割到數組中

  str_split(string,length)——函數把字符串分割到數組中

  explode(‘’,$str)——使用一個字符串分割另外一個字符串,返回數組

  implode()——將一個數組值轉化爲字符串

7)字符串經常使用函數

  連接

8)預約義變量

  $_SERVER['DOCUMENT_ROOT']//當前運行腳本所在的文檔根目錄

  $_SERVER['HTTP_HOST']//當前請求的Host頭部的內容

  $_SERVER['REMOTE_ADDR']//正在瀏覽當前頁面用戶的IP地址

  $_SERVER['SERVER_NAME']//當前運行腳本所在服務器主機的名稱

  $_SERVER['HTTP_REFERER']//連接到當前頁面的前一頁面的URL地址

9)POST和GET的區別

  POST:

  (1)最大容量根據php.ini文件配置,默認爲8M。

  (2)post是實體數據,能夠經過表單提交大量的信息。

 GET:

  (1)大小限制在2KB。

  (2)get是發送請求HTTP協議經過url參數傳遞進行接收。

 10)mysiam和innodb的區別

連接

11)memcache和redis的區別和聯繫

連接

12)時間搓和時間日期相互轉換的函數。

PHP相關函數:

  1,日期轉換爲時間搓 strtotime('2018-11-27 13:29:30')。

  2,時間搓轉換爲時間 date(‘Y-m-d H:i:s’,1156219870)。

mysql相關函數:

  1,時間轉換爲時間搓 unix_timestamp()。

  2,時間搓轉換爲時間 from_unixtime()。

13)PHP安全問題

   網上搜的文章

14)優化sql語句執行效率的方法

  1.儘可能選擇較小的列。

  2.將where中用的比較頻繁的字段創建索引。

  3.select子句中避免使用‘*’。

  4.避免在索引列上使用計算、not in和<>等操做。

  5.當只須要使用一行數據的時候使用limit 1。

  6.保證單表數據不超過200w,適時分割表。

  7.針對較慢的語句,可使用explain來分析該語句具體執行狀況。

15)對於大流量的網站,用什麼方法解決。

  1.確認服務器硬件可否支持當前的流量

    對於普通的pc server來講,它可以獨立支持天天10萬個獨立ip訪問,若是訪問量過大,最好用性能更高的專用服務器。

  2.優化數據庫訪問

    服務器的負載過大,一個重要的緣由就是cpu和內存負載太高,而讀寫數據在這塊佔據較多的資源,能夠從頁面靜態化、memcache緩存和mysql優化幾個方面着手。

  3.禁止外部盜鏈

    佔用較大的流量,防盜鏈,使用reference來判斷一下,若是是圖片的話,使用添加水印便可很好的防止。

  4.控制大文件的下載

    最好把文件下載的容量控制爲相對較小的一個值,若是有大文件下載,最好使用專用的服務器。

  5.使用多臺主機實現分流,集羣

  6.使用流量分析軟件進行分析統計(谷歌、百度)

16)數據集合爲$arr = [0=>['id'=>1,'name'=>'A'],1=>['id'=>2,'name'=>'B'],3=>['id'=>3,'name'=>'C'],...]

請創建以下兩組數據,用您認爲最簡單的方式來實現。

(1)[1,2,3...](提取id數組)

(2)[['1'=>'A'],['2'=>'B'],['3'=>'C'],...](id,name的鍵值對)

  解答:(1) array_column($arr,'id);

     (2) array_column($arr,'name','id');

  注:array_column(array,column_key,index_key)——返回數組中某個單一列的值。(php5.5以上)

         array:必需。規定要使用的多維數據(記錄集);

         column_key:必需。須要返回值的列,能夠是索引數組的列的整數索引,或者是關聯數組的列的字符串鍵值。

          該參數也能夠是NULL,此時將返回整個數組(配合index_key參數來重置數組建的時候,很是有用)。

    index_key:可選,用做返回數組的索引/鍵的列。

17)計算二維數組中某一元素之和

$arr[0]=array('name'=>'小一','score'=>80);

$arr[1]=array('name'=>'小二','score'=>85);

計算score的和

解答:

  方法一:

    echo  array_sum(array_map(function($val){return $val['score'];}, $arr));

    或:

    echo array_sum(array_map(create_function('$val', 'return $val["score"];'),$arr));

  方法二:

    $sum = 0;
    foreach($arr as $val){
      $sum += (int) $val['score'];
    }

相關文章
相關標籤/搜索