這篇文章主要講解了“PHP常見(jiàn)面試問(wèn)答題有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“PHP常見(jiàn)面試問(wèn)答題有哪些”吧!
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括香洲網(wǎng)站建設(shè)、香洲網(wǎng)站制作、香洲網(wǎng)頁(yè)制作以及香洲網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,香洲網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到香洲省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

這個(gè)問(wèn)題的核心是域名解析和服務(wù)器(nginx)解析這兩部分,基本上這兩部分詳細(xì)闡述就可以了。
步驟一、解析URL
瀏覽器會(huì)解析當(dāng)前的URL數(shù)據(jù),判斷此URL是否為合法的鏈接。如果是合法鏈接則正常的向下一步驟前進(jìn)。如果不是合法的鏈接,則會(huì)執(zhí)行搜索功能,例如執(zhí)行百度、360、Google搜索等。
步驟二、解析域名
服務(wù)器是以ip的形式存在的。而域名需要解析到ip上,解析IP會(huì)有三個(gè)小的步驟:
1)、從瀏覽器自身的緩存中解析此域名數(shù)據(jù)
2)、從本地電腦的HOST文件中解析域名
3)、通過(guò)DNS服務(wù)器解析域名
步驟三、拿信息
這個(gè)步驟我們拿到了URL的信息,主要是IP和端口信息。
步驟四、封包并進(jìn)行三次握手
瀏覽器將請(qǐng)求信息進(jìn)行打包,通過(guò)TCP的三次握手將數(shù)據(jù)傳遞至服務(wù)器。
步驟五、服務(wù)器解析、處理、返回?cái)?shù)據(jù)
服務(wù)器通過(guò)種種層級(jí)、方式拿到傳遞的數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行分析、處理,最后返回響應(yīng)類(lèi)MIME類(lèi)型數(shù)據(jù)。正常狀態(tài)碼為200,非正常的錯(cuò)誤碼有404、500、501等等
步驟六、瀏覽器獲得、渲染、展現(xiàn)數(shù)據(jù)
瀏覽器從服務(wù)器拿到數(shù)據(jù)、通過(guò)加載資源、渲染頁(yè)面等操作,將頁(yè)面展現(xiàn)給用戶。
1)、http無(wú)狀態(tài)協(xié)議,不能區(qū)分用戶是否是從同一個(gè)網(wǎng)站上來(lái)的,同一個(gè)用戶請(qǐng)求不同的頁(yè)面不能看做是同一個(gè)用戶。
2)、SESSION存儲(chǔ)在服務(wù)器端,COOKIE保存在客戶端。Session比較安全,cookie用某些手段可以修改,不安全。Session依賴于cookie進(jìn)行傳遞。
禁用cookie后,session不能正常使用。Session的缺點(diǎn):保存在服務(wù)器端,每次讀取都從服務(wù)器進(jìn)行讀取,對(duì)服務(wù)器有資源消耗。Session保存在服務(wù)器端的文件或數(shù)據(jù)庫(kù)中,默認(rèn)保存在文件中,文件路徑由php配置文件的session.save_path指定。Session文件是公有的。
一二三四五原則: 一. 消息系列 二 成功系列 三. 重定向系列 四. 請(qǐng)求錯(cuò)誤系列 五. 服務(wù)器端錯(cuò)誤系列
302:臨時(shí)轉(zhuǎn)移成功,請(qǐng)求的內(nèi)容已轉(zhuǎn)移到新位置 403:禁止訪問(wèn) 500:服務(wù)器內(nèi)部錯(cuò)誤 401代表未授權(quán)。
Tar.gz:
打包: tar czf file.tar.gz file.txt
解壓: tar xzf file.tar.gz
Bz2:
打包: bzip2 [-k] 文件
解壓: bunzip2 [-k] 文件
Gzip(只對(duì)文件,不保留原文件)
打包: gzip file1.txt
解壓: gunzip file1.txt.gz
Zip: -r 對(duì)目錄
打包: zip file1.zip file1.txt
解壓: unzip file1.zip
Int 整數(shù) char 定長(zhǎng)字符 Varchar 變長(zhǎng)字符 Datetime 日期時(shí)間型 Text 文本型 Varchar 與char的區(qū)別 char是固定長(zhǎng)度的字符類(lèi)型,分配多少空間,就占用多長(zhǎng)空間。 Varchar是可變長(zhǎng)度的字符類(lèi)型,內(nèi)容有多大就占用多大的空間,能有效節(jié)省空間。 由于varchar類(lèi)型是可變的,所以在數(shù)據(jù)長(zhǎng)度改變的時(shí),服務(wù)器要進(jìn)行額外的操作,所以效率比char類(lèi)型低。
MyISAM類(lèi)型不支持事務(wù),表鎖,易產(chǎn)生碎片,要經(jīng)常優(yōu)化,讀寫(xiě)速度較快,而InnoDB類(lèi)型支持事務(wù),行鎖,有崩潰恢復(fù)能力。讀寫(xiě)速度比MyISAM慢。
創(chuàng)建索引:alert table tablename add index (`字段名`)
理解:session_start()開(kāi)啟時(shí),生成一個(gè)常量 SID,當(dāng)COOKIE開(kāi)啟時(shí),這個(gè)常量為空,當(dāng)COOKIE關(guān)閉時(shí),這個(gè)常量中存儲(chǔ)了PHPSESSID的值。通過(guò)在URL后加一個(gè)SID參數(shù)來(lái)傳遞SESSIONID的值,從而使客戶端頁(yè)面可以使用SESSION里面的值。 當(dāng)客戶端開(kāi)啟COOKIE和服務(wù)器端開(kāi)啟SESSION時(shí)。 瀏覽器第一次請(qǐng)求,服務(wù)器會(huì)向?yàn)g覽器端發(fā)送一個(gè)COOKIE里面存儲(chǔ)SESSIONID. 當(dāng)瀏覽器第二次請(qǐng)求時(shí),會(huì)把已存在
Isset判斷變量是否存在,可以傳入多個(gè)變量,若其中一個(gè)變量不存在則返回假,empty判斷變量是否為空為假,只可傳一個(gè)變量,如果為空為假則返回真。
答:主要有兩種方式:
1) 快照持久化
在redis配置文件中已經(jīng)自動(dòng)開(kāi)啟了,
格式是:save N M
表示在N秒之內(nèi),redis至少發(fā)生M次修改則redis抓快照到磁盤(pán)。
當(dāng)然我們也可以手動(dòng)執(zhí)行save或者bgsave(異步)命令來(lái)做快照
2)append only file AOF持久化
總共有三種模式,如
appendfsync everysec默認(rèn)的是每秒強(qiáng)制寫(xiě)入磁盤(pán)一次
appendfsync always 每次執(zhí)行寫(xiě)操作的時(shí)候就強(qiáng)制寫(xiě)入磁盤(pán)
appendfsync no 完全取決于os,性能最好但是持久化沒(méi)法保證
其中第三種模式最好。redis默認(rèn)的也是采取第三種模式。
答:常用的主要分為兩種,一種是innodb,一種是myisam,兩者的主要區(qū)別是
1)myisam不支持事務(wù)處理,而innoDB支持事務(wù)處理
2)myisam 不支持外鍵,innoDB支持外鍵
3)myisam支持全文檢索,而innoDB在MySQL5.6版本之后才支持全文檢索
4)數(shù)據(jù)的存儲(chǔ)形式不一樣,mysiam表存放在三個(gè)文件:結(jié)構(gòu)、索引、數(shù)據(jù),innoDB存儲(chǔ)把結(jié)構(gòu)存儲(chǔ)為一個(gè)文件,索引和數(shù)據(jù)存儲(chǔ)為一個(gè)文件
5)myisam在查詢和增加數(shù)據(jù)性能更優(yōu)于innoDB,innoDB在批量刪除方面性能較高。
6)myisam支持表鎖,而innoDB支持行鎖
答:SQL注入攻擊指的是用戶或者黑客通過(guò)構(gòu)建特殊的輸入作為參數(shù)傳入我們的Web應(yīng)用程序端,而這些輸入大都是SQL語(yǔ)法里的一些組合,通過(guò)執(zhí)行SQL語(yǔ)句進(jìn)而執(zhí)行攻擊者所要的操作,其主要原因是程序員沒(méi)有細(xì)致地過(guò)濾用戶輸入的數(shù)據(jù),致使非法數(shù)據(jù)侵入系統(tǒng)而造成的。因此我們?cè)谧鲩_(kāi)發(fā)過(guò)程中一定要預(yù)防sql注入,主要從兩方面著手:
1)占位符的方式,就是對(duì)sql語(yǔ)句進(jìn)行預(yù)處理,然后執(zhí)行sql語(yǔ)句
2)通過(guò)addslashes或者mysql_real_escape_string這兩個(gè)函數(shù)對(duì)用戶輸入的值進(jìn)行轉(zhuǎn)義處理,把一些特殊的字符轉(zhuǎn)義掉。
答:用過(guò),PDO類(lèi)中,有個(gè)prepare方法可以實(shí)現(xiàn)預(yù)處理,PDOStament類(lèi)中 的excute方法可以執(zhí)行預(yù)處理,預(yù)處理的參數(shù)分為兩種,一種是:字符串占位符,另一種是?占位符,:字符串占位符在執(zhí)行預(yù)處理傳遞參數(shù)時(shí)傳入的是關(guān)聯(lián)數(shù)組,而?占位符傳遞的是索引數(shù)組。兩者不能混合使用,但一般推薦使用:字符串占位符。
答:一般成熟的開(kāi)源框架中都考慮到了數(shù)據(jù)安全這方面的東西,但有時(shí)候我們可能會(huì)使用一些原生的SQL語(yǔ)句時(shí),我們就需要考慮自己對(duì)sql語(yǔ)句進(jìn)行預(yù)處理。當(dāng)然有時(shí)候框架中的過(guò)濾方法我們不希望采用,比如使用文本編輯器時(shí),我們可以使用自己的過(guò)濾方式。
答:mysql優(yōu)化主要從以下幾個(gè)方面來(lái)實(shí)現(xiàn):
1)設(shè)計(jì)角度:存儲(chǔ)引擎的選擇,字段類(lèi)型選擇,范式
2)功能角度:可以利用mysql自身的特性,如索引,查詢緩存,碎片整理,分區(qū)、分表等
3)sql語(yǔ)句的優(yōu)化方面:盡量簡(jiǎn)化查詢語(yǔ)句,能查詢字段少就盡量少查詢字段,優(yōu)化分頁(yè)語(yǔ)句、分組語(yǔ)句等。
4)部署大負(fù)載架構(gòu)體系:數(shù)據(jù)庫(kù)服務(wù)器單獨(dú)出來(lái),負(fù)載大時(shí)可以采用主從復(fù)制,讀寫(xiě)分離機(jī)制進(jìn)行設(shè)計(jì)
5)從硬件上升級(jí)數(shù)據(jù)庫(kù)服務(wù)器。
按值傳遞:函數(shù)范圍內(nèi)對(duì)值的任何改變?cè)诤瘮?shù)外部都會(huì)被忽略
按引用傳遞:函數(shù)范圍內(nèi)對(duì)值的任何改變?cè)诤瘮?shù)外部也能反映出這些修改
優(yōu)缺點(diǎn):按值傳遞時(shí),php必須復(fù)制值。特別是對(duì)于大型的字符串和對(duì)象來(lái)說(shuō),這將會(huì)是一個(gè)代價(jià)很大的操作。按引用傳遞則不需要復(fù)制值,對(duì)于性能提高很有好處。
設(shè)置 PHP 的報(bào)錯(cuò)級(jí)別并返回當(dāng)前級(jí)別。
原理:快速排序使用分治策略來(lái)把待排序數(shù)據(jù)序列分為兩個(gè)子序列,具體步驟為:
(1)從數(shù)列中挑出一個(gè)元素,稱該元素為“基準(zhǔn)”。
(2)掃描一遍數(shù)列,將所有比“基準(zhǔn)”小的元素排在基準(zhǔn)前面,所有比“基準(zhǔn)”大的元素排在基準(zhǔn)后面。
(3)通過(guò)遞歸,將各子序列劃分為更小的序列,直到把小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值元素的子數(shù)列排序。
//快速排序(數(shù)組排序)
function QuickSort($arr){
$num = count($arr);
$l=$r=0;
for($i=1;$i<$num;$i++){
if($arr[$i] < $arr[0]){
$left[] = $arr[$i];
$l++;
}else{
$right[] = $arr[$i];
$r++;
}
}
if($l > 1){
$left = QuickSort($left);
}
$new_arr = $left;
$new_arr[] = $arr[0];
if($r > 1){
$right = QuickSort($right);
}
for($i=0;$i<$r;$i++){
$new_arr[] = $right[$i];
}
return $new_arr;
}//二分查找(數(shù)組里查找某個(gè)元素)
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k < $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}else{
return bin_sch($array, $mid+1, $high, $k);
}
}
return -1;
}
//順序查找(數(shù)組里查找某個(gè)元素)
function seq_sch($array, $n, $k){
$array[$n] = $k;
for($i=0; $i<$n; $i++){
if($array[$i]==$k){
break;
}
}
if ($i<$n){
return $i;
}else{
return -1;
}
}//二維數(shù)組排序, $arr是數(shù)據(jù),$keys是排序的健值,$order是排序規(guī)則,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
if (!is_array($arr)) {
return false;
}
$keysvalue = array();
foreach($arr as $key => $val) {
$keysvalue[$key] = $val[$keys];
}
if($order == 0){
asort($keysvalue);
}else {
arsort($keysvalue);
}
reset($keysvalue);
foreach($keysvalue as $key => $vals) {
$keysort[$key] = $key;
}
$new_array = array();
foreach($keysort as $key => $val) {
$new_array[$key] = $arr[$val];
}
return $new_array;
}class regx {
public static function check($str) {
if(preg_match("/^([1-9,])+$/",$str)) {
return true;
}
return false;
}
}
$str="12345,6";
if(regx::check($str)) {
echo "suc";
} else {
echo "fail";
}class Db {
private static $instance;
public $handle;
Private function __construct($host,$username,$password,$dbname) {
$this->handle=NULL;
$this->getcon($host,$username,$password,$dbname);
}
public static function getBb() {
self::$instance=new Db();
return self::$instance;
}
private function getcon($host,$username,$password,$dbname) {
if($this->handle!=NULL){
return true;
}
$this->handle=mysqli_connect($host,$username,$password,$dbname);
}
}A) SQLite Database
B) MySQL Database
C) Shared Memory
D) File System
E) Session Server
答:原因是:中文是由多字節(jié)組成的,而只有英文系統(tǒng)的單個(gè)英文字符只有一個(gè)字節(jié),所以該系統(tǒng)把中文的每一個(gè)字節(jié)都做了strtolower()處理,改變后的中文字節(jié)拼接在一起就成了亂碼(新生成的編碼映射對(duì)應(yīng)的字符可能就不是中文了)
手動(dòng)解決:用str_split(string string,intstring,intsplit_length = 1)按每個(gè)字節(jié)切割,像中文能切割成三個(gè)字節(jié)。對(duì)識(shí)別到的字節(jié)若是英文字母則進(jìn)行轉(zhuǎn)換。
<?php
function mystrtoupper($a){
$b = str_split($a, 1);
$r = '';
foreach($b as $v){
$v = ord($v);
if($v >= 97 && $v<= 122){
$v -= 32;
}
$r .= chr($v);
}
return $r;
}
$a = 'a中你繼續(xù)F@#$%^&*(BMDJFDoalsdkfjasl';
echo 'origin string:'.$a."\n";
echo 'result string:';
$r = mystrtoupper($a);
var_dump($r);答:其中bug存在兩個(gè)方面,
1)在windowns中,當(dāng)文件只有只讀屬性時(shí),is_writeable()函數(shù)才返回false,當(dāng)返回true時(shí),該文件不一定是可寫(xiě)的。
如果是目錄,在目錄中新建文件并通過(guò)打開(kāi)文件來(lái)判斷;
如果是文件,可以通過(guò)打開(kāi)文件(fopen),來(lái)測(cè)試文件是否可寫(xiě)。
2)在Unix中,當(dāng)php配置文件中開(kāi)啟safe_mode時(shí)(safe_mode=on),is_writeable()同樣不可用。
讀取配置文件是否safe_mode是否開(kāi)啟。
/**
* Tests for file writability
*
* is_writable() returns TRUE on Windows servers when you really can't write to
* the file, based on the read-only attribute. is_writable() is also unreliable
* on Unix servers if safe_mode is on.
*
* @access private
* @return void
*/
if ( ! function_exists('is_really_writable'))
{
function is_really_writable($file)
{
// If we're on a Unix server with safe_mode off we call is_writable
if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE)
{
return is_writable($file);
}
// For windows servers and safe_mode "on" installations we'll actually
// write a file then read it. Bah...
if (is_dir($file))
{
$file = rtrim($file, '/').'/'.md5(mt_rand(1,100).mt_rand(1,100));
if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
{
return FALSE;
}
fclose($fp);
@chmod($file, DIR_WRITE_MODE);
@unlink($file);
return TRUE;
} elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) {
return FALSE;
}
fclose($fp);
return TRUE;
}
}答:用getimagesize來(lái)判斷上傳圖片的類(lèi)型比$_FILES函數(shù)的type更可靠
同一個(gè)文件,使用不同的瀏覽器php返回的type類(lèi)型是不一樣的,由瀏覽器提供type類(lèi)型的話,
就有可能被黑客利用向服務(wù)器提交一個(gè)偽裝撐圖片后綴的可執(zhí)行文件。
可以通過(guò)getimagesize()函數(shù)來(lái)判斷上傳的文件類(lèi)型,如果是頭像文件 會(huì)返回這樣的一個(gè)數(shù)組
Array ( [0] => 331 [1] => 234 [2] => 3 [3] => width="331" height="234" [bits] => 8 [mime] => image/png );
答:基本原則:不對(duì)外界展示服務(wù)器或程序設(shè)計(jì)細(xì)節(jié)(屏蔽錯(cuò)誤),不相信任何用戶提交的數(shù)據(jù)(過(guò)濾用戶提交)
1)屏蔽錯(cuò)誤,將display_errors 設(shè)置為off
2)過(guò)濾用戶提交參數(shù),這里需要注意的是不能僅僅通過(guò)瀏覽器端的驗(yàn)證,還需要經(jīng)過(guò)服務(wù)器端的過(guò)濾
這里是需要注意最多的地方,因?yàn)樗杏脩籼峤坏臄?shù)據(jù)入口都在這里,這是過(guò)濾數(shù)據(jù)的第一步。 1 考慮是否過(guò)濾select,insert,update,delete,drop,create等直接操作數(shù)據(jù)的命令語(yǔ)句 2 使用addslashes 將所有特殊字符過(guò)濾 3 打開(kāi)magic_quotes_gpc,開(kāi)啟該參數(shù)數(shù)后自動(dòng)將sql語(yǔ)句轉(zhuǎn)換,將 ' 轉(zhuǎn)換成 \'
3)可以考慮設(shè)置統(tǒng)一入口,只允許用戶通過(guò)指定的入口訪問(wèn),不能訪問(wèn)未經(jīng)許可的文件等內(nèi)容
4)可以考慮對(duì)安全性要求高的文件進(jìn)行來(lái)源驗(yàn)證,比如要想執(zhí)行b.php必須先執(zhí)行a.php,可以在b.php中判斷來(lái)自a.php的referer,避免用戶直接執(zhí)行b.php
答:由于 –enable-cli 和 –enable-cgi 同時(shí)默認(rèn)有效,因此,不必再配置行中加上 –enable-cli 來(lái)使得 CLI 在 make install 過(guò)程中被拷貝到 {PREFIX}/bin/php
php -f “index.php” php -r “print_r(get_defined_constants());”
說(shuō)明:
1)如果,你熟悉PHP源碼,那么請(qǐng)從源碼入手,回答些問(wèn)題,會(huì)獲得額外加分
2)如果,你不熟悉PHP源碼,那么盡你所能,多寫(xiě)點(diǎn)東西,包括利用自己的編程直覺(jué)得到的信息,都可以。
3)對(duì),則有分,錯(cuò)誤不扣,不寫(xiě)無(wú)分。
答:PHP可以自動(dòng)進(jìn)行內(nèi)存管理,清除不再需要的對(duì)象。PHP使用了引用計(jì)數(shù)(referencecounting)這種單純的垃圾回收(garbagecollection)機(jī)制。每個(gè)對(duì)象都內(nèi)含一個(gè)引用計(jì)數(shù)器,每個(gè)reference連接到對(duì)象,計(jì)數(shù)器加1。當(dāng)reference離開(kāi)生存空間或被設(shè)為NULL,計(jì)數(shù)器減1。當(dāng)某個(gè)對(duì)象的引用計(jì)數(shù)器為零時(shí),PHP知道你將不再需要使用這個(gè)對(duì)象,釋放其所占的內(nèi)存空間。
1. get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)。 2. get是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個(gè)字段一一對(duì)應(yīng),在URL中可以看到。post是通過(guò)HTTP post機(jī)制,將表單內(nèi)各個(gè)字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個(gè)過(guò)程。 3. get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。 4. get安全性非常低,post安全性較高。但是執(zhí)行效率卻比Post方法好。
一:在php.ini中設(shè)置session.gc_maxlifetime = 1440 //默認(rèn)時(shí)間 二:代碼實(shí)現(xiàn) $ lifeTime = 24 * 3600; //保存一天 session_set_cookie_params($ lifeTime); 在session_start();
他問(wèn)的是已經(jīng)支付成功后,但是回調(diào)失敗了。
自己可以創(chuàng)建定時(shí)任務(wù)在每天的凌晨執(zhí)行,去微信那邊對(duì)賬,然后更新數(shù)據(jù)庫(kù)訂單狀態(tài)。
來(lái)自PHP技術(shù)交流群 群友分享
使用MD5實(shí)現(xiàn)對(duì)接口加簽,目的是為了防止篡改數(shù)據(jù)。
基于網(wǎng)關(guān)實(shí)現(xiàn)黑明單與白名單攔截
可以使用rsa非對(duì)稱加密 公鑰和私鑰互換
如果是開(kāi)放接口的話,可以采用oath3.0協(xié)議
使用Https協(xié)議加密傳輸,但是傳輸速度慢
對(duì)一些特殊字符實(shí)現(xiàn)過(guò)濾 防止xss、sql注入的攻擊
定期使用第三方安全掃描插件
接口采用dto、do實(shí)現(xiàn)參數(shù)轉(zhuǎn)化 ,達(dá)到敏感信息脫敏效果
使用token+圖形驗(yàn)證碼方法實(shí)現(xiàn)防止模擬請(qǐng)求
使用對(duì)ip訪問(wèn)實(shí)現(xiàn)接口的限流,對(duì)短時(shí)間內(nèi)同一個(gè)請(qǐng)求(ip)一直訪問(wèn)接口 進(jìn)行限制。
看看你的服務(wù)的訪問(wèn)日志,在防火墻中加過(guò)濾,或者在web服務(wù)器中加過(guò)濾吧。方法有以下幾種。
對(duì)于特定的IP訪問(wèn)的情況,限制IP訪問(wèn)
限制同一IP在單位時(shí)間內(nèi)的訪問(wèn)次數(shù)
上級(jí)服務(wù)器,提高吞吐能力
是消耗服務(wù)器資源為主還是純流量攻擊?消耗資源的可以通過(guò)配置防火墻過(guò)濾規(guī)則防御中小規(guī)模的攻擊。如果是純流量攻擊,考慮你用的是linode真心無(wú)解。即便你封了IP封了端口也沒(méi)用,人家不管你接不接受他的請(qǐng)求,他都會(huì)塞滿你的帶寬。linode必然認(rèn)為你是被流量攻擊或者消耗過(guò)多資源然后給你掛起。
Groupadd mysql 添加一個(gè)用戶組mysql Useradd -g mysql mysql 添加一個(gè)mysql用戶指定分組為mysql Cd /lamp/mysql 進(jìn)入mysql目錄 ./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all Make Make all
優(yōu)化程序,優(yōu)化數(shù)據(jù)庫(kù),如果程序和數(shù)據(jù)庫(kù)已經(jīng)最優(yōu)化,使用以下解決方法:
確定當(dāng)前服務(wù)器設(shè)備是否滿足流量需求。
使用Memcache緩存技術(shù),把動(dòng)態(tài)內(nèi)容緩存到文件中,動(dòng)態(tài)網(wǎng)頁(yè)直接調(diào)用這些文件,而不必再訪問(wèn)數(shù)據(jù)庫(kù)。
禁止外部盜鏈,圖片和文件外部盜鏈會(huì)給服務(wù)器帶來(lái)大量的負(fù)載壓力,可以通過(guò)refer來(lái)禁止外部盜鏈,或者使用apache來(lái)配置禁止盜鏈。
控制大文件的下載,大文件的下載對(duì)于非SCSI硬盤(pán)來(lái)說(shuō)會(huì)占用大量的資源,導(dǎo)致服務(wù)器的響應(yīng)能力下降。
使用不同的主機(jī)分流主要流量,使服務(wù)器均衡負(fù)載。
使用流量統(tǒng)計(jì)軟件統(tǒng)計(jì)分析網(wǎng)站流量,可以知道哪些地方耗費(fèi)了大量的流量,哪些頁(yè)面需要再進(jìn)行優(yōu)化。
1)索引的目的是什么?
快速訪問(wèn)數(shù)據(jù)表中的特定信息,提高檢索速度
創(chuàng)建唯一性索引,保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性
加速表和表之間的連接
使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),可以顯著減少查詢中分組和排序的時(shí)間
2) 索引對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的負(fù)面影響是什么?
負(fù)面影響:創(chuàng)建索引和維護(hù)索引需要耗費(fèi)時(shí)間,這個(gè)時(shí)間隨著數(shù)據(jù)量的增加而增加;索引需要占用物理空間,不光是表需要占用數(shù)據(jù)空間,每個(gè)索引也需要占用物理空間;當(dāng)對(duì)表進(jìn)行增、刪、改的時(shí)候索引也要?jiǎng)討B(tài)維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。
3) 為數(shù)據(jù)表建立索引的原則有哪些?
在最頻繁使用的、用以縮小查詢范圍的字段上建立索引
在平頻繁使用的、需要排序的字段上建立索引
4) 什么情況下不宜建立索引?
對(duì)于查詢中很少涉及的列或者重復(fù)值比較多的列,不宜建立索引
對(duì)于一些特殊的數(shù)據(jù)類(lèi)型,不宜建立索引,比如文本字段(text),值范圍較少的知道等。
單引號(hào)不能解釋變量,而雙引號(hào)可以解釋變量。
單引號(hào)不能轉(zhuǎn)義字符,在雙引號(hào)中可以轉(zhuǎn)義字符。
方法一:
<?php
class Dtime{
function get_days($date1, $date2){
$time1 = strtotime($date1);
$time2 = strtotime($date2);
return ($time2-$time1)/86400;
}
}
$Dtime = new Dtime;
echo $Dtime->get_days(’2021-2-5′, ’2021-3-6′);
?>
方法二:
<?php
$temp = explode(‘-’, ’2021-2-5′);
$time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
$temp = explode(‘-’, ’2021-3-6′);
$time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
echo ($time2-$time1)/86400;
方法三:echo abs(strtotime(“2021-2-5″)-strtotime(“2021-3-1″))/60/60/24 計(jì)算時(shí)間差<?php
function BubbleSort(&$arr){
$cnt=count($arr);
$flag=1;
for($i=0;$i<$cnt;$i++){
if($flag==0){
return;
}
$flag=0;
for($j=0;$j<$cnt-$i-1;$j++){
if($arr[$j]>$arr[$j+1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
$flag=1;
}
}
}
}
$test=array(1,3,6,8,2,7);
BubbleSort($test);
var_dump($test);感謝各位的閱讀,以上就是“PHP常見(jiàn)面試問(wèn)答題有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)PHP常見(jiàn)面試問(wèn)答題有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
網(wǎng)頁(yè)名稱:PHP常見(jiàn)面試問(wèn)答題有哪些
轉(zhuǎn)載注明:http://www.chinadenli.net/article22/gidecc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、微信公眾號(hào)、網(wǎng)站收錄、企業(yè)網(wǎng)站制作、外貿(mào)建站、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)