1、explain 具體哪些等級
具體有 system、const、range、index、all
2、MySQL 優化
避免全表查詢,首先應考慮在 where 及 order by 涉及的列上建立索引
應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描 (可以將字段默認值設置為 0)
應盡量避免在 where 子句中使用!= 或 <> 操作符,否則引擎將放棄使用索引而進行全表掃描
應盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:select id from t where num=10 or num=20 可以這樣查詢:select id from t where num=10 union all select id from t where num=20
n 和 not in 也要慎用,否則會導致全表掃描,如:select id from t where num in (1,2,3) 對于連續的數值,能用 between 就不要用 in 了:select id from t where num between 1 and 3
下面的查詢也將導致全表掃描:select id from t where name like ‘% 李 %’若要提高效率,可以考慮全文檢索。
應盡量避免在 where 子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描
不要在 where 子句中的 “=” 左邊進行函數、算術運算或其他表達式運算
在使用索引字段作為條件時,如果該索引是復合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統使用該索引,否則該索引將不會被使用,并且應盡可能的讓字段順序與索引順序相一致。
很多時候用 exists 代替 in 是一個好的選擇:select num from a where num in (select num from b)
用下面的語句替換:
select num from a where exists(select 1 from b where num=a.num)
索引并不是越多越好,索引固然可 以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數最好不要超過 6 個,若太多則應考慮一些不常使用到的列上建的索引是否有 必要。
任何地方都不要使用 select from t ,用具體的字段列表代替 “”,不要返回用不到的任何字段。
盡量避免大事務操作,提高系統并發能力.
分庫分別
分區分表分庫
3、redis 支持哪些類型
支持 5 種類型:字符串、哈希、鏈表、有序、無序,最新的 redis 5.0 中,新增 stream 類型,非常高效的支持隊列。
4、PHP7 與 php5 的區別
foreach 不再改變內部數組指針
標量類型聲明,在舊版中,函數的參數申明只能是 (Array
obj) 等,基本類型比如字符串 (string), 整數 (int), 浮點數 (float), 以及布爾值 (bool) 等是不能夠被申明的
增加了對返回類型聲明的支持
declare(strict_types=1);
function add(int $a, int $b){
return $a+$b;
}
echo add(1,2);
echo add(1.5, 2.6);
null 合并運算符
項目中存在大量同時使用三元表達式和 isset () 的情況,新增了 null 合并運算符 (??) 這個語法糖。如果變量存在且值不為 NULL, 它就會返回自身的值,否則返回它的第二個操作數。
舊版:isset (
_GET [id] : err;
新版:$_GET ['id'] ?? 'err';
通過 define () 定義常量數組
在 PHP 5.6 中僅能通過 const 定義常量數組,PHP 7 可以通過 define() 來定義。
define('ANIMALS',
['dog', 'cat', 'bird']);
echo ANIMALS[1];
// outputs "cat"
const name = ['1','2'];
echo name[1];
現在支持通過 new class 來實例化一個匿名類,這可以用來替代一些 “用后即焚” 的完整類定義
preg_replace_callback_array()
? 新增了一個函數 preg_replace_callback_array (),使用該函數可以使得在使用 preg_replace_callback () 函數時代碼變得更加優雅。在 PHP7 之前,回調函數會調用每一個正則表達式,回調函數在部分分支上是被污染了。
5、指針問題
$array = [1,2,3];
foreach ($array as $k=>&$v){
$v++;
}
var_dump($array);
foreach ($array as $k=>$v){
echo $v;
}
233
6、array_column()
返回輸入數組中某個單一列的值。
array_column(array,column_key,index_key);
// 可能從數據庫中返回數組
$a = array(
array(
'id' => 5698,
'first_name' => 'Peter',
'last_name' => 'Griffin',
),
array(
'id' => 4767,
'first_name' => 'Ben',
'last_name' => 'Smith',
),
array(
'id' => 3809,
'first_name' => 'Joe',
'last_name' => 'Doe',
)
);
$last_names = array_column($a, 'last_name', 'id');
print_r($last_names);
?>
結果
Array
(
[5698] => Griffin
[4767] => Smith
[3809] => Doe
)
7、取出前五通話記錄
select name,count(*) as num from order
where date_sub(curdate(), INTERVAL 10 DAY) <= date(`created_at`)
group by name
order by num desc
limit 10;
8、php 擴展安裝
//下載libevent擴展文件壓縮包(在當前系統哪個目錄下載隨意)
~# wget http://pecl.php.net/get/libevent-0.1.0.tgz
//解壓文件
~# tar -zxvf libevent-0.1.0.tgz
//進入源碼目錄
~# cd libevent-0.1.0/
//運行phpize命令,寫全phpize的路徑
~# /usr/local/php/bin/phpize
//運行configure命令,配置時 要將php-config的路徑附上
~# ./configure --with-php-config=/usr/local/php/bin/php-config
//運行make命令
~# make
//測試編譯安裝
~# make test
//正式編譯安裝
~# sudo make install
//修改php.ini,結尾加入:extension=libevent.so
//重啟對應的php-fpm
9、session 和 cookie 的關系
前提是服務端開啟了session
1. 第一次訪問頁面時, 服務端生成一個不重復的sessionid(當前會話id)以及命名為sess_xxx的session文件
該session文件保存在php.ini文件中指定的目錄, xxx是sessionid, sessionid可以通過session_id()函數來獲取
2. 服務端向客戶端返回響應, 其中有響應頭Set-Cookie:PHPSESSID=xxx
3. 客戶端收到Set-Cookie響應頭, 將sessionid寫入cookie, cookie的key為PHPSESSID, value為sessionid
比如PHPSESSID=jlis2mcmv6d5hejkemom77ibm3
4. 當第二次訪問頁面時, 客戶端會把cookie放在請求頭(Request Header)中, 服務端識別PHPSESSID這個cookie
然后根據這個cookie獲取當前會話ID(sessionid), 從而找到對應的session文件, 再從session文件中讀取信息
10、jsonp 原理
11、ajax 跨域
12、主從復制的原理
13、運算符優先級問題
$tmp = 0 == 'a' ? 1: 2;
echo $tmp;
?>
點關注,不迷路
好了各位,以上就是這篇文章的全部內容了,能看到這里的人呀,都是人才。之前說過,PHP方面的技術點很多,也是因為太多了,實在是寫不過來,寫過來了大家也不會看的太多,所以我這里把它整理成了PDF和文檔,如果有需要的可以
在這里插入圖片描述
在這里插入圖片描述
以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要的可以加入我的