#### **問題:PHP抽象類與接口的區別**
a.接口是通過?interface?關鍵字來定義的,?抽象類是通過abstract關鍵字來定義的。
b.對接口的使用方式是通過關鍵字implements來實現的,而對于抽象類的操作是使用類繼承的關鍵字extends實現的,使用時要特別注意。
c.接口沒有數據成員,但是抽象類有數據成員,抽象類可以實現數據的封裝。
d.接口沒有構造函數,抽象類可以有構造函數。
e.接口中的方法都是public類型,而抽象類中的方法可以使用private、protected或public來修飾。
f.一個類可以同時實現多個接口,但是只能實現一個抽象類。
相同點:抽象方法與接口的函數體內不能寫任何東西,連兩個大括號都不能寫!!!如:function getName();這樣就行了
#### **問題:mysql分區,分表,集群等相關設計方案**
https://www.jb51.net/article/51803.htm
https://rdc.hundsun.com/portal/article/945.html
實現需求:
分區:訪問量不大,但是表數據很多的表,可以采取分區的方式
分表:大訪問量,并且表數據比較多的表,可以采取分表和分區結合的方式(merge分表方式相對較簡單,但要具體情況分析)
分庫:分區和分表不夠用的情況下,加入分庫
實現原理:
分區:數據庫優化優先考慮,相對比較簡單,數據分成不同的份數。
分表:總表可以看成是一個外殼,包住不同的分表,使用merge分表方式比較簡單直觀。
分庫:使用中間件來做判斷使用哪個數據庫。
MySQL支持的分區方式有四種:
Range分區:連續區間的列值。(較多)
List分區:離散值集合中的某個值。(一般)
Hash分區:表達式的返回值來進行選擇的分區。(較多)
Key分區:Key分區只支持計算一列或多列。(一般)
備注:
數據庫剝離(數據庫本身的)計算功能不代表不要數據的計算功能,因為沒有數據的計算功能數據庫也就沒價值了,那么我們要將數據庫的計算功能進行遷移,遷移到程序里面,一般大型系統程序和數據庫都是分開部署到不同服務器上,因此程序里處理數據計算就不會影響到數據庫所在服務器的性能,就可以讓安裝數據庫的服務器專心服務于存儲。
#### **問題:mysql優化方式**
1.數據庫緩存,減少訪問數據庫
2.分區,分表,分庫等操作
3.程序和數據庫部署在不同的服務器上,減少數據庫本身的計算,計算功能主要用程序去實現
4.讀寫分離
參考:
讀寫分離:https://blog.csdn.net/cyan_grey/article/details/79528842
#### **問題:memcache,redis,mongodb各自的優缺點和使用場景**
【Memcached 】
Memcached 是一個高性能的分布式內存對象緩存系統,用于動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提供動態、數據庫驅動網站的速度。Memcached基于一個存儲鍵/值對的hashmap。
端口(11211)
優點:
?一.部分容災
假設只用一臺memcache,如果這臺memcache服務器掛掉了,那么請求將不斷的沖擊數據庫,這樣有可能搞死數據庫,從而引發”雪崩“。如果使用多臺memcache服務器,由于memcache使用一致性哈希算法,萬一其中一臺掛掉了,部分請求還是可以在memcache中命中,為修復系統贏得一些時間。
?二.容量問題
一臺memcache服務器的容量畢竟有限,可以使用多臺memcache服務器,增加緩存容量。
?三.均衡請求
使用多臺memcache服務器,可以均衡請求,避免所有請求都沖進一臺memcache服務器,導致服務器掛掉。
四.利用memcache分布式特性
使用一臺memcache服務器,并沒有利用memcache的數據分布式特性。
缺點:
1.不能持久化存儲
2.存儲數據有限制:1M 【大于1M,認為就行分割】(內存碎片)
3.存儲數據只能key-value
4.集群數據沒有復制和同步機制 【崩潰不會影響程序,會從數據庫中取數據】
5.內存回收不能及時? LRU(算法):未使用內存》過期內存》最近最少使用內存 ? 這是惰性刪除
應用場景:
1.分布式應該,
2.數據庫前段緩存,
3.服務器間數據共享。
【Redis】
redis 端口(6379)
(1)是內存型數據庫,數據保存在內存中,通過tcp直接存取,優勢是讀寫性能高。
(2)redis是內存型KV數據庫(鍵值存儲數據庫,其數據按照鍵值對的形勢進行組織、索引、存儲),不支持二級索引,支持list,set等多種數據格式。適合存儲全局變量,適合讀多寫少的業務場景。很適合做緩存。
優點:
1.Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
2.數據可以持久化保持(AOF、快照),寫入硬盤。
3.支持災難恢復,主從復制。主機會自動將數據同步到從機,可以進行讀寫分離。
4.讀寫性能優異。
缺點:
1.redis不支持自動容錯和恢復功能,主從當機都會導致前端讀寫失敗,需手動前端Ip或者機器重新啟動
2.主機宕機,主從數據復制過程中,數據未完全復制到從機。會出現數據不一致。
3.redis較難支持在線擴容,當集群數據達到上限在線擴容變得復雜。
應用場景:
1.配合關系型數據庫做高速緩存
2.緩存高頻次數據,降低數據庫io
3.分布式架構,做session共享
例子:比如微信token每兩小時刷新一次,就比較適合用redis存儲,讀也比較方便;
在線游戲排行榜;計時達到一定時間后顯示相關廣告;按照用戶投票和時間排序,更新新聞;
統計在某段特點時間里有多少特定用戶訪問了某個特定資源,統計哪些特定用戶訪問了某篇的文章;
【Mongodb】
mongodb 端口(27017)
(1)是文檔型的非關系型數據庫,使用bson結構。其優勢在于查詢功能比較強大,能存儲海量數據,缺點是比較消耗內存。
(2)一般可以用來存放評論等半結構化數據,支持二級索引。 適合存儲json類型數據,不經常變化。
優點:
文檔結構的存儲方式,能夠更便捷的獲取數據
內置GridFS,支持大容量的存儲
內置Sharding,分片簡單
海量數據下,性能優越
支持自動故障恢復(復制集)
缺點:
不支持事務操作
占用空間過大
MongoDB沒有如MySQL那樣成熟的維護工具
無法進行關聯表查詢,不適用于關系多的數據
復雜聚合操作通過mapreduce創建,速度慢
模式自由,??自由靈活的文件存儲格式帶來的數據錯誤
應用場景:

參考:
https://blog.csdn.net/weiyi_xingdong/article/details/79992032
#### **web開發中各類緩存設計,站點優化方案**
1.本地緩存,
1.1.生成靜態頁面
1.2.數據緩存,將公用的數據保存在json里面,有改動時,再對json數據進行修改
2.分布式緩存
memcache,redis,mongodb的選擇使用
3.客戶端緩存
瀏覽器本地緩存,cookie,localStorage,sessionStorage
cookie:http?header?里的一個字段,最大存儲量4KB,會隨著http?request發送到后端
localStorage:跟cookie類似,最大存儲量5M,數據會永久存儲,除非代碼或手動刪除
sessionStorage:跟cookie類似,最大存儲量5M,數據只存在于當前會話,瀏覽器關閉則清空
參考:
https://www.cnblogs.com/siqi/p/5096317.html
#### **設計高可用的大型分布式系統架構,包括數據庫,以及服務器和數據庫的備份方案**
主要靠聯機熱備份的增量備份,定期安排聯機冷備份的全量備份
聯機熱備份:在選定數據庫節點進行熱備份時,停止同步,完成備份后再開啟同步
聯機冷備份:在選定數據庫節點進行冷備份時,停止同步,完成備份后再開啟同步
#### **問題:PHP魔術方法有哪些,代表什么意思,一般什么場景下使用**
https://blog.csdn.net/meimeidi/article/details/53670472
https://blog.csdn.net/weixin_45555414/article/details/100011307
https://segmentfault.com/a/1190000007250604
視頻:https://www.imooc.com/video/3652
#### **問題:PHP設計模式有哪些,代表什么意思,一般什么場景下使用**
https://blog.csdn.net/jeremy_ke/article/details/89000003
https://www.php.cn/php-weizijiaocheng-389651.html
大型項目的框架設計和數據庫集群方案
服務器配置參考:https://www2.zhihu.com/question/27641736
#### **問題:SQL語句怎樣將不同記錄合并在一起**
case ... when ... then ... else ... end
例子:
case type when 1 then 1 else 0 end
#### **問題:服務器掛了之后怎么補救**
采用負載均衡集群方案解決,將大量的并發請求分擔到多個處理節點。由于單個處理節點的故障不影響整個服務,負載均衡集群同時也實現了高可用性。
https://blog.csdn.net/weixin_41440282/article/details/81141609
#### **問題:數據庫掛了之后怎么補救**
數據庫集群正常運作時采用聯機熱備份的增量備份,同時定期進行聯機冷備份的全量備份
聯機熱備份:在選定數據庫節點進行熱備份時(寫入即備份?),停止同步,完成備份后再開啟同步
聯機冷備份:在選定數據庫節點進行冷備份時,停止同步,完成備份后再開啟同步
#### **PHP的生命周期**
SAPI運行PHP都經過下面幾個階段:
1、模塊初始化階段(module init)
2、請求初始化階段(request init)
3、php腳本執行階段
4、請求結束階段(request shutdown)
5、模塊關閉階段(module shutdown)
參考:
https://www.cnblogs.com/applelife/p/10511837.html
https://www.daixiaorui.com/read/274.html
https://www.cnblogs.com/fubuki/p/9695379.html
#### **Web安全性**
1.對數據進行處理,防止跨站腳本漏洞XSS
2.如果是網頁端,使用session機制的CSRF驗證
3.API數據需要簽名驗證
4.不要濫用session和cookie
對數據進行預處理
#### **new self() 和 new static() 的區別**
https://blog.csdn.net/qq_38287952/article/details/82669217
#### **Innodb的儲存結構**
https://www.cnblogs.com/souyoulang/p/11113652.html
https://blog.csdn.net/bohu83/article/details/81086474
#### **如何搭建負載均衡,redis**
#### **SSL證書過程中做了什么**
#### **解決高并發公用資源的問題,如5個商品,10個用戶同時下單購買**
#### **用戶訪問頁面,出現502的原因,如果是由于php-fpm的線程不夠所引起的,怎么解決**
#### **innodb的結構**
http://blog.itpub.net/24003562/viewspace-706629/
【算法篇】
#### **新建數組進行上升排序**
- 高級工程師或以上級別的行為習慣
- Laravel封裝
- 公用類
- 查詢
- 項目1
- Laravel CMS
- 無限分級列表
- Laravel
- Laravel簡介
- Laravel下載和安裝
- 微服務
- Laravel身份認證
- Laravel Passport
- 后臺身份驗證
- Passport實現前后端登錄認證
- Laravel Sanctum
- Laravel輔助
- Unitest
- Laravel常用命令行
- Laravel數據庫配置
- Laravel連接數據庫模板
- Laravel數據庫操作
- Laravel路由
- Laravel操作
- Laravel Blade模板引擎
- Laravel CRUD (create, read, update, delete)
- Laravel實例
- Laravel Eloquent
- belongsTo和belongsToMany案例
- Laravel Package
- Laravel File Manager
- Laravel language
- Laravel查詢
- Laravel合并查詢
- Laravel統計
- Laravel Voyager Blog System
- Laravel Excel
- Laravel AsgardCms后臺
- Laravel基礎集合
- Laravel 備份和更新
- Laravel和Codeigniter對比
- Laravel事務處理
- Laravel Redis
- Laravel在Nginx服務器運行時遇到404錯誤的修正
- Laravel安全
- Laravel JWT
- Laravel Passport
- Laravel加密和解密
- Laravel sent email
- laravel 5.4 eloquent-relationships
- 加入變量文件
- Laravel migrations
- Laravel隊列
- Laravel+RabbitMQ
- Laravel OSS
- CMS設計
- 角色權限設計
- Lumen
- Lumen API
- lumen email
- 服務器
- Cloud9使用
- 配置本地服務器多域名
- PHP運行環境部署方式
- 同時運行PHP、Java、Python
- Linux操作
- Composer
- 支付開發
- 微信支付
- 支付寶API
- PayPal開發
- PHP基礎
- JavaScript相對PHP開發側重後臺功能的劣勢
- PHP foreach 和 for循環
- PHP檢測數組有哪里連續的字符串,以及有多少個
- Session
- 域名判斷顯示
- 檢測登錄設備
- PHP foreach循環, 則只循環相同數據一次
- PHP計算搜索過程所用的時間
- PHP文件處理
- Session和cookie案例:登錄時的記住我功能
- PHP array判斷
- PHP剔除數組中相同子元素的值
- PHP分頁
- PHP "三元運算符"簡寫
- 防CSRF跨站請求偽造攻擊
- PHP Json system
- crul
- PHP爬蟲
- 參考
- PHP一和二維數組
- 格式轉換
- PHP抓取網頁指定內容
- PHP Simple HTML DOM Parser
- PHP提取多維數組指定一列的方法大全
- PHP將第一個字符轉為指定內容
- OpenSSL加密解密
- 圖片+文字
- PHP理論
- Opcache
- Git
- 安裝Git
- Git操作
- Git參考
- 參考筆記
- 程序員接單平臺
- 后端PHP面試
- 基礎面試
- MySQL訓練題
- 經典算法題
- 框架原理
- 高并發
- 微服務架構
- 安全性
- 分布式設計
- 服務器集群
- 模擬題目
- 模擬面試1
- 模擬面試2
- 網絡協議
- 英文面試
- 高端PHP面試取勝點
- MVC設計
- 模板引擎
- 算法高效解題
- 算法概述
- leetcode算法題
- 排序
- SQL
- MySQL
- MySQL連接
- Join案例
- MySQL參考文章
- mysql_pdo_select
- mysql_pdo_insert
- MySQL索引
- MySQL事務
- MySQL將數據表字段不重復的值合成一個數組
- MySQL常用語句
- 備份
- MySQL other
- MsSQL
- MsSQL連接
- MySQL PDO連接
- MsSQL安裝
- mssql_pdo_select
- mssql_pdo_insert
- MySQL past
- MySql常用操作
- MySQL基礎練習
- MySQL設計
- MySQL案例
- php array轉換放入數據表
- PHP Mysql連接數據庫并輸出數據
- MySQL常用命令
- MySQL導出導入
- PDO
- Excel
- Excel在Drupal的應用
- Excel在Laravel的應用
- PHPOffice/PhpSpreadsheet的基本使用
- 用PHP Simple HTML DOM Parser獲取指定列的內容
- PHPOffice/PhpSpreadsheet的案例
- Sublime Text
- elasticsearch
- 后端基礎核心:數據的輸入和輸出
- 發送郵件功能
- PHPMailer發送郵件功能源碼
- PHPMailer發送郵件功能源碼(詳細案例)
- 常用cnd鏈接
- API
- API ajax+php demo
- PHP Postman API
- API1
- demo-api
- Google API
- google sheet data insert into database
- Laravel API
- Google Analytics
- 其他工具
- 經驗
- 編程注意事項
- 開發語言的差別
- 軟件產品
- 經驗之談
- test
- Bootstrap 4
- 1.demo page
- CMS設計
- 編輯器
- Other