八年phper的高階工程師面試之路

member發表於2019-02-16

轉載於:https://zhuanlan.zhihu.com/p/…
答案並非標準,是作者經驗之談,僅供參考

mysql_real_escape_string mysql_escape_string有什麼本質的區別,有什麼用處?

mysql_real_escape_string需要預先連線資料庫,並可在第二個引數傳入資料庫連線(不填則使用上一個連線)

兩者都是對資料庫插入資料進行轉義,但是mysql_real_escape_string轉義時,會考慮資料庫連線的字符集。

它們的用處都是用來能讓資料正常插入到資料庫中,並防止sql注入,但是並不能做到100%防止sql注入。

為什麼上述函式仍然無法100%防止SQL隱碼攻擊

因為客戶端編碼以及伺服器端編碼不同,可能產生注入問題,但是其實這種場景不多見。

PHP的連線元件mysql為什麼被棄用?

被棄用的原因是官方不再建議使用mysql_xx的資料庫操作方式,建議使用pdo和mysqli,因為不管從效能跟安全來看,mysqli都比mysql要好。

PHP的連線元件MySQLi 為什麼比 MySQL好

什麼是記憶體洩漏,js記憶體洩漏是怎麼產生的?

產生洩漏的原因有好幾種:

  • (1) 頁面元素被刪除,但是繫結在該元素上的事件未被刪除;

  • (2) 閉包維持函式內區域性變數(外部不可控),使其得不到釋放;

  • (3) 意外的全域性變數;

  • (4) 引用被刪除,但是引用內的引用,還存在記憶體中。

從上述原因上看,記憶體洩漏產生的根本原因是引用無法正確回收,值型別並不能引發記憶體洩漏。

對於每個引用,都有自己的引用計數,當引用計數歸零或被標記清除時,js垃圾回收器會認為該引用可以回收了。

什麼是閉包,跟原型鏈、作用域鏈有什麼關聯

一臺電腦配置無限好,可以同時開啟多少個網頁

65535 – 1024 = 64511 個

ip地址能被偽造嗎?

http頭部可以被篡改,但是隻能修改X_FORWARDED_FOR,真實ip地址(REMOTE_ADDR)很難修改(除非是路由器去修改),因為真實ip是底層會話ip地址,而且因為TCP 3次握手的存在,連線無法建立,偽造的意義不大,至於UDP的話,一般是內網才使用UDP通訊。

有100萬個獎品,每個人可以中獎3次,先到先得,怎麼控制併發,不能發超,並保證完全的先到先得模式

百萬獎品在打亂後預先insert到資料庫,所有中獎操作,均只能update,不能insert。進來抽獎的使用者使用memcahe原子加鎖,實現抽獎次數自增,當抽獎次數到達3時,返回不中獎。

預先插入需要很多資源,如果獎品數量上了1億怎麼辦?

記憶體比較寶貴,在不用記憶體加鎖的情況下怎麼辦,並且如果碰到1億獎池的情況,預先插入資料庫肯定不好,怎麼辦?

設定獎品概率,分三張表,都使用innodb引擎,一張存中獎記錄(預先插入一行),一張存獎品發放概況,一張存使用者抽獎情況(uin唯一索引),大併發情況下,利用mysql的排他鎖進行併發控制。流程如下:

begin

查詢使用者抽獎次數,加排他鎖

對使用者抽獎次數的更新/插入

鎖行查詢發放情況

獲得抽獎結果(某些獎品發完之後,動態變更概率)

更新發放表

插入中獎記錄

commit

遇到髒讀怎麼辦?

innodb的master執行緒在什麼情況下fork其他子執行緒?

資料鏈路層的資料是怎麼校驗的,有哪些校驗方式?

CRC32

b+樹的查詢時間複雜度是多少,雜湊表是多少,為什麼資料庫索引用b+樹儲存,而不是雜湊表,資料庫索引儲存還有其他資料結構嗎?

O(log(n)),O(1)

因為雜湊表是雜湊的,在遇到key>`12`這種查詢條件時,不起作用,並且空間複雜度較高。

b+數根據層數決定時間複雜度,資料量多的情況下一般4-5層,然後用二分法查詢頁中的資料,時間複雜度遠小於log(n)。

apache是怎麼跟php通訊的,sapi是什麼

使用sapi通訊,sapi是php封裝的對外資料傳遞介面,通常有cgi/fastcgi/cli/apache2handler四種執行模式。

php的垃圾回收機制?

垃圾回收是指當php執行狀態結束時,比如遇到了exit/die/致命錯誤/指令碼執行結束時,php需要回收執行過程中建立的變數、資源的記憶體。

ZEND引擎維護了一個棧zval,每個建立的變數和資源都會壓入這個棧中,每個壓入的陣列結構都類似:[refcount => int, is_ref => 0|1, value => union, type => string],變數被unset時,ref_count如果變成0,則被回收。

當遇到變數迴圈引用自身時,使用同步回收演算法回收。

jquery的sizzle引擎工作原理

http://www.cnblogs.com/xesam/…

seajs的工作原理,如何解決重複載入庫的問題,如何進行資源的同步載入

建立對映關係並快取起來;資源並不能真正同步載入,只是返回一個回撥。

memcache跟redis的區別

md5逆向原理

先用彩虹字典查詢,再嘗試暴力破解。

父類方法是protected,子類重構為private,會發生什麼?

會發生fatal錯誤,因為繼承的方法或屬性只能維持或放大許可權,不能縮小,比如protected過載為public是可行的。

一個網頁從輸入地址回車,到完整展示網頁內容這段時間裡,做了哪些工作,越詳細越好。

0、瀏覽器本地快取匹配;

1、本地hosts對映對比;

2、本地dns快取解析;

3、遠端dns解析獲得伺服器ip地址;

4、瀏覽器傳送tcp連線請求包(syn);

5、請求包經過傳輸層、網路層、資料鏈路層封裝通過網路卡到達路由器;

6、路由器轉發資料包到所屬運營商伺服器;

7、運營商伺服器通過定址最短路徑通過中繼節點到達指定ip地址;

8、伺服器端可能存在反向代理或者負載均衡,都是直接轉發請求至上游伺服器,當然也可以制定安全防禦規則直接丟棄請求包;

9、上游伺服器收到連線請求,在自身可用的情況下,返回(syn+ack);

10、瀏覽器校驗ack,再次傳送(syn+ack);

11、伺服器校驗ack切換連線狀態至established,然後根據請求傳輸資料包;

12、當transform-encoding為chunked時,瀏覽器開始渲染頁面;

13、四次揮手,連線關閉;

14、渲染資料完成。

keep-alive的概念

長連線機制,表示keep-alive-timeout時間內,如果連線沒有closed,再次傳輸資料不再需要三次握手了。

linux檔案壓縮操作命令,shell指令碼等

設計一箇中繼伺服器,轉發客戶A->客戶B的請求

myisam跟innodb有什麼區別

php程式死鎖產生的原因是什麼?怎麼自動排查與自動恢復?

有class A { public function b($a, $b, $c){}}; 怎麼使用[`b` => 2, `a` => 1, `c` => 3],對進行A::b進行呼叫,並順利賦值?

php5.2->php7.1的各版本演進歷史,新增特性等?

畫一個tcp三次握手圖

相關文章