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
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'];
}