『壹』 基礎知識回顧:為什麼要使用php框架
為什麼要使用PHP框架?
開發人員使用PHP框架的好處很多,其中之一是加快開發進程。在類似項目中重用代碼將為開發者節省大量的時間和精力。框架為執行繁瑣的代碼任務提供預建模塊,因此,開發人員可以把時間花在實際應用的開發上,而不是每一個項目都重新構建基礎功能。
穩定是開發者使用框架的另一個重要原因。雖然簡單是PHP最大的優點,很多人也因為這一點喜歡使用這個腳本語言,但它同時也是PHP最大的缺點。一些開發者尤其是初學者很容易寫出低劣的代碼,而自己卻沒有意識到。使用PHP,應用往往會將靜態工作加倍,不知不覺中您可能已經在編碼時打開了一個大的安全漏洞,因此可能會受到攻擊。重要的是要記住,PHP是一個非常寬容的語言,因此,更重要的是在編程時確保封閉任何漏洞,即便應用看起來可以正常工作。
最後,PHP框架的使用是非常廣泛的,而且有許多不同的框架可供選擇。許多開發者會選擇知名的框架,是因為它的知名度、其開發團隊的巨大支持,而且他們可以通過論壇/社區來與其他使用相同框架的開發者交流,當然你也可以開發自己的框架。這里提醒一下,首先應該檢查你的項目來決定是否應該使用一個框架。你應該問自己:它會節省你和其他使用者的時間和精力么?應用程序的性能會更好么?是否會提高穩定性?如果這些問題你的回答都是是,那麼你就該為你的項目選擇一個合適的框架了。
何時使用PHP框架?
這是一個無論有經驗的開發者還是初級開發者都共有的問題,而且這個問題也確實沒有直接的回答。對於許多初學者來說,一個框架將提供很多簡便和穩定,因此應該盡可能地使用PHP框架。這將有助於減少或消除不良編碼,加快開發進程。
另一方面,許多有經驗的PHP程序員將框架視為不知道如何寫出好的、干凈的代碼的低級程序員的工具。姑且不論這一點的真假,起碼毋庸置疑的是PHP框架是一個可以用來節省時間並強化自己編碼的工具。
當工作的項目時間緊迫時,使用PHP框架就有很多好處,可以大大加快編碼進程,因此所以如果你時間緊迫,使用PHP框架就是很好的選擇。另一個例子是,當你所做的項目有大量代碼時,也應當考慮使用PHP框架,因為這將有助於減少工作的繁瑣度。
尋找一個什麼樣的PHP框架?
有許多可供開發者選擇的PHP框架,甚至還可以創建自己的框架,盡管只建議PHP專家級這樣做。當尋找你最需要的PHP框架時,重要的是要搞清楚誰將自始至終使用或修改你的應用,如果是有很多人做這件事情,那麼最好使用流行的PHP框架,這樣大部分開發者都不會陌生。另一方面,如果你想構建Web應用程序為你個人使用,那就最好選擇令你滿意的PHP框架,而不在乎它在開發者社區中是否流行。
選擇PHP框架的參考因素有很多,包括:容易使用、快速開發、性能、開發者中的流行程度、強大的功能,技術支持、論壇等。當你第一次選擇PHP框架時,為了找到一個適合你需求的最佳選擇,建議多嘗試幾個。每個框架都有所不同,並有不同的長處和短處。例如Zend框架由於V3和多樣的功能、並且有一個廣泛的支持系統,因而它流行了這么久。相反, CakePHP是另一個晚於Zend框架的PHP框架,相應的支持系統也比較少,但更方便和易於使用。
正如你所看到的,每種類型的PHP框架都有自己的優點,因此,最好反復試驗以找出其中哪個最適合你的需要。另一個選擇PHP框架的有效方式是咨詢你的同事,看看開發社區里選擇哪個。那些真正使用過具體框架的能夠明確地告訴你它的易用性、功能、支持可用性、社區內的情況,當然可能還有不足。
使用PHP框架最常見的錯誤
任何類型的編程中都可能有錯誤,但是PHP框架有助於顯著限制這些錯誤。重復編碼似乎加劇了這種錯誤,而框架則解決了這一問題。盡管如此,在使用任何PHP框架時仍要注意。例如,除非你是一位PHP編程的專家,否則你應該總是選擇使用流行的框架,有大量的支持和積極的用戶群。很多框架的支持很少甚至沒有,它們可能是被PHP知識有限的個別開發者所創建的。這些類型的框架,可能會使你的應用程序無法正常運行,更糟糕的是,可能會給你的網站帶來災難性的安全問題。
另一些常見的錯誤是,不能確保你的資料庫和Web伺服器符合特定框架。例如,Seagull PHP Framework建議如下配置:
◆PHP :最低是PHP 4.3.0,PHP 5.1.1或者更高版本更佳,避免任何5.0.x版本中的東西;
◆MySQL的:支持MySQL的4.0.x,4.1.x和5.0.x,也可以使用3.23.x;
◆Apache:Seagull支持1.3.x以及Apache的2.x系列。
如果你沒有滿足這些要求,您將無法在你所選的框架中看到最好的性能。即使你是PHP的專家,你也應該經常復習框架的說明文檔,確認兼容性後再嘗試。
類似於前面提到的常見的錯誤,不遵循建議的安裝進程的話,你的PHP框架也可以給你帶來一些令人頭疼的問題。以Seagull 為例,在Seagull的wiki有一個詳細的框架安裝過程,其中有幾個關鍵步驟,很容易被不小心或不知情的開發者忽視。因此你要花費時間來安裝框架並遵循安裝說明。
最好的PHP框架有哪些?
過去的幾年中,因為PHP已發展成為大多數開發者選擇的腳本語言,因而也產生了大量的PHP框架。什麼是最好的PHP框架,仁者見仁智者見智,因為並非每一個框架都能夠適合每一個人。以下是5個最佳和最流行的PHP框架選擇:
◆The Zend Framework
Zend Framework在開發者社區中很有人氣,其重點是Web 2.0風格的應用程序。由於其大量的黨羽、廣泛的支持和積極的用戶群,Zend被稱為PHP Company。Zend即使不是當今最流行的PHP框架,也絕對是之一。它強大的功能能夠滿足企業級的需求,當然它的使用也需要具備廣泛的PHP知識。
◆CakePHP
從初學者到高級PHP開發者,CakePHP都是一個很棒的選擇。它與 Ruby on Rails設計的原則基本相同,主要集中在快速開發方面使其成為一個快速應用開發的優良框架。其迅速增長的支持系統、簡單和可擴展性使CakePHP成為當今最熱門的PHP框架。
◆Symfony
Symfony針對的更多的是高級開發者,也即創建企業級應用的開發者,尤其是Askeet和Yahoo! Bookmarks。這個開源的PHP框架功能全面,但它的主要缺點是速度慢於其他框架。
◆CodeIgniter
CodeIgniter以其易用性、性能和速度而聞名。不同於Symfony,CodeIgniter主要針對的是與人共享主機的開發者,或者為小型設備尋找PHP框架的開發者。它提供簡單的解決辦法,而且有一個擴展庫包括視頻教程、論壇、用戶指南和wiki。初學者應該考慮使用CodeIgniter 。
◆Seagull
Seagull是一個穩定的用於構建web、命令行和GUI應用的PHP框架。這是一個非常易於使用的框架,非常適合初學者到高級程序員。對於初學者,Seagull有一個範例應用庫,可以自己設定後滿足自身需求;對於高級開發者,Seagull提供了眾多選擇包括最佳實踐、標准、模塊化的代碼基,這些都可以幫助快速簡單地構建Web應用程序。Seagull有一個活躍的開發者社區,內有大量的支持性文檔和說明。
『貳』 學習javascript 到底要不要用框架
如果初學。建議不要用框架
現在主流的框架很多。。
jQuery,YUI,Dojo,prototype.exts等
但是如果是初學者,最好理解了javascript基本語法規則和最基本的dom操作,添加、刪除、修改。然後了解事件機制。了解出擊的dom高級編程,重點要了解javascript閉包的概念和原型鏈的繼承方式等等。。精讀<javascript 高級程序設計> 第二版和<javascript權威>最新版對於提升很大
『叄』 Framework應用框架為什麼重要呢
對於絕大多數 android 開發工程師來說,掌握Android Framework 一直是一個不光要熟練而且必須要精通的技能。Framework這個應用框架是Android開發中最基礎,但同時也是最重要的。Framework包含了Android IPC Binder機制、Handler消息機制、Dalvik VM進程系統、AMS、WMS和Package Manager Service等等。而這些類別里又包含很多小類,有許多的分支,每一個小類里還有很多小細節,這些都是Android開發工程師必須熟練掌握和精通的技能。
如果做成一個框架圖的話,就是下面這樣的:這只是一個簡單的框架圖,其實還有很多分支
很多大廠公司在面試的時候都會有很多的技術面試題,這是考察程序員必不可少的題目。
比方說:
1.Android中多進程通信的方式有哪些?
2.進程通信你用過哪些?原理是什麼?(位元組跳動、小米)
3.描述下Binder機制原理?(東方頭條)
4.Binder線程池的工作過程是什麼樣?(東方頭條)
5.Handler怎麼進行線程通信,原理是什麼?(東方頭條)
6.Handler如果沒有消息處理是阻塞的還是非阻塞的?(位元組跳動、小米)
7.handler.post(Runnable) runnable是如何執行的?(位元組跳動、小米)
8.handler的Callback和handlemessage都存在,但callback返回true handleMessage還會執行么?(位元組跳動、小米)
9.Handler的sendMessage和postDelay的區別?(位元組跳動)
10.IdleHandler是什麼?怎麼使用,能解決什麼問題?
11.為什麼Looper.loop不阻塞主線程?(騰訊)
12.Looper無限循環為啥沒有ANR(B站)
13.Looper如何在子線程中創建?(位元組跳動、小米)
14.Looper、handler、線程間的關系。例如一個線程可以有幾個Looper可以對應幾個Handler?(位元組跳動、小米)
15.如何更新UI,為什麼子線程不能更新UI?(美團)
16.ThreadLocal的原理,以及在Looper是如何應用的?(位元組跳動、小米)
17.Android 有哪些存儲數據的方式?
18.SharedPreference原理,commit與apply的區別是什麼?使用時需要有哪些注意?(騰訊)
19.如何判斷一個 APP 在前台還是後台?
20.如何做應用保活?
21.一張圖片100x100在內存中的大小?(位元組跳動)
22.Intent的原理,作用,可以傳遞哪些類型的參數?
然後會再擴展到和這些知識點相關的更深層次的知識點細節,直到問的你答不上來為止,以此來探尋你的技術邊際,這樣就能更深入地了解你的技術能力。
Android Framework重要性
Android Framework 開發雖然比較偏底層,圈子窄,但是能掌握一些原理的東西,可以觸類旁通,往應用層發展也可以,接下來我們看看Framework知識有多重要。舉幾個栗子,你或許就能清楚了。
像掉幀監控,函數插裝,慢函數檢測,ANR 監控,啟動監控,都需要對 Framework 有比較深入的了解,才能知道怎麼去做監控,利用什麼機制去監控,函數插樁插到哪裡,反射調用該反射哪個類哪個方法哪個屬性……
目前大公司的app開發都要基於模塊化、層次化、組件化、控制項化的思路來設計架構,而這一切的基礎都建立在Android Framework系統框架底層原理實現之上。
Binder是Android系統中最重要的組成
Binder是什麼呢?請看下圖,圖是最能清楚明了的直觀表達的工具
優勢描述
性能:只需要一次數據拷貝,性能上僅次於共享內存
穩定性:基於C/S架構,職責明確,架構清晰,因此穩定性好
安全性:為每個App分配UID,進程的UID是鑒別進程身份的重要標志
Android IPC Binder機制包含了 :Linux預備知識、傳統的Linux中IPC通信原理、Binder IPC通信原理和Binder Java層實現,這些裡面都各有好多小分支,小細節需要仔細的去學習掌握。
騰訊高級工程師Binder面試
1.為什麼 Android 要採用 Binder 作為 IPC 機制?
2.Binder到底是什麼?
3.Binder機制是如何跨進程的?
4.一次Binder通信的基本流程是什麼樣?
5.為什麼 Activity 間傳遞對象需要序列化?
6.四大組件底層的通信機制是怎樣的?
7.AIDL 內部的實現原理是什麼?
這些都是關於Binder機制面試時會問到的點。
Handler主要用於非同步消息的處理: 有點類似輔助類,封裝了消息投遞、消息處理等介面。當發出一個消息之後,首先進入一個消息隊列,發送消息的函數即刻返回,而另外一個部分在消息隊列中逐一將消息取出,然後對消息進行處理,也就是發送消息和接收消息不是同步的處理。 這種機制通常用來處理相對耗時比較長的操作。
2、為什麼要用handler?
為什麼要用handler?不用這種機制行不行?不行!android在設計的時候,就封裝了一套消息的創建、傳遞、處理機制,如果不遵循這種機制,就沒有辦法更新UI信息,就會拋出異常信息。
在android開發中,經常會在子線程中進行一些操作,當操作完畢後會通過handler發送一些數據給主線程,通知主線程做相應的操作。探索其背後的原理:子線程handler主線程其實構成了線程模型中的經典問題生產者-消費者模型。生產者-消費者模型:生產者和消費者在同一時間段內共用同一個存儲空間,生產者往存儲空間中添加數據,消費者從存儲空間中取走數據。
『肆』 php開發需要框架嗎
php中也存在框架,如國內比較常用的thinkphp、brophp。國外的Laravel。但使用其也用利弊,分析如下:
框架是非常好的,它能讓決定更連貫。框架能避免我們寫一大堆自定義模塊來實現這些性能,我們所需要做的就是將這些共用模塊放在框架中實現。框架節省了我們不少的時間和精力,並且讓擴展變得更容易。但是這也是問題的根本所在。
對錘子來說,所有事物都是釘子
Abraham Kaplan說過的一句話能最好地控訴工具的缺點:把錘子給一個小孩,他會用錘子槌遇到的所有事物
這就是衡量你是否更職業的時候了,交付對未來擴展最好的代碼而不是交付最容易實現的代碼。是為了以後的需求更好的設計你的代碼還是讓以後的人做需求的時候再考慮,這就是程序員的責任感問題了。作為一個更職業的開發者,我們必須不依賴框架獨立思考。
這就是你的錯
是不是經常聽到某人在抱怨某個框架?我已經聽見好多人抱怨過Rails了:「Rails應用總是糟糕的結構」或者「Rails測試總是這么慢」。最開始,我也曾經這么認為。但是現在,每當我聽到這些抱怨的時候,我就會意識到其實抱怨者是懶惰的。Rails,或者其他框架,只是一個工具而已,你要做的是控制它。把壞代碼歸咎於無生命的框架只能說明你的不專業。
選擇正確的工具,或者正確地使用工具
決定變得更專業
我們必須根據基本的需求來選擇工具。框架確實能做很多事情,並且需求會決定整個代碼結構。有的時候框架會很適合某個需求。但是當框架不適合某些需求的時候,你就有責任為了代碼的清晰和干凈修改框架或者封裝框架。
作者Myles Megyesi正文結束讀後感文章中提到框架只是一個工具,你不能用這個工具來滿足你的所有需求,當框架無法清晰完整地滿足你的需求的時候,你要做的不是寫一大堆垃圾麻煩的代碼來實現需求,更不是修改你的需求來滿足更容易實現這件事。作為更專業的你,你需要修改框架,或者使用抽象等思維來使你的代碼達到清晰干凈。
這點在實際開發中會遇到非常多。當別人問你:這里的代碼為什麼這么寫? 如果你的回答是:沒辦法啊,因為框架是這么這么做的,我只能這么這么做。這就說明了你已經被框架束縛住了。不要認為框架是權威,框架也是別人寫的,它寫的時候不會考慮到你的需求。只要你的需求是團隊的公共需求,需要修改,增加框架的時候,你就應該修改框架。
代碼是讓人更清晰自然的閱讀和開發的,如果被一個框架捆綁住,實際上就是本末倒置了。