1. 程式人生 > >【轉載】八年phper的高階工程師面試之路

【轉載】八年phper的高階工程師面試之路

這是一篇反面教材,希望也能引起部分程式設計師的警惕。

最近半個月時間,經過幾次面試,差不多已經對自己有了定位————距離騰訊T3崗位還是有一點距離。

因為在一家小公司呆的習慣了(6年),公司沒有人在技術層面超過我,作為技術核心,感覺自己很牛,活在一個小圈子裡面,幾乎不會主動去了解新技術,甚至對php以及js本身都不能算精通。

所以變故出現的時候,我才發現自己的技術脫節有多厲害,雖然之前的面試並沒有做專門的準備,但是與6年前找工作的情形相比,差距非常的大。

下面是我整理的一部分遇到的面試題,我儘量用我所知道的知識來進行陳述,肯定會有很多誤解以及遺漏,希望大家能夠指正。

公司1:

1、mysql_real_escape_string mysql_escape_string有什麼本質的區別,有什麼用處,為什麼被棄用?

答:mysql_real_escape_string需要預先連線資料庫,並可在第二個引數傳入資料庫連線(不填則使用上一個連線)
兩者都是對資料庫插入資料進行轉義,但是mysql_real_escape_string轉義時,會考慮資料庫連線的字符集。
它們的用處都是用來能讓資料正常插入到資料庫中,並防止sql注入,但是並不能做到100%防止sql注入。

再問:為什麼不能100%防止?

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

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

衍生出來的問題是mysqli的連線複用(持久化)問題,這一塊我並沒有答好。

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

答:記憶體洩漏是因為一塊被分配記憶體既不能被使用,也不能被回收,直到瀏覽器程序結束。

產生洩漏的原因是閉包維持函式內區域性變數,不能被釋放,尤其是使用閉包並存在外部引用還setInterval的時候危害很大。

  • 備註:我覺得這塊回答並不好,因為肯定不是閉包的原因。

我查了一下資料,從比較淺的方位來再回答一下這個問題:
產生洩漏的原因有好幾種:
(1) 頁面元素被刪除,但是繫結在該元素上的事件未被刪除;
(2) 閉包維持函式內區域性變數(外部不可控),使其得不到釋放;
(3) 意外的全域性變數;
(4) 引用被刪除,但是引用內的引用,還存在記憶體中。
從上述原因上看,記憶體洩漏產生的根本原因是引用無法正確回收,值型別並不能引發記憶體洩漏。
對於每個引用,都有自己的引用計數,當引用計數歸零或被標記清除時,js垃圾回收器會認為該引用可以回收了。

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

答:閉包是指存在於一個作用域鏈分支的函式域內的函式,該函式可以向上逐級訪問作用域鏈上的變數,直到找到為止。當閉包存在外部引用時,js會維持閉包自身以及所在函式作用域鏈的記憶體狀態。

  • 備註:這個是我自己瞎說的。

繼續答:跟原型鏈沒有什麼關聯,函式的原型(prototype)主要用於實現繼承,原型鏈可用於追溯繼承關係,與作用域鏈類似,都是向上逐級訪問屬性,直到被找到,原型鏈的頂層是null,可以理解為所有的object都繼承至null,所以null的型別是object。

繼續答:作用域鏈可以看作是一個樹形結構,由根節點window向下擴散,下層節點可以訪問上層節點,但是上層節點無法訪問下層節點,產生閉包的函式作用域屬於節點中的一個,向下擴散後閉包函式產生葉子節點,葉子節點之間可以互相訪問,當訪問的變數在葉子節點中無法找到時,向上層節點查詢,直到被找到為止,這個概念有點類似原型鏈上的屬性查詢。

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

答:65535-1000 = 64535(埠數)

5、ip地址能被偽造嗎?

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

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

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

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

答:使用redis佇列儲存請求,跑守護程序非同步發獎,產生的問題是使用者無法實時看到中獎情況。

再問:這樣肯定不行。

再答:使用全域性記憶體加鎖確保抽獎過程是單程序在跑,但是會面臨大併發阻塞問題。

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

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

begin
查詢使用者抽獎次數,加排他鎖
對使用者抽獎次數的更新/插入
鎖行查詢發放情況
獲得抽獎結果(某些獎品發完之後,動態變更概率)
更新發放表
插入中獎記錄
commit

再問:遇到髒讀怎麼辦?

答:這方面不是很瞭解

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

答:不知道

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

答:crc32,別的校驗可能是取模校驗奇偶數吧。

  • 備註:答個crc校驗就行了。

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

答:O(log(n)),O(1)
因為雜湊表是雜湊的,在遇到key>’12’這種查詢條件時,不起作用,並且空間複雜度較高。

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

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

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

10、php的垃圾回收機制?

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

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

  • 備註:PHP7已經重寫了zal的結構體。

11、jquery的sizzle引擎工作原理

答:除了直到是DOM元素查詢引擎之外,一無所知。

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

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

13、memcache跟redis的區別

答:可儲存資料結構不同;redis支援持久化儲存。

14、md5逆向原理

答:先用字典查詢,再嘗試暴力破解。

再問:沒有更好的方法了嗎?

答:沒有了。
備註:嗯,事實上也確實沒有特別好的辦法,只能使用TB級的海量特徵庫用資料庫存起來,然再分片查詢。

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

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

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

答:
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、渲染資料完成。

  • 備註:還有很多東西不懂,一些東西完全是自己瞎蒙的,因為時間原因,以後有時間詳細畫一下。

17、keep-alive的概念

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

  • 備註:這裡也有很多疑問,需要好好捋一捋。

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

備註:因為平時開發都是在windows環境,對linux瞭解不足,這一塊幾乎是0分。

公司2:

這個是被鄙視最慘的一家了,首先會有筆試,相對來說並不複雜,但是有些坑,很多已經忘記了。

印象深刻的是我說自己熟悉常用設計模式,然後讓我畫UML類圖,我就懵逼了,所以在寫簡歷的時候,最好是寫自己非常熟悉的,如果只是一知半解,並沒有必要放到簡歷中。

公司3:

這裡僅列舉幾個問到的問題:

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

2、myisam跟innodb有什麼區別;

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

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

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

6、畫一個tcp三次握手圖

目前還在找工作中,在我看來8年的程式設計師怎麼也不應該是這樣子的,溫水煮青蛙的教訓非常慘痛,好在現在認識到問題還不晚,等到了35歲這個年紀,可能就真的晚了。

轉載知乎:輝哥

相關推薦

轉載phper高階工程師面試

這是一篇反面教材,希望也能引起部分程式設計師的警惕。 最近半個月時間,經過幾次面試,差不多已經對自己有了定位————距離騰訊T3崗位還是有一點距離。 因為在一家小公司呆的習慣了(6年),公司沒有人在技術層面超過我,作為技術核心,感覺自己

轉載、商品詳情頁功能

nero tle 文件 tro 過濾器 price 搜索 應該 == 八、商品詳情頁功能 8.1.viewsets實現商品詳情頁接口 (1)商品詳情頁只需要多繼承一個類(mixins.RetrieveModelMixin)就可以了 class GoodsListV

轉載oracle閃回技術詳解閃回drop(神奇的flashback)

寫在前面:刪庫跑路,相信這是絕大多數程式設計師會經常聽到的一個詞。俗話說:常在河邊走,哪有不溼鞋,作為經常和資料打交道的程式設計師也好,運維實施也好,有時難免會出現資料誤刪除,誤操作等情況。如果你是一個oracle使用者,那麼你如果知道這些關於資料閃回恢復的基本知識,或許可以幫你在出現類似情況的時候解決很多問

直播Fluent動網格技術進階

Fluent動網格技術進階之路 適用人群 運用fluent動網格進行數值模擬的高校學生及科研人員 講師簡介 Miss趙,上海大學博士,結構工程專業,現任職於國內211院校,從事流固耦合數值模擬的研究。 7年流體力學模擬經驗;熟練掌握動網格; 熟練操

iOS高階工程師晉級

我算不上什麼高階工程師,但我在BAT在二線網際網路公司創業公司都呆過,見過一些算得上『高階iOS工程師』的人,我就先談談他們的共性吧。這些共性不是成為『高階』的充分條件,但肯定是必要條件。如果這些都做不到,那也算不上高階。 1. 對計算機基礎知識的瞭解很全面。網路協議TCP,UDP概念要懂伐...Base64

轉載網際網路高階測試工程師至少具備的能力

  業務熟悉   熟悉本系統   測試人員參與測試的系統的各種業務場景,必須做到精熟 。一旦需求有改動,可以清楚快速的知道上下文。同時可以清楚的知道哪些點是需要重點測試的。   熟悉跟本系統有通訊的上下游系統業務   跟本系統有通訊的上下游系統也要非常熟悉。這樣一旦系統

轉載運維職業向!我是怎麽入得運維行業?運維工程師入門必備技能以及打怪升級篇

能說 還要 作用 經歷 人工智能 details 最大堆 orm lock 前言:轉載 陳浩一個從事安全運維向的前輩文章。寫的很好。人非常nice,遇到了問題,qq上很快就回復了我。 大道三千 入門最難,凡事入了行,也就什麽都好說了,好的自然不斷努力奮鬥修行,不好的自然很快

轉載正衡中學年級期中表彰第一名同學的發言稿 - 孔瑞陽

學生 都沒有 我們 但是 一等獎 流行音樂 努力 既然 成就 說世界很大,我想去看看的人,都會說自己總是想看看世界究竟有多大。其實,我猜他們是想證明,他們有自己的遼闊世界,他們不要別人設定的那個狹隘的空間。 我的第一個理想,叫做No.1 我在一個毫不起眼的小學上學,從那時起

北京高級系統實施工程師 10—30w/

交流 分析報告 團隊合作 團隊 敬業 專業咨詢 興趣 解決 希望 【崗位職責】:1、 負責電商平臺業務調研工作,與電商平臺用戶進行接洽,了解用戶情況,分析用戶需求;2、 負責電商平臺業務分析工作,為用戶提供相關的業務咨詢和技術咨詢,提供相應的解決方案;3、 根據調研分析結果

轉載測試工程師怎麽甩鍋

波浪 由於 缺陷報告 支持我 產生 上線 我們 img 們的 如果說到最困擾軟件測試工程師的幾大問題,我們最先能想到的無非是以下幾點: 需求帶著小姨子跑路啦,沒有需求我咋測試啦。。。 開發牛皮哄哄啦,他打了我,還說我報的不是BUG。。。 測試時間不夠啦,項目質量這麽爛怎麽還

鯨歌原創轉變經歷,工人變程式設計師的祕密武器(連載3)

為年輕時做出的衝動決定買單,衝動型創業 撥雲見月 就這樣渾渾噩噩的到了2010年的4月份,由於長期在外面吃快餐導致得了急性腸胃炎,白天休息拉了一天肚子,晚班直到晚上凌晨都不見好,當意識到病情嚴重性的時候已經脫水暈倒在機器旁邊。當時有瞬間的意識就是同事和師傅都緊張

轉載Spark效能優化指南——高階

前言 繼基礎篇講解了每個Spark開發人員都必須熟知的開發調優與資源調優之後,本文作為《Spark效能優化指南》的高階篇,將深入分析資料傾斜調優與shuffle調優,以解決更加棘手的效能問題。 資料傾斜調優 調優概述 有的時候,我們可能會遇到大資料計算中一個最棘手的問題——資料傾斜,此時Spark作業

ZeroMQ 中文指南 第三章 高階請求-應答模式轉載

作者資訊如下。 ZMQ 指南 作者: Pieter Hintjens [email protected], CEO iMatix Corporation. 翻譯: 張吉 [email protected], 安居客集團 好租網工

最全的前端工程師面試題庫轉載

一些開放性題目 1.自我介紹:除了基本個人資訊以外,面試官更想聽的是你與眾不同的地方和你的優勢。 2.專案介紹 3.如何看待前端開發? 4.平時是如何學習前端開發的? 5.未來三到五年的規劃是怎樣的? position的值, relative

轉載最全的計算廣告資料,廣告演算法工程師入門

在廣告這樣的參與者可以針對同一個標的物不斷調整出價的拍賣環境中,通過聰明的定價策略,完全可能為整個市場創造更高的收益以及其他好處。 拍賣方式 分配規則 支付方式 是否知道別人的出價 應用場景 英式拍賣(Open) 競買者逐步加價, 直到最後只剩下一個投標人為止 出價最高者得

轉載TCP協議狀態簡介

正在 如果 接下來 告訴 ket 正常 主動 基本上 一個 1、建立連接協議(三次握手)(1)客戶端發送一個帶SYN標誌的TCP報文到服務器。這是三次握手過程中的報文1。(2) 服務器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ACK標誌和SYN標誌。因此它表

轉載64位Win7下成功安裝64位的Oracle、32位的InstantClient和PLSQL Developer

註銷 五步 ldb 需要 windows inf 目錄 登錄 class 感謝原作者,原文鏈接:https://wenku.baidu.com/view/433d0b544a7302768f993926.html 經實際安裝操作,通過以下步驟能夠成功地把Oracle安裝到

轉載MapReduce編程(一) Intellij Idea配置MapReduce編程環境

.net class 上傳 -c word 指定 otl 輸出信息 resource 目錄(?)[-] 一軟件環境 二創建maven工程 三添加maven依賴 四配置log4j 五啟動Hadoop 六運行WordCount從本地讀取文件 七運行Word

轉載Hadoop 2.7.3 和Hbase 1.2.4安裝教程

啟動 運行 property new rop net 文本文 .tar.gz cor 轉載地址:http://blog.csdn.net/napoay/article/details/54136398 目錄(?)[+] 一、機器環境

組播IP轉換為組播MAC地址轉載

映射關系 映射 過程 clas 網段 使用 3層 ans spa 鏈接:https://www.zhihu.com/question/36730567/answer/83083851來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。 組播IP轉換