導航:首頁 > 編程語言 > php高並發面試題

php高並發面試題

發布時間:2023-05-16 02:08:51

A. 誰有面試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、我的所有問題都問完了(當然沒有這么多),你有什麼問題問我沒有?

B. PHP中高級面試題 – 第二天

一、寫一段代碼判斷單向鏈表中有沒有形成環,如果形成環,請找出環的入口處,即 P 點

二、從撲克牌中隨機抽出 5 張牌,判斷是不是一個順子,即這5張牌是連續的

這個問題有個關鍵點,撲克牌,1-13 不能再多了。這就很簡單了。用PHP來做,定義一個數組分別存著1到13, 拿出一個,置空一個,最後看下這五個置空的 是不是連續的。這種情況不考慮抽出的順序。

三、說一下 PHP 的(內存)垃圾回收機制

每一個變數對應一個 zval 數據結構,在該結構內還有一個 val 結構體,該結構體內有一個引用計數(php7 而言,對於 php5,這個引用計數是保存在 zval 結構中的),標識該對象的引用數,當對象的引用計數為 0 時代表這個對象可被回收。

對象的 refcount 減少的時機:修改變數、函數返回(釋放局部變數)、unset 變數

對於數組和對象而言,可能存在變數中的成員引用變數本身的情況,也就是循環引用,這樣會造成這個變數永遠不會被內存回收,而成為垃圾。

PHP 里對於這種情況給出了垃圾回收機制:如果數組、對象的引用計數減少而且不為零,則認為他們可能是垃圾,把他們放到垃圾收集器里。等垃圾收集器到了一定的數量之後,進行垃圾處理:對所有可能的垃圾 refcount 減 1,如果為 1,說明是垃圾,則進行內存回收;如果不為 1,說明還有其他變數在使用,refcount 重新加 1;這種對象復用以及垃圾回收機制在其他語言中也有體現:redis 中也使用了引用計數表示每個對象的引用數量。

四、簡述一下PHP簡訊驗證碼如何防刷?

1、時間限制:60 秒後才能再次發送

從發送驗證碼開始,前端(客戶端)會進行一個 60 秒的倒數,在這一分鍾之內,用戶是無法提交多次發送信息的請求的。這種方法雖然使用得比較普遍,但是卻不是非常有用,技術稍微好點的人完全可以繞過這個限制,直接發送簡訊驗證碼。

2、手機號限制:同一個手機號,24 小時之內不能夠超過 5 條

對使用同一個手機號碼進行注冊或者其他發送簡訊驗證碼的操作的時候,系統可以對這個手機號碼進行限制,例如,24 小時只能發送 5 條簡訊驗證碼,超出限制則進行報錯(如:系統繁忙,請稍後再試)。然而,這也只能夠避免人工手動刷簡訊而已,對於批量使用不同手機號碼來刷簡訊的機器,這種方法也是無可奈何的。

3、簡訊驗證碼限制:30 分鍾之內發送同一個驗證碼

網上還有一種方法說:30 分鍾之內,所有的請求,所發送的簡訊驗證碼都是同一個驗證碼。第一次請求簡訊介面,然後緩存簡訊驗證碼結果,30 分鍾之內再次請求,則直接返回緩存的內容。對於這種方式,不是很清楚簡訊介面商會不會對發送緩存信息收取費用,如果有興趣可以了解了解。

4、前後端校驗:提交 Token 參數校驗

這種方式比較少人說到,個人覺得可以這種方法值得一試。前端(客戶端)在請求發送簡訊的時候,同時向服務端提交一個 Token 參數,服務端對這個 Token 參數進行校驗,校驗通過之後,再向請求發送簡訊的介面向用戶手機發送簡訊。

5、唯一性限制:微信產品,限制同一個微信 ID 用戶的請求數量

如果是微信的產品的話,可以通過微信 ID 來進行識別,然後對同一個微信 ID 的用戶限制,24 小時之內最多隻能夠發送一定量的簡訊。

6、產品流程限制:分步驟進行

例如注冊的簡訊驗證碼使用場景,我們將注冊的步驟分成 2 步,用戶在輸入手機號碼並設置了密碼之後,下一步才進入驗證碼的驗證步驟。

7、圖形驗證碼限制:圖形驗證通過後再請求介面

用戶輸入圖形驗證碼並通過之後,再請求簡訊介面獲取驗證碼。為了有更好的用戶體驗,也可以設計成:一開始不需要輸入圖形驗證碼,在操作達到一定量之後,才需要輸入圖形驗證碼。具體情況請根據具體場景來進行設計。

8、IP 及 Cookie 限制:限制相同的 IP/Cookie 信息最大數量

使用 Cookie 或者 IP,能夠簡單識別同一個用戶,然後對相同的用戶進行限制(如:24 小時內最多隻能夠發送 20 條簡訊)。然而,Cookie 能夠清理、IP 能夠模擬,而且 IP 還會出現區域網相同 IP 的情況,因此,在使用此方法的時候,應該根據具體情況來思考。

9、簡訊預警機制,做好出問題之後的防護

以上的方法並不一定能夠完全杜絕簡訊被刷,因此,我們也應該做好簡訊的預警機制,即當簡訊的使用量達到一定量之後,向管理員發送預警信息,管理員可以立刻對簡訊的介面情況進行監控和防護。

五、mySQL 里有 2000w 數據,redis 中只存 20w 的數據,如何保證 redis 中的數據都是熱點數據

相關知識:redis 內存數據集大小上升到一定大小的時候,就會施行數據淘汰策略(回收策略)。redis 提供 6 種數據淘汰策略:

volatile-lru:從已設置過期時間的數據集(server.db [i].expires)中挑選最近最少使用的數據淘汰

volatile-ttl:從已設置過期時間的數據集(server.db [i].expires)中挑選將要過期的數據淘汰

volatile-random:從已設置過期時間的數據集(server.db [i].expires)中任意選擇數據淘汰

allkeys-lru:從數據集(server.db [i].dict)中挑選最近最少使用的數據淘汰

allkeys-random:從數據集(server.db [i].dict)中任意選擇數據淘汰

no-enviction(驅逐):禁止驅逐數據

C. PHP程序員崗位招聘面試題有哪些

可能會問以下問題:(這是一個多元的問題,這和你應聘的公司規模,行業,技術層次有一定的關系)
1、你會使用什麼框架?
2、你知道PHP有哪些框架?
3、你知道或使用過哪些PHP庫?
4、你用PHP寫過框架嗎?
5、你有作品嗎?
6、你怎麼調試PHP?
7、你知道設計模型嗎?
8、說一下PHP個版本的差異。
9、說一下某函數的具體作用。
10、給你一個演算法讓你用PHP實現。
... ...
總之有很多問題可能是意料不到的,所以建議你去牛客網多練習一下或者去海投簡歷體驗應聘過程,失敗沒什麼大不了的。

D. 程序員面試必備PHP基礎面試題 – 第十一天

一、兩張表 city表和province表。分別為城市與省份的關系表。

表名:city
id City Provinceid
1 廣州 1
2 深圳 1
3 惠州 1
4 長沙 2
5 武漢 3
………. 廣州
表名稱:province:
id Province
1 廣東
2 湖南
3 湖北
……….

1、寫一條sql語句關系兩個表,實現:顯示城市的基本信息。顯示欄位:城市id ,城市名, 所屬省份 。
如:
Id(城市id) Cityname(城市名) Privence(所屬省份)

2、如果要統計每個省份有多少個城市,請用group by 查詢出來。顯示欄位:省份id ,省份名,包含多少個城市。

二、主鍵 和外鍵表示什麼?一般用於做什麼?

主鍵:能夠唯一表示數據表中的每個記錄的欄位或者欄位的組合就稱為主鍵。一個主鍵是唯一識別一個表的每一行記錄,但這只是其作用的一療分,主鍵的主要作用是將記錄和存放在其他表中的數據進行關聯,在這一點上,主鍵是不同表中各記錄間的簡單指針,主鍵約整就是確定表中的每一條記錄,主鍵不能是空值,唯一約束是用於指定一個或多個列的組合值具有唯一性,以防止在列中輸入重復的值,所以,主鍵的值對用戶而言是沒有什麼意義,並且和它賦予的值也沒有什麼特別聯系。

外鍵:若有兩個表A,B,C是A的主鍵,而B中也有C欄位,則C就是表B的外鍵,外鍵約束主要用來維護兩個表之間數據的一致性。A為基本表,B為信息表。
在資料庫中,常常不只是一個表,這些表之間也不是相互獨立的,不同的表之間需要建立一種關系,才能將它們的數據相互溝通,而在這個溝通過程中,就需要表中有一個欄位作為標志,不同的記錄對應的欄位取值不能相同,也不能是空白的,通過這個欄位中不同的值可以區別各條記錄,就像我們區別不同的人,每個人都有名字,但它卻不能作為主鍵,因為人名很容易出現重復,而身份證號是每個人都不同的,所以可以根據它來區別不同的人,資料庫的表中作為主鍵的段段就要像人的身份證號一樣,必須是每個記錄的值都不同,這才能根據
主鍵的值來確定不同的記錄。

關系:外鍵一定是另外某個表的主鍵。

三、select now(),Date_ADD(now(),INTERVAL 14 day),Date_SUB(now(),INTERVAL 3 Day) from table; 會獲得什麼內容,請寫出來。

會獲得三條數據:
第一條:當前時間;
第二條:當前時間加上14天;
第三條:當前時間減去3天。

四、您所知道的MYSQL 資料庫備份,還原方式有哪幾種?
備份:
一,搭建主從架構,master-slave,通過binlog文件同步復制主庫的數據,也可以直接通過binlog文件恢復數據。
二,通過系統計劃任務執行mysqlmp做周期性全備份。
三,物理備份,直接拷貝數據文件、參數文件、日誌文件。
還原:
一.通過mysql操作工具,如phpmyadmin,sqlyog等導入備份過的資料庫文件。
二.將物理備份的文件拷貝到mysql的data目錄下

五、內容管理系統中,表message有如下欄位
id 文章id
title 文章標題
content 文章內容
category_id 文章分類id
hits 點擊量
創建上表,寫出MySQL語句

六、同樣上述內容管理系統:表comment記錄用戶回復內容,欄位如下
comment_id 回復id
id 文章id,關聯message表中的id
comment_content 回復內容
現通過查詢資料庫需要得到以下格式的文章標題列表,並按照回復數量排序,回復最高的排在最前面
文章id 文章標題 點擊量 回復數量
用一個SQL語句完成上述查詢,如果文章沒有回復則回復數量顯示0

七、內容管理系統,表category保存分類信息,欄位如下
category_id int(4) not null auto_increment;
category_name varchar(40) not null;
用戶輸入文章時,通過選擇下拉菜單選定文章分類
寫出如何實現這個下拉菜單

八、PHP文件操作

1、內容管理系統:用戶提交內容後,系統生成靜態HTML頁面;寫出實現的基本思路

2、簡單描述用戶修改發布內容的實現流程和基本思路

1)當用戶提交後生成一個由url地址MD5後的文件的編譯頁面,用文件處理file函數生成一個模板合成頁,判斷模板編譯頁是否有,模板頁無或者編譯頁的創建時間戳小於模板頁的修改時間都會從新生成編譯頁面,編譯後的頁面會調用對應資料庫的值顯示在頁面中,通過對內存數據的讀取釋放,顯示出我們看到的靜態數據,然後用file文件將其保存起來生成靜態的頁面

2)當用戶修改了發布內容都會修改數據相關的內容,並通過編譯頁面更新靜態數據並用文件的方式緩存起來,當用戶查看時將不做任何資料庫查找,直接調用該緩存文件即可

E. php面試題解答

1,
var x=document.getElementById("img1");
var title=document.getElementById("img1").title;
var sina_title=document.getElementById("img1").sina_title;

2,serialize(),unserialize();

3,編碼方式不同,urlencode()將字串以URL編碼。例如空格就會變成加號。
rawurlencode()將url編碼成url的字元串專用格式,特殊字元回轉換成百分號後面加兩個十六子介數字的格式。
4,strip_tags(),html_entity_decode();

5,$str=preg_replace("/\<script.*\>.*\<\/script\>/i","",$str);
6,左連接,左連接的表如果沒有匹配的數據不影響結果。
7
SELECT name,score FROM tl_user LEFT JOIN tl_score ON tl_user.ID=tl_score.ID
7 system(),exec(),passthru()
8,json_decode ,json_encode
9 isset() empty()
10 後者的許可權大於前者,後者是OFF的話,前者就算是E-ALL也沒用。
11,$_SERVER['REMOTE_ADDR'];
12,incov()
echo iconv("gbk",""UTF-8,"我們");
mb_convert_encoding($str, "GBK", "UTF-8")
13 explode() split() ;implode() join()
14 注意事項挺多的,懶得寫。

1,超時,伺服器已經關閉連接
2 靜態表欄位長度固定,自動填充,讀寫速度很快,便於緩存和修復,但比較占硬碟,動態表是欄位長度不固定,節省硬碟,但更復雜,容易產生碎片,速度慢,出問題後不容易重建。
3InnoDB和MyISAM是在使用MySQL最常用的兩個表類型,各有優缺點,視具體應用而定。基本的差別為:MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,但是不提供事務支持,而InnoDB提供事務支持已經外部鍵等高級資料庫功能。
MyIASM是IASM表的新版本,有如下擴展:
二進制層次的可移植性。
NULL列索引。
對變長行比ISAM表有更少的碎片。
支持大文件。
更好的索引壓縮
更好的鍵嗎統計分布。
更好和更快的auto_increment處理。
1.MySQL最大的優勢在於MyISAM引擎下的簡單SELECT,INSERT和UPDATE快速操作
2.MyISAM類型的數據文件可以在不同操作系統中COPY,這點很重要,布署的時候方便點。

以下是一些細節和具體實現的差別:
1.InnoDB不支持FULLTEXT類型的索引。
2.InnoDB 中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數即可。注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的。
3.對於AUTO_INCREMENT類型的欄位,InnoDB中必須包含只有該欄位的索引,但是在MyISAM表中,可以和其他欄位一起建立聯合索引。
4.DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
5.LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據後再改成InnoDB表,但是對於使用的額外的InnoDB特性(例如外鍵)的表不適用。
另外,InnoDB表的行鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表,例如update table set num=1 where name like 「%aaa%」
以暫對存儲引擎的認識,覺得 InnoDB 支持外鍵,在數據量可以用「龐大」來形容時,在有良好的 INDEX 的基礎上,InnoDB 的查詢速度應該比 MyISAM 要快。
在 Falcon 有穩定版本前,我想 MyISAM 是一個可用的選擇方案。
任何一種表都不是萬能的,只用恰當的針對業務類型來選擇合適的表類型,才能最大的發揮MySQL的性能優勢
3, 都是1 ^^懶得回答了,睡覺去。

F. 面試高階php工程師,一般會問到哪些問題

面試高階php工程師,一般會問到哪些問題

  1. 高並發大訪問量的mysql優化,伺服器優化?

欄位建索引、主從資料庫、讀寫分離、表分割槽、負載均衡。

linux的慢查詢日誌會記錄mysql的超時查詢sql語句,定期察看進行優化。

2.大訪問量下秒殺模組程式怎麼設計,如果使用mysql會有多賣的情況,就是訂單超過庫存。

將訂單資料快取到記憶體,如果用資料庫直接崩掉,毫無懸念的。

3.快取的使用

能用靜態的用靜態,不能靜態的用記憶體快取,例如memcache、redis,不能快取的用資料庫。

4.session可不可以跨域?怎麼跨域?

將PHP session機制褲型沖重寫(PHP提供),將session儲存在memcache或者資料庫就可以跨域了。

另外session能以三種方式儲存,檔案、資料庫、快取。

5.了不了解非關系型資料庫?

mongodb

6.會不會寫shell指令碼以及linux的操作

還會問一下時下流行的東西,比如做沒做過微信開發,例如微信支付開發、APP移動開發,等等問題。

問的核心東西都是圍繞這些轉的,如果有筆試會讓你寫sql,php功能(例如氣泡排序等排序),還有邏輯題。

我當初面試了很多,這是一個我的面試經驗的總結,純手打忘採納。

高階php工程師都做哪些工作?

釋出任務,提出解決方案,解決核心程式碼之類的。其它交給底下做。

面試三次元量測工程師會問哪些問題

其實,不管是什麼樣的面試形,問的問題都差不多,萬變不離其宗,都有規律可尋。其實對所有的面試官而言,只有一個目的:在最短的時間里了解到你最多的資訊。想高效率的准備面試,先從這七個大方面著手吧!
一、基本情況
1、請用最簡潔的語言描述您從前的工作經歷和工作成果。
二、專業背景
您認為此工作崗位應當具備哪些素質?
三、工作模式
您平時習慣於單獨工作還是團隊工作?
四、價值取向
您對原來的單位和上司的看法如何?
五、資質特性
您如何描述自己的個性?
六、薪資待遇
是否方便告訴我您目前的待遇是多少?
七、背景調查
您是否介意我們通過您原來的單位迚行一些調查?
95%的面試基本上都離不開這些問題,當然還有可能問一些專業問題,我想如果你做過的話應該都不是什麼難事,一般面試胡殲官都不會過多的問專業方面的問題的。以上資訊直接參考楚湘人才網面試寶典篇之化繁為簡,把HR的上百道問題匯總成七大類和面試常問經典問題。更多更全面的面試資訊 面試技巧 面試問題請登陸楚湘人才網或關注微信公眾平台:楚湘人才網

2015年高階工程師答辯會問哪些問題

沒有統一標準的,不同專業、不同專家會問不同問題,都是隨機的,沒有固定模式。

大疆面試硬體工程師,一般會問什麼問題

分兩類
1、會技術的面試官:會問你有沒有做過一些小設計,如果這設計有點難度就會圍繞這說,如果是普通貨就會問你其它基礎電路問題。
2、裝13的人事部:閑聊日常生活,估算你對它們有沒有用。

關於面試水電工程師會問哪些問題

1、水電工程師面試自我介紹
2、水利水電工程

什麼是高階PHP工程師

PHP技術人才,正迎合了目前的網際網路的發展趨勢;PHP作為非常優秀的、簡便的Web開發語言,和Linux,Apache,MySQL緊密結合,形成LAMP的開源黃金組合,不僅降低使用成本,還提升了開發速度,滿足最新的互動式網路開發的應用,這使得php軟體工程師成為一個發展迅速的職業。

面試機械工程師,技術部的一般會問那些問題?

興趣、愛好、特長等各方面都可能問到。

在、技術方面的多從公司產品面問。
所以你要先了解這個公司的產品特性,看看合你專業相關的部分來准備。

面試php工程師出什麼考題好

php的面試一般分為三個部分:筆試部分,會針對一些語法問題,常用基礎技術問題,出一份試卷給你做;面試問題,針對你的簡歷,主管會經營詢問驗證,並對你進行綜合打分;上機操作,會根據職位要求,要求你上線一個小功能之租喊類的;總之,會結合崗位要求,對你的基本功、專業技能,以及綜合素質進行簡單的考核,一般不難!【如果對你有幫助,望採納】

1.PHP基本功,字串與陣列
2.網路功能,發起curl,socket程式設計等
3.對網路開發的理解,tcp/udp, 協議的討論
PS:對具體函式的掌握要求不高,反正可以查手冊。

G. PHP中高級面試題 – 第三天

一、簡述一下MongoDB的應用場景

mongodb 支持副本集、索引、自動分片,可以保證較高的性能和可用性。

更高的寫入負載

默認情況下,MongoDB 更側重高數據寫入性能,而非事務安全,MongoDB 很適合業務系統中有大量 「低價值」 數據的場景。但是應當避免在高事務安全性的系統中使用 MongoDB,除非能從架構設計上保證事務安全。

高可用性

MongoDB 的復副集 (Master-Slave) 配置非常簡潔方便,此外,MongoDB 可以快速響應的處理單節點故障,自動、安全地完成故障轉移。這些特性使得 MongoDB 能在一個相對不穩定(如雲主機)的環境中,保持高可用性。

數據量很大或者未來會變得很大

依賴資料庫 (MySQL) 自身的特性,完成數據的擴展是較困難的事,在 MySQL 中,當一個單達表到 5-10GB 時會出現明顯的性能降級,此時需要通過數據的水平和垂直拆分、庫的拆分完成擴展,使用 MySQL 通常需要藉助驅動層或代理層完成這類需求。而 MongoDB 內建了多種數據分片的特性,可以很好地適應大數據量的需求。

基於位置的數據查詢

MongoDB 支持二維空間索引,因此可以快速及精確地從指定位置獲取數據。

表結構不明確

在一些傳統 RDBMS 中,增加一個欄位會鎖住整個資料庫 / 表,或者在執行一個重負載的請求時會明顯造成其它請求的性能降級。通常發生在數據表大於 1G 的時候(當大於 1TB 時更甚)。 因 MongoDB 是文檔型資料庫,為非結構貨的文檔增加一個新欄位是很快速的操作,並且不會影響到已有數據。另外一個好處當業務數據發生變化時,是將不再需要由 DBA 修改表結構。

二、資料庫設計經驗,為什麼進行分表?分庫?一般多少數據量開始分表?分庫?分庫分表的目的?

1、為什麼要分表

當一張表的數據達到幾百萬時,你查詢一次所花的時間會變多,如果有聯合查詢的話,有可能會死在那兒了。分表的目的就在於此,減小資料庫的負擔,縮短查詢時間。日常開發中我們經常會遇到大表的情況,所謂的大表是指存儲了百萬級乃至千萬級條記錄的表。這樣的表過於龐大,導致資料庫在查詢和插入的時候耗時太長,性能低下,如果涉及聯合查詢的情況,性能會更加糟糕。

分表和表分區的目的就是減少資料庫的負擔,提高資料庫的效率,通常點來講就是提高表的增刪改查效率。資料庫中的數據量不一定是可控的,在未進行分庫分表的情況下,隨著時間和業務的發展,庫中的表會越來越多,表中的數據量也會越來越大,相應地,數據操作,增刪改查的開銷也會越來越大;另外,由於無法進行分布式式部署,而一台伺服器的資源(CPU、磁碟、內存、IO 等)是有限的,最終資料庫所能承載的數據量、數據處理能力都將遭遇瓶頸。

2、分表的方案

做 mysql 集群,有人會問 mysql 集群,根分表有什麼關系嗎?雖然它不是實際意義上的分表,但是它啟到了分表的作用,做集群的意義是什麼呢?為一個資料庫減輕負擔,說白了就是減少 sql 排隊隊列中的 sql 的數量,舉個例子:有 10 個 sql 請求,如果放在一個資料庫伺服器的排隊隊列中,他要等很長時間,如果把這 10 個 sql 請求,分配到 5 個資料庫伺服器的排隊隊列中,一個資料庫伺服器的隊列中只有 2 個,這樣等待時間是不是大大的縮短了呢?

linux mysql proxy 的安裝,配置,以及讀寫分離

mysql replication 互為主從的安裝及配置,以及數據同步

優點:擴展性好,沒有多個分表後的復雜操作(php 代碼)

缺點:單個表的數據量還是沒有變,一次操作所花的時間還是那麼多,硬體開銷大。

三、簡述一下資料庫主從復制,讀寫分離

* 什麼是主從復制
主從復制,是用來建立一個和主資料庫完全一樣的資料庫環境,稱為從資料庫;

* 主從復制的原理:
1.資料庫有個bin-log二進制文件,記錄了所有的sql語句。
2.只需要把主資料庫的bin-log文件中的sql語句復制。
3.讓其從數據的relay-log重做日誌文件中再執行一次這些sql語句即可。

* 主從復制的作用
1.做數據的熱備份,作為後備資料庫,主資料庫伺服器故障後,可切換到從資料庫繼續工作,避免數據丟失。
2.架構的擴展。業務量越來越大,I/O訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁碟I/O訪問頻率,提高單機的I/O性能
3.主從復制是讀寫分離的基礎,使資料庫能製成更大 的並發。例如子報表中,由於部署報表的sql語句十分慢,導致鎖表,影響前台的服務。如果前台服務使用master,報表使用slave,那麼報表sql將不會造成前台所,保證了前台的訪問速度。

* 主從復制的幾種方式:
1.同步復制:所謂的同步復制,意思是master的變化,必須等待slave-1,slave-2,…,slave-n完成後才能返回。
2.非同步復制:如同AJAX請求一樣。master只需要完成自己的資料庫操作即可。至於slaves是否收到二進制日誌,是否完成操作,不用關心。MYSQL的默認設置。
3.半同步復制:master只保證slaves中的一個操作成功,就返回,其他slave不管。
這個功能,是由google為MYSQL引入的。

* 關於讀寫分離
在完成主從復制時,由於slave是需要同步master的。所以對於insert/delete/update這些更新資料庫的操作,應該在master中完成。而select的查詢操作,則落下到slave中。

H. PHP面試題(求過程)

count() 能檢測遞歸來避免無限循環,但每次出現時會產生 E_WARNING 錯誤
(如果 array 不止一次包含了自身)並返回大於預期的統計數字。

I. PHP程序員上機面試題(並附答案,回答好的加分)

題集網上有一套php的面試題:http://www.tijee.com/tags/46-php-face-questions/posts

J. PHP面試題2--常用的數組函數

一,數組操作的基本函數

1. 數組的鍵名與值

    array_values($arr);  獲得數組的值

    array_keys($arr); 獲得數組的鍵名

    array_flip($arr); 數組的值與鍵名互換(如果有重復前面的會被後面的覆蓋)

    in_array("apple",$arr); 在數組中檢索apple

    array_search("apple",$arr); 在數組中檢索apple,如果存在返回鍵名

    array_key_exists("apple",$arr); 檢索給定的鍵名是否存在數組中

    isset($arr["apple"]); 檢索給定的鍵名是否存在數組中

    array_unique() 刪除數組中的重復值

2. 數組的內部指針

    current($arr); 返回數組中的當前單元

    pos($arr); 返回數組中的當前單元

    key($arr); 返回數組中的當前單元的鍵名

    prev($arr); 將數組中的內部指針倒回一位

    next($arr); 將數組中的內部指針向前移動一位

    end($arr);  將數組中的內部指針指向最後一單元

    reset($arr); 將數組中的內部指針指向第一單元

    each($arr); 將返回數組當前元素的一個鍵/值的構造數組,並使數組指針向前移動一位

    list($key,$value) = each($arr); 獲得數組當前元素的鍵名和值

3. 數組和變數之間的轉換

    extract(array,extract_rules,prefix); 函數從數組中將變數導入到當前符號表。該函數使用數組鍵名作為變數名,使用數組鍵值作為變數值。針對數組中的每個元素,將在當前符號表中創建對應的一個變數。

    compact(var1,var2...); 創建一個包含變數名和它們的值的數組。任何沒有變數名與之對應的字元串都被略過。

二,數組的分段和填充

1. 數組的分段

    array_slice(array,start,length,preserve); 返回數組中的選定部分。如果數組中有字元串鍵名,返回的數組將保留鍵名。

    array_splice(array1,start,length,array2); 從數組中移除選定的元素,並用新元素取代它。函數返回被移除元素的數組,如果函數沒有移除任何元素(length=0),則替代數組將從start參數的位置插入。不保留替代數組的鍵名。

2. 數組的分割

    array_chunk(array,size,preserve_keys); 把一個數組分割為新的數組塊。

3. 數組的填充

    array_pad(array,size,value); 將指定數量的帶有指定值的元素插入到數組。如果將size參數設置為負數,該函數會在原始數組之前插入新的元素。如果size參數小於原始數組的長度,該函數不會刪除任何元素。

三,數組與棧

    array_push(array,value1,value2...); 向數組尾部插入一個或多個元素。即使數組有字元串鍵名,添加的元素將是數字鍵名。

    array_pop(array); 刪除數組的最後一個元素。返回值是數組的最後一個值,即,被刪除的元素值。如果數組為空,或者不是一個數組,將返回NULL。

四,數組和隊列

    array_shift(array); 用於刪除數組中的第一個元素,並返回被刪除的元素。如果鍵名是數字,所有的元素都將獲得新的鍵名,從0開始,並以1遞增。

    array_unshift(array,value1,value2,value3...); 用於向數組插入新元素,新數組的值將被插入到數組的開頭。數值鍵名將從0開始,以1遞增。字元串鍵名將保持不變。

五,回調函數

    array_walk(array,myfunction,parameter...); 將數組中的每個元素應用到 用戶自定義函數。在函數中,數組的鍵名和鍵值是參數。可以通過把用戶自定義函數的第一個參數指定為引用:&$value,來改變數組元素的值。

    array_map(myfunction,array1,array2,array3...); 函數將用戶自定義函數作用到數組中的每個值上,並返回用戶自定義函數作用後的帶有新的值的數組。myfunction可以為null

    array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ); 用回調函數過濾數組中的元素。該函數把輸入數組中的每個鍵值傳給回調函數。如果回調函數返回true,則把輸入數組中的當前鍵值返回給結果數組,數組鍵名保持不變。

    array_rece(array,myfunction,initial); 函數發送數組中的值到用戶自定義函數,並返回一個字元串。如果數組是空的或者初始值未傳遞,該函數返回null。initial為可選,規定發送到函數處理的第一個值。

六,數組的計算

1. 數組元素的求和

    array_sum(array); 返回數組中的所有值的和

2. 數組的合並

    array_merge(array1,array2,array3...); 用於把一個或多個數組合並成一個數組。如果兩個或更多個數組有相同的鍵名。則最後的數組會覆蓋其他數組。如果向函數輸入了一個數組,且鍵名是整數,則該函數會返回帶有整數鍵名的新數組,其鍵名以0開始進行重新索引。

    array_merge_recursive(array1,array2,array3...); 用於把一個或多個數組合並為一個數組,該函數與array_merge()函數之間的不同是在處理兩個或多個數組元素有相同的鍵名的情況下,array_merge_recursive()不會進行鍵名覆蓋,而是將多個相同鍵名的值遞歸組成一個數組。如果您僅僅向 array_merge_recursive() 函數輸入一個數組,結果與 array_merge() 相同。

3. 數組的差集

    array_diff(array1,array2,array3...); 函數用於比較兩個(或更多個)數組的值,並返回差集。該函數比較兩個(或更多個)數組的值(key=>value中的value),並返回一個差集數組,該數組包括了所有在被比較的數組(array1)中,但是不在任何其他參數數組(array2或array3等等)中的值。

    array_diff_assoc(array1,array2,array3...); 函數用於比較兩個(或更多個)數組的鍵名和鍵值,並返回差集。該函數比較兩個(或更多個)數組的鍵名和鍵值,並返回一個差集數組,該數組包括了所有在被比較的數組(array1)中,但是不在任何其他參數數組(array2 或 array3 等等)中的鍵名和鍵值。

4. 數組的並集

array_intersect(array1,array2,array3...); 函數用於比較兩個(或更多個)數組的鍵值,並返回交集。該函數比較兩個(或更多個)數組的鍵值,返回一個交集數組,該數組包括了所有在被比較的數組(array1)中,同時也在任何其他參數數組(array2 或 array3 等等)中的鍵值。

array_intersect_assoc(array1,array2,array3...); 函數用於比較兩個(或更多個)數組的鍵名和鍵值,並返回交集。該函數比較兩個(或更多個)數組的鍵名和鍵值,並返回一個交集數組,該數組包括了所有在被比較的數組(array1)中,同時也在任何其他參數數組(array2 或 array3 等等)中的鍵名和鍵值。

七,數值的排序

array_multisort():  對多個數組或多維數組進行排序

sort(): 以升序對數組排序

rsort(): 以降序對數組排序

asort(): 根據值,以升序對關聯數組進行排序

ksort(): 根據鍵,以升序對關聯數組進行排序

arsort(): 根據值,以降序對關聯數組進行排序

krsort(): 根據鍵,以降序對關聯數組進行排序

資料參考:

https://www.php.cn/php-weizijiaocheng-381347.html

https://www.runoob.com/php/php-ref-array.html

閱讀全文

與php高並發面試題相關的資料

熱點內容
墨痕齋是什麼游戲的伺服器 瀏覽:940
word文件如何壓縮大小 瀏覽:277
遵義聯通伺服器地址是什麼 瀏覽:29
ansys約束命令流 瀏覽:814
解壓軟體電腦版如何下載 瀏覽:791
閃電匕首演算法球 瀏覽:692
linuxredis停止命令 瀏覽:670
大麥賬號怎麼加密 瀏覽:113
穿越火線怎麼找伺服器 瀏覽:526
秘密加密社交軟體app 瀏覽:256
c語言編譯器怎麼找文件 瀏覽:835
數學不好能編程嗎 瀏覽:254
微雲里的視頻加密 瀏覽:41
3大加密貨幣交易平台 瀏覽:647
鈑金激光切割機編程 瀏覽:496
vivo手機手電筒app在哪裡 瀏覽:787
單片機晶振電路電容 瀏覽:887
穿越火線河南一區伺服器雲主機 瀏覽:41
文件夾與快捷方式顯示一致 瀏覽:879
幻影伺服器怎麼看金錢 瀏覽:349