首頁  >  文章  >  2019春招PHP面試題(附答案)

2019春招PHP面試題(附答案)

幸せな気
幸せな気轉載
2019-05-23 13:58:3812505瀏覽

這次的面試,不僅希望能開啟一個新的旅程,了解世界,也是一個發現自身不足的一個過程,藉由此確定將來的發展(學習)方向的一次機會。 (後附:面試知識點心智圖)

相關推薦:《2019年PHP面試題大總結(收藏)

PHP

php是世界上最好的語言!不接受反駁!

一. 基礎

1, session和cookie的區別
Session是在服務端保存的資料結構,用來追蹤用戶 的狀態,這個資料可以保存在叢集、資料庫、檔案中

Cookie是客戶端保存使用者資訊的一種機制,用來記錄使用者的一些信息,也是實現Session的 一種方式。

2, PHP7用了嗎,了解哪些新特性

PHP7在效能方面實現跨越式的提升,新的運算符,統一變數語法等等

3 ,  魔術變數

問了__dir__代表的含意,這個是回答文件所在的目錄

4, 魔術方法 

 這算是常會問到的一個題目了,常用的都記得,忽然問到__invoke()就懵了
    __construct(), __destruct(), __call(), __callStatic() , __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和__debugInfo()

二. 資料結構與演算法

1, 堆疊資料結構

只要能用程式碼實現出棧資料結構即可

2, 冒泡排序

# 只要能用程式碼實現出冒泡排序即可



## 3, 完全二元樹和滿二叉樹的區別

 只有最下面的兩層結點度能夠小於2,並且最下面一層的結點都集中在該層最左邊的 若干位置的二元樹才為完全二元樹

 而一棵深度為h且有 2^h-1個結點的二元樹即為 滿二叉樹

三.架構相關

1, Laravel和ThinkPHP有什麼區別,對於laravel有什麼要吐槽的

#  我從路由,中間件到控制器,數據訪問,視圖等層面上介紹了不同  吐槽的話可能相對於一些項目,laravel有點'重'

2, 有用composer發布過自己的包嗎? (基於Composer 的PHP 模組化發展)

  我回答沒有,只是了解過
  面試官就說他們的框架是自己在 Discuz的基礎上二次開發的框架,在他優秀的基礎上把composer依賴管理也都引進blabla

#3, 談談對於MVC的理解

#結合專案說明模板,視圖,控制器之間的關係與基本的構成

四. 防護

 1, XSS 跨站腳本攻擊

 2, DDOS 流量攻擊
3, CSRF 跨站請求偽造攻擊

 4, SQL注入


在前端表單使用者輸入控製或限制

有後端傳參數和資料時進行過濾等等

五. 專案


1, 在專案中如何解決並發的問題

 我的解決方法先是前端控制有效請求,例如一分鐘才正常請求一次
 接著 後端同樣過慮無效請求,接著接操作放進隊列中實現

 有個面試官問,你這個隊列是阻塞的嗎,如果真的同時兩個用戶購買,兩個用戶等待 完成,他們還是用同一個線程完成,有沒有考慮 用其它方式實現

 我說無,他就說可 以鎖定的機制,第二個等待第一個完成,一個接一個


2, 微信支付具體實現流程

    1. H5頁面發起支付請求,請求產生支付訂單

    2. 呼叫統一下單API,產生預付單

    3. 產生JSAPI頁面呼叫的支付參數並簽署    4. 微信瀏覽器自動調配付款 JSAPI介面支付    5.確認支付    6. 非同步通 知商家支付結果,商家收到通知回傳確認訊息    7. 返回支付結果,展 示支付資訊給用戶3, 簡單實現登入註冊功能

###    各個框架考慮的面向不一樣,這就按自己的理解寫出相應的代碼就好###4,如何設計一個商城######    我先為自己限定了一個B2C的商城,然後從資料表開始,接著簡單 介紹前端與後端實作邏輯######### #######MYSQL#############

mysql優化基本上是重中之重了,尤其考驗技術
一. 基礎

1, InnoDB和MyISAM有什麼區別

    InnoDB提供事務處理,行級鎖,支援外鍵,支援多種行格式
    MyISAM只支援表級鎖,全文索引,堆表

2, 事務有哪幾個特性

#    原子性、一致性、隔離性、持久性
3, 交易的隔離等級

#    未提交讀取、已提交讀取、可重複讀取、可串列化

4 , 有個表格欄位的O_Id,OrderDate,OrderPrice,Customer這幾個,我們希望找出訂單總 金額少於 2000 的客戶

    SELECT Customer,SUM(OrderPrice) FROM 

Orders

    GROUP BY Customer

    HAVING SUM(OrderPrice)<2000

5, 查詢學生表的數據,大於六十的為及格,反之不及格

select 分數,類別=Case
    WHEN 分數 >=60 THEN '及格'
    ELSE '不及格 '
    END
    from 成績表

#6, 查詢沒有學完所有課程的學生學號、姓名

    SELECT a.SNO ,a.SNAME  

    FROM student a  

    WHERE a.`SNO` NOT IN  

        ( SELECT b.`SNO` FROM SC b  

        GROUP BY b.`SNO` HAVING COUNT(*) =  

            ( SELECT COUNT(*)  FROM course)

        );

 

2. 最佳化

1, "select * from student where name='red'","select * from student where name='blue'",最佳化語句

    select name from student where 

name=&#39;red&#39;
    union
    select 

name from student where name=&#39;blue&#39;

    如果用or條件, myisam表能用到索引, innodb不行。
    innodb用UNION取代OR (適用於索引列)

#2, 你通常會怎麼優化資料庫

    查詢快取、EXPLAIN、(聯合)索引、使用固定長度靜態表格

 

伺服器

#伺服器怎麼做防護


    僅開放有限端口,限制登錄IP,限制登錄帳號

    也是可以設定一本書的問題,可以根據項目回答

#二. 協定

Get和Post有什麼差別

    Get的參數包含在URL,GET請求會被瀏覽器主動cache,是url編碼, 有字元限制參數為ASCII字元

    Post 透過request body傳遞參數,且 有多種編碼方式

三. NginX

設定nginx時php腳本請求是讓什麼處理

    預設設定的是轉送至FastCGI處理

四. Redis

1、你用redis來快取什麼資料

    跟據項目來說自己快取的一些經常要使用的資料

2、Redis怎麼做持久化,設定哪一個刷新頻率

    設定aof持久化,用預設的每秒刷新aof檔案

 3、 Redis是多線程嗎

    單線程(我竟然回答是多線程,233)

 4、Redis怎麼設定一主多從,多久

    可以用Redis官方集群方案,具體沒有實踐過,可能要花幾週時間來 完成

五. 程式碼管理有用過git嗎?當兩個人提交了錯誤代碼後,怎麼解決

    用過git提交程式碼,發生這種情況可以先將遠端的程式碼git pull到本 地,然後將衝突的程式碼或Git標記內容修改正確,然後重新提交代碼

       

##它它

############### ########1. 為什麼離職#########    機智回答,稍微提了一下公司或自身的事錢少事多多遠 #########2. 你理想的團隊#########    對科技熱情,積極解決問題,共同合作##########3.職涯規劃#########    前端深入,後端深入,資料最佳化分析擷取,伺服器滲透blabla#########4. 想問的問題##########一般都會問公司有什麼項目,技術架構,有無利潤等###

不同公司技術堆疊不同,關心的點也不同,有點就會在佇列的問題上問具體阻塞時的解決方案 ,有的更多關注專案效率,有的還會關注伺服器搭建,有無自己搭建框架和對於流行框架的了解 ,過程中或許就能找到自己想要的發展方向

 

##5天9家7offer,感覺還行,面試時大多公司都會根據履歷上的項目進行詳細的提問,.面試 時能看出技術上的廣度(經歷專案或技能多少),和技術的深度(數據優化,框架理解製作,服 務器攻防滲透),希望大家也能夠隨著專案的發展,不斷實踐學習技術,就醬。 \(•ㅂ•)/♥ 共勉 ~

後附:面試知識點心智圖

2019春招PHP面試題(附答案)

#######
陳述:
本文轉載於:超全栈。如有侵權,請聯絡admin@php.cn刪除