2018春招PHP面試總結 | 掘金技術徵文

超全棧發表於2018-04-22

這次的面試,不僅僅希望能開啟一個新的征程,瞭解世界,也是一個發現自身不足的一個過程,藉由此確定將來的發展(學習)方向的一次機會。

面試準備

一份能讓面試官瞭解你的簡歷,一份對於自己的自信,就出發吧

Mind-map

PHP

php是世界上最好的語言!

基礎

  1. session和cookie的區別
    Session是在服務端儲存的一個資料結構,用來跟蹤使用者的狀態,這個資料可以儲存在叢集、資料庫、檔案中

    Cookie是客戶端儲存使用者資訊的一種機制,用來記錄使用者的一些資訊,也是實現Session的一種方式。
複製程式碼
  1. PHP7用了嗎,瞭解哪些新特性
    PHP7在效能方面實現跨越式的提升,新的操作符,統一變數語法等等

    參考[PHP7的文章](https://blog.csdn.net/u011957758/article/details/73320083)
複製程式碼
  1. 魔術變數
    問了__dir__代表的含意,這個是回答檔案所在的目錄

    參考[PHP 手冊之魔術常量](http://php.net/manual/zh/language.constants.predefined.php)
複製程式碼
  1. 魔術方法
    這算是經常會問到的一個題目了,常用的都記得,忽然問到__invoke()就懵了
    __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 

    參考[PHP 手冊之魔術方法](http://www.php.net/manual/zh/language.oop5.magic.php)
複製程式碼

資料結構和演算法

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

    參考[棧資料結構文章](http://www.jb51.net/article/130272.htm)
複製程式碼
  1. 氣泡排序
    只要能用程式碼實現出氣泡排序即可

    參考[氣泡排序文章](http://www.jb51.net/article/24497.htm)
複製程式碼
  1. 完全二叉樹和滿二叉樹的區別
    只有最下面的兩層結點度能夠小於2,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹才為完全二叉樹
    而一棵深度為h且有 2^h-1個結點的二叉樹即為滿二叉樹

    參考[完美二叉樹, 完全二叉樹和完滿二叉樹](https://blog.csdn.net/HaoDaWang/article/details/78065162)
複製程式碼

架構相關

  1. Laravel和ThinkPHP有什麼區別,對於laravel有什麼要吐槽的
    我從路由,中介軟體到控制器,資料訪問,檢視等層面上介紹了不同
    吐槽的話可能相對於一些專案,laravel有點‘重’

    參考[tp3.2和tp5,以及laravel的區別](https://blog.csdn.net/qq1690194137/article/details/79794944)
複製程式碼
  1. [有用composer釋出過自己的包嗎](基於 Composer 的 PHP 模組化開發)
    我回答沒有,只是瞭解過
    面試官就說他們的框架是自己在Discuz的基礎上二次開發的框架,在他優秀的基礎上把composer依賴管理也都引進blabla

    參考[基於 Composer 的 PHP 模組化開發](https://zhuanlan.zhihu.com/p/27943241)
複製程式碼
  1. 談談對於MVC的理解
    結合專案說明模板,檢視,控制器之間的關係和基本的構成

    參考[MVC](https://baike.sogou.com/v25227.htm)
複製程式碼

防護

  1. XSS 跨站指令碼攻擊
  2. DDOS 流量攻擊
  3. CSRF 跨站請求偽造攻擊
  4. SQL隱碼攻擊
    在前端表單使用者輸入進行控制或限制
    有後端傳引數和資料時進行過濾等等

    參考[常見的 CSRF、XSS、sql注入、DDOS流量攻擊](https://blog.csdn.net/echo_laodong/article/details/79254552)
複製程式碼

專案

  1. 在專案中如何解決併發的問題
    我的解決辦法先是前端控制有效請求,例如一分鐘才正常請求一次
    接著後端同樣過慮無效請求,接著接操作放進佇列中實現

    有個面試官問,你這個佇列是阻塞的嗎,如果真的同時兩個使用者購買,兩個使用者等待完成,他們還是用同一個執行緒完成,有沒有考慮用其它方式實現
    我說無,他就說可以用鎖的機制,第二個等待第一個完成,一個接一個

    參考[php高併發解決的一點思路](https://blog.csdn.net/mkbug/article/details/71455725)
    相關的還有swoole擴充套件,可以瞭解下
複製程式碼
  1. 微信支付具體實現流程
    1. H5頁面發起支付請求,請求生成支付訂單
    2. 呼叫統一下單API,生成預付單
    3. 生成JSAPI頁面呼叫的支付引數並簽名
    4. 微信瀏覽器自動調起支付JSAPI介面支付
    5. 確認支付
    6. 非同步通知商戶支付結果,商戶收到通知返回確認資訊
    7. 返回支付結果,展示支付資訊給使用者

    參考[微信支付時序圖](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4)
複製程式碼
  1. 簡單實現登入註冊功能
    各個框架考慮的方面不一樣,這就按自己的理解寫出相應的程式碼就好
複製程式碼
  1. 如何設計一個商城
    我是先給自己限定了一個B2C的商城,然後從資料表開始,接著簡單介紹前端和後端實現邏輯

    參考[PHP網上商城網站的設計與實現](http://www.docin.com/p-190062065.html)
複製程式碼

MYSQL

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

基礎

  1. InnoDB和MyISAM有什麼區別
    InnoDB提供事務處理,行級鎖,支援外來鍵,支援多種行格式
    MyISAM只支援表級鎖,全文索引,堆表

    參考[MyISAM與InnoDB區別](https://blog.csdn.net/xifeijian/article/details/20316775)
複製程式碼
  1. 事務有哪幾個特性
    原子性、一致性、隔離性、永續性
複製程式碼
  1. 事務的隔離級別
    未提交讀、已提交讀、可重複讀、可序列化

    參考[Innodb中的事務隔離級別和鎖的關係](https://tech.meituan.com/innodb-lock.html)
複製程式碼
  1. 有個表欄位的O_Id,OrderDate,OrderPrice,Customer這幾個,我們希望查詢訂單總金額少於 2000 的客戶
    SELECT Customer,SUM(OrderPrice) FROM Orders
    GROUP BY Customer
    HAVING SUM(OrderPrice)<2000
複製程式碼
  1. 查詢學生表的資料,大於六十的為及格,反之不及格
    select 分數,類別=Case
    WHEN 分數>=60 THEN '及格'
    ELSE '不及格'
    END
    from 成績表
複製程式碼
  1. 查詢沒有學完所有課程的學生學號、姓名
    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)
        );  
複製程式碼

優化

  1. "select * from student where name='red'","select * from student where name='blue'",優化語句
    select name from student where name='red'
    union
    select name from student where name='blue'

    如果用or條件, myisam表能用到索引, innodb不行。 
    innodb用UNION替換OR (適用於索引列) 
複製程式碼
  1. 你一般都會怎麼優化資料庫
    查詢快取、EXPLAIN、(聯合)索引、使用固定長度靜態表
    
    這問題都能寫一本書了,參考[MySQL效能優化的最佳21條經驗](https://blog.csdn.net/kaka1121/article/details/53395587)
複製程式碼

伺服器

防護

伺服器怎麼做防護

    僅開放有限埠,限制登入IP,限制登入帳號

    也是可以定一本書的問題,可以根據專案回答,參考[伺服器防護知識點彙總](https://blog.csdn.net/Sasoritattoo/article/details/9324149)
複製程式碼

協議

Get和Post有什麼區別

    Get的引數包含在URL,GET請求會被瀏覽器主動cache,是url編碼,有字元限制引數為ASCII字元
    Post 通過request body傳遞引數,且有多種編碼方式
複製程式碼

NginX

設定nginx時php指令碼請求是讓什麼處理

    預設配置的是轉發到FastCGI處理
複製程式碼

Redis

  1. 你用redis來快取什麼資料
    跟據專案來說自己快取的一些經常要用到的資料
複製程式碼
  1. Redis怎麼做持久化,配置哪種重新整理頻率
    配置aof持久化,用預設的每秒重新整理aof檔案

    參考[redis 的兩種持久化方式及原理](https://blog.csdn.net/yinxiangbing/article/details/48627997)
複製程式碼
  1. Redis是多執行緒嗎
    單執行緒(我竟然回答是多執行緒,233)

    參考[Redis單程式](http://www.cnblogs.com/syyong/p/6231326.html)
複製程式碼
  1. Redis怎麼配置一主多從,要多久
    可以用Redis官方叢集方案,具體沒有實踐過,可能要花幾周時間來完成

    參考[Redis叢集方案](https://www.zhihu.com/question/21419897)
複製程式碼

程式碼管理

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

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

    參考[git使用經驗](https://zhuanlan.zhihu.com/p/22666153)
複製程式碼

其它

為什麼離職

    機智回答,稍微提了一下公司或自身的事<del>錢少事多家遠</del>
複製程式碼

你理想的團隊

    對技術熱情,積極解決問題,共同合作

    參考[某種理想的團隊](https://zhuanlan.zhihu.com/p/19968752)
複製程式碼

職業規劃

    前端深入,後端深入,資料優化分析採集,伺服器滲透blabla
複製程式碼

想問的問題

    一般都會問公司有什麼專案,技術架構,有無盈利等
複製程式碼

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

後記

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

相關文章