新聞中心
PHP中高級(jí)面試題 – 第三天
一、簡(jiǎn)述一下MongoDB的應(yīng)用場(chǎng)景
創(chuàng)新互聯(lián)建站專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、湖北網(wǎng)絡(luò)推廣、小程序開(kāi)發(fā)、湖北網(wǎng)絡(luò)營(yíng)銷(xiāo)、湖北企業(yè)策劃、湖北品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供湖北建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
mongodb 支持副本集、索引、自動(dòng)分片,可以保證較高的性能和可用性。
更高的寫(xiě)入負(fù)載
默認(rèn)情況下,MongoDB 更側(cè)重高數(shù)據(jù)寫(xiě)入性能,而非事務(wù)安全,MongoDB 很適合業(yè)務(wù)系統(tǒng)中有大量 “低價(jià)值” 數(shù)據(jù)的場(chǎng)景。但是應(yīng)當(dāng)避免在高事務(wù)安全性的系統(tǒng)中使用 MongoDB,除非能從架構(gòu)設(shè)計(jì)上保證事務(wù)安全。
高可用性
MongoDB 的復(fù)副集 (Master-Slave) 配置非常簡(jiǎn)潔方便,此外,MongoDB 可以快速響應(yīng)的處理單節(jié)點(diǎn)故障,自動(dòng)、安全地完成故障轉(zhuǎn)移。這些特性使得 MongoDB 能在一個(gè)相對(duì)不穩(wěn)定(如云主機(jī))的環(huán)境中,保持高可用性。
數(shù)據(jù)量很大或者未來(lái)會(huì)變得很大
依賴(lài)數(shù)據(jù)庫(kù) (MySQL) 自身的特性,完成數(shù)據(jù)的擴(kuò)展是較困難的事,在 MySQL 中,當(dāng)一個(gè)單達(dá)表到 5-10GB 時(shí)會(huì)出現(xiàn)明顯的性能降級(jí),此時(shí)需要通過(guò)數(shù)據(jù)的水平和垂直拆分、庫(kù)的拆分完成擴(kuò)展,使用 MySQL 通常需要借助驅(qū)動(dòng)層或代理層完成這類(lèi)需求。而 MongoDB 內(nèi)建了多種數(shù)據(jù)分片的特性,可以很好地適應(yīng)大數(shù)據(jù)量的需求。
基于位置的數(shù)據(jù)查詢(xún)
MongoDB 支持二維空間索引,因此可以快速及精確地從指定位置獲取數(shù)據(jù)。
表結(jié)構(gòu)不明確
在一些傳統(tǒng) RDBMS 中,增加一個(gè)字段會(huì)鎖住整個(gè)數(shù)據(jù)庫(kù) / 表,或者在執(zhí)行一個(gè)重負(fù)載的請(qǐng)求時(shí)會(huì)明顯造成其它請(qǐng)求的性能降級(jí)。通常發(fā)生在數(shù)據(jù)表大于 1G 的時(shí)候(當(dāng)大于 1TB 時(shí)更甚)。 因 MongoDB 是文檔型數(shù)據(jù)庫(kù),為非結(jié)構(gòu)貨的文檔增加一個(gè)新字段是很快速的操作,并且不會(huì)影響到已有數(shù)據(jù)。另外一個(gè)好處當(dāng)業(yè)務(wù)數(shù)據(jù)發(fā)生變化時(shí),是將不再需要由 DBA 修改表結(jié)構(gòu)。
二、數(shù)據(jù)庫(kù)設(shè)計(jì)經(jīng)驗(yàn),為什么進(jìn)行分表?分庫(kù)?一般多少數(shù)據(jù)量開(kāi)始分表?分庫(kù)?分庫(kù)分表的目的?
1、為什么要分表
當(dāng)一張表的數(shù)據(jù)達(dá)到幾百萬(wàn)時(shí),你查詢(xún)一次所花的時(shí)間會(huì)變多,如果有聯(lián)合查詢(xún)的話,有可能會(huì)死在那兒了。分表的目的就在于此,減小數(shù)據(jù)庫(kù)的負(fù)擔(dān),縮短查詢(xún)時(shí)間。日常開(kāi)發(fā)中我們經(jīng)常會(huì)遇到大表的情況,所謂的大表是指存儲(chǔ)了百萬(wàn)級(jí)乃至千萬(wàn)級(jí)條記錄的表。這樣的表過(guò)于龐大,導(dǎo)致數(shù)據(jù)庫(kù)在查詢(xún)和插入的時(shí)候耗時(shí)太長(zhǎng),性能低下,如果涉及聯(lián)合查詢(xún)的情況,性能會(huì)更加糟糕。
分表和表分區(qū)的目的就是減少數(shù)據(jù)庫(kù)的負(fù)擔(dān),提高數(shù)據(jù)庫(kù)的效率,通常點(diǎn)來(lái)講就是提高表的增刪改查效率。數(shù)據(jù)庫(kù)中的數(shù)據(jù)量不一定是可控的,在未進(jìn)行分庫(kù)分表的情況下,隨著時(shí)間和業(yè)務(wù)的發(fā)展,庫(kù)中的表會(huì)越來(lái)越多,表中的數(shù)據(jù)量也會(huì)越來(lái)越大,相應(yīng)地,數(shù)據(jù)操作,增刪改查的開(kāi)銷(xiāo)也會(huì)越來(lái)越大;另外,由于無(wú)法進(jìn)行分布式式部署,而一臺(tái)服務(wù)器的資源(CPU、磁盤(pán)、內(nèi)存、IO 等)是有限的,最終數(shù)據(jù)庫(kù)所能承載的數(shù)據(jù)量、數(shù)據(jù)處理能力都將遭遇瓶頸。
2、分表的方案
做 mysql 集群,有人會(huì)問(wèn) mysql 集群,根分表有什么關(guān)系嗎?雖然它不是實(shí)際意義上的分表,但是它啟到了分表的作用,做集群的意義是什么呢?為一個(gè)數(shù)據(jù)庫(kù)減輕負(fù)擔(dān),說(shuō)白了就是減少 sql 排隊(duì)隊(duì)列中的 sql 的數(shù)量,舉個(gè)例子:有 10 個(gè) sql 請(qǐng)求,如果放在一個(gè)數(shù)據(jù)庫(kù)服務(wù)器的排隊(duì)隊(duì)列中,他要等很長(zhǎng)時(shí)間,如果把這 10 個(gè) sql 請(qǐng)求,分配到 5 個(gè)數(shù)據(jù)庫(kù)服務(wù)器的排隊(duì)隊(duì)列中,一個(gè)數(shù)據(jù)庫(kù)服務(wù)器的隊(duì)列中只有 2 個(gè),這樣等待時(shí)間是不是大大的縮短了呢?
linux mysql proxy 的安裝,配置,以及讀寫(xiě)分離
mysql replication 互為主從的安裝及配置,以及數(shù)據(jù)同步
優(yōu)點(diǎn):擴(kuò)展性好,沒(méi)有多個(gè)分表后的復(fù)雜操作(php 代碼)
缺點(diǎn):?jiǎn)蝹€(gè)表的數(shù)據(jù)量還是沒(méi)有變,一次操作所花的時(shí)間還是那么多,硬件開(kāi)銷(xiāo)大。
三、簡(jiǎn)述一下數(shù)據(jù)庫(kù)主從復(fù)制,讀寫(xiě)分離
* 什么是主從復(fù)制
主從復(fù)制,是用來(lái)建立一個(gè)和主數(shù)據(jù)庫(kù)完全一樣的數(shù)據(jù)庫(kù)環(huán)境,稱(chēng)為從數(shù)據(jù)庫(kù);
* 主從復(fù)制的原理:
1.數(shù)據(jù)庫(kù)有個(gè)bin-log二進(jìn)制文件,記錄了所有的sql語(yǔ)句。
2.只需要把主數(shù)據(jù)庫(kù)的bin-log文件中的sql語(yǔ)句復(fù)制。
3.讓其從數(shù)據(jù)的relay-log重做日志文件中再執(zhí)行一次這些sql語(yǔ)句即可。
* 主從復(fù)制的作用
1.做數(shù)據(jù)的熱備份,作為后備數(shù)據(jù)庫(kù),主數(shù)據(jù)庫(kù)服務(wù)器故障后,可切換到從數(shù)據(jù)庫(kù)繼續(xù)工作,避免數(shù)據(jù)丟失。
2.架構(gòu)的擴(kuò)展。業(yè)務(wù)量越來(lái)越大,I/O訪問(wèn)頻率過(guò)高,單機(jī)無(wú)法滿(mǎn)足,此時(shí)做多庫(kù)的存儲(chǔ),降低磁盤(pán)I/O訪問(wèn)頻率,提高單機(jī)的I/O性能
3.主從復(fù)制是讀寫(xiě)分離的基礎(chǔ),使數(shù)據(jù)庫(kù)能制成更大 的并發(fā)。例如子報(bào)表中,由于部署報(bào)表的sql語(yǔ)句十分慢,導(dǎo)致鎖表,影響前臺(tái)的服務(wù)。如果前臺(tái)服務(wù)使用master,報(bào)表使用slave,那么報(bào)表sql將不會(huì)造成前臺(tái)所,保證了前臺(tái)的訪問(wèn)速度。
* 主從復(fù)制的幾種方式:
1.同步復(fù)制:所謂的同步復(fù)制,意思是master的變化,必須等待slave-1,slave-2,…,slave-n完成后才能返回。
2.異步復(fù)制:如同AJAX請(qǐng)求一樣。master只需要完成自己的數(shù)據(jù)庫(kù)操作即可。至于slaves是否收到二進(jìn)制日志,是否完成操作,不用關(guān)心。MYSQL的默認(rèn)設(shè)置。
3.半同步復(fù)制:master只保證slaves中的一個(gè)操作成功,就返回,其他slave不管。
這個(gè)功能,是由google為MYSQL引入的。
* 關(guān)于讀寫(xiě)分離
在完成主從復(fù)制時(shí),由于slave是需要同步master的。所以對(duì)于insert/delete/update這些更新數(shù)據(jù)庫(kù)的操作,應(yīng)該在master中完成。而select的查詢(xún)操作,則落下到slave中。
誰(shuí)有面試phper的經(jīng)驗(yàn)
這方面網(wǎng)上有比較多的,針對(duì)3-5年的PHPer常見(jiàn)的面試題,參考如下:
1、平時(shí)喜歡哪些php書(shū)籍及博客?CSDN、虎嗅、獵云
2、js閉包是什么?
3、for與foreach哪個(gè)更快?
4、php鳥(niǎo)哥是誰(shuí)?能不能講一下php執(zhí)行原理?
5、php加速器有哪些?apc、zend、xcache.....能不能講一下它的加速原理?
6、Node.js能徹底代替php+apache是扯淡。
7、怎樣判斷一個(gè)值是否存在于數(shù)組中?in_array(),array_key_exists,......
8、怎樣判斷select語(yǔ)句中是否使用了索引?explain
9、sphinx的中文分詞詞庫(kù)使用第三方庫(kù)還是自己建庫(kù)?
10、如果一個(gè)被面試者經(jīng)驗(yàn)少、基礎(chǔ)差,此時(shí)卻問(wèn)些高深的知識(shí)。要懷疑它的穩(wěn)定性,可以提問(wèn)加班對(duì)他會(huì)不會(huì)有抵觸。
11、mysql與mysqli的區(qū)別有哪些?
12、將來(lái)的發(fā)展方向?安全、還是數(shù)據(jù)挖掘、大數(shù)據(jù)處理?
13、php的面向?qū)ο螅侯?lèi)的修飾符、封裝、繼承、多態(tài)體現(xiàn)方面
14、php 多態(tài)是什么?
15、Type Hinting:
16、php的設(shè)計(jì)模式:?jiǎn)卫J健⒐S模式、生產(chǎn)者模式......等23種
17、服務(wù)器狀態(tài)碼:200、202、301、404、500......
18、i++與++i的區(qū)別?
19、項(xiàng)目開(kāi)發(fā):電商項(xiàng)目中的購(gòu)物車(chē)數(shù)據(jù)持久化、考試系統(tǒng)的安全性考慮、
20、mysql設(shè)計(jì)基礎(chǔ):三大范式、功能-思維導(dǎo)圖、創(chuàng)建表的第一字段是什么?
21、mysql字段char、varchar、int、smallint、tinyint、mediumint、bigint、decimal、double、float字節(jié)數(shù)及應(yīng)用場(chǎng)景。
22、memcache與mongoDB、Redis各自的使用場(chǎng)景是什么?
23、為什么mongoDB與Redis非但沒(méi)有形成競(jìng)爭(zhēng)反而是互補(bǔ)關(guān)系?
24、Redis數(shù)據(jù)類(lèi)型有哪些?int、string、hash、set、list ?
25、安裝linux軟件時(shí)使用make方式還使用yum方式?
26、linux網(wǎng)絡(luò)優(yōu)化:查看進(jìn)程ps -aux|grep mysqld、怎樣查看最大文件打開(kāi)數(shù)?
27、C語(yǔ)言中的虛函數(shù)是什么?
28、1條微薄要推送給100萬(wàn)個(gè)粉絲該怎么處理?
29、知道哪些算法?冒泡排序?快速排序?二分查找法?
30、yii thinkphp ci 各自?xún)?yōu)點(diǎn)
31、php 設(shè)計(jì)模式有哪些?
32、c 排序算法有哪些?
33、php 基本結(jié)構(gòu)是什么?
34、memcache magent 分布式設(shè)計(jì)?
35、redis 分布式設(shè)計(jì),如何設(shè)計(jì)?
36、mongo 集群架構(gòu)是怎樣的?
37、mysql 索引原理及sql性能優(yōu)化
38、tcp/ip 網(wǎng)絡(luò)協(xié)議,osi7層指是什么?
39、php 處理大數(shù)據(jù)業(yè)務(wù)
40、linux 應(yīng)用 負(fù)載性能查看 ?
41、nginx 實(shí)戰(zhàn)優(yōu)化業(yè)務(wù)功能 ?
42、談一下近三年來(lái)你的得意之作?
43、看看簡(jiǎn)歷,會(huì)問(wèn)一些過(guò)去做的項(xiàng)目的用戶(hù)量、pv、吞吐量、相關(guān)難點(diǎn)和解決方法等
44、數(shù)據(jù)庫(kù)設(shè)計(jì)經(jīng)驗(yàn),為什么進(jìn)行分表? 分庫(kù)?
45、一般多少數(shù)據(jù)量開(kāi)始分表? 分庫(kù)? 分庫(kù)分表的目的? 什么是數(shù)據(jù)庫(kù)垂直拆分? 水平拆分? 分區(qū)等等?可以舉例說(shuō)明
46、數(shù)據(jù)庫(kù)優(yōu)化有哪些? 分別需要注意什么?
47、web開(kāi)發(fā)方面會(huì)遇到哪些緩存? 分別如何優(yōu)化?
48、給你256M的內(nèi)存,對(duì)10G的文件進(jìn)行排序(文件每行1個(gè)數(shù)字),如何實(shí)現(xiàn)?
49、對(duì)10G的文件進(jìn)行查找如何實(shí)現(xiàn)?
50、統(tǒng)計(jì)10G文件每個(gè)關(guān)鍵字出現(xiàn)的次數(shù)如何實(shí)現(xiàn)?
51、假如你現(xiàn)在是12306火車(chē)訂票的設(shè)計(jì)師,你該如何設(shè)計(jì)滿(mǎn)足全國(guó)人民訂票?
52、假如有1億用戶(hù)的訪問(wèn)量,你的服務(wù)器架構(gòu)是怎樣的? 用戶(hù)信息的存儲(chǔ)方案如何設(shè)計(jì)?
53、如果你是技術(shù)組長(zhǎng),所帶團(tuán)隊(duì)任務(wù)進(jìn)度無(wú)法完成你該如何解決?
54、如果在進(jìn)度排滿(mǎn)的前提下插入任務(wù),你該如何保證總進(jìn)度不延期?
55、如果有的工程師今天預(yù)定任務(wù)沒(méi)有完成,你該如何解決?
56、從你的經(jīng)驗(yàn)方面談一下如何構(gòu)建高性能web站點(diǎn)? 需要哪些環(huán)節(jié)? 步驟? 每個(gè)步驟需要注意什么如何優(yōu)化等?
57、為什么要對(duì)數(shù)據(jù)庫(kù)進(jìn)行主從分離?
58、如何處理多服務(wù)器共享session?
59、一個(gè)10G的表,你用php程序統(tǒng)計(jì)某個(gè)字段出現(xiàn)的次數(shù),思路是?
60、會(huì)告訴你一個(gè)nginx日志例子,用你認(rèn)為最佳的編程語(yǔ)言統(tǒng)計(jì)一下http響應(yīng)時(shí)間超過(guò)1秒的前10個(gè)url?
61、給你一個(gè)mysql配置文件,用你認(rèn)為最佳的編程語(yǔ)言解析該文件?
62、給你兩個(gè)路徑a和b,寫(xiě)一個(gè)算法或思路計(jì)算a和b差距幾層并顯示a和b的交集?
63、給你一個(gè)url,在nginx配置一下rewrite指定到某個(gè)具體路徑?
64、一個(gè)php文件的解釋過(guò)程是? 一般加速php有哪些? 提高php整體性能會(huì)用到哪些技術(shù)?
65、session和cookie生存周期區(qū)別? 存儲(chǔ)位置區(qū)別?
66、require、include、require_once、include_once區(qū)別? 加載區(qū)別? 如果程序按需加載某個(gè)php文件你如何實(shí)現(xiàn)?
67、chrome號(hào)稱(chēng)為多線程的,所以多線程和多進(jìn)程的區(qū)別為?
68、php在2011年底出現(xiàn)hash碰撞,hash碰撞原理為? 如何進(jìn)行修復(fù)?
69、web不安全因素有哪些? 分別如何防范?
70、假如兩個(gè)單鏈表相交,寫(xiě)一個(gè)最優(yōu)算法計(jì)算交點(diǎn)位置,說(shuō)思路也可以?
71、假如你是技術(shù)組長(zhǎng)? 如何提高團(tuán)隊(duì)效率?
72、nginx負(fù)載均衡有哪些? 如果其中一臺(tái)服務(wù)器掛掉,報(bào)警機(jī)制如何實(shí)現(xiàn)?
73、不優(yōu)化前提下,apache一般最大連接數(shù)為? nginx一般最大連接數(shù)為? mysql 每秒insert ? select ? update ? delete?
74、mysql 數(shù)據(jù)類(lèi)型有哪些 ? 分別占用多少存儲(chǔ)空間 ?
75、nginx設(shè)置緩存js、css、圖片等信息,緩存的實(shí)現(xiàn)原理是?
76、如何提高緩存命中率? 如何對(duì)緩存進(jìn)行顆粒化?
77、php的內(nèi)存回收機(jī)制是?
78、我的所有問(wèn)題都問(wèn)完了(當(dāng)然沒(méi)有這么多),你有什么問(wèn)題問(wèn)我沒(méi)有?
php處理大數(shù)據(jù)量的時(shí)候,如圖片 有什么致命的缺陷?面試問(wèn)題
效率問(wèn)題。因?yàn)閜hp是腳本解釋語(yǔ)言,其特點(diǎn)在于易上手和部署,但在處理需要大量cpu的操作時(shí)(圖片就是)就力不從心了,如果寫(xiě)成php擴(kuò)展的話效率會(huì)提升,但還是沒(méi)直接執(zhí)行C/C++的程序快
不好實(shí)現(xiàn)多線程。這個(gè)就不用多說(shuō)了,和語(yǔ)言定位有關(guān),雖然可以異步調(diào)用,但畢竟不是強(qiáng)項(xiàng)。
文章標(biāo)題:php大數(shù)據(jù)處理面試題 php 大數(shù)據(jù)框架
新聞來(lái)源:http://www.ef60e0e.cn/article/doescsc.html