“ 解析 BAT 經典面試題”
Hello,大家好。我是公衆號 “八點半技術站” 的小編 - Bruce.D。
今天是週一(2020-06-08),分享一句諺語 “讀書有三到,心到口到眼到” 。分享給大家的是 「工具 模塊」- 解析BAT面試題(下篇)。
很多人對 BAT 以及其他大廠,也是朝思暮想。也因爲一些原因,暫時還未能加入。大廠中有很多經典面試題,直到現在也會用,不要問小編爲什麼知道(保密)。
因此歡迎熱愛 IT編程的各位精英,歡迎進入wechat技術羣(底部有二維碼)一起交流成長。
花幾分鐘時間看看經典BAT面試題,瀏覽瀏覽,或許對你有用!!!
1
1. PHP 中的垃圾回收機制
主要分爲三部分:
(1)引用計數基本知識
(2)回收週期(Collecting Cycles)
(3)性能方面考慮的因素
具體建議參考PHP官方手冊:
https://www.php.net/manual/zh/features.gc.php
Q:爲什麼推薦直接瞭解官方地址呢?
A:我谷歌搜索了一遍,感覺普遍博主講的也就是將官方的粘貼出來,簡單改了改,只有極少部分博主採用自己想法的話述。與其這樣搜索,還不如直接去官方瞭解,豈不美哉。
2
2. Hash 數據結構
主要分爲 數組 + 鏈表
哈希表(Hash table,也叫散列表)
官方:是根據鍵(Key)而直接訪問在內存存儲位置的數據結構。也就是說,它通過計算一個關於鍵值的函數,將所需查詢的數據映射到表中一個位置來訪問記錄,這加快了查找速度。這個映射函數叫做散列函數,存放記錄的數組叫做散列表
自家大白話:通過把Key通過一個固定的算法函數(hash函數)轉換成一個整型數字,然後就對該數字對數組的長度進行取餘,取餘結果就當作數組的下標,將value存儲在以該數字爲下標的數組空間裏。
當使用hash表查詢時,就是使用hash函數將key轉換成對應的數組下標,並定位到該下標的數組空間裏獲取value,這樣就充分利用到數組的定位性能進行數據定位。
3
3. PHP 如何定義編碼形式?
倆種方式:
(1)如果欲使用gb2312編碼,那麼php要輸出頭:
header(“Content-Type: text/html; charset=gb2312")
靜態頁面添加:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
所有文件的編碼格式爲ANSI,可用記事本打開,另存爲選擇編碼爲ANSI,覆蓋源文件。
(2)如果欲使用utf-8編碼,那麼php要輸出頭 :
header(“Content-Type: text/html; charset=utf-8")
靜態頁面添加:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
所有文件的編碼格式爲utf-8。
4
4. 佔位符是如何防止sql注入的?
案例:
$dbh = new PDO("mysql:host=localhost; dbname=demo","user","pass");
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$dbh->exec("set names 'utf8'");
$sql="select * from test where name = ? and password = ?";
$stmt = $dbh->prepare($sql);
$exeres = $stmt->execute(array($testname, $pass));
Q:拿上面這段demo來說如何防止?
A:當調用 prepare() 時,查詢語句已經發送給了數據庫服務器,此時只有佔位符 ? 發送過去,沒有用戶提交的數據;
當調用到 execute()時,用戶提交過來的值纔會傳送給數據庫,他們是分開傳送的,兩者獨立的,SQL攻擊者沒有一點機會。
注:
(1)你不能讓佔位符 ? 代替一組值;
(2)你不能讓佔位符代替數據表名或列名;
(3)你不能讓佔位符 ? 代替任何其他SQL語法。
恭喜你,又讀完了一篇文章。
在這裏,希望你看完的 每篇文章 都能對自己有所提升(哪怕是幫助你再次鞏固記憶)。
完
微信 : xzzs730(長按左側二維碼添加)
技術交流羣:備註技術
PHP|WEB|Java面試羣:備註面試
商務合作:gtcarry888