注:難度不分先後,想起啥記錄啥。
1.單引號和雙引號區別
答:雙引號中的變數可以解析,單引號就是絕對的字串。
2.傳值和傳引用的區別
答:傳值:在函式範圍內,改變變數值得大小,都不不會影響到函式外邊的變數值。
大牛的解釋:
傳值:和copy是一樣的。【打個比方,我有一橦房子,我給你建築材料,你建了乙個根我的房子一模一樣的房子,你在你的房子做什麼事都不會影響到我,我在我的房子裡做什麼事也不會影響到你,彼此獨立。】
<?php
$testa=1; //定義變數a
$testb=2; //定義變數b
$testb = $testa; //變數a賦值給變數b
echo $testb; //顯示為1
?>
傳引用:類似於c語言的指標了,感覺差不多。打個比方,我有一橦房子,我給你一把鑰匙,我們二個都可以進入這個房子,你在房子做什麼都會影響到我。
<?php
$param2=1; //定義變數2
$param1 = &$param2; //將變數2的引用傳給變數1
echo $param2; //顯示為1
$param1 = 2; //把2賦值給變數1
echo $param2; //顯示為2
?>
【優缺點:】傳值會很耗時間,特別是對於大型的字串和物件來說,這將會是乙個代價很大的操作,傳送引用,函式內的任何操作等同於對傳送變數的操作,傳送大型變數時效率高!
3.mysql資料庫引擎myisam和innodb的區別
答:myisam
innodb
構成上的區別:
每個myisam在磁碟上儲存成三個檔案。第乙個檔案的名字以表的名字開始,副檔名指出檔案型別。
.frm檔案儲存表定義。
資料檔案的擴充套件名為.myd (mydata)。
索引檔案的副檔名是.myi (myindex)。
基於磁碟的資源是innodb表空間資料檔案和它的日誌檔案,innodb 表的大小只受限於作業系統檔案的大小,一般為 2gb
事務處理上方面:
myisam型別的表強調的是效能,其執行數度比innodb型別更快,但是不提供事務支援
innodb提供事務支援事務,外部鍵(foreign key)等高階資料庫功能
select update,insert,delete操作
如果執行大量的select,myisam是更好的選擇
1.如果你的資料執行大量的insert或update,出於效能方面的考慮,應該使用innodb表
2.delete from table時,innodb不會重新建立表,而是一行一行的刪除。
3.load table from master操作對innodb是不起作用的,解決方法是首先把innodb表改成myisam表,匯入資料後再改成innodb表,但是對於使用的額外的innodb特性(例如外來鍵)的表不適用
對auto_increment的操作
每表乙個auto_incremen列的內部處理。
myisam為insert和update操作自動更新這一列。這使得auto_increment列更快(至少10%)。在序列頂的值被刪除之後就不能再利用。(當auto_increment列被定義為多列索引的最後一列,可以出現重使用從序列頂部刪除的值的情況)。
auto_increment值可用alter table或myisamch來重置
對於auto_increment型別的字段,innodb中必須包含只有該字段的索引,但是在myisam表中,可以和其他字段一起建立聯合索引
更好和更快的auto_increment處理
如果你為乙個表指定auto_increment列,在資料詞典裡的innodb表控制代碼包含乙個名為自動增長計數器的計數器,它被用在為該列賦新值。
自動增長計數器僅被儲存在主記憶體中,而不是存在磁碟上
關於該計算器的演算法實現,請參考
auto_increment列在innodb裡如何工作
表的具體行數
select count(*) from table,myisam只要簡單的讀出儲存好的行數,注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的
innodb 中不儲存表的具體行數,也就是說,執行select count(*) from table時,innodb要掃瞄一遍整個表來計算有多少行
鎖
表鎖提供行鎖(locking on row level),提供與 oracle 型別一致的不加鎖讀取(non-locking read in
selects),另外,innodb表的行鎖也不是絕對的,如果在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表, 例如update table set num=1 where name like "%aaa%"
4.物件、介面、抽象類
答:php 的物件的實現:
注:物件名稱最好以物件名.class.php來進行命名。
1. 對於靜態類的成員不能使用$this->這個來呼叫其靜態類的成員和函式,應該使用self::成員或者方法來進行呼叫;
2.對於繼承了靜態類的新類需要呼叫父類的靜態方法,應該採用parent::子類的靜態成員和方法來進行呼叫。
3.定義類常量的時候其用const來定義,不能用define來定義。使用也需要使用self::常量成員來訪問。
php的介面的實現:
1.介面的名字最好以l+介面名.php進行命名;
2.需要對介面的類進行每個的實現。
php 的抽象類的實現:
1.使用abstract關鍵字;
2.必須對抽象類的方法進行實現;
抽象類abstract
概念
定義為抽象的類不能被例項化。任何乙個類,如果有乙個方法是被宣告為抽象的,那麼這個類就必須被宣告為抽象的類。
繼承乙個抽象類的時候,子類必須定義父類中的所有抽象方法,這些方法的訪問控制必須喝父類中一樣或者更為寬鬆。
例如,某個抽象方法被宣告為proteced,那麼子類中的實現,就應該宣告為protected或者public,而不能定義為private。
方法的呼叫方式必須匹配,即型別和所需引數數量必須一致,例如,子類定義了乙個可選引數,而父類抽象方法中沒有宣告,則兩者的宣告並沒有衝突。
特點
介面inte***ce
概念
使用介面inte***ce,可以指定某個類必須實現那些方法,但是不需要定義這些方法的具體內容。
要實現乙個介面,使用implements操作符,類中必須實現介面中定義的所有方法。
特點
5.php常見設計模式
6.二分法演算法
1.遞迴演算法實現
/*** @param array $arr 待查詢區間
* @param int $number 查詢數
* @param int $lower 區間最低點
* @param int $high 區間最高點
* @return int
*/function binary_search_recursion(&$arr, $number, $lower, $high)
if ($number > $arr[$middle]) elseif ($number < $arr[$middle]) else
}
2.非遞迴的演算法實現
/*** 二分查詢演算法
* @param array $arr 待查詢區間
* @param int $number 查詢數
* @return int 返回找到的鍵
*/function binary_search($arr, $number)
// 初始變數值
$len = count($arr);
$lower = 0;
$high = $len - 1;
// 最低點比最高點大就退出
while ($lower <= $high) else if ($arr[$middle] < $number) else
}// 未找到,返回-1
return -1;
}
面試題記錄
面試題記錄 2012年6月13日杭州某網路技術公司 1,空指標自加 int p int pa null p pa p 求p的值 這道題考的貌似指標的加法,因為對於空指標比較敏感直接感覺有問題,所以填寫出錯.到底如何呢?直接反彙編之 int p int pa null 010d14f1 mov dwo...
面試題記錄
筆試面試題總結 1,var a 0 function a catch e 0 this.b bbb var aa new a settimeout function 0 settimeout的作用域是window,所以結果為1,2,bbb,b但是將 中的第二個settimeout去掉之後,結果為1,...
面試題記錄
1 linux實時檢視日誌 tail f catalina.out 2 linux檢視埠是否被占用 etstat tunlp grep 埠號,用於檢視指定埠號的程序情況 lsof i 80 3 linux查詢abc開頭的檔案的第一行輸出到指定檔案 system bin sh ls users zha...