1.PHP的冒泡排序
<?php
//定一個(gè)數(shù)組
$arr = [10,1,5,4,7,9,3,6];
//控制輪次數(shù)
for($i = 0; $i < count($arr); $i++)
{
//控制次數(shù)
for($j = $i + 1; $j < count($arr); $j++)
{
//如果當(dāng)前值大于后面的值
if($arr[$i] > $arr[$j])
{
//位置交換
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
//輸出
echo '<pre>';
print_r($arr);
echo '<pre/>';
?>
2. SESSION 與 COOKIE的區(qū)別是什么郑叠,請(qǐng)從協(xié)議孙技,產(chǎn)生的原因與作用說明?
1产禾、http無狀態(tài)協(xié)議,不能區(qū)分用戶是否是從同一個(gè)網(wǎng)站上來的牵啦,同一個(gè)用戶請(qǐng)求不同的頁面不能看做是同一個(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ù)庫中西篓,默認(rèn)保存在文件中,文件路徑由php配置文件的session.save_path指定憋活。Session文件是公有的岂津。
3.請(qǐng)寫出數(shù)據(jù)類型(int char varchar datetime text)的意思;請(qǐng)問 varchar 和 char有什么區(qū)別悦即?
Int 整數(shù) char 定長字符 Varchar 變長字符 Datetime 日期時(shí)間型 Text 文本型 Varchar 與char的區(qū)別 char是固定長度的字符類型吮成,分配多少空間,就占用多長空間辜梳。 Varchar是可變長度的字符類型粱甫,內(nèi)容有多大就占用多大的空間,能有效節(jié)省空間作瞄。 由于varchar類型是可變的茶宵,所以在數(shù)據(jù)長度改變的時(shí),服務(wù)器要進(jìn)行額外的操作宗挥,所以效率比char類型低乌庶。
4. isset() 和 empty() 區(qū)別
Isset判斷變量是否存在,可以傳入多個(gè)變量契耿,若其中一個(gè)變量不存在則返回假瞒大,empty判斷變量是否為空為假,只可傳一個(gè)變量搪桂,如果為空為假則返回真透敌。
5.請(qǐng)說明 PHP 中傳值與傳引用的區(qū)別。什么時(shí)候傳值什么時(shí)候傳引用踢械?
按值傳遞:函數(shù)范圍內(nèi)對(duì)值的任何改變?cè)诤瘮?shù)外部都會(huì)被忽略
按引用傳遞:函數(shù)范圍內(nèi)對(duì)值的任何改變?cè)诤瘮?shù)外部也能反映出這些修改
優(yōu)缺點(diǎn):按值傳遞時(shí)拙泽,php必須復(fù)制值。特別是對(duì)于大型的字符串和對(duì)象來說裸燎,這將會(huì)是一個(gè)代價(jià)很大的操作顾瞻。按引用傳遞則不需要復(fù)制值,對(duì)于性能提高很有好處德绿。
6.PHP常用的字符操作函數(shù)
trim()
函數(shù)可以去除字符串的開始位置和結(jié)束位置的空格荷荤,并將結(jié)果字符串返回退渗,默認(rèn)情況下去除的字符是換行符和回車符(\n和\r),水平和垂直制表符(\t和X0B)
ltrim()
函數(shù)只從字符的開始處(左邊)去除空格
rtrim()
函數(shù)只從函數(shù)的結(jié)束處(右邊)去除空格
strtoupper
將字符串轉(zhuǎn)為大寫
strtolower
將字符串轉(zhuǎn)為小寫
ucfirst
如果字符串第一個(gè)字符是字母,將其轉(zhuǎn)為大寫
ucwords
將字符串的每個(gè)單詞的首字母大寫
strcmp()
比較兩個(gè)字符串蕴纳,如果相等会油,函數(shù)返回0
strlen()
函數(shù)測(cè)試字符串的長度
strpos($str,search,[int])
查找search在$str中的第一次位置從int開
stripos($str,search,[int])
函數(shù)返回字符串在另一個(gè)字符串中第一次出現(xiàn)的位置。該函數(shù)對(duì)大小寫不敏感
strrpos($str,search,[int])
查找search在$str中的最后一次出現(xiàn)的位置從int
submit($str,int start[,int length])
從$str中strat位置開始提取[length長度的字符串]古毛。
strstr($str1,$str2)
從$str1(第一個(gè)的位置)搜索$str2并從它開始截取到結(jié)束字符串;若沒有則返回FALSE.
7.PHP 常用的數(shù)組操作函數(shù)
一翻翩、變量與數(shù)組的轉(zhuǎn)換
compact()
將變量以變量名的方式組裝成數(shù)組
<?php
$bianliang1 = '趙';
$bianliang2 = '銳';
$arr = compact('bianliang1','bianliang2');
//返回的結(jié)果為
['bianliang1'=>'趙','bianliang2'=>'銳'];
//應(yīng)用場(chǎng)景1
在TP稻薇、Laravel中將查詢出來的數(shù)據(jù)向末班引擎中添加的時(shí)候會(huì)用到..
extract()
將數(shù)組解析成變量/ 和compact是反轉(zhuǎn)的
<?php
$arr = ['bianliang1'=>'趙','bianliang2'=>'銳']嫂冻;
extract($arr);
//使用-輸出bianliang1(相當(dāng)于你聲明了一次變量,有點(diǎn)向ES6解構(gòu)賦值的意思)
echo $bianliang1;
二塞椎、變量和字符串的轉(zhuǎn)換
<?php
$str = '熱愛,喜歡,興奮';
$arr = explode(',',$str);//表示以字符串中的逗號(hào)分隔成數(shù)組
//結(jié)果為
['熱愛','喜歡','興奮'];
如果解析的字符串是個(gè)空字符串,結(jié)果是一個(gè)數(shù)組有一個(gè)索引為0的值桨仿,值為空;并不是個(gè)空數(shù)組;
<?php
$arr = ['熱愛','喜歡','興奮'];
//將數(shù)組解析成字符串
$str = implode(',',$arr);
//得到的結(jié)果為
'熱愛,喜歡,興奮'
三、數(shù)組和數(shù)組之間關(guān)系
array_merge()
并集關(guān)系
<?php
$arr1 = ['趙','上','的'];
$arr2 = ['張','趙'];
//將2個(gè)數(shù)組合并
$arr_mer = array_merge($arr1,$arr2)案狠;
//結(jié)果為
['趙','上','的','張','趙']
array_diff()
差集關(guān)系
<?php
$arr1 = ['趙','上','的'];
$arr2 = ['張','趙'];
//獲取第一個(gè)數(shù)組在第二個(gè)數(shù)組中的差集部分,就是沒有的部分
$arr_dif = array_diff($arr1,$arr2)服傍;
//結(jié)果為
['上','的']
array_intersect()
交集關(guān)系
$arr1 = ['趙','上','的'];
$arr2 = ['張','趙'];
//獲取2個(gè)數(shù)組相交集的部分?jǐn)?shù)組
$arr_inter = array_intersect($arr1,$arr2);
//結(jié)果為
['趙']
四、數(shù)組值的操作
array_pop()
刪除數(shù)組最后一個(gè)值
<?php
$arr = ['趙','上','的'];
array_pop($arr);//刪除數(shù)組最后一個(gè)值
//結(jié)果為
['趙','上']
array_push()
向數(shù)組中追加一個(gè)值
<?php
$arr = ['趙','上','的'];
array_push($arr骂铁,'王');//支持多個(gè)參數(shù),比如第三個(gè)參數(shù) 仍然會(huì)被追加到數(shù)組中去
//得到結(jié)果為: (array_push不需要接收,直接引用操作原數(shù)組)
echo $arr;
['趙','上','的'吹零,'王'];
五拉庵、判斷值是否存在數(shù)組中
array_in()
判斷值是否存在數(shù)組中
<?php
$arr = ['name'=>'趙銳慶','age'=>18,'class'=>'大班'];
$bol = in_array('趙銳慶',$arr);//如果存在返回true 否則返回false
//得到結(jié)果為true
array_key_exists()
判斷鍵是否存在數(shù)組中
<?php
$arr = ['name'=>'趙銳慶','age'=>18,'class'=>'大班'];
$bol = array_key_exists('name',$arr);//如果值存在返回true灿椅,否則返回false
//得到結(jié)果為true
六、數(shù)組去重
array_unique()
數(shù)組去從
<?php
$arr = ['趙','趙','銳'];
$arr_uni = array_unique($arr);//數(shù)組去重
//得到的結(jié)果為
['趙','銳']
七名段、獲取二維數(shù)組中值的集合
array_column()
獲取二維數(shù)組中值的集合
$arr = [
['name'=>'趙銳慶','id'=>'one','school'=>'南理工'],
['name'=>'孫悟空','id'=>'two','school'=>'南理工'],
['name'=>'劉德華','id'=>'three','school'=>'南理工'],
['name'=>'朱德','id'=>'four','school'=>'南理工'],
];
//提取name為鍵的值構(gòu)成一維數(shù)組
$arr_colu = array_column($arr,'name');
//得到結(jié)果
['趙銳慶','孫悟空','劉德華','朱德']
//提取那么為鍵的值切提取對(duì)應(yīng)數(shù)組紅的id值作為鍵構(gòu)成一維鍵值數(shù)組
$arr_colu = array_column($arr,'name','id');
['one'=>'趙銳慶','two'=>'孫悟空','three'=>'劉德華','four'=>'朱德']
八、提取數(shù)組的鍵與值
array_values()
獲取數(shù)組的鍵
<?php
$arr = ['name'=>'趙銳慶','id'=>'one','school'=>'南理工'];
$arr_val = array_values($arr);//提取數(shù)組中的值
//得到的結(jié)果為
['趙銳慶','one','南理工'];
array_keys()
獲取數(shù)組的值
<?php
$arr = ['name'=>'趙銳慶','id'=>'one','school'=>'南理工'];
$arr_key = array_keys($arr)泣懊;//提取數(shù)組中鍵的集合
//得到結(jié)果為
['name','id','school'];
九伸辟、返回?cái)?shù)組中值的和
array_count()
返回?cái)?shù)組中值的和
$arr = ['name'=>'趙銳慶','id'=>'one','school'=>'南理工'];
$number = count($arr);
//返回的結(jié)果
3
十、返回?cái)?shù)組隨機(jī)的鍵
array_rand()
返回?cái)?shù)組隨機(jī)的鍵
$arr = ['name'=>'趙銳慶','id'=>'one','school'=>'南理工'];
$number = array_rand($arr);
//返回的結(jié)果
'id'
十一馍刮、搜索值是否存在數(shù)組中
array_search()
搜索值是否存在數(shù)組中
<?php
$arr = ['name'=>'趙銳慶','id'=>'one','school'=>'南理工'];
$is = array_search('趙銳慶'=>$arr);
//返回的結(jié)果
'name'
十二信夫、多維數(shù)組進(jìn)行排序
/*
上面講的數(shù)組排序都是指的一個(gè)整體數(shù)組,索引數(shù)組升序降序等等或者關(guān)聯(lián)數(shù)組根據(jù)鍵值對(duì)的升序或者排序;
而這里將的排序是一個(gè)數(shù)組收到其他數(shù)組的影響進(jìn)行排序卡啰;其實(shí)這種方式就如同對(duì)數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行升降排序的道理是一致的;
*/
$guys = array(
array('name'=>'jake', 'score'=>80, 'grade' =>'A'),
array('name'=>'jina', 'score'=>70, 'grade'=>'A'),
array('name'=>'john', 'score'=>30, 'grade' =>'A'),
array('name'=>'sss', 'score'=>70, 'grade'=>'C'),
array('name'=>'ben', 'score'=>20, 'grade'=>'B')
);
//如上有一個(gè)數(shù)組静稻,要求根據(jù)score字段升序,相同的情況下根據(jù)name字段排序;
$score = array_column($guys,”score”);
$score = array_column($guys,”name”);
Array_multisort($score,SORT_ASC,$name,SORT_DESC,$guys );
8.php讀取文件內(nèi)容的幾種方法和函數(shù)匈辱?
打開文件振湾,然后讀取。Fopen() fread()
打開讀取一次完成 file_get_contents()
9.簡述Cookie的設(shè)置及獲取過程
設(shè)置COOKIE的值:
Setcookie(名稱亡脸,值押搪,保存時(shí)間树酪,有效域);
獲取值:$_COOKIE['名稱'];
10.面向?qū)ο笾薪涌诤统橄箢惖膮^(qū)別及應(yīng)用場(chǎng)景?
- 有抽象方法的類叫做抽象類,抽象類中不一定只有抽象方法大州,抽象方法必須使用abstract關(guān)鍵字定義续语。
- 接口中全部是抽象方法,方法不用使用abstract定義。
- 當(dāng)多個(gè)同類的類要設(shè)計(jì)一個(gè)上層厦画,通常設(shè)計(jì)為抽象類疮茄,當(dāng)多個(gè)異構(gòu)的類要設(shè)計(jì)一個(gè)上層,通常設(shè)計(jì)為接口根暑。
11.對(duì)于大流量的網(wǎng)站,您采用什么樣的方法來解決訪問量問題?
優(yōu)化程序力试,優(yōu)化數(shù)據(jù)庫,如果程序和數(shù)據(jù)庫已經(jīng)最優(yōu)化购裙,使用以下解決方法:
- 確定當(dāng)前服務(wù)器設(shè)備是否滿足流量需求懂版。
- 使用Memcache緩存技術(shù),把動(dòng)態(tài)內(nèi)容緩存到文件中躏率,動(dòng)態(tài)網(wǎng)頁直接調(diào)用這些文件躯畴,而不必再訪問數(shù)據(jù)庫。
- 禁止外部盜鏈薇芝,圖片和文件外部盜鏈會(huì)給服務(wù)器帶來大量的負(fù)載壓力蓬抄,可以通過refer來禁止外部盜鏈,或者使用apache來配置禁止盜鏈夯到。
- 控制大文件的下載嚷缭,大文件的下載對(duì)于非SCSI硬盤來說會(huì)占用大量的資源,導(dǎo)致服務(wù)器的響應(yīng)能力下降耍贾。
- 使用不同的主機(jī)分流主要流量阅爽,使服務(wù)器均衡負(fù)載。
- 使用流量統(tǒng)計(jì)軟件統(tǒng)計(jì)分析網(wǎng)站流量荐开,可以知道哪些地方耗費(fèi)了大量的流量付翁,哪些頁面需要再進(jìn)行優(yōu)化。
12.用PHP寫出顯示客戶端IP與服務(wù)器IP的代碼
獲取客戶端IP:$_SERVER(“REMOTE_ADDR”)
;
獲取服務(wù)器端IP:$_SERVER["SERVER_ADDR"]
;
13.寫一個(gè)函數(shù)晃听,能夠遍歷一個(gè)文件夾下的所有文件和子文件夾百侧。
<?php
function my_scandir($dir){
$files = array();
if ( $handle = opendir($dir) ){
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".." && $file != "." ) {
if ( is_dir($dir . "/" . $file) ) {
$files[$file] = scandir($dir . "/" . $file);
}else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
14.數(shù)據(jù)庫索引有幾類,分別是什么能扒?什么時(shí)候該用索引佣渴?
普通索引
、主鍵索引
初斑、唯一索引
并非所有的數(shù)據(jù)庫都以相同的方式使用索引辛润,作為通用規(guī)則,只有當(dāng)經(jīng)常查詢列中的數(shù)據(jù)時(shí)才需要在表上創(chuàng)建索引见秤。
15.寫幾個(gè)魔術(shù)方法并說明作用频蛔?
__call()當(dāng)調(diào)用不存在的方法時(shí)會(huì)自動(dòng)調(diào)用的方法
__autoload()在實(shí)例化一個(gè)尚未被定義的類是會(huì)自動(dòng)調(diào)用次方法來加載類文件
__set()當(dāng)給未定義的變量賦值時(shí)會(huì)自動(dòng)調(diào)用的方法
__get()當(dāng)獲取未定義變量的值時(shí)會(huì)自動(dòng)調(diào)用的方法
__construct()構(gòu)造方法灵迫,實(shí)例化類時(shí)自動(dòng)調(diào)用的方法
__destroy()銷毀對(duì)象時(shí)自動(dòng)調(diào)用的方法
__unset()當(dāng)對(duì)一個(gè)未定義變量調(diào)用unset()時(shí)自動(dòng)調(diào)用的方法
__isset()當(dāng)對(duì)一個(gè)未定義變量調(diào)用isset()方法時(shí)自動(dòng)調(diào)用的方法
__clone()克隆一個(gè)對(duì)象
__tostring()當(dāng)輸出一個(gè)對(duì)象時(shí)自動(dòng)調(diào)用的方法
16.++i 和 i++哪一個(gè)效率高,為什么晦溪?
++i效率比i++的效率更高瀑粥,因?yàn)?+i少了一個(gè)返回i的過程。
17.magic_quotes_gpc()三圆、magic_quotes_runtime()的意思是什么狞换?
Magic_quotes_gpc()是php配置文件中的,如果設(shè)置為on則會(huì)自動(dòng)POST,GET,COOKIE中的字符串進(jìn)行轉(zhuǎn)義舟肉,在‘之前加\
Magic_quotes_runtime()是php中的函數(shù)修噪,如果參數(shù)為true則會(huì)數(shù)據(jù)庫中取出來的單引號(hào)、雙引號(hào)路媚、反斜線自動(dòng)加上反斜杠進(jìn)行轉(zhuǎn)義黄琼。
18. 框架中什么是單一入口和多入口,單一入口的優(yōu)缺點(diǎn)整慎?
- 多入口就是通過訪問不同的文件來完成用戶請(qǐng)求脏款。
單一入口指web程序所有的請(qǐng)求都指向一個(gè)腳本文件的。
- 單一入口更容易控制權(quán)限裤园,方便對(duì)http請(qǐng)求可以進(jìn)行安全性檢查撤师。
缺點(diǎn):URL看起來不那么美觀,特別是對(duì)搜索引擎來說不友好拧揽。
19. 對(duì)關(guān)系型數(shù)據(jù)庫而言剃盾,索引是相當(dāng)重要的概念淤袜,請(qǐng)回答有關(guān)索引幾個(gè)問題:
索引的目的是什么?
- 快速訪問數(shù)據(jù)表中的特定信息痒谴,提高檢索速度
- 創(chuàng)建唯一性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性
- 加速表和表之間的連接
- 使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí)铡羡,可以顯著減少查詢中分組和排序的時(shí)間
索引對(duì)數(shù)據(jù)庫系統(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ù)速度贪壳。
為數(shù)據(jù)表建立索引的原則有哪些?
在最頻繁使用的、用以縮小查詢范圍的字段上建立索引
在平頻繁使用的蚜退、需要排序的字段上建立索引
什么情況下不宜建立索引?
- 對(duì)于查詢中很少涉及的列或者重復(fù)值比較多的列闰靴,不宜建立索引
- 對(duì)于一些特殊的數(shù)據(jù)類型彪笼,不宜建立索引,比如文本字段(text)蚂且,值范圍較少的知道等配猫。
20.web應(yīng)用中,數(shù)據(jù)庫的讀取頻率遠(yuǎn)高于寫入頻率, 如何優(yōu)化MySQL而應(yīng)對(duì)此種情景?
使用memcache緩存技術(shù),將動(dòng)態(tài)數(shù)據(jù)緩存到文件杏死,訪問動(dòng)態(tài)頁面時(shí)直接調(diào)用緩存文件泵肄,而不必重新訪問數(shù)據(jù)庫,這樣就減少了查詢數(shù)據(jù)庫的次數(shù)淑翼。
如果網(wǎng)站的訪問量很大腐巢,可以把數(shù)據(jù)庫讀寫服務(wù)器分開,使用多臺(tái)服務(wù)器去處理數(shù)據(jù)庫查詢玄括,使用較少的服務(wù)器去處理數(shù)據(jù)庫的寫入和修改冯丙。
21. include與require的區(qū)別?
1.include()
在執(zhí)行文件時(shí)每次都要進(jìn)行讀取和評(píng)估
require()
文件只處理一次(實(shí)際上文件內(nèi)容替換了require()語句)
2.require()
通常放在PHP腳本程序的最前面
include()
的使用和require()
一樣,一般放在流程控制的處理區(qū)段中,PHP腳本文件讀到include()
語句時(shí),才將它包含的文件讀進(jìn)來,這種方式,可以把程序執(zhí)行時(shí)的流程簡單化
3,require()
和include()
語句是語言結(jié)構(gòu),不是真正的函數(shù),可以像PHP的其他語言結(jié)構(gòu)一樣
4,include_once()
和require_once()
語句也是在腳本執(zhí)行期間包括并運(yùn)行指定文件,與include()
require()
唯一的區(qū)別是如果文件中的代碼已經(jīng)被包括了,則不會(huì)再次包括.
5,require()
包含文件失敗,停止執(zhí)行,給出錯(cuò)誤(致命的)
include()
常用于動(dòng)態(tài)包含.
通常是自動(dòng)加載的文件,即使加載出錯(cuò),整個(gè)程序還是繼續(xù)執(zhí)行
一個(gè)頁面聲明,另一個(gè)頁面調(diào)用
包函文件失敗,繼續(xù)向下執(zhí)行,返回一條警告
22. PHP字符串中單引號(hào)與雙引號(hào)的區(qū)別?
單引號(hào)不能解釋變量,而雙引號(hào)可以解釋變量遭京。
單引號(hào)不能轉(zhuǎn)義字符胃惜,在雙引號(hào)中可以轉(zhuǎn)義字符。
23.了解XSS攻擊嗎? 如何防止 ?
- XSS是跨站腳本攻擊洁墙,首先是利用跨站腳本漏洞以一個(gè)特權(quán)模式去執(zhí)行攻擊者構(gòu)造的腳本蛹疯,然后利用不安全的Activex控件執(zhí)行惡意的行為。
- 使用htmlspecialchars()函數(shù)對(duì)提交的內(nèi)容進(jìn)行過濾热监,使字符串里面的特殊符號(hào)實(shí)體化捺弦。
SQL注入漏洞產(chǎn)生的原因 ? 如何防止?
SQL注入產(chǎn)生的原因:程序開發(fā)過程中不注意規(guī)范書寫sql語句和對(duì)特殊字符進(jìn)行過濾,導(dǎo)致客戶端可以通過全局變量POST和GET提交一些sql語句正常執(zhí)行孝扛。
24. 防止SQL注入:
- 開啟配置文件中的magic_quotes_gpc和magic_quotes_runtime設(shè)置
- 執(zhí)行sql語句時(shí)使用addslashes進(jìn)行sql語句轉(zhuǎn)換
- Sql語句書寫盡量不要省略小引號(hào)和單引號(hào)
- 過濾掉sql語句中的一些關(guān)鍵字:update列吼、insert、delete苦始、select寞钥、*
- 提高數(shù)據(jù)庫表和字段的命名技巧,對(duì)一些重要的字段根據(jù)程序的特點(diǎn)命名陌选,取不易被猜到的理郑。
- Php配置文件中設(shè)置register_globals為off,關(guān)閉全局變量注冊(cè)
- 控制錯(cuò)誤信息咨油,不要再瀏覽器上輸出錯(cuò)誤信息您炉,將錯(cuò)誤信息寫到日志文件中。
25.役电、如何處理負(fù)載赚爵,高并發(fā)?
- HTML靜態(tài)化
效率最高、消耗最小的就是純靜態(tài)化的html頁面冀膝,所以我們盡可能使我們的 網(wǎng)站上的頁面采用靜態(tài)頁面來實(shí)現(xiàn)唁奢,這個(gè)最簡單的方法其實(shí)也是最有效的方法。 - 圖片服務(wù)器分離
把圖片單獨(dú)存儲(chǔ)窝剖,盡量減少圖片等大流量的開銷麻掸,可以放在一些相關(guān)的平臺(tái)上,如七牛等 - 數(shù)據(jù)庫集群和庫表散列及緩存
數(shù)據(jù)庫的并發(fā)連接為100赐纱,一臺(tái)數(shù)據(jù)庫遠(yuǎn)遠(yuǎn)不夠论笔,可以從讀寫分離、主從復(fù)制千所,數(shù)據(jù)庫集群方面來著手狂魔。另外盡量減少數(shù)據(jù)庫的訪問,可以使用緩存數(shù)據(jù)庫如memcache淫痰、redis最楷。 - 鏡像:
盡量減少下載,可以把不同的請(qǐng)求分發(fā)到多個(gè)鏡像端待错。 - 負(fù)載均衡:
Apache的最大并發(fā)連接為1500籽孙,只能增加服務(wù)器,可以從硬件上著手火俄,如F5服務(wù)器犯建。當(dāng)然硬件的成本比較高,我們往往從軟件方面著手瓜客。
26.PHP的基本變量類型
四種標(biāo)量類型:boolean
(布爾型)适瓦、integer
(整型)、float
(浮點(diǎn)型, 也稱作 double)谱仪、string
(字符串)
兩種復(fù)合類型:array
(數(shù)組)玻熙、object
(對(duì)象)
最后是兩種特殊類型:resource
(資源)、NULL
(NULL
26. 什么是面向?qū)ο蠓柙埽恐饕卣魇鞘裁矗?/h1>
面向?qū)ο笫浅绦虻囊环N設(shè)計(jì)方式嗦随,它利于提高程序的重用性,使程序結(jié)構(gòu)更加清晰敬尺。主要特征:封裝枚尼、繼承、多態(tài)砂吞。
封裝
:封裝就是隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié)署恍,僅對(duì)外公開接口,控制在程序中屬性的讀和修改的訪問級(jí)別呜舒,將抽象得到的數(shù)據(jù)和行為(或功能)相結(jié)合锭汛,形成一個(gè)有機(jī)的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進(jìn)行有機(jī)的結(jié)合袭蝗,形成“類”唤殴,其中數(shù)據(jù)和函數(shù)都是類的成員。
封裝的目的是增強(qiáng)安全性和簡化編程到腥,使用者不必了解具體的實(shí)現(xiàn)細(xì)節(jié)朵逝,而只是要通過外部接口,以特定的訪問權(quán)限來使用類的成員乡范。
繼承
:繼承是面向?qū)ο蟮幕咎卣髦慌涿^承機(jī)制允許創(chuàng)建分等級(jí)層次的類。繼承就是子類繼承父類的特征和行為晋辆,使得子類對(duì)象(實(shí)例)具有父類的實(shí)例域和方法渠脉,或子類從父類繼承方法,使得子類具有父類相同的行為瓶佳。
多態(tài)
:多態(tài)同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力芋膘。是指一個(gè)類實(shí)例(對(duì)象)的相同方法在不同情形有不同表現(xiàn)形式。多態(tài)機(jī)制使具有不同內(nèi)部結(jié)構(gòu)的對(duì)象可以共享相同的外部接口霸饲。這意味著为朋,雖然針對(duì)不同對(duì)象的具體操作不同,但通過一個(gè)公共的類厚脉,它們(那些操作)可以通過相同的方式予以調(diào)用习寸。