如何"有計劃,高效率,優簡歷"應對面試

前言

前一篇文章講述了我在三月份毫無準備就去面試的後果,一開始心態真的爆炸,可是又不服氣,一想到每次回來後家人朋友問我面試結果的期待臉,越以爲必須付出的行動來證實本身了。php

面經傳送門: 一個1年工做經驗的PHP程序員是如何被面試官虐的?

下面是我花費兩個星期作的準備,主要分三部分:html

  • 有計劃——計劃好天天要複習的知識模塊(內容較多)
  • 高效率——從總體到細節,着重把知識點「手寫」到本身的電腦記錄本
  • 優簡歷——展現你的項目亮點,難點
下面的文章和網站連接我都會註明出處,若是有問題請聯繫我,我會及時修改或撤銷

有計劃

反思:爲何好多知識看事後不能記住,面試一緊張更加想不起?一方面本身沒有深刻學習,另外一方面複習過程雜亂,和寫代碼一個道理,若是你的業務邏輯和其餘亂七八糟的都放在控制器上,代碼一多你要調用某個方法可能就會讓你抓狂,因此通常採起controller和server分層,同理,咱們最好提早作好計劃,分種類,分層次來學習。mysql

複習前若是很迷茫,能夠網上Google一下面試知識點,看到的無非都是操做系統,計算機網絡,數據結構,mysql,設計模式,Linux,Redis,再者根據你所學語言方面的知識和簡歷,例如我求職PHP,簡歷上有寫Larvel框架,那就再加PHP基礎,框架Laravel,服務器nginx。

第一天:操做系統

若是你是科班出身,那應該對操做系統不陌生,至少在高校裏面是學過這門課程的。但估計不少人像我同樣,後悔沒去好好學這門課,或者工做上用不上就拋棄它了(PHP更是如此),我要說的是操做系統很重要,就以我面試了幾家公司來講,基本若是你答出操做系統相關知識點基本都是加分的。nginx

  1. 進程和線程的概念,以及二者的區別
  2. 什麼是上下文切換
  3. 多進程和多線程各自的優點(能夠Google一下有關php-fpm和nginx進程)
  4. 進程通訊方式
  5. 進程基本狀態
  6. 搶佔式調度和非搶佔式調度
  7. 進程線程同步,死鎖
  8. 理解協程

附加幫助我整理這些知識的網站和博客文章:git

小土刀的面試刷題筆記——操做系統程序員

併發技術·筆試面試知識整理github

這裏推薦有精力的朋友能夠看下《Linux高性能服務器編程》,粗略看下8,9,10,13,14章,以及《深刻理解計算機系統》的第1章和第12章,我就是結合這兩本書,記住並理解簡單的知識點,後續我還要花時間去深刻閱讀。

次日:計算機網絡

計算機網絡能夠說是大多數程序員須要學習的大課程,特別是PHPer這些web打交道的程序員。固然,計算機網絡太底層的東西很枯燥很難懂,我只針對一些比較常見,比較基礎的知識面來學習。web

  1. 計算機網絡體系包括TCP/IP體系結構,五層協議體系結構
  2. TCP,UDP
  3. 三次握手,四次握手(過程要熟悉,能清晰描述)
  4. TCP協議如何保證可靠傳輸(包括重傳,流量控制,擁塞控制,定時器等知識點要了解)

附加幫助我整理這些知識的網站和博客文章:面試

小土刀的面試刷題筆記——網絡redis

TCP協議·筆試面試知識整理

複習完這些基礎的知識後,試着要去了解稍微底層一點的東西,由於不少面試官喜歡由淺入深地問,若是能答出一兩點基本都是加分的

推薦一篇很好的文章,仔細讀完會有很大的收穫:

TCP 的那些事兒(上)

第三天:數據結構

不少人在大學裏面都學過這門課程,也是不少程序員的啓蒙課程,天然很重要,(大學惟一一次掛科就是它了。。。)

從事PHP工做的朋友應該都用不上它,因此這也是一個很容易被忽視的基礎知識點,天然有不少大公司面試的時候很注重這方面的基礎,特別是應屆畢業生。我複習這方面的知識是從新翻開我大學的課本,把其中比較重要的東西手寫幾遍。

我不久前面試過一家要我手寫鏈表,結果早就忘了,沒寫出來
  1. 隊列,循環隊列,棧,單鏈表等,要理解,最好多手寫幾遍
  2. 樹和圖,着重複習二叉樹方面的知識,例如前中後遍歷;B樹,B+樹,紅黑樹最好要了解一下
  3. 排序算法,冒泡排序必須很熟悉,其餘幾種常見的算法:簡單選擇排序,直接插入排序,快速排序也要知道
冒泡排序能夠了解下如何優化改進,有些面試官會問,若是答不出他會提示你怎麼作,考察你的思考能力

關於數據結構的參考資料基本Google一下就有不少(順便說下,21世紀程序員仍是少用某度),大學的課程書是最好的,通常大學的數據結構都是面向學生的,仍是很基礎,很好理解的。

第四天:數據庫mysql

說實話,我以爲絕大多數程序員都是在CURD,學那麼多東西很大方面也是爲了輔助最後的curd。因此數據庫知識的重要性毋庸置疑,後面我打算買本《高性能MySQL》來提高本身這方面的能力。

  1. 基礎的增刪改查操做
  2. 存儲引擎MyISAM和InnoDB
  3. 理解索引數據結構,即B+樹方面的知識 參考:InnoDB索引實現·MySQL索引背後的數據結構及算法原理·看雲
  4. mysql語句優化,着重索引優化,explain查看索引狀況 參考:Mysql索引優化
  5. 事務四大特性
  6. 隔離級別
  7. 髒讀,不可重複讀,幻讀
  8. 瞭解共享鎖,排他鎖,死鎖
  9. 瞭解主從複製原理,分庫分表

第五天:nginx和PHP-fpm

nginx和php-fpm應該算是PHP程序員接觸比較多,可是可能沒有去深刻了解過,有些面試官喜歡結合nginx,php-fpm和操做系統進程方面的知識來考察。

  1. 平常用到的nginx配置語法,經常使用的變量
  2. nginx常見的參數優化 參考:Nginx高併發下的優化
  3. nginx負載均衡,訪問控制,防盜鏈,設置靜態文件過時時間等
  4. php-fpm工做流程
  5. php-fpm進程管理(靜態和動態)

能夠Google瞭解下php-fpm和nginx各自的進程管理模式,參考文章:Nginx內部有使用多線程嗎?

面試過程可能會問到網站負載低,訪問慢怎麼排查,參考:論壇偶爾出現負載低可是訪問很慢排查思路

第六天:redis

工做項目不大,用到redis的地方並很少,因此一直也沒去學習redis,可是從面試狀況看來,被問到redis的機率仍是很大的,畢竟這款基於內存的數據庫功能強大,市場佔用率很高。

  1. 與memcached的區別
  2. 5種基本的數據結構以及各自的使用場景,最好能結合本身項目來描述
  3. 持久化,RDB和AOF 參考: 面試中常常被問到的 Redis 持久化與恢復
  4. 如何與mysql保持數據一致 參考:Redis和mysql數據怎麼保持數據一致的?

第七天:Laravel

因爲我本身是一直用Laravel框架開發的,簡歷裏面的項目也多處標明Larvel,因此這裏就介紹Larvel相關的知識,你對哪一個框架熟悉就去作相應的複習,基本Google和手冊都有。

  1. Laravel生命週期
  2. 什麼是服務容器,服務提供器,Facade門面
  3. 依賴注入
  4. 中間件,異常處理,ORM等手冊上的知識

第八天:設計模式

看一我的的代碼水平,能夠從是否靈活使用設計模式看出來的。寫代碼也是一門藝術,好的代碼低耦合,易擴展,設計模式的理解和使用也決定了你的代碼水平。這裏推薦一本《大話設計模式》,目前我只看了一點點,對於我這樣的菜鳥以爲還不錯,後面需抽點時間好好看看。

  1. 六大原則,着重理解,最好能清晰口述
  2. 結合你的項目經驗描述幾個設計模式。常見的有單例,三大工廠,觀察者,策略等
有一次面試官問我簡單工廠模式是否是符合六大原則之一開閉原則?我答不出來,隨便選了個符合。。。實際簡單工廠是不符合開閉原則的,這就涉及到你開閉原則的理解。

第九天:PHP內核基礎知識

真正要讀懂PHP內核的人應該不多,大多數人都沒時間和精力去研究底層,畢竟PHP一直以開發效率高著稱,只要底層有人寫好給廣大程序員用就行了。確實是這樣,可是我記得有個面試過個人大佬跟我說,不少東西不要只會用,要多想一想爲何能夠這樣用,PHP語言我以爲也是同樣,雖然如今能力有限,但我能夠提早把一些比較基礎,容易理解的底層知識學習一下,這不也是一種自我提高?面試的時候你也能夠拿出來炫一下,說錯也不要緊,至少你展現出你的好學,你的認知層面。

  1. PHP的生命週期和zend引擎
  2. 變量存儲結構
  3. 寫時複製和引用

參考文章:

深刻理解PHP內核

PHP內核剖析

第十天:根據你的簡歷內容作複習

面試都是拿着你的簡從來問問題的,你的簡歷內容會直接影響面試內容的走向,因此簡歷寫完還要作響應的複習。

個人簡歷有涉及rabbitMQ,elasticsearch等知識,我就對其進行簡單的複習。

另外很重要的一點:提早想好怎麼描述你作過的項目,其中遇到什麼問題,怎麼解決,儘可能把你好的一面展現出來,這些均可以提早寫下了的,好記性不如爛筆頭,下面第二部分會說到。

高效率

複習的內容實在是太多了,單單寫上一部份內容都快把個人鍵盤打爛,手寫斷了。雖然有了十全的計劃,但如何高效率去記住上面那麼多東西是一個大問題,看看我是怎麼作的。

  • 例如第一天覆習操做系統的知識,我是早上Google了一下有關操做系統的面試知識點,而後打開幾個標籤頁,選取內容比較齊全的。所謂「好記性不如爛筆頭」,沒有爛筆頭,只有爛鍵盤,因此我選擇把這些知識點一一整理到本身的電腦上,本身平時有寫博客,用markdown比較多(推薦Typora),因此天天就用一個md文件把知識整理下來,基本都是手打的,不多複製黏貼。這樣作,一方面讓本身印象深入,另外一方面鍛鍊本身摘取核心內容,描述能力,這也是我能寫下這麼多內容的緣由。
  • 天天晚上計劃好明天的複習內容,能夠選擇睡前回顧今天學習的知識,也能夠在次日早上回顧一遍
  • 最好選擇一個安靜的地方,能讓你認真學習的環境,我因爲提交了離職申請須要一個月才能走,交接項目也很快,因此天天都在公司有計劃的複習(遠離手機)

總之,真想要離職,找一份好工做,必須對本身狠一點,找到心儀的工做再好好去放鬆幾天。其實有很多人一直在埋怨大環境很差,確實是,但有何用,想爲本身菜,本身不努力找一個藉口?王小波說的好:人的一切痛苦,本質上都是對本身無能的憤怒。固然運氣也很重要,保持樂觀,別輕易放棄。

優簡歷

簡歷不用多說,就是很重要,怎麼寫?其實我也是參考一篇文章的:我本覺得大家會寫簡歷

歸納一下:

  1. 基本的,用PDF格式,我的信息寫完整,別寫精通
  2. 技能亮點,圍繞 熟悉 , 有所 , 掌握 , 瞭解 , 有必定心得

    不要這樣:

    熟悉PHP , 熟悉YiiLavarel框架 ( 複製粘貼 , CURD , 就是幹! )
    熟悉Linux使用 , 能夠搭建XXXX環境 ( 會敲cd , ls命令 , 會apt install nginx )
    熟悉git或svn版本管理的使用 ( 會git push , 會git pull )
    熟悉MySQL以及對數據庫的優化 ( 會select update 和 delete , 會添加索引 )
    熟悉Redis或Memcache的使用 ( 會set key , 會get key )

    最好這樣:

    PHP : 熟悉PHP語法 , 熟悉PHP面向對象 , 能夠根據業務邏輯結合合適的設計模式 . 熟悉PHP SPL標準庫 , 對PHP的一些高級用法有所心得體驗 , 諸如pcntl多進程模塊 , socket模塊 . 對SWOOLE全部涉獵 , 有一些本身的積累和經驗 . 對於底層 , ZendVM如何如何 。
    Redis : 熟悉Redis經常使用數據結構的使用 , 可結合業務場景選擇合適的數據結構 . 熟悉Redis集羣 , 對集羣實現方案原理有必定掌握 , 對於市面經常使用的集中集羣方案的優缺點比較瞭解 . 對於底層 , 對Redis SET等底層數據結構的實現有所掌握。
  3. 必定要寫項目亮點和難點

    大多數人都是這麼寫的 : 負責用戶登陸註冊模塊 , 後臺管理 , 多角色權限控制 , 負責廣告業務模塊的管理和篩查(太普通,太泛了)
  • 亮點 . 你以爲這個項目中哪一部分值得自豪或學到新東西了 . 好比項目中用到ECDH , 使用了MySQL中間件等等。
  • 難點 . 你以爲這個項目哪一部分當時難了你幾天 , 而後你經過本身努力解決了以及解決方案是什麼。

總結

面試並不簡單,不要過輕敵,作好準備,打好基礎是關鍵。毫無準備就去投簡歷面試大可能是浪費時間,甚至浪費進入好公司的機會。仍是那句話程序員應該腳踏實地,不要眼高手低,用實際行動證實本身。

我是即將入職廣州一家遊戲公司PHP開發崗位的程序員,2018年畢業,畢業到如今確實收穫了很多,也讓我看清本身,須要惡補的知識還有不少不少。歡迎你們關注個人我的博客https://zgxxx.github.io/,比較簡陋,仍是但願能和萬千大神交流技術問題,一塊兒成長。

相關文章
相關標籤/搜索