1.get,post 的區別
**顯示有區別 ** get方法是將字符串拼接在地址欄后面可以看見 而post方法看不見 **傳遞的大小有區別 ** 具體大小和瀏覽器有關系,ie瀏覽器是2k其他瀏覽器的最大值可能不同,但是也比較小。 而post方法傳遞參數的大小是可以設定的,原來是認為無限大。在Php當中在php.ini文件是可以設置參數的大小的。 **安全性 ** get方法安全性比較低因為暴露在外面而post方法安全性比較高 **提交的原理 ** get方法提交的數據都是獨立的。 而Post方法將所有的提交的數據變成一個整體(將提交的數據變成xml格式) **靈活性** get方法很靈活, post方法不靈活,必須要有表單的參與才能用post提交很不方便
2.require,include 區別
require是無條件包含也就是如果一個流程里加入require,無論條件成立與否都會先執行require
include有返回值,而require沒有(可能因為如此require的速度比include快)
包含文件不存在或者語法錯誤的時候require是致命的錯誤終止執行,include不是
3. 獲取 URL 后綴名
1 pathinfo()解析文件路徑,返回其組成部分; 2 返回關聯數組 3 dirname 文件路徑 4 basename 文件名+擴展名 5 extension 最后一個擴展名 6 filename 文件名 7 eg: print_r( pathinfo('/ab/cd/e.php') ); 8 Array( 9 [dirname] => /ab/cd 10 [basename] => e.php 11 [extension] => php 12 [filename] => e 13 ) 14 擴展: 15 打印解析路徑 var_dump( pathinfo($path) ); 16 打印路徑的父級路徑 var_dump( pathinfo($path, PATHINFO_DIRNAME) ); 17 打印路徑的尾名 var_dump( pathinfo($path, PATHINFO_BASENAME) ); 18 打印路徑的最后的擴展名 var_dump( pathinfo($path, PATHINFO_EXTENSION) ); 19 打印路徑的文件的名字 var_dump( pathinfo($path, PATHINFO_FILENAME) );
4.tcp,udp,http 區別
5. 獲取上級目錄的方法
echo __FILE__ ; // 獲取當前所在文件的絕對路徑及地址,結果:D:\aaa\my.php echo dirname(__FILE__); // 取得當前文件所在的絕對目錄,結果:D:\aaa\ echo dirname(dirname(__FILE__)); //取得當前文件的上一層目錄名,結果:D:\
6. 數據庫主從復制,讀寫分離
* 什么是主從復制 主從復制,是用來建立一個和主數據庫完全一樣的數據庫環境,稱為從數據庫; * 主從復制的原理: 1.數據庫有個bin-log二進制文件,記錄了所有的sql語句。 2.只需要把主數據庫的bin-log文件中的sql語句復制。 3.讓其從數據的relay-log重做日志文件中在執行一次這些sql語句即可。 * 主從復制的作用 1.做數據的熱備份,作為后備數據庫,主數據庫服務器故障后,可切換到從數據庫繼續工作,避免數據丟失。 2.架構的擴展。業務量越來越大,I/O訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁盤I/O訪問頻率,提高單機的I/O性能 3.主從復制是讀寫分離的基礎,使數據庫能制成更大 的並發。例如子報表中,由於部署報表的sql語句十分慢,導致鎖表,影響前台的服務。如果前台服務使用master,報表使用slave,那么報表sql將不會造成前台所,保證了前台的訪問速度。 * 主從復制的幾種方式: 1.同步復制:所謂的同步復制,意思是master的變化,必須等待slave-1,slave-2,...,slave-n完成后才能返回。 2.異步復制:如同AJAX請求一樣。master只需要完成自己的數據庫操作即可。至於slaves是否收到二進制日志,是否完成操作,不用關心。MYSQL的默認設置。 3.半同步復制:master只保證slaves中的一個操作成功,就返回,其他slave不管。 這個功能,是由google為MYSQL引入的。 * 關於讀寫分離 在完成主從復制時,由於slave是需要同步master的。所以對於insert/delete/update這些更新數據庫的操作,應該在master中完成。而select的查詢操作,則落下到slave中。
7. 數據庫索引
**什么是索引** 索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。(摘自百度百科) **索引類型** 1.FULLTEXT 全文索引 全文索引,僅MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不過目前只有 CHAR、VARCHAR ,TEXT 列上可以創建全文索引。 2.HASH 哈希索引 HASH索引的唯一性及類似鍵值對的形式十分適合作為索引,HASH索引可以一次定位,不需要像樹形索引那樣逐層參照,因此具有極高的效率。但是這種高效是有條件的。即只在“=”和“in”條件下高效,對於范圍查詢,排序及組合索引仍然效率不高。 3.BTREE 樹形索引 BTREE所以是一種將索引按一定算法,存入一個樹形的數據結構中(二叉樹),每次查詢都是從樹的入口root開始,一次遍歷node,獲取leaf。這是MySQL中默認也是最常用的索引類型。 4.RTREE RTREE在MySQL中很少使用,僅支持geometry數據類型,支持該存儲引擎只有MyISAM、BDb、InnoDb、NDb、Archive幾種。相對於BTREE,RTREE的優勢在於范圍查找。 **索引種類** 普通索引:僅加速查詢 唯一索引:加速查詢+列值唯一(可以有null) 主鍵索引:加速查詢+列值唯一(不可以有null)+表中只有一個 組合索引:多列值組成一個索引,專門用於組合搜索,其效率大於索引合並 全文索引:對文本內容進行分詞,進行搜索 外鍵索引:與主鍵索引形成聯系,保證數據的完整性。 **索引使用的注意事項** 1.符合索引遵循前綴原則 2.like查詢%不能再前,否則索引失效。如有需要,使用全文索引 3.column is null可以使用索引 4.如果MySQL估計使用索引比全表掃描慢,則放棄使用索引 5.如果or前的條件中列有索引,后面的沒有,索引不會生效。 6.列類型是字符串,查詢時,一定要給值加引號,否則索引失效。 7.確定order by 和 group by 中只有一個表的列,這樣才能使用索引
8. 高並發的解決方案
web服務器優化 :負載均衡
流量優化:防盜鏈處理 將惡意請求屏蔽,
前端優化:減少http請求、添加異步請求、啟用瀏覽器緩存和文件壓縮、cdn加速、建立獨立的圖片服務器、
服務端優化: 頁面靜態化、並發處理、隊列處理、
數據庫優化: 數據庫緩存、分庫分表、分區操作 、讀寫分離、負載均衡
9.MVC 的理解
1、Model(業務模型):應用程序中用於處理應用程序數據邏輯的部分,通常模型對象負責在數據庫中存取數據。 2、view(視圖):應用程序中處理數據顯示的部分。通常視圖是依據模型數據創建的。 3、controller(控制器):應用程序中處理用戶交互的部分。通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。
10. 常用的文件操作函數
1 **1. 獲得文件名:** 2 basename — 返回路徑中的文件名部分 3 4 $path = "/home/cate/index/index2.php";\ 5 $file = basename($path);\ 6 echo $file; //結果index2.php 7 8 **2. 獲得目錄名** 9 dirname — 返回路徑中的目錄部分 10 11 $path = "/home/cate/index/index2.php";\ 12 $file = dirname($path);\ 13 echo $file;//結果/home/cate/index 14 15 **3.得到路徑關聯數組** 16 pathinfo() 函數以數組的形式返回關於文件路徑的信息。 17 返回的數組元素如下: 18 - [dirname]: 目錄路徑 19 - [basename]: 文件名 20 - [extension]: 文件后綴名 21 - [filename]: 不包含后綴的文件名 22 pathinfo(path,options) 23 | path | 必需。規定要檢查的路徑。 | 24 | options | 可選。規定要返回的數組元素。默認是 all。 25 26 可能的值: 27 28 - PATHINFO_DIRNAME - 只返回 dirname 29 - PATHINFO_BASENAME - 只返回 basename 30 - PATHINFO_EXTENSION - 只返回 extension 31 - PATHINFO_FILENAME - 只返回 filename 32 33 | 34 **4.filesize取得文件大小** 35 filesize ( string $filename ) 36 返回文件大小的字節數,如果出錯返回 **FALSE** 並生成一條 **E_WARNING** 級的錯誤。 37 38 **判斷目錄是否存在** 39 $lujing = "./nihao/wohao"; 40 if(!is_dir($liujing)){ 41 mkdir(iconv("UTF-8", "GBK", $lujing),0777,true); 42 } 43 44 **判斷文件是否存在** 45 file_exists(path);
11. 常見的排序算法
1 1. 冒泡排序 2 思路分析:在要排序的一組數中,對當前還未排好的序列,從前往后對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即,每當兩相鄰的數比較后發現它們的排序與排序要求相反時,就將它們互換。 3 4 代碼實現: 5 $arr=array(1,43,54,62,21,66,32,78,36,76,39); 6 function bubbleSort($arr) 7 { 8 $len=count($arr); 9 //該層循環控制 需要冒泡的輪數 10 for($i=1;$i<$len;$i++) 11 { //該層循環用來控制每輪 冒出一個數 需要比較的次數 12 for($k=0;$k<$len-$i;$k++) 13 { 14 if($arr[$k]>$arr[$k+1]) 15 { 16 $tmp=$arr[$k+1]; 17 $arr[$k+1]=$arr[$k]; 18 $arr[$k]=$tmp; 19 } 20 } 21 } 22 return $arr; 23 } 24 25 2. 選擇排序 26 思路分析:在要排序的一組數中,選出最小的一個數與第一個位置的數交換。然后在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最后一個數比較為止。 27 28 代碼實現: 29 function selectSort($arr) { 30 //雙重循環完成,外層控制輪數,內層控制比較次數 31 $len=count($arr); 32 for($i=0; $i<$len-1; $i++) { 33 //先假設最小的值的位置 34 $p = $i; 35 36 for($j=$i+1; $j<$len; $j++) { 37 //$arr[$p] 是當前已知的最小值 38 if($arr[$p] > $arr[$j]) { 39 //比較,發現更小的,記錄下最小值的位置;並且在下次比較時采用已知的最小值進行比較。 40 $p = $j; 41 } 42 } 43 //已經確定了當前的最小值的位置,保存到$p中。如果發現最小值的位置與當前假設的位置$i不同,則位置互換即可。 44 if($p != $i) { 45 $tmp = $arr[$p]; 46 $arr[$p] = $arr[$i]; 47 $arr[$i] = $tmp; 48 } 49 } 50 //返回最終結果 51 return $arr; 52 } 53 54 3.插入排序 55 思路分析:在要排序的一組數中,假設前面的數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反復循環,直到全部排好順序。 56 57 代碼實現: 58 function insertSort($arr) { 59 $len=count($arr); 60 for($i=1, $i<$len; $i++) { 61 $tmp = $arr[$i]; 62 //內層循環控制,比較並插入 63 for($j=$i-1;$j>=0;$j--) { 64 if($tmp < $arr[$j]) { 65 //發現插入的元素要小,交換位置,將后邊的元素與前面的元素互換 66 $arr[$j+1] = $arr[$j]; 67 $arr[$j] = $tmp; 68 } else { 69 //如果碰到不需要移動的元素,由於是已經排序好是數組,則前面的就不需要再次比較了。 70 break; 71 } 72 } 73 } 74 return $arr; 75 } 76 77 4.快速排序 78 思路分析:選擇一個基准元素,通常選擇第一個元素或者最后一個元素。通過一趟掃描,將待排序列分成兩部分,一部分比基准元素小,一部分大於等於基准元素。此時基准元素在其排好序后的正確位置,然后再用同樣的方法遞歸地排序划分的兩部分。 79 80 代碼實現: 81 function quickSort($arr) { 82 //先判斷是否需要繼續進行 83 $length = count($arr); 84 if($length <= 1) { 85 return $arr; 86 } 87 //選擇第一個元素作為基准 88 $base_num = $arr[0]; 89 //遍歷除了標尺外的所有元素,按照大小關系放入兩個數組內 90 //初始化兩個數組 91 $left_array = array(); //小於基准的 92 $right_array = array(); //大於基准的 93 for($i=1; $i<$length; $i++) { 94 if($base_num > $arr[$i]) { 95 //放入左邊數組 96 $left_array[] = $arr[$i]; 97 } else { 98 //放入右邊 99 $right_array[] = $arr[$i]; 100 } 101 } 102 //再分別對左邊和右邊的數組進行相同的排序處理方式遞歸調用這個函數 103 $left_array = quick_sort($left_array); 104 $right_array = quick_sort($right_array); 105 //合並 106 return array_merge($left_array, array($base_num), $right_array); 107 }