首頁 後端開發 php教程 php程式設計師招募 如何突破PHP程式設計師的技術瓶頸分析

php程式設計師招募 如何突破PHP程式設計師的技術瓶頸分析

Jul 29, 2016 am 08:46 AM

先明確我所指的PHP工程題,是指畢業工作後,主要以PHP進行WEB系統的開發,並沒有使用其的語言工作過。工作經驗大概在3~4年,普通的WEB系統(百萬級訪問,千成級數據以內或業務邏輯不是特別複雜)開發起基本得心應手,沒有什麼問題。但他們會這樣的物點:
除了PHP不使用其它的語言,可能會點shell 腳本。
對PHP的掌握不精(很多PHP手冊都沒有看完,庫除外)
知識面比較窄(面對需求,除開使用PHP和mysql ,不知道其它的解決辦法)
PHP代碼以過程為主,認為物件導向的實作太繞,看不懂
這些PHPer 在遇到需要高效能,處理高並發,大量資料的專案或業務邏輯比較複雜(系統需要解決多領域業務的問題)時,缺少思路。不能分析問題的本質,技術判斷力比較差,對於問題較快能找出臨時的解決辦法,但常常在不斷臨時性的解決辦法中,系統和自己一步步走向崩潰。那怎麼提升自己呢?怎麼可以挑戰難度更高的系統?
更高的挑戰在那​​裡?結合自己的經驗,我列出一些具體挑戰,讓大家先有個感性的認識。
高性能係統的挑戰在那​​裡?
如何選擇WEB伺服器?要不要使用fast-cgi 模式
要不要使用反向代理服務?選擇全記憶體快取還是硬碟快取?
是否需要負載平衡?是基於應用層,還是網路層? 如何保證高可靠性?
你的PHP程式碼效能如何,使用最佳化工具後呢? 效能瓶頸在那裡? 是否需要寫成C的擴充?
用戶存取有什麼特色,是讀多還是寫多?是否需要讀寫分離?
資料如何儲存?寫入速度和讀出速度如何? 資料增漲存取速讀如何變化?
如何使用快取? 怎麼樣考慮失效?數據的一致性怎麼保證?
高複雜性系統的挑戰在那​​裡?
能否辨識業務所對應的領域?是一個還是多個?
能否合理地對業務進行抽象,在業務規則變化能以很小的代價實現?
資料的一致性、安全性可否保證?
是否撐握了物件導向的分析和設計的方法
當我所列出的問題,你都能肯定的回答,我想在技術上你基本上已經可能成為架構師了。如何你還不能回答,你需要在以下幾個方向加強。
如何你還不能回答,你需要在以下幾個方向加強:
分析你所使用的技術其原理和背後運行的機制,這樣可以提高你的技術判斷力,提高你技術方案選擇的正確性;
學習大學期間重要的知識, 作業系統原理,資料結構和演算法。知道你以前學習都是為了考試,但現在你需要為自己學習,讓自己知其所以然。
重新開始學習C語言,雖然你在大學已經學過。這不僅是因為你可能需要寫PHP擴展,而且還因為,在做C的應用中,有一個時刻關心效能、記憶體控制、變數生命週期、資料結構和演算法的環境。
學習物件導向的分析與設計,它是解決複雜問題的有效的方法。學習抽象,它是解決複雜問題的唯一之道。
"這麼多的東西怎麼學,這得學多久呀" ?如果你努力的話,有較好的規劃,估計需要1~2年的時間。
如何有效的學習是一個大問題。 自己有些實踐但很零散,不好總結。昨天晚上睡覺前,突然想到了RUP的核心,"以架構為中心,用例驅動,迭代開發",借用這個思想,關於有效的學習的方法,可以這樣來表述:以原理、模型或機制為中心,任務驅動,迭代學習。
有點抽象, 舉例來說明如何學習。目的: 學習如何提升處理效能。
可迭代驅動的任務: 透過IP找到所在地域。
這是WEB應用常見的任務,IP資料庫是10左右萬行的記錄。
第一次迭代: 在不考慮效能的情況下實現功能(透過PHP來實現)。因為無法直接透過KEY(IP)進行查找地域,所以直接放到資料或透過關聯數組這種簡單的方法都是不行的。想法還是先把資料排序,然後再進行查找。
如何透過IP找到? 已序的數據,二分查找是最快的。
如何排序?用函式庫函數sort當然 是可以,但是即然是學習,那還是自己實作快速排序吧。
學習目標: 排序演算法,找出演算法。
PHPer 一般資料結構和演算法基礎比較差,平時也沒有這方面的任務,自己也不學習,因此這方面的知識很缺乏。但是,程式設計解決的問題,最終都會歸結到資料結構和對這種資料結構操作的演算法。如果資料結構演算法常在心中,那麼遇到問題就能清楚認知到它內在的結構,解決方法就會自然產生。
第二次迭代:最佳化資料的載入與排序。如果做到第一步,基本上還是不可用,因為資料每次都需要的載入和排序,這樣太耗時間。 解決的想法是,資料一次載入排序後,放到每個PHP進程能存取到的地方。
放到memcache 這是大家容易想到問題。其實放到共享記憶體(EA等加速器都支援)中是更快的方式,因為memcache還多了網路操作。 資料是整體放入到共享內存,還是分塊放入,如何測試性能? 如何分析瓶頸所在(xdebug)? 在這些問題的驅動下你會學習到。
學習目標: 偵測、定位、最佳化PHP效能的方法; PHP實現結構對效能的影響。
第三次迭代: 寫出PHP的擴充。性能還是上不去,不得不進入C/C++的世界了,不過從此你將不只是PHPer 而服務端的全能型工程師,當然這對沒有做過C/C++的同學挑戰是巨大的。 我這裡無法再簡單來說如何學習C/C++ ,可以參考 《PHP程式設計師學習C++》
學習目標:C/C++的學習,PHP擴充的編寫
怎麼確定需要學習的機制和原理呢? 怎麼找到驅動學習任務?我對需要學習的東西,都沒有概念,怎麼回答以上的兩個問題?
從這個技術的定位來找出需要學習的重點,即它怎麼做(機制)的和它為什麼能這樣做到(模型或原理)
列出這個技術最常見的應用,做為學習的任務,從簡到難實踐。
假如我需要學習Javascript ,我對於HTML,CSS有點感性認識。首要我了解到,JS 是WEB領域的動態語言,主要解決網頁的動態互動的。那我要學習的要點如下:
JS如何與HTML 互動 (機制)
JS的動態特性在那裡,與其它動態語言有何不同? (語言模型)
如果完全自學,找到需要學習的重點(機制、模型​​、原理) 設定學習任務的確不是那麼容易掌握。如果找到一個有經驗的人來指導你或增加一個學習型的團隊,那麼學習的速度的確會大大提升。

以上就介紹了php程式設計師招募 如何突破PHP程式設計師的技術瓶頸分析,包括了php程式設計師招募方面的內容,希望對PHP教學有興趣的朋友有幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

PHP 8.1中的枚舉(枚舉)是什麼? PHP 8.1中的枚舉(枚舉)是什麼? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

See all articles