php高級工程師面試題

PHP對象的克隆與引用有什麼區別?

摘要: 是這樣的,這個問題確切說應該是這樣的:“ PHP對象的賦值和克隆有什麼區別 ”,注意不是複製,就是複製,打開窗子說亮話,就是下面兩行有什麼區別。 $user2 = $user1這種寫法,實際上是引用寫法,也就是說本質上user1和user2變量指向的都是同一個PHP對象,佔用的內存也只有一份,如果你閱讀全文

posted @ 2018-11-06 10:32 王召波 閱讀(94) | 評論 (0)  編輯

一個數據表如果量很大了,應該有什麼措施?

摘要: 我記得這次面試好像也沒人問我,但是兩年前有人問過我,當時我非常牛逼,就回答了一句:當然是分表啊!然後就沒有然後了,今天我來重新審視一下這個問題。 “假如一個表太大了,怎麼辦?” 既然問這個問題了,那麼一定是這個表出問題了纔會問,如果不出問題誰吃飽撐的研究這個。 一般情況單表誰過於大了,對查詢速度會產閱讀全文

posted @ 2018-10-10 14:24 王召波 閱讀(320) | 評論 (0)  編輯

一個基於LNMP架構的應用服務器出現卡頓現象,如何排查原因?

摘要: 既然是基於LNMP架構的應用服務器,反正面試官也沒說是Web應用還是API應用,我們就索性假裝既要爲客戶端提供API,同時還提供Web頁面。 首先第一件事兒就是通過各種方式查看查看各個服務器當前的負載高不高,方式包括登錄雲服務器控制檯,自己用ssh登錄到服務器,甚至有條件自己實現了運維監控手段,總之閱讀全文

posted @ 2018-10-10 14:23 王召波 閱讀(80) | 評論 (0)  編輯

php常見的運行模式

摘要: 這個問題十分經典,我是建議伴隨着ubuntu linux下自帶的php安裝包來講解比較合適,我截個圖,你們感受一下: 以往遇到問題總是有人說自己改了php配置文件,但是就是不生效,八成就是改錯配置文件了。 先說最經典的php運行模式,就是apache mod模式,這種模式下,php是作爲apache閱讀全文

posted @ 2018-10-10 14:22 王召波 閱讀(68) | 評論 (0)  編輯

常見的HTTP頭部信息都有哪些?

摘要: Accept: 允許哪些媒體類型。 Accept-Charset: 允許哪些字符集。 Accept-Encoding: 允許哪些編碼。 Accept-Language: 允許哪些語言。 Cache-Control: 緩存策略,如no-cache,詳見官方文檔。 Connection: 連接選項,例如是否允許代理。 Host: 請求的主機。 If-None-Match: 判斷請求實體的Etag是...閱讀全文

posted @ 2018-10-10 14:18 王召波 閱讀(224) | 評論 (0)  編輯

API網關一般提供什麼功能?

摘要: 網關這種東西,是伴隨着微服務風生水起的,微服務可以沒有api網關,但是最好有,也並不是絕對的。因爲有這個東西是合理的,沒有的話,你的微服務會很難受。 首先網關最基礎的作用就是對外包括ios、android、webapp、website、h5、微信小程序甚至是第三方提供一個統一服務接入入口。聚合內網衆閱讀全文

posted @ 2018-10-10 14:16 王召波 閱讀(489) | 評論 (0)  編輯

對比swoole和workerman,進程模型有什麼不同?

摘要: 這個社會,你要出去找工作說不會點兒workerman或者swoole,真是不好意思說自己是混php圈子的。swoole是使用C語言實現的socket通信框架,workerman則是使用純php實現的socket框架,二者進程模型上也存在很多的不同。 先說下swoole的進程模型,當然了,我先盜張圖貼閱讀全文

posted @ 2018-09-18 11:07 王召波 閱讀(48) | 評論 (0)  編輯

認識過延遲隊列嗎?什麼場景需要延遲隊列?

摘要: 其實這個問題有個面試官問過我,但被我搪塞過去了。其實說到底是那會兒對這個玩意不是特別熟悉,僅僅是聽說過。現如今,已經瞭解了很多了,所以拿出來說一說。 其實這道題屬於偏“業務”類型的問題。延遲隊列首先是個消息隊列,其次是個帶延遲功能的消息隊列,你這麼理解就對了。相對於普通消息隊列,延遲隊列中的消息除了閱讀全文

posted @ 2018-09-18 10:51 王召波 閱讀(50) | 評論 (0)  編輯

HTTPS原理大概是怎樣的?

摘要: https比http多的,主要就是安全。那麼,安全在哪兒了? 假如說,現在只有http協議,讓你進行安全的數據傳輸,你怎麼辦? 當然是加密了,就是服務器和客戶端商議好一個密鑰,然後彼此之間傳輸數據的時候通過這個密鑰進行加密和解密。當然了,這個密鑰可以是固定的,但是這種情況下要麼服務器密鑰和加解密算法閱讀全文

posted @ 2018-09-18 10:51 王召波 閱讀(13) | 評論 (0)  編輯

你在嘗試過PHP的多進程編程嗎?進程和線程有什麼區別?

摘要: 首先,PHP是可以操作多進程的,這個模塊叫做pcntl,一般情況下,會被默認安裝,可以通過php -m來查詢。 PHP也可以操作多線程,需要一個叫做pthread的庫來實現,但是PHP的pthread比較奇怪,變量一直不能共享,似乎失去了多線程的意義。 相對來說,在生產環境更具備價值的是php的多進閱讀全文

posted @ 2018-09-18 10:50 王召波 閱讀(42) | 評論 (0)  編輯

你在平時開發中對MVC有什麼理解?Logic或者Service層呢?

摘要: 這玩意實際上沒有標準答案了,每個人和每個人理解方式都不一樣,但是最終目的都是爲解決問題而生的。 一般說來,大家對MVC都是比較熟悉的,至於Logic層可能略微陌生或者見過但沒用過。先說MVC是什麼意思,老生常談。 mcv 是模型(model)-視圖(view)-控制器(controller)的縮寫的閱讀全文

posted @ 2018-09-18 10:49 王召波 閱讀(218) | 評論 (0)  編輯

結合PHP,說下你瞭解的服務器進程模型有哪些?

摘要: 由於PHP沒有可靠可用的線程,所以只能用進程來頂上去,那麼我們常見的服務器模型有哪些呢? 單進程類型。一個主進程,啓動後開始一個監聽socket。客戶端有請求了,就accept,然後處理業務,最後將處理好的數據write給客戶端。在主進程處理業務期間,如果有其他客戶端來請求,那麼就只能很悲催的等待。閱讀全文

posted @ 2018-09-10 10:40 王召波 閱讀(30) | 評論 (0)  編輯

redis過期策略?以及過期的實現關鍵點?

摘要: redis的key有個有效期限,這個應該都知道,如果你不知道,說明你基礎很差。比如我們有個key,我們只給了他五分鐘的有效期,五分鐘過後,這個key就算是失效了。那麼,在redis中,一個key過期實際上是有三種策略來對待的,並不是一定是過期就立馬刪除。 下面先說三種比較常見的刪除策略,這些策略都是閱讀全文

posted @ 2018-09-10 10:40 王召波 閱讀(21) | 評論 (0)  編輯

簡單解析一下http協議

摘要: 首先說,http協議是基於TCP協議實現的,http協議首先是文本協議(請區別於二進制協議),其次他還是超文本協議。超文本傳輸協議的意思就是出了傳遞文本消息,他真也能傳遞二進制數據,比如圖片,甚至其他流媒體信息。 一般說來,tcp的數據是流式的,所以判斷數據包就是靠數據邊界來識別的。一般說來,識別數閱讀全文

posted @ 2018-09-10 10:39 王召波 閱讀(48) | 評論 (0)  編輯

同步、異步、阻塞、非阻塞和IO多路複用是怎麼回事?

摘要: 要想更好了解socket編程,有一個不可繞過的環節就是IO.在Linux中,一切皆文件.實際上要文件幹啥?不就是讀寫麼?所以,這句話本質就是”IO纔是王道”.用php的fopen打開文件關閉文件讀讀寫寫,這叫本地文件IO.在socket編程中,本質就是網絡IO.所以,在開始進一步的socket編程前閱讀全文

posted @ 2018-09-06 09:59 王召波 閱讀(97) | 評論 (0)  編輯

你是如何理解RPC的?

摘要: RPC英文全程是Remote Procedure Call,中文全稱叫做遠程過程調用。我們遇到大多數都是本地調用,一種是同一個程序內調用,比如一個函數調用另外一個函數,第二種情況是一個進程調用另外一個進程算是跨進程調用。而RPC則是跨機器跨進程的調用,大概如下圖所示: 其實本身也沒什麼好神奇的,下面閱讀全文

posted @ 2018-09-05 13:25 王召波 閱讀(109) | 評論 (0)  編輯

REDIS中List是如何實現的?

摘要: redis中的list本質就是鏈表。鏈表是由一個一個的節點組成的,這個沒什麼疑問吧?節點就是node,然後一個node和一個node中間串聯起來就是鏈表。我們先看下node的C語言結構體,如下: struct listNode { // 指向前一個節點的指針 listNode * prev; // 閱讀全文

posted @ 2018-09-05 13:24 王召波 閱讀(34) | 評論 (0)  編輯

REDIS中字符串是如何實現的?

摘要: 首先在說redis的字符串之前,希望你昨天應該補充過redis字符串的一些操作api了。其實redis的字符串本質上就是利用C語言的字符串來實現的,但是又不能單純的C語言字符串,而是改造過的加強版本的字符串,官方名稱叫做SDS,中文名字叫做簡單動態字符串。這個東西數據結構就是一個C語言的結構體,結構閱讀全文

posted @ 2018-09-05 13:22 王召波 閱讀(26) | 評論 (0)  編輯

REDIS中常見的數據結構有幾種?在你看來每種數據結構的應用場景應該是怎樣的?

摘要: 今天這個問題比較初級,很多同學應該可能都知道,即便是沒吃過豬肉,也應該見過豬跑。廢話不多說,步入正題。 小提示,redis是使用C語言實現的。 第一種數據就是字符串,也就是string,這是redis中最基礎的數據類型了,最起碼redis中所有的key本身都是字符串類型。我舉幾個常見的場景: 這個東閱讀全文

posted @ 2018-09-05 13:21 王召波 閱讀(65) | 評論 (0)  編輯

MYSQL的innodb引擎中,聚簇索引和二級索引有什麼不同

摘要: 好了,我們先來接觸第一個概念,就是二叉搜索樹。一坨數字15、10、18、7、12、16、19,讓你快速從中找到16,然後我們將它組織爲一顆二叉搜索樹,如下圖所示:然後我們在尋找16的時候,第三次就鎖定到16。如果不用這種方法,而且我們從頭15數字開始,怕是要循環到第六次才能鎖定。當然,運氣好從後往前閱讀全文

posted @ 2018-09-05 13:19 王召波 閱讀(25) | 評論 (0)  編輯

PHP的垃圾回收機制以及大概實現

摘要: 垃圾回收,簡稱gc。顧名思義,就是廢物重利用的意思。再說這個之前先接觸一下內存泄露,大概意思就是申請了一塊地兒拉了會兒屎,拉完後不收拾,那麼那塊兒地就算是糟蹋了,地越用越少,最後一地全是屎。說到底一句,用了記得還。一定程度上說,垃圾回收機制就是用來擦屁股的。如果用過C語言,那麼申請內存的方式是mal閱讀全文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章