日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Day20_学成在线项目就业指导

發(fā)布時間:2024/8/5 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 Day20_学成在线项目就业指导 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1 學(xué)成在線是個什么樣的項目?

1.1 項目背景

受互聯(lián)網(wǎng)+概念的催化,當(dāng)今中國在線教育市場的發(fā)展可謂是百花齊放、如火如荼。 按照市場領(lǐng)域細(xì)分為:學(xué)前教 育、K12教育、高等教育、留學(xué)教育、職業(yè)教育、語言教育、興趣教育以及綜合平臺,其中,職業(yè)教育和語言教育 的市場優(yōu)勢突出。 根據(jù)Analysys易觀發(fā)布的數(shù)據(jù)顯示,預(yù)計2019年中國互聯(lián)網(wǎng)教育市場交易規(guī)模將達(dá)到3718億元 人民幣,未來三年互聯(lián)網(wǎng)教育市場規(guī)模保持高速增長。

學(xué)成在線借鑒了MOOC(大型開放式網(wǎng)絡(luò)課程,即MOOC(massive open online courses))的設(shè)計思想,是一 個提供IT職業(yè)課程在線學(xué)習(xí)的平臺,它為即將和已經(jīng)加入IT領(lǐng)域的技術(shù)人才提供在線學(xué)習(xí)服務(wù),用戶通過在線學(xué) 習(xí)、在線練習(xí)、在線考試等學(xué)習(xí)內(nèi)容,最終掌握所學(xué)的IT技能,并能在工作中熟練應(yīng)用。

當(dāng)前市場的在線教育模式多種多樣,包括:B2C、C2C、B2B2C等業(yè)務(wù)模式,學(xué)成在線采用B2B2C業(yè)務(wù)模式,即向 企業(yè)或個人提供在線教育平臺和學(xué)生完成教學(xué)活動,市場上類似的平臺有:網(wǎng)易云課堂、騰訊課堂等,學(xué)成在線的 特點(diǎn)是IT職業(yè)課程在線教學(xué)。

1.2 項目的功能模塊

學(xué)成在線是一個在線教育平臺,提供IT職業(yè)課程在線學(xué)習(xí),平臺包括:門戶、學(xué)習(xí)中心、教學(xué)管理中心、系統(tǒng)管理 中心、社交系統(tǒng)等子系統(tǒng)。

項目的功能架構(gòu)如下圖:

門戶是整個平臺的入口,功能包括:門戶首頁、注冊/登錄、課程搜索、職業(yè)規(guī)劃,客服等。

學(xué)習(xí)中心為用戶提供在線學(xué)習(xí)服務(wù),包括:我的課程、視頻點(diǎn)播、視頻直播、在線考試、在線答疑、學(xué)習(xí)統(tǒng)計等功 能;

教學(xué)管理中心為教育機(jī)構(gòu)或個人講師提供教學(xué)管理功能,包括:課程管理、媒資管理、考試管理、問答管理等功 能;

系統(tǒng)管理中心提供系統(tǒng)參數(shù)配置、CMS、數(shù)據(jù)字典、分類管理等功能。

1.3 項目的技術(shù)架構(gòu)

項目采用前后端分離的技術(shù)架構(gòu),前端采用vue.js技術(shù)棧,服務(wù)端采用SpringBoot、SpringCloud等Spring全家桶 技術(shù)棧。

具體見問題2.

2 項目采用什么技術(shù)架構(gòu)?

項目采用前后端分離的技術(shù)架構(gòu),前端采用vue.js構(gòu)建,服務(wù)端采用Spring Cloud微服務(wù)架構(gòu),系統(tǒng)分為用戶層、 CDN、負(fù)載均衡、前端UI、微服務(wù)層、數(shù)據(jù)層、接口層及DevOps等部分組成,下圖是完整的技術(shù)架構(gòu)圖:

業(yè)務(wù)流程舉例:

1、用戶可以通過pc、手機(jī)等客戶端訪問系統(tǒng)進(jìn)行在線學(xué)習(xí)。

2、 系統(tǒng)應(yīng)用CDN技術(shù),對一些圖片、CSS、視頻等資源從CDN調(diào)度訪問。

3、所有的請求全部經(jīng)過負(fù)載均衡器。

4、對于PC、H5等客戶端請求,首先請求UI層,渲染用戶界面。

5、客戶端UI請求服務(wù)層獲取進(jìn)行具體的業(yè)務(wù)操作。

6、服務(wù)層將數(shù)據(jù)持久化到數(shù)據(jù)庫。

下圖是技術(shù)架構(gòu)簡圖:

1、用戶層

用戶層描述了本系統(tǒng)所支持的客戶端用戶有哪些,本項目目前為各用戶提供服務(wù),包括H5、PC、Android和IOS 等。

2 、CDN全稱Content Delivery Network,即內(nèi)容分發(fā)網(wǎng)絡(luò),本系統(tǒng)所有靜態(tài)資源全部通過CDN加速來提高訪問速 度。系統(tǒng)靜態(tài)資源包括:html頁面、js文件、css文件、image圖片、pdf和ppt及doc教學(xué)文檔、video視頻等。

3 、負(fù)載均衡系統(tǒng)的CDN層、UI層、服務(wù)層及數(shù)據(jù)層均設(shè)置了負(fù)載均衡服務(wù),系統(tǒng)采用LVS+Nginx實現(xiàn)負(fù)載均衡均 衡。

4、 UI層

UI層描述了系統(tǒng)向pc用戶、app用戶、h5用戶提供的產(chǎn)品界面。本項目在PC和H5端采用vue.js+elementUI 實現(xiàn)。

5、 微服務(wù)層將系統(tǒng)服務(wù)分類三類:前端服務(wù)、后端服務(wù)及系統(tǒng)服務(wù)。

前端服務(wù):主要為學(xué)習(xí)用戶提供學(xué)習(xí)服務(wù)。

后端服務(wù):主要為管理用戶提供教學(xué)管理服務(wù)。

系統(tǒng)服務(wù):公共服務(wù),為系統(tǒng)的所有微服務(wù)提供公共服務(wù)功能。

6、外部系統(tǒng)接口 包括如下接口:

1)第三方登錄接口,如QQ、微博、微信等。

2)支付寶、微信支付接口

3)短信接口 (阿里大于)

4)郵件接 口,通過smpt郵件服務(wù)器對外發(fā)送電子郵件。

5)微信公眾號

6)點(diǎn)播、直播。

7)OSS存儲

8)CDN,使用最里 云CDN服務(wù)加速視頻訪問速度。

7、DevOps提供了本系統(tǒng)開發(fā)、運(yùn)營、維護(hù)支撐的系統(tǒng),包括如下內(nèi)容:

Eureka服務(wù)治理中心:提供服務(wù)治理服務(wù),包括:服務(wù)注冊、服務(wù)獲取等。

Docker容器化部署服務(wù):將本系統(tǒng)所有服務(wù)采用容器化部署方式。

Maven項目管理工具:提供管理項目所有的Java包依賴、項目工程打包服務(wù)。

Git/GitLab代碼管理服務(wù):提供git代碼管理服務(wù)。

Spring Boot Admin服務(wù)健康監(jiān)控:監(jiān)控微服務(wù)的健康狀態(tài)、會話數(shù)量、并發(fā)數(shù)等。

2.1 微服務(wù)技術(shù)棧

所有微服務(wù)基于Spring Boot、Spring Cloud構(gòu)建

1)控制層:

Spring MVC、Spring Security Oauth2 、Swagger

2)業(yè)務(wù)層:

事務(wù)控制:Spring

任務(wù)處理:Spring Task

數(shù)據(jù)緩存:Spring Data Redis

消息隊列:Spring RabbitTemplate

搜索: Elasticsearch

持久層:

操作MySQL:MyBatis、com.alibaba.druid(采用druid-spring-boot-starter)Spring Data Jpa 操作MongoDB:Spring Data Mongodb

數(shù)據(jù)層,采用MySQL和MongoDb存儲數(shù)據(jù),MySQL存儲用戶、課程等系統(tǒng)核心信息,MongoDb存儲 cms、配置信息等

2.2 接口定義規(guī)范

項目架構(gòu)設(shè)立接口層,接口層使用swagger注解描述接口的內(nèi)容,接口定義規(guī)范如下:

1、請求

get 請求時,前端請求key/value串,SpringMVC采用基本數(shù)據(jù)類型(String、Integer等)或自定義類型接收。

Post請求時,前端請F(tuán)orm表單數(shù)據(jù)(application/x-www-form-urlencoded)和Json數(shù)據(jù)(Content-Type=application/json)、多部件類型數(shù)據(jù)(multipart/form-data),對于Json數(shù)據(jù)SpringMVC使用 @RequestBody注解解析請求的json數(shù)據(jù)。

2、響應(yīng)

響應(yīng)結(jié)果統(tǒng)一信息為:是否成功、操作代碼、提示信息及自定義數(shù)據(jù)。

響應(yīng)結(jié)果統(tǒng)一格式為json。

2.3 注冊中心

兩臺Eureka Server互相注冊,組成高可用。

微服務(wù)向Eureka Server注冊自己,并在遠(yuǎn)程調(diào)用時從微服務(wù)發(fā)現(xiàn)目標(biāo)服務(wù)地址。

微服務(wù)遠(yuǎn)程調(diào)用采用客戶端負(fù)載均衡技術(shù),使用Feign Client。

2.4 網(wǎng)關(guān)

網(wǎng)關(guān)的作用是負(fù)載均衡、路由轉(zhuǎn)發(fā)、請求過過濾等。

項目中網(wǎng)關(guān)與Nginx配合使用。

2.5 項目使用Spring了嗎?用了它的哪些東西?

項目是基于Spring進(jìn)行構(gòu)建的:

1、所有的微服務(wù)開發(fā)采用Spring Boot開發(fā)

2、數(shù)據(jù)層使用Spring Data JPA、Spring Data MongoDB、Spring Data redis

3、業(yè)務(wù)層使用Spring來控制本地事務(wù),還使用了Spring Task任務(wù)調(diào)度框架、Spring AMQP組件等。

4、控制層使用SpringMVC、Sprnig Security Oauth2。

5、微服務(wù)管理使用Spring Cloud的Eureka注冊中心,微服務(wù)之間調(diào)用使用Ribbon和Feign Client完成。

6、使用Zuul網(wǎng)關(guān)完成微服務(wù)安全驗證

2.6 Spring Cloud是怎么使用的?

此問題通常是在回答了項目的技術(shù)架構(gòu)后被問及,根據(jù)具體的使用Spring Cloud完成微服務(wù)開發(fā)的步驟來回答即 可。

1、每個微服務(wù)使用Spring Boot開發(fā),每個微服務(wù)工程包括了web、service、dao三層,這和開發(fā)一般的項目沒有 區(qū)別:

a、web層使用Spring MVC實現(xiàn),對外暴露API接口給前端調(diào)用。

b、service層就是根據(jù)業(yè)務(wù)邏輯編寫JavaBean,并使用Spring的聲明式事務(wù)控制方式來控制事務(wù)。

c、dao層就是數(shù)據(jù)訪問接口,來訪問MySQL和Mongodb,訪問MySQL使用Spring Data JPA和Mybatis,訪問 mongodb使用Spring data mongodb。

2、微服務(wù)開發(fā)完成要向Eureka注冊中心注冊,以便被其它微服務(wù)查找和訪問。

3、微服務(wù)與微服務(wù)之間使用feign來調(diào)用,feign Client具有負(fù)載均衡的作用。只需要在接口上聲明@FeignClient注解,Spring底層會產(chǎn)生動態(tài)代理對象,使用ribbon客戶端完成調(diào)用。

4、前端訪問微服務(wù)需要通過網(wǎng)關(guān),網(wǎng)關(guān)使用Nginx和Zuul來實現(xiàn),Nginx是最前邊的負(fù)載均衡,通過Nginx之后便 到達(dá)了Zuul,項目中Zuul的功能是過慮用戶請求,判斷用戶身份,對于一些對外公開的微服務(wù)則需要經(jīng)過Zuul,直接通過Nginx負(fù)載均衡即可訪問。

2.7 Spring Data JPA 和 MyBatis為什么兩個都用?具體怎么用的?

此問題是考察對數(shù)據(jù)訪問接口的使用程度。

項目中使用Spring Data JPA和MyBatis都是用來訪問MySQL,但是它們的分工不同:

Spring Data JPA是Spring 提供的一套JPA接口,使用Spring Data JPA主要完成一些簡單的增、刪、改、查功能。

對于復(fù)雜的查詢功能會使用MyBatis編寫SQL語言來實現(xiàn),因為使用Spring Data JPA來做一些復(fù)雜的查詢是沒有 MyBatis方便的,Spring Data JPA是面向的對象,而MyBatis直接面向SQL語句。

2.8 什么雪崩?如何解決?

容錯保護(hù)是指微服務(wù)在執(zhí)行過程中出現(xiàn)錯誤并從錯誤中恢復(fù)的能力。微服務(wù)容錯性不好很容易導(dǎo)致雪崩效應(yīng),什么 是雪崩效應(yīng)?摘自百度百科中的定義:

微服務(wù)的雪崩效應(yīng)表現(xiàn)在服務(wù)與服務(wù)之間調(diào)用,當(dāng)其中一個服務(wù)無法提供服務(wù)可能導(dǎo)致其它服務(wù)也死掉,比如:單 點(diǎn)登錄服務(wù)調(diào)用用戶信息服務(wù)查詢用戶信息,由于用戶信息服務(wù)無法提供服務(wù)導(dǎo)致單點(diǎn)登錄服務(wù)一直等待,從而導(dǎo) 致用戶登錄、用戶退出功能無法使用,像這樣由一個服務(wù)所引起的一連串的多個服務(wù)無法提供服務(wù)即是微服務(wù)的雪 崩效應(yīng)。

Spring Cloud Hystrix 是基于Net?ix的開源框架Hystrix的整合,它實現(xiàn)了斷路保護(hù)、線程隔離、信號隔離等容錯

功能。

斷路保護(hù):

斷路保護(hù)就類似家庭電路中的保險絲,當(dāng)電路過載時保險絲會自動切斷,保護(hù)整個電路的安全。微服務(wù)的斷路保護(hù) 的工作原理是當(dāng)請求微服務(wù)失敗的數(shù)量達(dá)到一定比例時會切換為開路狀態(tài),當(dāng)請求微服務(wù)時就直接返回結(jié)果不再請 求微服務(wù),當(dāng)保持開路狀態(tài)一段時間后判斷微服務(wù)是否可以正常請求,如果正常則切換到半開路狀態(tài),最后切換到 哪閉路狀態(tài)。

具體的操作方法可以采用 Fallback,會每個FeignClient方法調(diào)用Fallback,當(dāng)出現(xiàn)開路則調(diào)用Fallback方法返回錯 誤結(jié)果。

線程隔離:

調(diào)用微服務(wù)使用不同的線程池,線程池之間互不影響,即使某個服務(wù)不可用也不影響其它服務(wù)的調(diào)用,比如:對商 品服務(wù)的調(diào)用使用一個線程池,對用戶服務(wù)的調(diào)用使用另一個線程池,即使用戶服務(wù)不可用也不影響商品服務(wù)的調(diào) 用。

2.9 視圖層用什么技術(shù)實現(xiàn)?

此問題問的較模糊,沒有問是客戶端的視圖還是服務(wù)端的視圖,所以此問題不光是視圖技術(shù)還是考察你對前后端分 離的理解。

1、視圖層在前端和服務(wù)端都存在。

2、前端視圖采用vue.js+elementUI產(chǎn)品界面。

3、服務(wù)端都是暴露的rest接口,統(tǒng)一用json展示數(shù)據(jù)。

2.10 接口是怎么定義的?采用什么數(shù)據(jù)格式?如何實現(xiàn)?

本問題考察前后端分離開發(fā)中接口定義技能。

1、接口定義

使用 SpringMVC編寫Controller方法,對外暴露Http接口,在Controller方法上使用RequestMapping、 PostMapping、GetMapping等注解定義Http接口。

2、采用什么數(shù)據(jù)格式?

分別說明請求和響應(yīng):

請求:

get 請求時,前端請求key/value串,SpringMVC采用基本數(shù)據(jù)類型(String、Integer等)或自定義類型接收。

Post請求時,前端請F(tuán)orm表單數(shù)據(jù)(application/x-www-form-urlencoded)和Json數(shù)據(jù)(Content-Type=application/json)、多部件類型數(shù)據(jù)(multipart/form-data),對于Json數(shù)據(jù)SpringMVC使用 @RequestBody注解解析請求的json數(shù)據(jù)。

響應(yīng):

統(tǒng)一響應(yīng)json格式。

3、如何實現(xiàn)的?

json格式數(shù)據(jù)SpringMVC采用FastJson解析為對象。

非json格式數(shù)據(jù)SpringMVC提供參數(shù)綁定的方法,將key/value或Form-Data數(shù)據(jù)轉(zhuǎn)換為對象或基本數(shù)據(jù)類型的變 量。

3 前后端開發(fā)時具體流程是什么?

前后端分離開發(fā)模式在互聯(lián)網(wǎng)公司最常見,特別是一些大型的互聯(lián)網(wǎng)公司,但是一些傳統(tǒng)的軟件開發(fā)企業(yè)仍然是采 用傳統(tǒng)開發(fā)模式,此問題被問及是考察你有沒有真正體會前端開發(fā)的好處。

1、前端與后端開發(fā)人員討論確定接口。

接口討論通過,形成接口文檔 。

本項目專門設(shè)立一個api工程,在此工程定義接口,Spring Boot 集成Swagger,生成Swagger接口,前后端開發(fā) 人員通過html查看接口文檔的內(nèi)容。

2、前端與后端開發(fā)人員按照接口文檔進(jìn)行開發(fā)。

開發(fā)過程中各自進(jìn)行單元測試。

前端人員怎么進(jìn)行單元測試?

前端人員可以通過一些工具生成一些模擬數(shù)據(jù),比如:EasyMock。

有興趣的同學(xué)可自行查閱資料研究。

3、雙方功能開發(fā)完成進(jìn)行前后端聯(lián)調(diào)。

閱讀:https://github.com/phodal/fe/blob/master/chapters/chapter-13.md

3.1 前端采用什么技術(shù)棧?

前端工程大多為單頁面應(yīng)用(SPA),采用vue.js框架開發(fā),搜索功能前端采用nuxt.js服務(wù)端渲染(SSR)框架開 發(fā)。

技術(shù)棧包括:

1、node.js 2、vue.js 3、npm/cnpm 4、webpack 5、axios 6、nuxt.js

4 CMS頁面管理

CMS (Content Management System)即內(nèi)容管理系統(tǒng),本項目對CMS系統(tǒng)的定位是對各各網(wǎng)站(子站點(diǎn))頁 面的管理,本項目的CMS系統(tǒng)不去管理每個子網(wǎng)站的全部資源,比如:圖片、CSS、html頁面等,主要管理由于運(yùn) 營需要而經(jīng)常變動的頁面,從而滿足根據(jù)運(yùn)營需要快速開發(fā)、上線的需求。

功能包括:

1、站點(diǎn)管理,站點(diǎn)就是本項目各各子網(wǎng)站,站點(diǎn)信息包括:站點(diǎn)名稱、站點(diǎn)域名、端口、服務(wù)器物理路徑等

2、模板管理,由于要對頁面進(jìn)行靜態(tài)化,使用freemarker引擎技術(shù),所以需要定義模板。

3、頁面管理,包括:頁面添加、頁面修改、頁面刪除等操作。

4、頁面預(yù)覽,對頁面靜態(tài)化,在瀏覽器預(yù)覽頁面靜態(tài)化內(nèi)容。

5、頁面發(fā)布,將頁面靜態(tài)化后發(fā)布到所屬站點(diǎn)服務(wù)器。

4.1 GirdFS是什么?工作原理是什么?如何使用?

GridFS是MongoDB提供的用于持久化存儲文件的模塊,它可以作為分布式文件系統(tǒng)使用,CMS子系統(tǒng)將頁面文 件、模板文件存儲到GridFS中,由于本項目使用MongoDB,選用GridFS可以快速集成開發(fā)。

它的工作原理是:

在GridFS存儲文件是將文件分塊存儲,文件會按照256KB的大小分割成多個塊進(jìn)行存儲,GridFS使用兩個集合 (collection)存儲文件,一個集合是chunks, 用于存儲文件的二進(jìn)制數(shù)據(jù);一個集合是?les,用于存儲文件的元數(shù) 據(jù)信息(文件名稱、塊大小、上傳時間等信息)。

從GridFS中讀取文件要對文件的各各塊進(jìn)行組裝、合并。

使用方法是:

使用Spring data mongodb包下提供的GridFsTemplate訪問GirdFS。

gridFsTemplate.findone() 查詢文件
gridFsTemplate.delete() 刪除文件
gridFsTemplate.store()存儲文件

4.2 MQ 是怎么使用的?

1、平臺包括多個站點(diǎn),頁面歸屬不同的站點(diǎn),需求是發(fā)布一個頁面應(yīng)將該頁面發(fā)布到所屬站點(diǎn)的服務(wù)器上。

2、每個站點(diǎn)服務(wù)部署CMS Client程序,并與交換機(jī)綁定,綁定時指定站點(diǎn)Id為routingKey。 指定站點(diǎn)id為routingKey就可以實現(xiàn)cms client只能接收到所屬站點(diǎn)的頁面發(fā)布消息。

3、頁面發(fā)布程序向MQ發(fā)布消息時指定頁面所屬站點(diǎn)Id為routingKey,根據(jù)routingKey將消息發(fā)給指定的 CMS Client。

4.3 頁面發(fā)布的結(jié)果如何收集?

每次發(fā)布會在數(shù)據(jù)庫記錄發(fā)布日志,每個CMS Client完成頁面發(fā)布會上報發(fā)布結(jié)果。

1、在站點(diǎn)管理中配置了每個站點(diǎn)的服務(wù)器信息

2、在每次發(fā)布頁面時會記錄發(fā)布日志(服務(wù)器ID、頁面ID、頁面名稱、發(fā)布結(jié)果)

3、CMS Client完成頁面發(fā)布后會向數(shù)據(jù)上報發(fā)布結(jié)果。

4、用戶通過查詢發(fā)布日志表的信息就可以知道每一次的發(fā)布結(jié)果(哪些服務(wù)器頁面發(fā)布成功,哪些發(fā)布失敗)。

5 課程管理

5.1 為什么用多張表存儲課程信息?

1、課程信息比較復(fù)雜,為了方便教學(xué)機(jī)構(gòu)按步驟管理課程信息,并且也可以劃分權(quán)限管理課程信息,將課程信息 管理功能分為課程基本信息管理、課程圖片管理、課程營銷信息管、課程計劃管理等模塊。

2、將課程信息分開也是為了系統(tǒng)擴(kuò)展需要,如果將課程所有信息存儲在一張表中將不利于系統(tǒng)擴(kuò)展。

5.2 課程圖片是如何管理的?

見問題“圖片服務(wù)器”。

6 媒資管理

每個教學(xué)機(jī)構(gòu)都可以在媒資系統(tǒng)管理自己的教學(xué)資源,包括:視頻、教案等文件。

媒資管理的主要管理對象是課程錄播視頻,包括:媒資文件的查詢、視頻上傳、視頻刪除、視頻處理等。

媒資查詢:教學(xué)機(jī)構(gòu)查詢自己所擁有的媒體文件。

視頻上傳:將用戶線下錄制的教學(xué)視頻上傳到媒資系統(tǒng)。

視頻處理:視頻上傳成功,系統(tǒng)自動對視頻進(jìn)行編碼處理。

視頻刪除 :如果該視頻已不再使用,可以從媒資系統(tǒng)刪除。

6.1 如何上傳大文件?

前端使用WebUploader將文件分塊,調(diào)用服務(wù)端分塊上傳接口上傳分塊文件,分塊上傳完畢前端請求服務(wù)端進(jìn)行 合并,當(dāng)上傳過程中斷再次進(jìn)行上傳時服務(wù)端判斷分塊是否已經(jīng)上傳,已經(jīng)上傳的分塊不再重新上傳。

6.2 如何進(jìn)行視頻處理?

上圖所示,Java程序調(diào)用?mpeg及流媒體程序員提供的視頻處理類庫(C程序)完成avi、mp4視頻轉(zhuǎn)成m3u8格式 的視頻。

Java程序使用Jdk提供的Process Builder調(diào)用?mpeg及C程序進(jìn)行視頻處理。

Process Builder可以調(diào)用第三方程序,在java程序運(yùn)行時啟動第三方程序進(jìn)程。

視頻處理完成,Java程序捕獲第三方程序的輸出日志,解析出視頻處理完成標(biāo)記,更新視頻處理狀態(tài)為已完成。

6.3 CDN 內(nèi)容分發(fā)是什么?

視頻處理完成會在中心媒體服務(wù)器保存一份,另外通過CDN程序?qū)⒁曨l發(fā)布到邊緣媒體服務(wù)器,用戶點(diǎn)播視頻通 過CDN請求邊緣媒體服務(wù)器中的視頻,提高了視頻播放速度。

具體使用的是第三方公司的CDN服務(wù)。

7 搜索

項目中課程搜索采用ElasticSearch來完成。

實現(xiàn)方法是:

1、使用 Logstash(logstash是ES下的一款開源軟件,它能夠同時 從多個來源采集數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù))將MySQL中 的課程信息讀取到ES中創(chuàng)建索引,使用IK分詞器進(jìn)行分詞。

2、使用 Java High Level REST Client完成搜索。

3、生產(chǎn)環(huán)境使用ES部署為集群。

8 圖片服務(wù)器

本項目采用fastDFS分布式系統(tǒng)作為圖片服務(wù)器。

FastDFS是用c語言編寫的一款開源的分布式文件系統(tǒng),適合小文件的存儲。

FastDFS包括 Tracker server和Storageserver。客戶端請求Tracker server進(jìn)行文件上傳、下載,通過Tracker server調(diào)度向Storage server完成文件上傳和下載。

使用FastDSF官方提供的Java API實現(xiàn)。

圖片服務(wù)使用Nginx作為代理服務(wù)器,對Storage上部署的Nginx完成負(fù)載均衡請求。

8.1 使用FastDFS的好處是什么?

FastDFS相比其它的分布式文件系統(tǒng)它適用小文件存儲,它不對文件進(jìn)行分塊存儲,也不用對文件進(jìn)行合并處理, 所以性能比GFS、HDFS等通用文件系統(tǒng)的性能要高。

8.2 圖片上傳流程?

執(zhí)行流程如下:

1、管理員進(jìn)入教學(xué)管理前端,點(diǎn)擊上傳圖片

2、圖片上傳至文件系統(tǒng)服務(wù),文件系統(tǒng)請求fastDFS上傳文件

3、文件系統(tǒng)將文件入庫,存儲到文件系統(tǒng)服務(wù)數(shù)據(jù)庫中

4、文件系統(tǒng)服務(wù)向前端返回文件上傳結(jié)果,如果成功則包括文件的Url路徑

5、課程管理前端請求課程管理進(jìn)行保存課程圖片信息到課程數(shù)據(jù)庫

6、課程管理服務(wù)將課程圖片保存在課程數(shù)據(jù)庫

8.3 FastDFS 支持?jǐn)帱c(diǎn)續(xù)傳嗎?

FastDFS支付斷點(diǎn)續(xù)傳,在Api中有append_?le1方法就是用來實現(xiàn)斷點(diǎn)續(xù)傳的,本項目沒有使用FastDFS的斷點(diǎn)續(xù) 傳功能。

9 認(rèn)證授權(quán)是如何實現(xiàn)的?

本項目采用 Spring security + Oauth2完成用戶認(rèn)證及用戶授權(quán)。認(rèn)證授權(quán)流程如下:

1、用戶請求認(rèn)證服務(wù)完成身份認(rèn)證。

2、認(rèn)證服務(wù)下發(fā)用戶身份令牌和JWT令牌,擁有身份令牌表示身份合法,Jwt令牌用于完成授權(quán)。

3、用戶攜帶jwt令牌請求資源服務(wù)。

4、網(wǎng)關(guān)校驗用戶身份令牌的合法,不合法表示用戶沒有登錄,如果合法則放行繼續(xù)訪問。

5、資源服務(wù)獲取jwt令牌,根據(jù)jwt令牌完成授權(quán)。

10 事務(wù)是怎么控制的?用到分布式事務(wù)控制了嗎?如何做的?

此問題考察對事務(wù)的理解和應(yīng)用程度。

1、在微服務(wù)中使用Spring 聲明式事務(wù)控制方式進(jìn)行控制,在Service方法上添加@Transctional注解即可實現(xiàn)事務(wù) 控制,它控制的是MySQL的本地事務(wù)。

2、項目中大量存在分布式事務(wù)控制,比如下單支付、課程發(fā)布等地址都用到了分布式事務(wù)。

本項目實現(xiàn)分布式事務(wù)控制實現(xiàn)最終數(shù)據(jù)一致性,做法是:

a、將分布式事務(wù)拆分為多個本地事務(wù)。

b、提交事務(wù)前每個參與者要通過數(shù)據(jù)校驗,和資源預(yù)留。

c、由消息隊列去通知多個事務(wù)參與者完成本地事務(wù)的提交。

d、提交失敗的本地事務(wù)會重試。

11 一個接口出現(xiàn)Bug你是怎么調(diào)試的?

1、接口的開發(fā)需要前端和服務(wù)端共同調(diào)試,要仔細(xì)閱讀測試人員反映的bug信息,判斷這個bug是服務(wù)端的bug還 是前端的bug。通常服務(wù)接口開發(fā)完成會使用postman工具進(jìn)行測試,測試沒有問題再提交到Git或SVN。

2、找到bug的出錯點(diǎn)就可以根據(jù)bug信息進(jìn)行修改。

3、修改完成需要前后端再次連調(diào)測試,按照測試人員提交的測試流程重新進(jìn)行測試,測試通過將此bug置為已解 決。

12 做過支付接口嗎?你是如何做的?遇到什么問題嗎?

根據(jù)自己的實際情況回答是否做過。

如果做過支付接口則要回答實現(xiàn)過程:

1、系統(tǒng)中收費(fèi)的課程需要用戶在線支付,支付接口采用微信的掃碼支付。

2、拿到需求后,確定使用微信支付,首先去閱讀微信的接口文檔,這里重點(diǎn)閱讀統(tǒng)一下單、支付結(jié)果通知、支付 結(jié)果查詢?nèi)齻€接口。

3、下載官方提供的sdk編寫單元測試用例測試每個接口。測試時沒有使用微信的沙箱測試,直接使用正式接口,我 們將金額改的小一些進(jìn)行測試。

4、單元測試通過后開發(fā)整個支付功能,最終集成測試通過。

根據(jù)自己的實際情況回答開發(fā)中遇到的問題:

例子:

接口參數(shù)的簽名問題,當(dāng)時是因為自己沒有仔細(xì)看接口文檔導(dǎo)致少寫一個必填參數(shù)一直報簽名失敗,隨后將所有必 填參數(shù)填寫完成,最終解決問題。

13系統(tǒng)的異常是怎么處理的?

系統(tǒng)對異常的處理使用統(tǒng)一的異常處理流程。

1、自定義異常類型。

2、自定義錯誤代碼及錯誤信息。

3、對于可預(yù)知的異常由程序員在代碼中主動拋出自定義異常類型的異常,拋出異常時需要指定錯誤代碼。

4、對于不可預(yù)知的異常(運(yùn)行時異常)由SpringMVC統(tǒng)一捕獲Exception類型的異常,由統(tǒng)一的異常捕獲類來解析 處理,并轉(zhuǎn)換為與自定義異常類型一致的信息格式(錯誤代碼+錯誤信息)。

5、可預(yù)知的異常及不可預(yù)知的運(yùn)行時異常最終會采用統(tǒng)一的信息格式(錯誤代碼+錯誤信息)來表示,最終也會隨 請求響應(yīng)給客戶端。

14 使用消息隊列了嗎?如何使用的?有哪些應(yīng)用場景?

項目使用RabbitMQ消息隊列。

RabbitMQ提供很多的工作模式,如下:

1、Work queues 2、Publish/Subscribe 3、Routing 4、Topics 5、Header 6、RPC

項目主要使用了Routing模式。

Routing模式即路由模式,使用方法是:

1、每個消費(fèi)者監(jiān)聽自己的隊列,并且設(shè)置routingkey。

2、生產(chǎn)者將消息發(fā)給交換機(jī),由交換機(jī)根據(jù)routingkey來轉(zhuǎn)發(fā)消息到指定的隊列。

有哪些應(yīng)用場景?

1 、任務(wù)異步處理。

將不需要同步處理的并且耗時長的操作由消息隊列通知消息接收方進(jìn)行異步處理。提高了應(yīng)用程序的響應(yīng)時間。

2、應(yīng)用程序解耦合

MQ相當(dāng)于一個中介,生產(chǎn)方通過MQ與消費(fèi)方交互,它將應(yīng)用程序進(jìn)行解耦合。

15 視頻點(diǎn)播功能是怎么實現(xiàn)的?

本項目采用 HLS 技術(shù)實現(xiàn)視頻點(diǎn)播。

1、使用FFmpeg對視頻進(jìn)行編碼處理,生成m3u8文件及ts文件。

2、使用Nginx作為媒體服務(wù)器。

3、客戶端使用video.js播放視頻。

16 你在開發(fā)中遇到什么問題?是怎么解決的?

此問題考察開發(fā)人員的問題描述及問題解決能力,可列舉開發(fā)中實際的技術(shù)問題。

回答此問題要從兩個方面來回答:

1、問題的描述

2、問題的解決方案

例子:

在處理訂單時要用到定時任務(wù),當(dāng)時采用的是Spring Task來完成,由于一個訂單服務(wù)會部署多個,多個訂單服務(wù) 同時去處理任務(wù)會造成任務(wù)被重復(fù)處理的情況,如何解決任務(wù)的重復(fù)處理。

解決:

采用樂觀鎖解決,在任務(wù)表中設(shè)置一個version字段記錄版本號,取出任務(wù)記錄同時拿到任務(wù)的版本號,執(zhí)行前對 任務(wù)進(jìn)行鎖定,具體的做法是執(zhí)行update根據(jù)當(dāng)前版本號將版本號加1,update成功表示鎖定任務(wù)成功,即可開始執(zhí)行任務(wù)。

總結(jié)

以上是生活随笔為你收集整理的Day20_学成在线项目就业指导的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。