整理搜集了近兩年來網際網路知識,内容龐大,如果你學會了,面試不成問題,由此可見網際網路發展太迅速了,各種知識點錯綜複雜,更新疊代的太快,可下載下傳
## 分布式
一、大型網站系統的特點
高并發,大流量
高可用
海量資料
使用者分布廣泛,網絡情況複雜
安全環境惡劣
需求快速變更,釋出頻繁
漸進式發展
二、大型網站架構演化發展曆程
初始階段的網站架構
應用服務和資料服務分離
使用緩存改善網站性能
使用應用伺服器叢集改善網站的并發處理能力
資料庫讀寫分離
使用反向代理和CDN加速網站響應
使用分布式檔案系統和分布式資料庫系統
使用NoSQL和搜尋引擎
業務拆分
分布式微服務
三、拆分VS叢集
四、微服務VSSOA
五、前後端完全分離與Rest規範
六、CAP三進二和Base定理
關系型資料庫遵循ACID規則
CAP三進二
BASE定理
分布式一緻性理論paxos、raft、zab算法
## 中間件
一、緩存
為什麼要使用緩存
優秀的緩存系統Redis
redis為什麼這麼快
redis的資料類型,以及每種資料類型的使用場景
redis的過期政策以及記憶體淘汰機制
漸進式ReHash
漸進式rehash的原因
漸進式rehash的步驟
緩存穿透
緩存雪崩
二、消息隊列
消息隊列應用場景
異步處理
應用解耦
流量削鋒
日志處理
消息通訊
消息中間件示例
電商系統
日志收集系統
JMS消息服務
消息模型
消息消費
防止消息丢失
同步的事務——停止等待
同步的事務——連續ARQ
異步的事務——回調機制
消息的幂等處理
消息的按序處理
三、搜尋引擎
概述
特點(優勢):
使用場景:
反向索引
建立索引
一些要索引的原文檔(Document)
将原文檔傳給分次元件(Tokenizer)
将得到的詞元(Token)傳給語言處理元件(LinguisticProcessor)
将得到的詞(Term)傳給索引元件(Indexer)
搜尋索引
使用者輸入查詢語句
對查詢語句進行詞法分析,文法分析,及語言處理
搜尋索引,得到符合文法樹的文檔
根據得到的文檔和查詢語句的相關性,對結果進行排序
Lucene和ElasticSearch
分詞器
## 大資料與高并發
一、秒殺架構設計
業務介紹
業務特點
瞬時并發量大
庫存量少
業務簡單
技術難點
現有業務的沖擊
直接下訂單
頁面流量突增
架構設計思想
限流
削峰
異步
緩存
整體架構
用戶端優化
秒殺頁面
防止提前下單
API接入層優化
限制使用者次元通路頻率
限制商品次元通路頻率
SOA服務層優化
秒殺整體流程圖
總結
二、資料庫架構發展曆程
單機MySQL的美好年代
Memcached(緩存)+MySQL+垂直拆分
Mysql主從複制讀寫分離
分表分庫+水準拆分+mysql叢集
三、MySQL的擴充性瓶頸
四、為什麼要使用NOSQLNOTONLYSQL
五、傳統RDBMSVSNOSQL
六、NOSQL資料庫的類型
七、阿裡巴巴中文站商品資訊如何存放
商品基本資訊
商品描述、詳情、評價資訊(多文字類)
商品的圖檔
商品的關鍵字
商品的波段性的熱點高頻資訊
商品的交易、價格計算、積分累計
大型網際網路應用(大資料、高并發、多樣資料類型)的難點和解決方案
八、資料的水準拆分和垂直拆分
垂直拆分
水準拆分
拆分原則
案例分析
九、分布式事務
假如沒有分布式事務
什麼是分布式事務?
XA兩階段送出(2PC)
XA三階段送出(3PC)
MQ事務
TCC事務
十、BitMap
Bit-map的基本思想
Bit-map應用之快速排序
Bit-map應用之快速去重
Bit-map應用之快速查詢
Bit-map擴充——BloomFilter(布隆過濾器)
總結
應用
十一、BloomFilter
十二、常見的限流算法
計數器法
滑動視窗
漏桶算法
令牌桶算法
計數器VS滑動視窗
漏桶算法VS令牌桶算法
十三、負載均衡
dns域名解析負載均衡
反向代理負載均衡
http重定向協定實作負載均衡
分層的負載均衡算法
十四、一緻性Hash算法
## 資料庫
一、資料庫範式
1NF(第一範式)
2NF(第二範式)
3NF(第三範式)
二、資料庫開發規範
基礎規範
命名規範
字段設計規範
總結
三、資料庫索引
唯一索引
非唯一索引
主鍵索引
聚集索引(聚簇索引)
擴充:聚集索引和非聚集索引的差別?分别在什麼情況下使用?
索引實作機制
索引建立原則
四、MyISAMvsInnoDB
五、并發事務帶來的問題
丢失更新
髒讀(未送出讀)
不可重複讀
幻讀(PhantomRead)
六、事務隔離級别及鎖的實作機制
一級封鎖協定(對應readuncommited)
二級封鎖協定(對應readcommited)
三級封鎖協定(對應reapetableread)
最強封鎖協定(對應Serialization)
七、MVCC(多版本并發控制)
八、間隙鎖與幻讀
間隙鎖(Next-Key鎖)
RR級别下防止幻讀
## 設計模式與實踐
一、OOP五大原則SOLID
單一責任原則
開放封閉原則
裡氏替換原則
依賴倒置原則
接口分離原則
二、設計模式
三、代理模式
定義與舉例
靜态代理
動态代理
JDK動态代理
CGLIB動态代理
四、面向切面程式設計(AOP)
基本思想
登入驗證
基于RBAC的權限管理
角色通路控制(RBAC)
執行流程分析
日志記錄
日志記錄最佳實踐
事務處理
統一異常處理
五、工廠模式
簡單工廠
工廠方法
抽象工廠
六、控制反轉IOC
七、觀察者模式
八、Zookeeper
ZK簡述
存儲結構
znode
znode中的存在類型
應用場景
統一命名服務
負載均衡
統一配置管理
叢集管理
伺服器動态上下線
寫資料流程
Leader選舉
## 資料結構與算法
一、樹
二、BST樹
三、BST樹
四、AVL樹
五、紅黑樹
六、B-樹
七、B+樹
八、字典樹
九、跳表
十、HashMap
簡介
内部實作
存儲結構-字段
功能實作-方法
1.确定哈希桶數組索引位置
2.分析HashMap的put方法
3.擴容機制
線程安全性
十一、ConcurrentHashMap
鎖分段技術
CAS無鎖算法
實作方式
存在的缺點
十二、ConcurrentLinkedQueue
延遲更新tail節點
延遲删除head節點
十三、Topk問題
簡述
解決方案
實際運作
(1)單機+單核+足夠大記憶體
(2)單機+多核+足夠大記憶體
(3)單機+單核+受限記憶體
(4)多機+受限記憶體
經常被提及的該類問題
重複問題
十四、資源池思想
作用
線程池
連接配接池
十五、JVM記憶體管理算法
判斷對象是否存活
引用計數法
可達性分析算法
垃圾回收算法
标記-清除算法(Mark-Sweep)
複制算法(Copying)
标記-整理算法(Mark-Compact)
分代收集算法(GenerationalCollection)
十六、容器虛拟化技術,Doocker思想
為什麼會有docker
docker理念
實作方式
docker的組成
鏡像
容器
倉庫
總結
十七、持續內建、持續釋出,jenkins
持續內建
手動部署
自動部署
## 面試題舉例
一、設計一個分布式環境下全局唯一的發号器
1、UUID
2、資料庫自增長序列或字段
3、資料庫sequence表以及樂觀鎖
4、Redis生成ID
5、Twitter的snowflake算法
二、設計一個帶有過期時間的LRU緩存
問題描述
問題分析
過期時間實作
維護一個線程
惰性删除
三、設計一個分布式鎖
什麼是分布式鎖?
我們需要怎樣的分布式鎖?
基于資料庫做分布式鎖
1、基于樂觀鎖
2、基于悲觀鎖
基于Redis做分布式鎖
1、基于redis的setnx()、expire()方法做分布式鎖
2、基于redis的setnx()、get()、getset()方法做分布式鎖
基于ZooKeeper做分布式鎖
使用分布式鎖的注意事項
分布式可重入鎖的設計
四、設計一個分布式環境下的統一配置中心
配置中心概述
演進中的配置
配置中心之簡版
配置中心之性能改進
配置中心之可用性改進