這是我整理的一套面試題,老鐵們看看就當複習了哦
感受如今發麪試題有些冷門,就跟昨天德國那場似的,不過看看當提早複習了。提早備戰。這2個月出門面試的童鞋可注意不要中暑哦。php
保證一個類僅有一個實例,並提供一個訪問他的全局訪問點例如框架中的數據庫鏈接 - 相似DB類
針對一組算法,將每個算法封裝到具備共同接口的獨立的類中,例如進入我的主頁時,根據瀏覽者的不一樣,給予不一樣的顯示與操做 - 相似不一樣用戶呈現不一樣效果
提供了在程序中有條理的存放並管理一組全局對象 (object) - 相似服務提供者的注入
將不一樣接口適配成統一的API接口,例如數據操做有mysql、mysqli、pdo等,可利用適配器模式統一接口mysql
一個對象經過添加一個方法使自己變得可觀察。當可觀察的對象更改時,它會將消息發送到已註冊的觀察者。例如實現實現消息推送 - 將全部類的實例化註冊到一個數組,經過循環批量執行類面試
不修改原類代碼和繼承的狀況下動態擴展類的功能,例如框架的每一個Controller文件會提供before和after方法 - 在某個方法或輸出以前執行或以後執行,用於修飾redis
提供一個方法順序訪問一個聚合對象中各個元素,在PHP中將繼承 Iterator 類 - yield算法
指做爲一個單元的一組有序的數據庫操做,若是組中的全部操做都成功,則認爲事務成功,即便有一個操做失敗。事務也不成功,若是全部操做完成,事務提交,其修改將做用於全部其餘數據庫進程,若是有一個操做失敗,則事務回滾,該事務影響到的操做都會取消。sql
按值傳遞:函數內對值的內容改變對函數外部無影響
引用傳遞:函數內對值的內容改變在函數外部也會作出相應修改數據庫
合理設置主鍵及索引編程
後期演變的數據表優化設計模式
- 垂直拆分:表數據拆分到不一樣表中,按照業務拆分 - 水平拆分:行數據拆分到不一樣表中,按照時間、類型、身份等因素拆分表 - 水平垂直聯合拆分
9.索引創建原則api
- 最左前綴匹配原則 - 索引列儘可能不參與計算 - 儘可能擴展索引不要新建索引
SRP 單一功能原則 (你能夠這樣幹,並非說你應該這樣幹)
- 引發類變化的因素永遠不要多餘一個,保證類的有且只有一個責任
OCP 開閉原則 (開胸手術時不須要穿一件外套)
- 對擴展開放,對修改閉合
LSP 里氏替換原則
- 當一個子類的實例應該可以替換任何其父類的實例時,它們之間才具備IS-A關係
ISP 接口隔離原則
- 不要強迫客戶端(泛指調用者)去依賴那些他們不使用的接口
DIP 依賴反轉原則
生成器提供了一種更容易的方法來實現簡單的對象迭代,相比較定義類實現 Iterator 接口的方式,性能開銷和複雜性大大下降。
CGI 是通用網關接口,用戶WEB服務器和應用程序間的交互,定義輸入輸出規範,用戶的請求經過WEB服務器轉發給FastCGI進程,FastCGI進程再調用應用程式進行處理,如PHP解析器,應用程序的處理結果如HTML返回給FastCGI,FastCGI返回給Nginx進行輸出,假設WEB服務器是NGINX,應用程序是PHP,而 php-fpm 是管理FastCGI的,這就是php-fpm,fastCGI與NGINX的關係.
FastCGI 用來提升cgi程序性能,啓動一個master,再啓動多個worker,不須要每次解析php.ini 而php-fpm實現了fastcgi協議,是fastcgi的進程管理器,支持平滑重啓能夠啓動的時候預先生成多個進程。
CSRF,跨站請求僞造,攻擊方假裝用戶身份發送請求從而竊取信息或者破壞系統。
防範
XSS,跨站腳本攻擊。
防範
function search($arr,$k){ $n = count($arr); $arr[$n]= $k; for($i=0; $i<$n; $i++){ if($arr[$i]==$k){ break; } } if ($i<$n){ return $i; }else{ return -1; } }
function binaryRecursive($arr,$low,$top,$target){ if($low<=$top){ $mid = floor(($low+$top)/2); if($arr[$mid]==$target){ return $arr[$mid]; }elseif($arr[$mid]<$target){ return binaryRecursive($arr,$mid+1,$top,$target); }else{ return binaryRecursive($arr,$low,$top-1,$target); } }else{ return -1; } }
function _sort($arr) { $count = count ($arr) - 1; $temp = 0; for ($i = 0; $i < $count; $i++) { for ($j = 0; $j < $count - $i; $j++) { if ($arr[$j] < $arr[$j + 1]) { $temp = $arr[$j]; $arr[$j] = $arr[$j + 1]; $arr[$j + 1] = $temp; } } } return $arr; }
function quick_sort($arr) { //判斷參數是不是一個數組 if(!is_array($arr)) { return false; }else{ //遞歸出口:數組長度爲1,直接返回數組 $length = count($arr); if($length<=1) return $arr; //數組元素有多個,則定義兩個空數組 $left = $right = array(); //使用for循環進行遍歷,把第一個元素當作比較的對象 for($i=1; $i<$length; $i++) { //判斷當前元素的大小 if($arr[$i]<$arr[0]){ $left[]=$arr[$i]; }else{ $right[]=$arr[$i]; } } //遞歸調用 $left=quick_sort($left); $right=quick_sort($right); //將全部的結果合併 return array_merge($left,array($arr[0]),$right); } }
服務提供者是全部Laravel應用程序引導啓動的中心,Laravel的核心服務器、註冊服務、綁定服務、監聽器、中間件、路由註冊以及咱們應用程序都是由服務提供者引導啓動的。
IOC就是控制反轉,也被叫作依賴注入(DI),對象A能夠依賴對象B,可是控制權在對象A中,因此叫作控制反轉,依賴注入則是在IOC容器運行時動態將某種依賴關係注入到對象中。
做用:解決代碼難易度,實現低耦合、高擴展
提供了一個"static"(靜態)接口去訪問註冊到 IoC 容器中的類。提供了簡單、易記的語法,而無需記住必須手動注入或配置的長長的類名。此外,因爲對 PHP 動態方法的獨特用法,也使測試起來很是容易。
Contract(契約)是 Laravel 定義框架提供的核心服務的接口。Contract 和 Facades 並無本質意義上的區別,其做用就是使接口低耦合、更簡單。
經過使用RPC通訊協議,實現多語言開發場景下無感知的互相調用。
優勢
三次握手就是客戶端與服務器端創建TCP鏈接時須要發送3個包進行鏈接的確認,在三次握手完成後便可創建鏈接。
除了TCP以外,咱們還常聽到的是UDP,那麼他倆有啥區別呢?
TCP對應的是可靠性要求高的應用,從上面的解釋能夠看出來,在真正通訊以前要三次握手,是面向鏈接的;而且TCP利用序列號保證消息的有序性。
而UDP對應的則是可靠性要求低,可是流量大、速度快的應用;和TCP相比,UDP是無鏈接的而且多是無序的。
TCP更重量,UDP更輕量,沒有高低之分,只是應用的場景不一樣。
非技術問題沒有正確答案