剛從大學畢業,第一件事就是找工作,面試了幾家公司做一下總結。主要針對面試管提出的問題,和自己認爲需要提高的地方和注意的技巧。
面試公司
面試的第一家公司悅多米(電商方向),規模比較小。
面試中體現出的問題
- 沒有一個完整的項目
- 面試的基礎知識準備不充分
- 簡歷太過簡陋
解決和提升的方法
- 完善簡歷信息
- 過一個PHP面試的常見問題和基礎知識
- 對之前的項目進行總結並完善,儘量可以從之前的項目衍生一個完整的項目出來(如果有心儀的行業,建議找個結合相關行業的項目)
- 在前面兩點準備充分的條件下,儘量找一個完整的項目寫出來
面試官提出的問題
首先進行自我介紹
(面試技巧): 儘量避免只老套的介紹項目和自己。儘量在介紹自己的同時挑選幾個亮點,同時結合面試公司的需求,體現出自己符合公司需求方面的長處。
關係型數據庫和非關係型數據庫之間的區別
兩者的本質區別:
非關係型數據庫產品是傳統型數據庫的功能閹割版本,通過減少用不到或很少用到的 功能,來大幅度提高產品性能。
非關係型數據庫的優勢:
- 性能
NOSQL是基於鍵值對的,可以想象成表中的主鍵和值的對應關係,而且不需要經過SQL層的層層解析,所以性能很高。
- 可擴展性
同樣也是因爲基於鍵值對,數據之間沒有耦合性,所以非常容易水平擴展。
關係型數據庫的優勢:
- 複雜查詢
可以用SQL語句方便的在一個標以及多個表之間做非常複雜的數據查詢。
- 事務支持
使得對於安全性能很高的數據訪問要求得以實現
現在的相關技術Mysql的HandlerSocket
HandlerSocket是一個MySQL的NoSQL插件。HandlerSocket會在mysql進程中開一個守護線程,來接受和處理來自客戶端的tcp請求。 HandlerSocket不支持SQL查詢,只提供簡單的CRUD的操作。 因爲以下原因,HandlerSocket比mysqld/libmysql要快一些。
- HandlerSocket操作數據不經過解析SQL語句,CPU耗能比較少。
- HandlerSocket接收客戶端的請求並批量執行,CPU和磁盤消耗少。
- HandlerSocket的client/server協議比mysql/libmysql相對緊湊一些,網絡消耗要少一些。
命令空間的作用
PHP中的命令空間的明確的作用就是解決重名問題。
談一談數據庫優化的思路
- 設置良好的數據庫表結構,允許部分數據冗餘,儘量避免多表查詢的情況的出現
- 選擇合適的表字段類型和存儲引擎,適當的添加索引
- 對SQL語句進行優化,儘量避免join語句,提高查詢速度
- 按照規律進行分表減少單表的數據量
- 設置主從數據庫,對數據庫進行讀寫分離
談一談對高併發,和大數據的處理方法
這樣的問題一般從兩個大方面來回答,一個是web服務器方向,另一個是從數據庫方向。
Web服務器
- 利用nginx反向代理,在web服務器前面搭建緩存層,請求不直接請求web服務器,而是請求緩存服務器,減少Web服務器的負載。
- 在客戶端方面請求時儘量的採用異步
- 服務器處理連接儘量採用隊列的形式來處理請求,避免了服務的高併發。
- 添加緩存機制,比如memcached,apc
- 對不經常更改的頁面進行靜態化
- 採用CDN服務來進行加速
- 構建Web服務器集羣
數據庫方面
數據庫方面和上面的數據庫優化的思路相同