⑴ 誰有面試phper的經驗
這方面網上有比較多的,針對3-5年的PHPer常見的面試題,參考如下:
1、平時喜歡哪些php書籍及博客?CSDN、虎嗅、獵雲
2、js閉包是什麼?
3、for與foreach哪個更快?
4、php鳥哥是誰?能不能講一下php執行原理?
5、php加速器有哪些?apc、zend、xcache.....能不能講一下它的加速原理?
6、Node.js能徹底代替php+apache是扯淡。
7、怎樣判斷一個值是否存在於數組中?in_array(),array_key_exists,......
8、怎樣判斷select語句中是否使用了索引?explain
9、sphinx的中文分詞詞庫使用第三方庫還是自己建庫?
10、如果一個被面試者經驗少、基礎差,此時卻問些高深的知識。要懷疑它的穩定性,可以提問加班對他會不會有抵觸。
11、mysql與mysqli的區別有哪些?
12、將來的發展方向?安全、還是數據挖掘、大數據處理?
13、php的面向對象:類的修飾符、封裝、繼承、多態體現方面
14、php 多態是什麼?
15、Type Hinting:http://www.php.net/manual/en/language.oop5.typehinting.php
16、php的設計模式:單例模式、工廠模式、生產者模式......等23種
17、伺服器狀態碼:200、202、301、404、500......
18、i++與++i的區別?
19、項目開發:電商項目中的購物車數據持久化、考試系統的安全性考慮、
20、mysql設計基礎:三大範式、功能->思維導圖、創建表的第一欄位是什麼?
21、mysql欄位char、varchar、int、smallint、tinyint、mediumint、bigint、decimal、double、float位元組數及應用場景。
22、memcache與mongoDB、Redis各自的使用場景是什麼?
23、為什麼mongoDB與Redis非但沒有形成競爭反而是互補關系?
24、Redis數據類型有哪些?int、string、hash、set、list ?
25、安裝linux軟體時使用make方式還使用yum方式?
26、linux網路優化:查看進程ps -aux|grep mysqld、怎樣查看最大文件打開數?
27、C語言中的虛函數是什麼?
28、1條微薄要推送給100萬個粉絲該怎麼處理?
29、知道哪些演算法?冒泡排序?快速排序?二分查找法?
30、yii thinkphp ci 各自優點
31、php 設計模式有哪些?
32、c 排序演算法有哪些?
33、php 基本結構是什麼?
34、memcache magent 分布式設計?
35、redis 分布式設計,如何設計?
36、mongo 集群架構是怎樣的?
37、mysql 索引原理及sql性能優化
38、tcp/ip 網路協議,osi7層指是什麼?
39、php 處理大數據業務
40、linux 應用 負載性能查看 ?
41、nginx 實戰優化業務功能 ?
42、談一下近三年來你的得意之作?
43、看看簡歷,會問一些過去做的項目的用戶量、pv、吞吐量、相關難點和解決方法等
44、資料庫設計經驗,為什麼進行分表? 分庫?
45、一般多少數據量開始分表? 分庫? 分庫分表的目的? 什麼是資料庫垂直拆分? 水平拆分? 分區等等?可以舉例說明
46、資料庫優化有哪些? 分別需要注意什麼?
47、web開發方面會遇到哪些緩存? 分別如何優化?
48、給你256M的內存,對10G的文件進行排序(文件每行1個數字),如何實現?
49、對10G的文件進行查找如何實現?
50、統計10G文件每個關鍵字出現的次數如何實現?
51、假如你現在是12306火車訂票的設計師,你該如何設計滿足全國人民訂票?
52、假如有1億用戶的訪問量,你的伺服器架構是怎樣的? 用戶信息的存儲方案如何設計?
53、如果你是技術組長,所帶團隊任務進度無法完成你該如何解決?
54、如果在進度排滿的前提下插入任務,你該如何保證總進度不延期?
55、如果有的工程師今天預定任務沒有完成,你該如何解決?
56、從你的經驗方面談一下如何構建高性能web站點? 需要哪些環節? 步驟? 每個步驟需要注意什麼如何優化等?
57、為什麼要對資料庫進行主從分離?
58、如何處理多伺服器共享session?
59、一個10G的表,你用php程序統計某個欄位出現的次數,思路是?
60、會告訴你一個nginx日誌例子,用你認為最佳的編程語言統計一下http響應時間超過1秒的前10個url?
61、給你一個mysql配置文件,用你認為最佳的編程語言解析該文件?
62、給你兩個路徑a和b,寫一個演算法或思路計算a和b差距幾層並顯示a和b的交集?
63、給你一個url,在nginx配置一下rewrite指定到某個具體路徑?
64、一個php文件的解釋過程是? 一般加速php有哪些? 提高php整體性能會用到哪些技術?
65、session和cookie生存周期區別? 存儲位置區別?
66、require、include、require_once、include_once區別? 載入區別? 如果程序按需載入某個php文件你如何實現?
67、chrome號稱為多線程的,所以多線程和多進程的區別為?
68、php在2011年底出現hash碰撞,hash碰撞原理為? 如何進行修復?
69、web不安全因素有哪些? 分別如何防範?
70、假如兩個單鏈表相交,寫一個最優演算法計算交點位置,說思路也可以?
71、假如你是技術組長? 如何提高團隊效率?
72、nginx負載均衡有哪些? 如果其中一台伺服器掛掉,報警機制如何實現?
73、不優化前提下,apache一般最大連接數為? nginx一般最大連接數為? mysql 每秒insert ? select ? update ? delete?
74、mysql 數據類型有哪些 ? 分別佔用多少存儲空間 ?
75、nginx設置緩存js、css、圖片等信息,緩存的實現原理是?
76、如何提高緩存命中率? 如何對緩存進行顆粒化?
77、php的內存回收機制是?
78、我的所有問題都問完了(當然沒有這么多),你有什麼問題問我沒有?
⑵ PHP程序員要掌握的知識以及相關書籍
1、《PHP基礎教程(第4版)》
書中內容相對簡單,但可以對PHP有一個大概的認識,方便以後的學習。
這本書以通俗易懂的語言向初學者介紹了PHP 語言的基本概念、使用方法和注意事項。全書通 過豐富的示例,引領讀者逐步掌握這門流行的Web 開發語言,使讀者能夠上手編寫適用於常用場景的PHP 腳本。適合有基本HTML 經驗的讀者閱讀。
2、《PHP與MySQL程序設計(第4版)》
這本書中稍微提及了PHP連接和使用MySQL資料庫的方法,全面講述PHP與MySQL的經典之作,書中不但全面介紹了兩種技術的核心特性,還講解了如何高效地結合這兩種技術構建健壯的數據驅動的應用程序。
3、《深入PHP:面向對象、模式與實踐(第3版)》
書中主要介紹了如何使用面向對象技術和設計模式編寫穩定的、可維護的代碼,如何使用Subversion管理多個開發人員,如何使用Phing和PEAR進行構建和安裝,以及將構建和測試過程自動化的策略,包括持續集成。
這本書適合每位PHP開發人員進階參考。
可幫助掌握PHP面向對象設計和開發的精髓,並最終躋身高端PHP開發人員之列。
4、PHP高級程序設計:模式、框架與測試》
書中首先從OOP 採用的機制—— 抽象類、介面、契約式編程開始講起,然後介紹了靜態方法、單例模式、工廠模式和PHP 6 的新特性等內容, 接著介紹了測試和文檔方面的內容,還介紹了標准PHP 庫SPL 方面的知識以及PHP 開發人員最有可能用到的MVC 模式,最後介紹了Ajax 、JSON 、SOAP Web 服務以及SSL 客戶端驗證等Web 2.0 方面的內容。適合中、高級的PHP 程序員閱讀。
5、《應用Yii1.1和PHP5進行敏捷Web開發》
這是一本介紹性的圖書,描述如何去使用Yii應用的測試驅動開發(TDD)的方法開發實際的工程。如果想要快速掌握Yii,不妨看看它。
⑶ PHP模式、映射
1.這三種是面向對象的軟體設計模式,好像和具體的語言沒有關系吧
2.正確應該稱為「單例模式」,在整個應用系統范圍內只有一個實例對象,例子:
class Temple{
private static $ins;
private function __construct(){
}
public static function instance(){
if(Temple::$ins == null){
Temple::$ins = new Temple();
}
return Temple::$ins;
}
public function add($a,$b){
return $a + $b;
}
}
$tp = Temple::instance();
//$tp就是通過單例模式得到的對象,任何地方用到這個對象都是同一個
//解釋一下代碼吧
//構造函數使用的是private修飾,即私有,所以外部無法新建新對象,只能通過該類的類方法接觸
//$ins使用private+static修飾,private使得外部無法改變該屬性,static則保證在應用程序在用時
不會銷毀對象
//綜合instance()類方法,獲取到了Temp的實例對象,而該對象一經創建,在應用范圍內不會銷毀,即所有外部文件使用的都是同一個對象,這就是所謂的 單例模式
3.至於映射,沒用過,也講不清楚,具體用在哪裡不清楚 php的實現函數是
get_class_methods($classname) //獲取一個類的方法,返回方法名數組
get_class_vars($classname)//獲取一個類的屬性,返回屬性名數組
//就這些了,單例模式還是很清楚的,具體分數怎麼給,看你自己了
⑷ php設計模式: 請寫出工廠模式和單態模式的PHP5示例代碼
Example #1 調用工廠方法(帶參數)
<?php
class Example
{
// The parameterized factory method
public static function factory($type)
{
if (include_once 'Drivers/' . $type . '.php') {
$classname = 'Driver_' . $type;
return new $classname;
} else {
throw new Exception ('Driver not found');
}
}
}
?>
------------------------------------
Example #2 單例模式
<?php
class Example
{
// 保存類實例在此屬性中
private static $instance;
// 構造方法聲明為private,防止直接創建對象
private function __construct()
{
echo 'I am constructed';
}
// singleton 方法
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
// Example類中的普通方法
public function bark()
{
echo 'Woof!';
}
// 阻止用戶復制對象實例
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}
?>
⑸ 你熟悉的設計模式有哪些寫出單例模式的實現代碼
23個設計模式:
根據目的設計模式可以分為創造模式,結構模式和行為模式,創建模式用於處理對象的創建。結構模式用於處理類或對象的組合。
行為模式用於描述類或對象如何交互以及如何分配職責,創建模式用於處理對象的創建。主要包括以下五種設計模式:
工廠方法模式()
抽象工廠模式(AbstractFactoryPattern)
建造者模式(BuilderPattern)
原型模式(PrototypePattern)
單例模式(SingletonPattern)
結構模式用於處理類或對象的組合,包括以下七個設計模式:
適配器模式(AdapterPattern)
橋接模式(BridgePattern)
組合模式(CompositePattern)
裝飾者模式(DecoratorPattern)
外觀模式(FacadePattern)
享元模式(FlyweightPattern)
代理模式(ProxyPattern)
行為模式描述類或對象如何交互以及它們如何分配職責。它由以下11種設計模式組成:
責任鏈模式(Chain的ResponsibilityPattern)
命令模式(CommandPattern)
解釋器模式(InterpreterPattern)
迭代器模式(IteratorPattern)
中介者模式(MediatorPattern)
備忘錄模式(MementoPattern)
觀察者模式(ObserverPattern)
狀態模式(StatePattern)
策略模式(StrategyPattern)
模板方法模式(TemplateMethodPattern)
訪問者模式(VisitorPattern)
單例模式實現1:
公共類Singleton{
類共享實例對象
私有靜態單例;單例=零;
//私有構造函數
私有Singleton(){
系統。出去了。這是單例!!);
}
//獲取單例方法
公共同步靜態單例getInstance(){
//確定共享對象是否為空,如何空一個新對象
If(singleton==null){
singleton=newsingleton();
}
返回單例。
}
}
單例模式實現2:
公共類Singleton{
類共享實例對象實例化
=newSingleton();
//私有構造函數
私有Singleton(){
系統:出去了,這是單例!!);
}
//獲取單例方法
公共靜態單例getInstance(){
直接返回共享對象
返回單例。
}
}
(5)php單例模式工廠模式擴展閱讀:
注意事項:
設計模式主要分三個類型:創建型和行為型。
Singleton:確保一個類只有一個實例,並為其提供一個全局訪問點
AbstractFactory:提供一個介面,用於創建一系列相關或相互依賴的對象,而無需指定它們的具體類。
FactoryMethod:定義一個用於創建對象的介面,並讓子類決定實例化哪個類。工廠方法將類的實例化延遲到子類。
Builder:將復雜對象的構造與其表示分離,使相同的構造過程可以創建不同的表示。
Prototype:指定要使用Prototype實例創建的對象的類型,並復制該原型來創建一個新對象。
Composite:將對象組合成樹狀結構,以表示整體各部分之間的關系。組合使用戶一致地使用單個對象和組合對象。
Facade:為子系統fa中的一組介面提供一致的介面。Ade提供了一個高級介面,使子系統更易於使用。
Proxy:為其他對象提供一個代理,以控制對該對象的訪問
Adapter:將一個介面類轉換為客戶想要的另一個介面類。適配器模式使那些由於介面不兼容而無法一起工作的類一起工作。
Decrator:式比子類化更靈活,可以為對象動態添加一些額外的職責。
Bridge:模式將抽象部分與其實現部分分離,以便它們可以獨立地更改。
Flyweight:享元模式
⑹ 自學php,接下來該做什麼
伺服器方面 centos7 和簡單的lnmp搭建 學點linux操作(裝vmware workstation , 安CentOS-7-x86_64-Minimal版本的鏡像,這個是不帶桌面完全命令行模式的)
資料庫方面 ,資料庫設計 ,多表查詢,索引優化 ,分表,主從
nosql方面 常見的就是redis和MongoDB
php方面有基礎知識,代碼優化,面向對象,設計模式(如工廠模式、單例模式、適配器模式,設計模式這塊 你可以網路以下 歪麥博客,我是這個博客里學的干貨比較多,php和mysql方面的一些優化),框架的話 thinkphp yii2 laravel 即時通訊類的框架 如swoole、workman
其他要學的一些 如 svn git composer 負載均衡
最後可以學一下docker技術,這是我最近學的,之所以學它就是因為我們公司有老項目是php5.5版本的,正在做的項目是5.6版本的,即將啟動的項目要用7.1版本,docker的作用是一台機器配置多個php環境不用切換就可以共存(之所以不用phpstudy,因為它需要切換環境)
php ide我推薦使用phpstorm 之前用過幾年的zend studio後來換成了phpstorm感覺phpstom要好用(之後其他語言的ide我都轉成jetbrains家的了,如pycharm webstorm)
其他的就是多多實踐了
⑺ php設計模式中工廠模式和單例模式的區別
工廠模式使用時,返回的對象之間沒有關系。單例模式返回始終是同一個對象。可以在代碼的定義明顯的區分出來,單例模式的構造函數 一般是私有的,不允許實例化,通過內部靜態方法實例化自己,同類型的對象始終返回同一個。
⑻ PHP中幾種常見的開發模式
單例模式
$_instance必須聲明為靜態的私有變數
構造函數和析構函數必須聲明為私有,防止外部程序new 類從而失去單例模式的意義
getInstance()方法必須設置為公有的,必須調用此方法 以返回實例的一個引用
::操作符只能訪問靜態變數和靜態函數
new對象都會消耗內存
使用場景:最常用的地方是資料庫連接。
使用單例模式生成一個對象後, 該對象可以被其它眾多對象所使用。
私有的__clone()方法防止克隆對象
單例模式,使某個類的對象僅允許創建一個。構造函數private修飾,
申明一個static getInstance方法,在該方法里創建該對象的實例。如果該實例已經存在,則不創建。比如只需要創建一個資料庫連接。
工廠模式
工廠模式,工廠方法或者類生成對象,而不是在代碼中直接new。
使用工廠模式,可以避免當改變某個類的名字或者方法之後,在調用這個類的所有的代碼中都修改它的名字或者參數。
注冊模式
注冊模式,解決全局共享和交換對象。已經創建好的對象,掛在到某個全局可以使用的數組上,在需要使用的時候,直接從該數組上獲取即可。將對象注冊到全局的樹上。任何地方直接去訪問。
策略模式
策略模式,將一組特定的行為和演算法封裝成類,以適應某些特定的上下文環境。
eg:假如有一個電商網站系統,針對男性女性用戶要各自跳轉到不同的商品類目,並且所有的廣告位展示不同的廣告。在傳統的代碼中,都是在系統中加入各種if else的判斷,硬編碼的方式。如果有一天增加了一種用戶,就需要改寫代碼。使用策略模式,如果新增加一種用戶類型,只需要增加一種策略就可以。其他所有的地方只需要使用不同的策略就可以。
首先聲明策略的介面文件,約定了策略的包含的行為。然後,定義各個具體的策略實現類。
執行結果圖:
總結:
通過以上方式,可以發現,在不同用戶登錄時顯示不同的內容,但是解決了在顯示時的硬編碼的問題。如果要增加一種策略,只需要增加一種策略實現類,然後在入口文件中執行判斷,傳入這個類即可。實現了解耦。
實現依賴倒置和控制反轉(有待理解)
通過介面的方式,使得類和類之間不直接依賴。在使用該類的時候,才動態的傳入該介面的一個實現類。如果要替換某個類,只需要提供一個實現了該介面的實現類,通過修改一行代碼即可完成替換。
觀察者模式
1:觀察者模式(Observer),當一個對象狀態發生變化時,依賴它的對象全部會收到通知,並自動更新。
2:場景:一個事件發生後,要執行一連串更新操作。傳統的編程方式,就是在事件的代碼之後直接加入處理的邏輯。當更新的邏輯增多之後,代碼會變得難以維護。這種方式是耦合的,侵入式的,增加新的邏輯需要修改事件的主體代碼。
3:觀察者模式實現了低耦合,非侵入式的通知與更新機制。
定義一個事件觸發抽象類。
當某個事件發生後,需要執行的邏輯增多時,可以以松耦合的方式去增刪邏輯。也就是代碼中的紅色部分,只需要定義一個實現了觀察者介面的類,實現復雜的邏輯,然後在紅色的部分加上一行代碼即可。這樣實現了低耦合。
裝飾器模式
1:裝飾器模式,可以動態的添加修改類的功能
2:一個類提供了一項功能,如果要在修改並添加額外的功能,傳統的編程模式,需要寫一個子類繼承它,並重寫實現類的方法
3:使用裝飾器模式,僅需要在運行時添加一個裝飾器對象即可實現,可以實現最大額靈活性。