摘要:如何實現持久化持久化,將在內存中的的狀態保存到硬盤中,相當于備份數據庫狀態持久化,持久化是通過保存服務器鎖執行的寫狀態來記錄數據庫的。
這是我整理的一套面試題,老鐵們看看就當復習了哦概述
感覺現在發面試題有些冷門,就跟昨天德國那場似的,不過看看當提前復習了。提前備戰。這2個月出門面試的童鞋可注意不要中暑哦。
說幾個你所知道的設計模式 單例模式保證一個類僅有一個實例,并提供一個訪問他的全局訪問點例如框架中的數據庫連接 - 類似DB類策略模式
針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,例如進入個人主頁時,根據瀏覽者的不同,給予不同的顯示與操作 - 類似不同用戶呈現不同效果注冊模式
提供了在程序中有條理的存放并管理一組全局對象 (object) - 類似服務提供者的注入適配器模式
將不同接口適配成統一的API接口,例如數據操作有mysql、mysqli、pdo等,可利用適配器模式統一接口
觀察者模式一個對象通過添加一個方法使本身變得可觀察。當可觀察的對象更改時,它會將消息發送到已注冊的觀察者。例如實現實現消息推送 - 將所有類的實例化注冊到一個數組,通過循環批量執行類
裝飾器模式不修改原類代碼和繼承的情況下動態擴展類的功能,例如框架的每個Controller文件會提供before和after方法 - 在某個方法或輸出之前執行或之后執行,用于修飾
迭代器模式提供一個方法順序訪問一個聚合對象中各個元素,在PHP中將繼承 Iterator 類 - yield
POST和GET有什么區別GET是從服務器上獲取數據,POST是向服務器傳送數據
GET是通過發送HTTP協議通過URl參數傳遞進行接收,而POST是實體數據,通過表單提交
GET傳送的數據量較小,不能大于2KB。POST傳送的數據量較大,一般被默認為不受限制。
GET安全性非常低,POST安全性較高
session與cookie的區別session存儲在服務器上的php指定目錄中(session_dir)的位置
cookie存儲在客戶端
數據庫中的事務是什么?指作為一個單元的一組有序的數據庫操作,如果組中的所有操作都成功,則認為事務成功,即使有一個操作失敗。事務也不成功,如果所有操作完成,事務提交,其修改將作用于所有其他數據庫進程,如果有一個操作失敗,則事務回滾,該事務影響到的操作都會取消。
PHP中傳引用與傳值的區別?按值傳遞:函數內對值的內容改變對函數外部無影響
引用傳遞:函數內對值的內容改變在函數外部也會做出相應修改
選用適合的字段類型,避免數據庫增加不必要的空間,字段盡量設定為NOTNULL,類似性別,省份盡量使用枚舉類型ENUM
使用JOIN查詢代替子查詢
使用UNION代替臨時表
盡量不使用外鍵、除非必須保持數據表與表之間的一致性、完整性
盡量不使用視圖
分表分庫,讀寫分離
合理設置主鍵及索引
索引分為:普通索引、唯一索引、全文索引、主鍵(也是一種唯一索引)
后期演變的數據表優化
- 垂直拆分:表數據拆分到不同表中,按照業務拆分 - 水平拆分:行數據拆分到不同表中,按照時間、類型、身份等因素拆分表 - 水平垂直聯合拆分
9.索引建立原則
- 最左前綴匹配原則 - 索引列盡量不參與計算 - 盡量擴展索引不要新建索引面向對象編程的五個基本原則 (S.O.L.I.D)
SRP 單一功能原則 (你可以這樣干,并不是說你應該這樣干)
- 引起類變化的因素永遠不要多余一個,保證類的有且只有一個責任
OCP 開閉原則 (開胸手術時不需要穿一件外套)
- 對擴展開放,對修改閉合
LSP 里氏替換原則
- 當一個子類的實例應該能夠替換任何其父類的實例時,它們之間才具有IS-A關系
ISP 接口隔離原則
- 不要強迫客戶端(泛指調用者)去依賴那些他們不使用的接口
DIP 依賴反轉原則
高層模塊不應該依賴底層模塊,兩者都應該依賴其抽象
抽象不應該依賴于細節,細節應該依賴于抽象
yield的使用生成器提供了一種更容易的方法來實現簡單的對象迭代,相比較定義類實現 Iterator 接口的方式,性能開銷和復雜性大大降低。
子類重寫父類的protected方法有什么限制?final修飾的類方法不可被子類重寫
5.3以后方法參數個數必須一致
重寫時訪問級別只可以等于或者寬松于當前重寫方法的訪問級別
什么是CGI? 什么是FastCGI? php-fpm , FastCGI,Nginx 之間是什么關系?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 攻擊?如何防范?CSRF,跨站請求偽造,攻擊方偽裝用戶身份發送請求從而竊取信息或者破壞系統。
防范
合理規范api請求方式,GET,POST
對POST請求加token令牌驗證,生成一個隨機碼并存入session,表單中帶上這個隨機碼,提交的時候服務端進行驗證隨機碼是否相同。
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); } }NOSQL Redis、Memecached 這兩者有什么區別?
Redis 支持更加豐富的數據存儲類型,String、Hash、List、Set 和 Sorted Set。Memcached 僅支持簡單的 key-value 結構。
Memcached key-value存儲比 Redis 采用 hash 結構來做 key-value 存儲的內存利用率更高。
Redis 提供了事務的功能,可以保證一系列命令的原子性
Redis 支持數據的持久化,可以將內存中的數據保持在磁盤中
Redis 只使用單核,而 Memcached 可以使用多核,所以平均每一個核上 Redis 在存儲小數據時比 Memcached 性能更高。
Redis 如何實現持久化?RDB 持久化,將 redis 在內存中的的狀態保存到硬盤中,相當于備份數據庫狀態
AOF 持久化(Append-Only-File),AOF 持久化是通過保存 Redis 服務器鎖執行的寫狀態來記錄數據庫的。相當于備份數據庫接收到的命令,所有被寫入 AOF 的命令都是以 redis 的協議格式來保存的
Laravel 設計原理 服務提供者是什么?服務提供者是所有Laravel應用程序引導啟動的中心,Laravel的核心服務器、注冊服務、綁定服務、監聽器、中間件、路由注冊以及我們應用程序都是由服務提供者引導啟動的。
IOC容器是什么?IOC就是控制反轉,也被叫做依賴注入(DI),對象A可以依賴對象B,但是控制權在對象A中,所以叫做控制反轉,依賴注入則是在IOC容器運行時動態將某種依賴關系注入到對象中。
作用:解決代碼難易度,實現低耦合、高擴展
提供了一個"static"(靜態)接口去訪問注冊到 IoC 容器中的類。提供了簡單、易記的語法,而無需記住必須手動注入或配置的長長的類名。此外,由于對 PHP 動態方法的獨特用法,也使測試起來非常容易。
Contract 是什么?Contract(契約)是 Laravel 定義框架提供的核心服務的接口。Contract 和 Facades 并沒有本質意義上的區別,其作用就是使接口低耦合、更簡單。
架構 Thrift 實現的基本原理及作用通過使用RPC通信協議,實現多語言開發場景下無感知的互相調用。
優點
數據包呈二進制發送,流量消耗小
傳輸效率高
語言之間無障礙
如何解決優化網站App大數據大流量高并發硬件方面
軟件方面
禁止外部盜鏈
控制大文件的下載
負載均衡
分布式
集群
主從數據庫
分布式數據庫
分布式緩存
TCP 三次握手三次握手就是客戶端與服務器端建立TCP連接時需要發送3個包進行連接的確認,在三次握手完成后即可建立連接。
第一次握手。客戶端發送請求報文,標志位SYN設置為1,隨機產生seq值為x,客戶端進入SYN_SENT狀態,等待服務器端的回應。
第二次握手。服務器端接收到請求報文,將SYN和ACK都設置為1,ack為x+1,隨機產生seq值為y,然后將數據包發送給客戶端進行確認,服務器端進入SYN_RCVD狀態。
第三次握手。客戶端收到回應的數據包后,確認ack是否為x+1,以及ACK是否為1,若正確,則將ACK設置為1,ack為y+1,然后將數據發送給服務器端。服務器端在接受到數據后檢查ack是否為y+1,ACK是否為1,若正確則正確建立連接,雙方均進入ESTAB-LISHED狀態,完成三次握手。
TCP 與 UDP 的區別除了TCP之外,我們還常聽到的是UDP,那么他倆有啥區別呢?
TCP對應的是可靠性要求高的應用,從上面的解釋可以看出來,在真正通信之前要三次握手,是面向連接的;并且TCP利用序列號保證消息的有序性。
而UDP對應的則是可靠性要求低,但是流量大、速度快的應用;和TCP相比,UDP是無連接的并且可能是無序的。
TCP更重量,UDP更輕量,沒有高低之分,只是應用的場景不同。
為什么要在上家公司離職?
未來三年的職業規劃的怎樣的?
您這邊有什么要理解的嗎?
非技術問題沒有正確答案
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28912.html
摘要:最近面試了不少公司,正好把記得的問題做個總結。抽象類的接口的區別,不在于編程實現,而在于程序設計模式的不同。一般來講,抽象用于不同的事物,而接口用于事物的行為。 最近面試了不少公司,正好把記得的問題做個總結。 本文 github 會持續更新 公眾號 搜索 蘇生不惑 或者掃二維碼關注,每周更新。 showImg(https://segmentfault.com/img/bVbsYyM?w...
摘要:最近面試了不少公司,正好把記得的問題做個總結。抽象類的接口的區別,不在于編程實現,而在于程序設計模式的不同。一般來講,抽象用于不同的事物,而接口用于事物的行為。 最近面試了不少公司,正好把記得的問題做個總結。 本文 github 會持續更新 公眾號 搜索 蘇生不惑 或者掃二維碼關注,每周更新。 showImg(https://segmentfault.com/img/bVbsYyM?w...
摘要:面試題目匯總前言近期在找工作,也在讀前端面試江湖這本書,書中整理了很多基礎的面試題目,在書中也發現了一些錯誤。好記性不如爛筆頭,于是整理下對自己有益的題目,都是一些較為基礎的題目后期還會更新。,返回一個數組,成員為匹配的字符串。 面試題目匯總 前言 近期在找工作,也在讀 前端面試江湖 這本書,書中整理了很多基礎的面試題目,在書中也發現了一些錯誤。好記性不如爛筆頭,于是整理下對自己有益的...
閱讀 2112·2023-04-25 20:52
閱讀 2506·2021-09-22 15:22
閱讀 2133·2021-08-09 13:44
閱讀 1774·2019-08-30 13:55
閱讀 2819·2019-08-23 15:42
閱讀 2292·2019-08-23 14:14
閱讀 2885·2019-08-23 13:58
閱讀 3016·2019-08-23 11:49