程序員找工作必備 PHP 基礎(chǔ)面試題

1险掀、優(yōu)化 MYSQL 數(shù)據(jù)庫(kù)的方法

(1) 選取最適用的字段屬性,盡可能減少定義字段長(zhǎng)度狸吞,盡量把字段設(shè)置 NOT NULL, 例如’省份炬灭,性別’, 最好設(shè)置為 ENUM

(2) 使用連接(JOIN)來(lái)代替子查詢:

(3) 使用聯(lián)合 (UNION) 來(lái)代替手動(dòng)創(chuàng)建的臨時(shí)表

(4) 事務(wù)處理:

(5) 鎖定表,優(yōu)化事務(wù)處理:

(6) 使用外鍵仗阅,優(yōu)化鎖定表

(7) 建立索引

(8) 優(yōu)化 sql 語(yǔ)句

或者

(1). 數(shù)據(jù)庫(kù)設(shè)計(jì)方面昌讲,這是 DBA 和 Architect 的責(zé)任,設(shè)計(jì)結(jié)構(gòu)良好的數(shù)據(jù)庫(kù)减噪,必要的時(shí)候短绸,去正規(guī)化 (英文是這個(gè):denormalize, 中文翻譯成啥我不知道), 允許部分?jǐn)?shù)據(jù)冗余,避免 JOIN 操作筹裕,以提高查詢效率

(2). 系統(tǒng)架構(gòu)設(shè)計(jì)方面醋闭,表散列,把海量數(shù)據(jù)散列到幾個(gè)不同的表里面朝卒≈ぢ撸快慢表,快表只留最新數(shù)據(jù)抗斤,慢表是歷史存檔囚企。集群,主服務(wù)器 Read & write, 從服務(wù)器 read only, 或者 N 臺(tái)服務(wù)器瑞眼,各機(jī)器互為 Master

3).(1) 和 (2) 超越 PHP Programmer 的要求了龙宏,會(huì)更好,不會(huì)沒(méi)關(guān)系伤疙。檢查有沒(méi)有少加索引

(4). 寫(xiě)高效的 SQL 語(yǔ)句银酗,看看有沒(méi)有寫(xiě)低效的 SQL 語(yǔ)句,比如生成笛卡爾積的全連接啊掩浙,大量的 Group By 和 order by, 沒(méi)有 limit 等等花吟。必要的時(shí)候,把數(shù)據(jù)庫(kù)邏輯封裝到 DBMS 端的存儲(chǔ)過(guò)程里面厨姚。緩存查詢結(jié)果,explain 每一個(gè) sql 語(yǔ)句

(5). 所得皆必須键菱,只從數(shù)據(jù)庫(kù)取必需的數(shù)據(jù)谬墙,比如查詢某篇文章的評(píng)論數(shù),select count (*) … where article_id = ? 就可以了经备,不要先 select * … where article_id = ? 然后 msql_num_rows.只傳送必須的 SQL 語(yǔ)句拭抬,比如修改文章的時(shí)候,如果用戶只修改了標(biāo)題侵蒙,那就 update … set title = ? where article_id = ? 不要 set content = ?(大文本)

(6). 必要的時(shí)候用不同的存儲(chǔ)引擎造虎。比如 InnoDB 可以減少死鎖.HEAP 可以提高一個(gè)數(shù)量級(jí)的查詢速度

2、用 PHP 打印出前一天的時(shí)間格式是 2020-3-18 22:21:21

$time=date(‘Y-m-d H:i:s’,strtotime(‘-1,days’))

echo $time;

3纷闺、寫(xiě)一段 JS 代碼來(lái)實(shí)現(xiàn)圖片的幻燈片形式展示

<script>

? ? $(function(){

? ? ? ? //頁(yè)碼

? ? ? ? var page=1;

? ? ? ? //每頁(yè)顯示數(shù)

? ? ? ? var total=4;

? ? ? ? //點(diǎn)下一頁(yè)的時(shí)候執(zhí)行

? ? ? ? $('span.next').click(function(){

? ? ? ? ? ? //通過(guò)它找到div.v_show

? ? ? ? ? ? var $v_show=$(this).parents('div.v_show');

? ? ? ? ? ? //通過(guò)div.v_show再找到v_content

? ? ? ? ? ? var $v_content=$v_show.children('.v_content');

? ? ? ? ? ? //v_content找到下面的所有的li

? ? ? ? ? ? var $list=$v_content.children('.v_content_list');

? ? ? ? ? ? //總條數(shù) li.length得到總條數(shù)

? ? ? ? ? ? var $li=$list.find('li');

? ? ? ? ? ? var $count=Math.ceil($li.length/total);

? ? ? ? ? ? var $width=$v_content.width();

? ? ? ? ? ? if(page==$count){

? ? ? ? ? ? ? ? $list.animate({left:'0px'},500);

? ? ? ? ? ? ? ? page=1;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? $list.animate({left:'-='+$width+'px'},500);

? ? ? ? ? ? ? ? page++;

? ? ? ? ? ? }

? ? ? ? ? ? $('.highlight_tip span').eq(page-1).addClass('current').siblings().removeClass('current');

? ? ? ? })

? ? ? ? $('span.prev').click(function(){

? ? ? ? ? ? //通過(guò)它找到div.v_show

? ? ? ? ? ? var $v_show=$(this).parents('div.v_show');

? ? ? ? ? ? //通過(guò)div.v_show再找到v_content

? ? ? ? ? ? var $v_content=$v_show.children('.v_content');

? ? ? ? ? ? //v_content找到下面的所有的li

? ? ? ? ? ? var $list=$v_content.children('.v_content_list');

? ? ? ? ? ? //總條數(shù) li.length得到總條數(shù)

? ? ? ? ? ? var $li=$list.find('li');

? ? ? ? ? ? var $count=Math.ceil($li.length/total);

? ? ? ? ? ? var $width=$v_content.width();

? ? ? ? ? ? if(page==1){

? ? ? ? ? ? ? ? $list.animate({left:'-='+(($count-1)*$width)+'px'},500);

? ? ? ? ? ? ? ? page=4;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? $list.animate({left:'+='+$width+'px'},500);

? ? ? ? ? ? ? ? page--;

? ? ? ? ? ? }

? ? ? ? ? ? $('.highlight_tip span').eq(page-1).addClass('current').siblings().removeClass('current');

? ? ? ? })

? ? })

</script>

4算凿、如何讓你來(lái)實(shí)現(xiàn)一個(gè) SNS 網(wǎng)站的短消息功能份蝴,簡(jiǎn)述一下,你該如何實(shí)現(xiàn).

首先建立數(shù)據(jù)表氓轰,其中字段 uid 與用戶表 ID 相關(guān)聯(lián)婚夫,字段 sid 與被發(fā)送信息的用戶相關(guān)聯(lián),當(dāng)發(fā)送信息時(shí)署鸡,將內(nèi)容保存到數(shù)據(jù)庫(kù)中案糙,間隔一定時(shí)間查詢數(shù)據(jù)庫(kù)是否有與用戶相關(guān)連的信息存儲(chǔ),若有與用戶相關(guān)聯(lián)的信息就遍歷輸出出來(lái)靴庆。

5时捌、寫(xiě)一個(gè)函數(shù),算出兩個(gè)文件的相對(duì)路徑

如:

$a=’/a/b/c/d/e.php’

$b=’/a/b/12/34/c.php’

計(jì)算出 $b 相對(duì)于 $a 的相對(duì)路徑應(yīng)該是../../c/d

$na=explode('/',$a);

$nb=explode('/',$b);

$numa=count($na);

$numb=count($nb);

$max=$numa>$numb?$numa:$numb;

for($i=0;$i<$max-1;$i++){

? ? if($na[$i]!=$nb[$i]){

? ? ? ? $up.='../';

? ? ? ? $path.=$na[$i]."/";

? ? }}

echo $relpath=$up.$path;

6炉抒、請(qǐng)用 PHP 設(shè)計(jì)一個(gè)函數(shù)奢讨,對(duì)學(xué)生英語(yǔ)考試得分從高到低排序,輸入是所有學(xué)生的學(xué)號(hào)和考試得分端礼,返回排好序的考試得分和對(duì)應(yīng)學(xué)生的學(xué)好禽笑。考試滿分為 100蛤奥,由于判卷要求佳镜,得分不會(huì)有小數(shù)

要求:1 不要使用 qsort 等系統(tǒng)內(nèi)置排序函數(shù)。

2 請(qǐng)使用你認(rèn)為最快最優(yōu)的方式實(shí)現(xiàn)該函數(shù)并使排序的復(fù)雜度最低

<?php

? ? function quickSort($arr)

? ? {

? ? ? ? $len? ? = count($arr);

? ? ? ? if($len <= 1) {

? ? ? ? ? ? return $arr;

? ? ? ? }

? ? ? ? $key = $arr[0];

? ? ? ? $left_arr? ? = array();

? ? ? ? $right_arr? ? = array();

? ? ? ? for($i=1; $i<$len; $i++){

? ? ? ? if($arr[$i] <= $key){

? ? ? ? ? $left_arr[] = $arr[$i];

? ? ? ? } else {

? ? ? ? ? $right_arr[] = $arr[$i];

? ? ? ? }

? ? ? ? }

? ? ? ? $left_arr = quickSort($left_arr);

? ? ? ? $right_arr = quickSort($right_arr);

? ? ? ? return array_merge($left_arr,array($key),$right_arr);

? ? }

7凡桥、現(xiàn)在有一個(gè) Mysql 數(shù)據(jù)庫(kù)表 payment 記錄用戶購(gòu)買訂單蟀伸,表結(jié)構(gòu)如下:

TABLE payment(

? ? id int unsigned AUTO_INCREMENT,

? ? user_id int unsigned comment ‘用戶id’,

? ? quantity smallint unsigned comment ‘本次購(gòu)買產(chǎn)品數(shù)量’,

? ? pay_time timestamp comment ‘購(gòu)買時(shí)間’,

? ? PRIMARY KEY(id)

)

用戶每訪問(wèn)成功付款一筆訂單 (從進(jìn)入到離開(kāi)), 會(huì)增加一條記錄,記錄用戶的 ID (user_id)缅刽,以及購(gòu)買的產(chǎn)品數(shù)量啊掏。比如:1、208,2 //208 這個(gè)用戶購(gòu)買 2 個(gè)產(chǎn)品

Insert into payment (user_id,quantity)values(‘***’,’***’)

1)請(qǐng)寫(xiě)出一個(gè) SQL 語(yǔ)句挑出用戶(id=100)最近購(gòu)買的 10 條訂單衰猛。

Select use_id,quantity,pay_time form payment where id=100 order by pay_time desc;

2)請(qǐng)寫(xiě)一個(gè) SQL 語(yǔ)句挑出用戶(id=100)最近】購(gòu)買的第 10 到第 20 條訂單 (共 10 個(gè))

Select use_id,quantity,pay_time form payment where id=100 order by pay_time desc limit 10,10;

3) 請(qǐng)寫(xiě)出一個(gè) SQL 語(yǔ)句挑出購(gòu)買產(chǎn)品數(shù)最多的 10 個(gè)用戶 (user_id) 和對(duì)應(yīng)購(gòu)買的產(chǎn)品總數(shù)迟蜜。

Select use_id,sum(quantity) total,pay_time form payment group by use_id order by total desc limit 10;

8、請(qǐng)寫(xiě)一個(gè) SQL 語(yǔ)句啡省。輸出購(gòu)買產(chǎn)品數(shù)分別等于 1娜睛,2,3卦睹,4畦戒,5,6结序,7障斋,8,9,10 的用戶數(shù)量垃环,如果某個(gè)數(shù)量對(duì)應(yīng)的用戶數(shù)為 0邀层,可以不輸出。

Select count(id) from payment where quantity in (1,2,3,4,5.6,7,8,9,10) group by quantity

面試題系列:

2020最新PHP面試題(附帶答案)

分享一波騰訊PHP面試題

2019年P(guān)HP最新面試題(含答案)

Redis 高級(jí)面試題 學(xué)會(huì)這些還怕進(jìn)不了大廠晴裹?

面試官三年經(jīng)驗(yàn)PHP程序員知識(shí)點(diǎn)匯總

php面試題之PHP核心技術(shù)

掌握 Redis這些 知識(shí)點(diǎn)被济,面試官一定覺(jué)得你很 NB

當(dāng)面試官問(wèn)你:如何進(jìn)行性能優(yōu)化?

PHP 經(jīng)典面試題集

更多學(xué)習(xí)內(nèi)容請(qǐng)?jiān)L問(wèn):

八重櫻:騰訊T3-T4標(biāo)準(zhǔn)精品PHP架構(gòu)師教程目錄大全涧团,只要你看完保證薪資上升一個(gè)臺(tái)階(持續(xù)更新)

以上內(nèi)容希望幫助到大家只磷,很多PHPer在進(jìn)階的時(shí)候總會(huì)遇到一些問(wèn)題和瓶頸,業(yè)務(wù)代碼寫(xiě)多了沒(méi)有方向感泌绣,不知道該從那里入手去提升钮追,對(duì)此我整理了一些資料,包括但不限于:分布式架構(gòu)阿迈、高可擴(kuò)展元媚、高性能、高并發(fā)苗沧、服務(wù)器性能調(diào)優(yōu)刊棕、TP6,laravel待逞,YII2甥角,Redis,Swoole识樱、Swoft嗤无、Kafka、Mysql優(yōu)化怜庸、shell腳本当犯、Docker、微服務(wù)割疾、Nginx等多個(gè)知識(shí)點(diǎn)高級(jí)進(jìn)階干貨需要的可以免費(fèi)分享給大家嚎卫,需要的可以加入我的官方群點(diǎn)擊此處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宏榕,一起剝皮案震驚了整個(gè)濱河市驰凛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌担扑,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趣钱,死亡現(xiàn)場(chǎng)離奇詭異涌献,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)首有,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門燕垃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)枢劝,“玉大人,你說(shuō)我怎么就攤上這事卜壕∧裕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵轴捎,是天一觀的道長(zhǎng)鹤盒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)侦副,這世上最難降的妖魔是什么侦锯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮秦驯,結(jié)果婚禮上尺碰,老公的妹妹穿的比我還像新娘。我一直安慰自己译隘,他們只是感情好亲桥,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著固耘,像睡著了一般题篷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玻驻,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天悼凑,我揣著相機(jī)與錄音,去河邊找鬼璧瞬。 笑死户辫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗤锉。 我是一名探鬼主播渔欢,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瘟忱!你這毒婦竟也來(lái)了奥额?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤访诱,失蹤者是張志新(化名)和其女友劉穎垫挨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體触菜,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡九榔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哲泊。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剩蟀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出切威,到底是詐尸還是另有隱情育特,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布先朦,位于F島的核電站缰冤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏烙无。R本人自食惡果不足惜锋谐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望截酷。 院中可真熱鬧涮拗,春花似錦、人聲如沸迂苛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)三幻。三九已至就漾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間念搬,已是汗流浹背抑堡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朗徊,地道東北人首妖。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像爷恳,于是被迫代替她去往敵國(guó)和親有缆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350