技術(shù)干貨:嗶哩嗶哩(B站)功能框架圖 ——以B站為例分析面對秋招必須要掌握的前后端
本次夏令營知了堂項目經(jīng)理以B站為原型,帶著大家熟悉了軟件的開發(fā)流程及還原了部分功能模塊?,F(xiàn)在就將B站功能架構(gòu)圖及前后端技術(shù)棧給大家。同時從以B站技術(shù)為例給大家分析作為應(yīng)屆畢業(yè)生,面對秋季校招時必須要掌握的核心技術(shù)知識模塊。

圖一 B站功能架構(gòu)圖
前端篇
前端在前幾年的發(fā)展過程基本上是一個工程化的過程,框架和工程化工具層出不窮。很多人都在追逐框架的道路上越來越累。這兩年,基本趨于平靜,框架方面也形成了三足鼎立的局面,各個框架也在相互借鑒取長補短。那就回歸本質(zhì),想要從事前端這個職業(yè)(或是長遠發(fā)展),還是要注重知識的系統(tǒng)性和基礎(chǔ)的扎實性。
通過企業(yè)的用人需求可以看出,這兩年對于前端人才的技術(shù)的要求變化還是挺大,就拿應(yīng)屆生(成都地區(qū))來說相較于2017年之前,對于技術(shù)的要求都在不斷升級,在要求技術(shù)棧全面性的同時更加看重基礎(chǔ)的扎實程度。
下圖是某公司的前端應(yīng)屆生的招聘要求,可以看出任職資格上基本涵蓋了前端所需技術(shù)棧。

那么反推作為應(yīng)屆生的我們在簡歷上的準備,我們要基本符合企業(yè)用人需求,大概可以以下從2個方面去準備。
一:技術(shù)棧
1. HTML+CSS+JS+bootstrap 網(wǎng)頁的制作(熟練)
2. ECMA5、ES6、JQ 、面向?qū)ο驩OP、閉包等ES高級特性
3. Nodejs+數(shù)據(jù)庫(mongoDB/mysql)服務(wù)端編程
4. Vue/react/angular至少熟悉一種、小程序
5. Webpack工程化項目搭建
6. Git、svn等協(xié)同開發(fā)
二:項目方面
作為應(yīng)屆生至少有2個項目能寫在簡歷里面。并且寫清楚項目功能、項目職責(zé)、所用技術(shù)棧。所以我們最好能動手分析并且用當(dāng)下流行技術(shù)棧實現(xiàn)一個項目。
在這以還原B站(嗶哩嗶哩)為例,去分析一下它的功能和技術(shù),B站作為一個大型彈幕視頻網(wǎng)站,從功能而言,主要就是視頻和彈幕,其中還有廣告,會員,創(chuàng)作等功能,具體的功能組成可以參考(圖一 B站功能架構(gòu)圖)。
在這我們從以下幾個方面來分析,并結(jié)合目前互聯(lián)網(wǎng)公司的項目所采用的技術(shù)架構(gòu)來做一些討論。
因為要完成一個項目,首先要了解及熟悉它的需求。
1、產(chǎn)品性質(zhì)?B站是一個平臺類產(chǎn)品(b2b2c),b端對應(yīng)up主,主要功能就是上傳。c端對應(yīng)觀眾,就是觀看視頻。
2、核心功能?視頻,包含直播+社交,在這我們要了解的技術(shù)就是視頻的上傳, 需要涉及到:
(1) 前端文件上傳,斷點續(xù)傳,
(2) 流媒體播放,本地緩存,
(3) 視頻播放器的編寫,
(4) 核心功能——彈幕等功能
3、性能/安全?相對于B站這種大型視頻網(wǎng)站,肯定需要考慮性能方面的優(yōu)化,從以下幾個點我們可以思考對于技術(shù)的選擇。
(1) 項目框架本身:數(shù)據(jù)量特別大 而頁面本身加載不卡頓,且首頁打開時間應(yīng)該在3秒之內(nèi),所以選擇了目前流行的vue作為前端項目架構(gòu),它就是利用MVVM模式結(jié)合虛擬DOM等技術(shù)來解決數(shù)據(jù)渲染的性能相關(guān)問題。
(2) 多人同時彈幕操作,而視頻或DOM不卡頓。這里會涉及到算法相關(guān)技術(shù)
(3) 同時在線人數(shù)高 同時播放引起的高并發(fā)的問題
當(dāng)然這里面要完整實現(xiàn)B站相關(guān)前端功能,需要從最基礎(chǔ)的網(wǎng)頁布局到頁面懶加載、模塊化編程,前端數(shù)據(jù)分片加載(chunk)等技術(shù)的運用,在學(xué)習(xí)過程中我們應(yīng)該明白我們的目的是什么,然后結(jié)合項目去實戰(zhàn),還有就是要學(xué)會分析項目的業(yè)務(wù)及功能,從而結(jié)合技術(shù)去綜合鍛煉。
后端篇
B站作為一個大型彈幕視頻網(wǎng)站,從功能而言,主要就是視頻和彈幕,其中還有廣告,會員,創(chuàng)作等功能,本次我們主要從視頻和彈幕的技術(shù)為例,來對目前互聯(lián)網(wǎng)中項目架構(gòu)的公用技術(shù)來做一些剖析。
視頻模塊

視頻上傳其實是一個很復(fù)雜的技術(shù),但是歸根到底其實就是對于數(shù)據(jù)流的處理,從最基本的技術(shù)開始,其實就是IO技術(shù)和多線程技術(shù)的使用,服務(wù)器接收到數(shù)據(jù)流進行處理,在這個過程中通過多線程等技術(shù)來提升文件上傳速度;
用戶觀看視頻也是如此,是一個基于數(shù)據(jù)流下載的問題;但是在整個這個過程中,涉及到真正后臺實現(xiàn)要考慮的問題就很多了,比如:
l 內(nèi)容如何快速上傳
l 如何存儲海量內(nèi)容
l 如何對海量內(nèi)容進行處理
l 如何應(yīng)對大量并發(fā)內(nèi)容訪問
l ......
以上其實也就是我們后臺技術(shù)的深入以及一些架構(gòu)演變,這些對應(yīng)的內(nèi)容也是很多互聯(lián)網(wǎng)技術(shù)架構(gòu)中要考慮的技術(shù);
內(nèi)容如何上傳:會考慮到就近上傳,中間會涉及到DNS等技術(shù),上傳的是需要進行格式轉(zhuǎn)碼,加密轉(zhuǎn)碼等,包括斷點續(xù)傳,會涉及到算法等相關(guān)技術(shù);
海量內(nèi)容的存儲:在整個后臺架構(gòu)中就會涉及到數(shù)據(jù)庫系統(tǒng)和文件系統(tǒng)的處理,包括使用我們分布式存儲技術(shù),從mongoDB到fastDFS,再到結(jié)合hadoop系統(tǒng)的使用;
海量內(nèi)容的處理:包括CDN內(nèi)容的分發(fā),多服務(wù)器負載均衡再到搜索引擎elasticsearch的使用等,而大量并發(fā)內(nèi)容的訪問,從服務(wù)分離到緩存等的使用,以上這些技術(shù)都是我們在學(xué)習(xí)Java后臺技術(shù)中會涉及的內(nèi)容。
當(dāng)然,有些技術(shù)是掌握,比如向mongoDB,fastDFS,elasticsearch等 ,是各大系統(tǒng)中都會使用的,應(yīng)用起來也相對簡單;有些技術(shù)是了解,因為需要真實生產(chǎn)環(huán)境大量數(shù)據(jù)的實踐下掌握真正的調(diào)優(yōu)配置以及原理,比如真正的hadoop大數(shù)據(jù)生態(tài)的使用,需要在工作中積累和更加的深入。
彈幕系統(tǒng)模塊

B站的彈幕文化是B站區(qū)別于其他視頻網(wǎng)站的重要特征,可以想象,對于熱點視頻,對于并發(fā)產(chǎn)生的彈幕的技術(shù)支撐也是一個很復(fù)雜的系統(tǒng),B站自己有一套自己優(yōu)化的彈幕系統(tǒng),我們從后臺技術(shù)的角度來理解,其實彈幕就是一個高并發(fā)實時消息系統(tǒng),涉及到大量并發(fā)消息的有序接收后的實時推送,這塊其實我們在進行Java后臺學(xué)習(xí)過程中,會有類似的技術(shù)體系涉及:kafka消息隊列,RabbitMQ消息中間件,都是實現(xiàn)高并發(fā)實時消息系統(tǒng)的一些重要技術(shù)。
所以我們以視頻和彈幕為例,其實可以看到,Java后臺作為一個穩(wěn)定的生態(tài),對于各種互聯(lián)網(wǎng)中的應(yīng)用場景都有一套通用的技術(shù)解決方案,這也是我們在學(xué)習(xí)過程中能夠?qū)W習(xí)的;通過這些通用技術(shù)的學(xué)習(xí),我們可以了解任何一家公司底層架構(gòu)的一些原理,在以后實際工作中進一步提升和完善自己的技術(shù)體系。
作為應(yīng)屆畢業(yè)生,想要從事Java相關(guān)的工作,以下能力要求是大家必須達成的:

本次夏令營活動已結(jié)束,但是我們對大家的就業(yè)服務(wù)將一直持續(xù)……
如果你正面臨著以下難題,可參與知了堂“天府人才內(nèi)推”活動我們將竭力幫助你擺脫
1、技能達不到企業(yè)的需求——缺乏項目經(jīng)驗
2、簡歷撰寫沒有圍繞求職崗位進行,項目經(jīng)驗無法支持求職崗位要求
3、缺乏面試技巧,無法和HR項目經(jīng)理進行交流(答非所問)
4、缺乏簡歷投遞的途徑和渠道資源
5、每次都“掛”在面試題(沒有人幫你梳理解題思路)