久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

SpringBoot+Vue前后端分離在線教育平臺管理系統(tǒng)實戰(zhàn)

SpringBoot+Vue前后端分離在線教育平臺管理系統(tǒng)實戰(zhàn) 做在線教育平臺管理系統(tǒng)這個項目是我把SpringBootVue這套前后端分離架構(gòu)完整跑通的一次實戰(zhàn)。整套代碼覆蓋了在線教育后臺最核心的幾條業(yè)務(wù)鏈課程管理、講師信息維護、學(xué)員學(xué)習(xí)記錄、后臺賬號權(quán)限、訂單報名數(shù)據(jù)。技術(shù)棧很固定SpringBoot做后端服務(wù)MyBatis負(fù)責(zé)持久層SQLMySQL存業(yè)務(wù)數(shù)據(jù)前端用Vue寫管理界面。這篇文章不打算寫那種面面俱到的官方文檔而是從實際落地角度把架構(gòu)拆分、數(shù)據(jù)庫設(shè)計、核心接口實現(xiàn)、踩坑記錄這幾塊講透。適合正在做畢業(yè)設(shè)計、準(zhǔn)備面試項目、或者想從零把一套在線教育后臺跑起來的開發(fā)者參考。1. 項目到底解決了什么問題1.1 在線教育系統(tǒng)的核心需求拆解很多人第一次拿到在線教育平臺這種需求第一反應(yīng)是“不就是課程列表加個播放器嗎”。真做起來就發(fā)現(xiàn)后臺管理系統(tǒng)的復(fù)雜度遠(yuǎn)高于前臺展示頁。在線教育平臺的管理后臺至少需要覆蓋這幾個角色和場景管理員要能夠維護課程上下架、審核講師入駐、查看平臺運營數(shù)據(jù)。講師需要上傳課程章節(jié)、管理題庫、布置作業(yè)、查看自己負(fù)責(zé)班級的學(xué)習(xí)情況。學(xué)員則需要查看已購課程、記錄學(xué)習(xí)進度、完成章節(jié)測試。如果再往復(fù)雜了說還有優(yōu)惠券、直播課、班級分組、多校區(qū)權(quán)限但最核心的底座永遠(yuǎn)是課程和用戶兩條線。我做的這個系統(tǒng)核心定位是后臺管理端加簡單的學(xué)員端查詢能力。把“課程維護—講師管理—學(xué)員管理—學(xué)習(xí)記錄”這條主鏈路打通。為什么要先做后臺而不是前臺因為在線教育平臺的真實瓶頸幾乎都出在內(nèi)容維護和權(quán)限控制上。前臺頁面再花哨后臺如果連課程上下架、講師角色權(quán)限都理不清楚業(yè)務(wù)根本跑不起來。需求梳理階段我習(xí)慣把功能拆成“必須要有”和“有了更好”兩類。必須有的用戶登錄注冊、角色權(quán)限、課程分類、課程與章節(jié)管理、講師資料維護、學(xué)員學(xué)習(xí)進度記錄??梢院笱a的直播互動、課程評論、積分系統(tǒng)、數(shù)據(jù)報表大屏。這套系統(tǒng)在初版把“必須有”的做扎實后續(xù)擴展時再往上面加模塊結(jié)構(gòu)不會亂。1.2 為什么選SpringBootVueMyBatis這套組合說句實在話在線教育管理系統(tǒng)這種CRUD密集型業(yè)務(wù)用很多技術(shù)棧都能做。但選SpringBootVueMyBatisMySQL不是跟風(fēng)而是這套組合在“開發(fā)效率、維護成本、上手難度”三個維度上非常均衡。SpringBoot解決的是后端基礎(chǔ)設(shè)施的繁瑣問題。以前用Spring MVC搭項目要寫一堆XML配置現(xiàn)在SpringBoot通過自動配置和Starter機制把大部分常見場景都預(yù)設(shè)好了。你只需要引入依賴寫少量配置就能把Web服務(wù)跑起來。對于以業(yè)務(wù)邏輯為主的系統(tǒng)這種“開箱即用”的體驗非常舒服。Vue在前端的優(yōu)勢是組件化開發(fā)。后臺管理界面有大量重復(fù)的表格、表單、彈窗場景用組件封裝之后寫一個新頁面就是組合幾個組件的事。Vue的響應(yīng)式數(shù)據(jù)綁定也讓表單交互和列表篩選省了很多精力不需要手動操作DOM。MyBatis經(jīng)常被拿來和JPA對比。我的個人觀點是在線教育系統(tǒng)里面高級查詢和統(tǒng)計SQL特別多比如“查詢某講師名下所有課程的學(xué)員完成率”用MyBatis寫SQL可以精確控制語句排查問題也直觀。JPA雖然寫簡單CRUD很爽但一旦遇到復(fù)雜動態(tài)SQL調(diào)試成本會明顯上升。MyBatis的靈活性和可控性在這個場景里更值得選。MySQL就更不用多說了成熟的社區(qū)生態(tài)、豐富的文檔、對事務(wù)的支持足夠支撐在線教育平臺這個體量的數(shù)據(jù)。真正要關(guān)心的是表結(jié)構(gòu)設(shè)計和索引優(yōu)化這個放到后面數(shù)據(jù)庫部分詳細(xì)講。2. 系統(tǒng)整體架構(gòu)與模塊設(shè)計2.1 前后端分離的整體思路這套系統(tǒng)的架構(gòu)不復(fù)雜就是標(biāo)準(zhǔn)的前后端分離Vue前端通過HTTP請求訪問SpringBoot后端的RESTful接口后端操作MySQL數(shù)據(jù)庫。前后端分別開發(fā)、分別部署前端打包成靜態(tài)文件丟到Nginx后端打成Jar包運行在服務(wù)器上。項目根目錄下一般會分成兩個部分frontend目錄Vue項目包含管理后臺的頁面、路由、狀態(tài)管理、API請求封裝。backend目錄SpringBoot項目包含Controller、Service、Mapper、實體類、配置類。這種結(jié)構(gòu)最大的好處是團隊協(xié)作時可以并行開發(fā)。前端根據(jù)接口文檔定義Mock數(shù)據(jù)后端把接口實現(xiàn)好之后聯(lián)調(diào)即可。即便一個人開發(fā)分開寫也能讓思維更清晰不會在改前端樣式的時候被后端代碼干擾。后端內(nèi)部我做了一層嚴(yán)格的分層Controller只負(fù)責(zé)參數(shù)接收和結(jié)果返回Service負(fù)責(zé)業(yè)務(wù)邏輯Mapper負(fù)責(zé)數(shù)據(jù)庫操作。舉個例子課程上下架這個操作Controller接收課程IDService層做狀態(tài)校驗和數(shù)據(jù)更新Mapper層執(zhí)行更新SQL。這樣做的好處是業(yè)務(wù)邏輯可以復(fù)用后面再加一個“批量上下架”的接口只需要在Service層加方法不用重寫SQL。接口設(shè)計遵循RESTful風(fēng)格資源用名詞表示動作用HTTP方法表達(dá)請求方法路徑作用POST/api/auth/login登錄GET/api/courses課程列表POST/api/courses新增課程PUT/api/courses/{id}更新課程DELETE/api/courses/{id}刪除課程GET/api/courses/{id}/chapters課程章節(jié)列表GET/api/users/{id}/learning-records用戶學(xué)習(xí)記錄統(tǒng)一返回結(jié)構(gòu)也是前后端分離項目必須處理的。我習(xí)慣用Result對象包裝所有接口返回值包含code、message、data三個字段。code為200表示成功非200表示失敗。這樣前端攔截器可以統(tǒng)一處理錯誤提示和登錄失效不用每個接口單獨判斷。2.2 數(shù)據(jù)庫怎么設(shè)計才扛得住真實業(yè)務(wù)數(shù)據(jù)庫設(shè)計是我在這個項目里花時間最多的地方也是最能體現(xiàn)功力的部分。在線教育系統(tǒng)的核心表我梳理出來大概有這幾張用戶表、角色表、用戶角色關(guān)聯(lián)表、課程分類表、課程表、章節(jié)表、學(xué)習(xí)記錄表、訂單表。用戶表要區(qū)分管理員、講師、學(xué)員但我不建議在用戶表里直接用type字段走天下。更合理的做法是做好角色關(guān)聯(lián)一個用戶可能既是講師也是某個課程的學(xué)員。我用的方案是獨立的用戶表加用戶角色關(guān)聯(lián)表用戶表存基礎(chǔ)賬號信息角色表存角色定義中間表把兩者關(guān)聯(lián)起來。這樣后續(xù)要擴展角色權(quán)限不需要改表結(jié)構(gòu)。課程表是業(yè)務(wù)的中心字段上除了課程名稱、封面圖、簡介、價格這些基礎(chǔ)信息還有幾個關(guān)鍵字段需要特別設(shè)計status課程狀態(tài)草稿、已上架、已下架。用數(shù)字表示避免字符串在不同地方寫法不一致。teacher_id歸屬講師的用戶ID。這里建議存普通索引不要建外鍵約束在線教育系統(tǒng)查詢頻繁外鍵約束會影響插入和刪除性能。category_id課程分類ID。分類一般是樹形結(jié)構(gòu)為了簡化處理第一版可以只做一級分類后續(xù)再擴展父子關(guān)系。publish_time上架時間用于列表排序和運營數(shù)據(jù)分析。章節(jié)表要掛在課程下面包含章節(jié)標(biāo)題、排序號、視頻地址、是否免費試看。排序號非常重要章節(jié)本來就是有序的不能依賴創(chuàng)建時間排序必須顯式維護sort字段。免費試看字段在課程詳情頁和試看邏輯中都會用到。學(xué)習(xí)記錄表是我特別想強調(diào)的。真實場景中學(xué)員學(xué)習(xí)課程會產(chǎn)生大量記錄這張表需要同時關(guān)聯(lián)用戶、章節(jié)、課程再用一個watch_time記錄看到第幾秒用status標(biāo)記是否完成。每次前端上報學(xué)習(xí)進度都會更新這張表所以它是全系統(tǒng)寫入頻率最高的表之一要建聯(lián)合索引(user_id, chapter_id)避免查詢時全表掃描。訂單表在初版可以做成簡單的報名記錄表包含用戶ID、課程ID、支付金額、訂單狀態(tài)。純后臺管理場景下重點是把“用戶買了哪些課程”這個關(guān)系查清楚方便做學(xué)習(xí)記錄的權(quán)限校驗。支付流程的復(fù)雜度可以放到第二階段再考慮。所有業(yè)務(wù)表我都保留了三個通用字段create_time、update_time、deleted。邏輯刪除用0和1表示而不是物理刪除數(shù)據(jù)。在線教育后臺誤刪操作的場景不少比如課程下架時如果物理刪了運營想恢復(fù)就麻煩了。邏輯刪除讓數(shù)據(jù)始終可追溯查詢時統(tǒng)一加WHERE deleted 0條件即可。2.3 模塊劃分與核心業(yè)務(wù)流程整個系統(tǒng)的模塊劃分我按業(yè)務(wù)域來拆不按技術(shù)層拆。每個模塊是一個獨立的包結(jié)構(gòu)包含自己的Controller、Service、Mapper。主要有這幾個模塊認(rèn)證授權(quán)模塊登錄、JWT生成與校驗、權(quán)限注解。用戶管理模塊用戶CRUD、角色分配、講師審核。課程管理模塊課程、章節(jié)、分類的維護。學(xué)習(xí)模塊學(xué)習(xí)記錄上報、課程進度查詢。統(tǒng)計模塊簡單的數(shù)據(jù)統(tǒng)計接口比如課程報名人數(shù)、學(xué)員完成率。核心業(yè)務(wù)流程里最值得理清楚的一條是“學(xué)員學(xué)習(xí)課程”。學(xué)員登錄后獲取自己的課程列表進入課程詳情查看章節(jié)列表。前端在視頻播放時每隔一段時間上報學(xué)習(xí)進度后端收到請求后更新學(xué)習(xí)記錄表。如果某章節(jié)已經(jīng)達(dá)到完成閾值就把狀態(tài)標(biāo)記為已完成。課程總體進度在列表頁通過匯總該課程下已完成章節(jié)數(shù)除以總章節(jié)數(shù)來計算。這個流程看起來簡單但里面涉及并發(fā)和冪等的問題如果前端一秒上報一次后端怎么做去重如果用戶斷網(wǎng)重連學(xué)習(xí)記錄會不會重復(fù)插入我后面在踩坑部分會詳細(xì)說解決辦法。這里先記住一個原則學(xué)習(xí)記錄表不能無腦每次插入新數(shù)據(jù)而是先查再更新最好用唯一索引兜底。3. 核心功能實操從0到1跑起來3.1 環(huán)境準(zhǔn)備與項目初始化先把環(huán)境準(zhǔn)備好。后端需要JDK 8或11、Maven 3.6以上版本、MySQL 5.7或8.0。前端需要Node.js 14以上npm 6以上。如果機器上裝的是新版本比如JDK 17也沒問題只要對應(yīng)SpringBoot版本支持。我這邊用的SpringBoot 2.7.x兼容JDK 8到17穩(wěn)一點。后端項目初始化推薦直接在IDEA里新建Spring Initializr項目選好JDK版本和依賴。需要引入的依賴有spring-boot-starter-web、mybatis-spring-boot-starter、mysql-connector-java、lombok、spring-boot-starter-validation、jjwt。application.yml配置是最開始就要寫對的server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/edu_platform?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.example.edu.entity configuration: map-underscore-to-camel-case: truemap-underscore-to-camel-case這個配置很容易被忽略但它非常關(guān)鍵。數(shù)據(jù)庫字段是create_time這種下劃線風(fēng)格Java實體類是createTime這種駝峰風(fēng)格開啟這個配置后MyBatis會自動映射。否則你就要在每條SQL里寫別名非常痛苦。前端項目初始化用Vue CLI或Vite都可以。我的建議是直接用Vue CLI創(chuàng)建生態(tài)穩(wěn)定模板工程對后臺管理系統(tǒng)非常友好。創(chuàng)建命令npm install -g vue/cli vue create edu-frontend創(chuàng)建時選手動配置勾選Vue Router、Vuex和Axios。進入項目后先安裝Element UI作為后臺管理界面的組件庫npm install element-ui npm install axiosElement UI的表格、表單、彈窗、分頁組件都非常成熟做管理后臺幾乎不用自己造輪子。3.2 后端核心模塊JWT認(rèn)證與攔截管理后臺的安全控制是第一優(yōu)先級。這套系統(tǒng)用的是JWT方案用戶登錄成功后后端生成一個帶過期時間的Token返回給前端前端每次請求都把這個Token放在HTTP請求頭里后端攔截器校驗Token的合法性并解析出用戶信息。先定義一個簡單的JWT工具類Component public class JwtUtil { Value(${jwt.secret}) private String secret; Value(${jwt.expire}) private Long expire; public String generateToken(Integer userId, String username) { return Jwts.builder() .setSubject(username) .claim(userId, userId) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() expire)) .signWith(SignatureAlgorithm.HS256, secret) .compact(); } public Claims parseToken(String token) { return Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody(); } }登錄接口的Service層邏輯根據(jù)用戶名查到用戶校驗密碼是否一致校驗通過就生成Token返回。密碼存儲不能是明文至少要用MD5加鹽或者BCrypt加密。我在項目里用的是BCryptSpring Security的加密工具類可以直接調(diào)比自寫MD5穩(wěn)妥得多。攔截器是JWT校驗的核心。我寫了一個AuthInterceptor在請求進入Controller之前攔截public class AuthInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (OPTIONS.equals(request.getMethod())) { return true; } String token request.getHeader(Authorization); if (StringUtils.hasText(token) token.startsWith(Bearer )) { token token.substring(7); } try { Claims claims JwtUtil.parseToken(token); request.setAttribute(userId, claims.get(userId)); return true; } catch (Exception e) { response.setStatus(401); response.setContentType(application/json); response.getWriter().write({\code\:401,\message\:\登錄已過期\}); return false; } } }這里有兩個容易踩的坑第一OPTIONS預(yù)檢請求必須放行否則前端跨域請求會被攔截器擋掉。第二攔截器里校驗失敗時要直接返回JSON而不是讓Spring再走異常處理流程避免前端拿到一堆HTML錯誤頁面。權(quán)限控制方面我用了自定義注解RequireRole標(biāo)注在Controller方法上比如講師管理接口只允許ROLE_ADMIN訪問。攔截器解析Token后拿到用戶ID再查一次數(shù)據(jù)庫得到角色信息校驗是否符合注解要求。這個方法雖然每請求多查一次數(shù)據(jù)庫但勝在實現(xiàn)簡單清晰對于后端管理系統(tǒng)的并發(fā)量來說完全夠用。3.3 前端頁面對接與接口聯(lián)調(diào)前端的核心是把請求封裝好后續(xù)頁面調(diào)用時不用重復(fù)處理Token和錯誤提示。我在src目錄下建了一個api文件夾統(tǒng)一封裝axios實例import axios from axios import { Message } from element-ui import router from ../router const service axios.create({ baseURL: process.env.VUE_APP_BASE_API, timeout: 10000 }) service.interceptors.request.use(config { const token localStorage.getItem(token) if (token) { config.headers[Authorization] Bearer token } return config }) service.interceptors.response.use( response { const res response.data if (res.code ! 200) { Message.error(res.message || 請求失敗) return Promise.reject(new Error(res.message)) } return res }, error { if (error.response error.response.status 401) { router.push(/login) } Message.error(error.message) return Promise.reject(error) } ) export default serviceVue頁面開發(fā)時最常用的是表格加彈窗表單的組合。以課程管理頁面為例頁面加載時調(diào)用GET /api/courses獲取列表點擊新增按鈕彈出表單對話框提交時調(diào)用POST /api/courses。這種模式幾乎覆蓋了后臺管理系統(tǒng)80%的頁面??缬騿栴}是前后端分離聯(lián)調(diào)時最常見的問題。開發(fā)環(huán)境下Vue項目默認(rèn)跑在8080端口后端跑在8080端口這兩者之間就是跨域請求。我用的解決辦法是在后端加CORS配置 java Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOriginPatterns(*) .allowedMethods(GET, POST, PUT, DELETE, OPTIONS) .allowedHeaders(*) .maxAge(3600); } }生產(chǎn)環(huán)境會更好處理前端打包成靜態(tài)文件后由Nginx提供服務(wù)然后用反向代理把/api路徑轉(zhuǎn)發(fā)到后端服務(wù)。這樣瀏覽器看到的始終是同源請求不需要后端處理跨域。開發(fā)環(huán)境用CORS配置生產(chǎn)環(huán)境用Nginx反向代理這是比較標(biāo)準(zhǔn)的做法。3.4 學(xué)習(xí)進度上報接口的實現(xiàn)細(xì)節(jié)學(xué)習(xí)進度接口是整個系統(tǒng)里最貼近真實使用場景的一個功能值得單獨拿出來講。前端在視頻播放時每隔15秒調(diào)一次上報接口傳遞userId、chapterId、watchTime、duration。后端收到請求后先查詢是否已經(jīng)有這條學(xué)習(xí)記錄沒有就插入有就更新watchTime。學(xué)習(xí)記錄完成狀態(tài)的判定不能死板。我的做法是當(dāng)watchTime大于等于duration的90%或者當(dāng)前端主動標(biāo)記manualFinish為true時把status改為完成。為什么是90%而不是100%因為用戶很可能跳過結(jié)尾演職人員表或者視頻最后幾秒網(wǎng)絡(luò)卡頓強制要求100%反而會讓用戶覺得系統(tǒng)很死板。事務(wù)在這里要注意先查再插再更新整體操作要加Transactional防止插入記錄和更新狀態(tài)之間出現(xiàn)異常導(dǎo)致數(shù)據(jù)不一致。具體代碼邏輯大概是Transactional public void reportLearningProgress(ProgressRequest request) { LearningRecord record learningRecordMapper.selectByUserAndChapter( request.getUserId(), request.getChapterId()); if (record null) { record new LearningRecord(); record.setUserId(request.getUserId()); record.setChapterId(request.getChapterId()); record.setWatchTime(request.getWatchTime()); record.setStatus(0); learningRecordMapper.insert(record); } else { record.setWatchTime(request.getWatchTime()); if (request.getWatchTime() request.getDuration() * 0.9) { record.setStatus(1); } learningRecordMapper.update(record); } }并發(fā)上報時如果我第一次請求和第二次請求幾乎同時到達(dá)可能會插入兩條記錄。更穩(wěn)妥的做法是在數(shù)據(jù)庫層面給(user_id, chapter_id)加上聯(lián)合唯一索引讓數(shù)據(jù)庫幫你兜底重復(fù)插入直接報錯代碼里再捕獲異常做更新處理。算法層面的冪等控制永遠(yuǎn)沒有數(shù)據(jù)庫約束可靠這個是我實際測試出來的教訓(xùn)。4. 真實開發(fā)中踩過的坑與排查技巧4.1 事務(wù)失效和數(shù)據(jù)一致性問題在線教育系統(tǒng)里事務(wù)用得多但很多人寫事務(wù)時都會忽略幾個讓人頭疼的場景。最典型的在同一個類里A方法調(diào)用B方法B方法上面標(biāo)了Transactional但是事務(wù)不生效。原因很簡單Spring的事務(wù)是通過AOP代理實現(xiàn)的類內(nèi)部的方法調(diào)用走的是this不會經(jīng)過代理對象事務(wù)注解就被跳過了。解決辦法是把需要事務(wù)的方法放到另一個Service類里或者自己從容器中獲取代理對象再調(diào)用。另一個常見問題是事務(wù)內(nèi)做遠(yuǎn)程調(diào)用。比如學(xué)習(xí)進度上報時如果先是更新學(xué)習(xí)記錄再調(diào)用短信服務(wù)通知用戶短信服務(wù)響應(yīng)很慢事務(wù)會一直持有數(shù)據(jù)庫連接不釋放最終導(dǎo)致連接池耗盡。我的處理原則是事務(wù)里只做數(shù)據(jù)庫操作遠(yuǎn)程調(diào)用放到事務(wù)提交之后通過事件或異步方式處理。數(shù)據(jù)一致性還體現(xiàn)在課程狀態(tài)上。課程刪除時如果直接把課程表里的記錄刪除那么學(xué)員的學(xué)習(xí)記錄表里就有大量懸空數(shù)據(jù)課程列表查詢也會出問題。這就是為什么我在前面強調(diào)邏輯刪除字段。課程下架的時候只更新deleted1學(xué)習(xí)記錄表里的數(shù)據(jù)還能正常關(guān)聯(lián)到課程歷史快照信息。4.2 接口性能瓶頸與優(yōu)化這套系統(tǒng)在數(shù)據(jù)量小的時候跑起來很順暢一旦數(shù)據(jù)庫里課程、用戶、學(xué)習(xí)記錄都到了幾十萬條性能問題就會暴露。最讓我印象深刻的場景是課程列表頁每次查詢課程列表都要統(tǒng)計報名人數(shù)和章節(jié)數(shù)如果使用寫死的SQL把所有數(shù)據(jù)都拆出來N1查詢問題馬上就來了。N1查詢的意思是先用一條SQL查出課程列表再對每個課程循環(huán)查詢學(xué)員數(shù)量。課程越多查詢次數(shù)越多接口響應(yīng)時間直線上升。解決辦法是用聯(lián)表查詢或子查詢一次拿到所有需要的數(shù)據(jù)。MyBatis里寫一個聚合SQL就能解決比如SELECT c.id, c.title, (SELECT COUNT(*) FROM orders o WHERE o.course_id c.id) AS student_count FROM course c WHERE c.deleted 0分頁查詢的深度分頁問題也要注意。當(dāng)使用LIMIT 100000, 20這種查詢時MySQL還是要掃描前100000條記錄效率很低。優(yōu)化思路有兩種一是使用WHERE id lastId的方式做游標(biāo)分頁適合移動端無限滾動場景二是給排序字段和篩選條件建立聯(lián)合索引讓數(shù)據(jù)庫盡量走索引覆蓋。后臺表格用普通分頁就好前端一覽式的數(shù)據(jù)列表建議用游標(biāo)分頁。學(xué)習(xí)記錄表寫入頻繁建議按用戶維度做緩存。用戶打開課程列表時不需要實時統(tǒng)計每個課程的學(xué)習(xí)進度可以把進度數(shù)據(jù)緩存到Redis里設(shè)置5分鐘過期。用戶每次上報進度時更新一次Redis頁面展示時讀緩存只有管理員看統(tǒng)計報表時才查數(shù)據(jù)庫。這樣可以顯著降低數(shù)據(jù)庫壓力。4.3 部署上線時的細(xì)節(jié)處理本地開發(fā)跑通了部署又是半個坑。SpringBoot后端打包時要特別注意配置文件。開發(fā)環(huán)境連的是本地數(shù)據(jù)庫服務(wù)器上用的是云數(shù)據(jù)庫不能把本地數(shù)據(jù)庫地址直接打包進去。我建議把application.yml拆成三個環(huán)境application-dev.yml、application-test.yml、application-prod.yml。打包時通過spring.profiles.active指定環(huán)境部署命令類似java -jar edu-backend.jar --spring.profiles.activeprod前端部署要處理的是路由模式。Vue Router如果用了history模式Nginx需要配置try_files把請求都重定向到index.html。否則前端頁面一刷新Nginx就會報404這個問題太經(jīng)典了。Nginx配置大概長這樣location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }生產(chǎn)環(huán)境還有一個容易忽略的點MySQL的時區(qū)問題。如果后端配置了serverTimezoneAsia/Shanghai但MySQL服務(wù)器用的是UTC查出來直接更新到數(shù)據(jù)庫你會發(fā)現(xiàn)時間晚了8小時。最好的辦法是把MySQL的全局時區(qū)也設(shè)置為東八區(qū)同時在后端配置里保持一致雙重確認(rèn)。4.4 前端聯(lián)調(diào)中的常見問題速查我在聯(lián)調(diào)階段遇到過不少前端問題整理成一張表現(xiàn)象原因解決辦法請求返回401但登錄頁沒跳攔截器里處理的是response error但HTTP狀態(tài)碼可能被axios攔了檢查response攔截器的error分支表格數(shù)據(jù)不顯示后端返回的字段和前端表頭字段不一致統(tǒng)一使用駝峰命名開啟MyBatis駝峰映射表單提交后列表不刷新提交成功后沒有重新調(diào)用列表接口在成功回調(diào)里重新查詢當(dāng)前頁數(shù)據(jù)上傳圖片失敗跨域請求被Nginx或CORS配置攔截檢查Nginx的client_max_body_sizeToken過期后頁面卡死401后沒有清理本地存儲和跳轉(zhuǎn)攔截器里清空localStorage后跳登錄頁聯(lián)調(diào)是前后端項目里最容易扯皮也最容易拖時間的環(huán)節(jié)。我的習(xí)慣是先在前端Mock數(shù)據(jù)把頁面寫完所有字段類型和接口路徑都按真實約定來后端接口出了之后把Mock地址切到真實地址沖突就會少很多。5. 從能用做到好用擴展與經(jīng)驗沉淀5.1 演示項目到線上項目差在哪很多開發(fā)者做的在線教育系統(tǒng)功能看著都有但離真正上線還有一段距離。最大的差距在容錯和可觀測性。演示項目里接口掛了只會刷新重來線上系統(tǒng)要求的是接口異常時有日志、有告警、有兜底數(shù)據(jù)。我在后期給這套系統(tǒng)加了全局異常處理類統(tǒng)一捕獲業(yè)務(wù)異常和未知異常記錄日志并返回友好提示。加上操作日志模塊后臺管理員每次上下架課程、修改用戶信息都會記錄操作者和時間出了問題能追溯到人。數(shù)據(jù)層面線上系統(tǒng)還要求備份策略。MySQL備份不只是mysqldump命令而是要有全量備份加增量日志。我建議至少每天全量備份一次同時開啟binlog。這樣即使誤操作刪了數(shù)據(jù)也能恢復(fù)到指定的時間點對在線教育這種運營人員直接操作系統(tǒng)的情況非常關(guān)鍵。5.2 個人調(diào)試效率技巧幾個能明顯提升開發(fā)效率的小習(xí)慣。后端接口測試與其頻繁起一個前端頁面去點不如直接用接口測試工具把所有接口集合保存下來。后端改完接口跑一遍集合就能知道有沒有破壞已有功能。前端調(diào)試時多用瀏覽器的Network面板看接口耗時和響應(yīng)體比反復(fù)加console快得多。SQL排查我習(xí)慣在MyBatis的XML里寫注釋把業(yè)務(wù)背景和參數(shù)含義寫明。半年后自己回頭維護代碼或者讓另一個同事接手這些注釋的價值遠(yuǎn)大于代碼層的注釋。遇到過太多次寫的SQL自己都看不懂的情況。聯(lián)調(diào)時前端報錯第一反應(yīng)不是去懷疑后端邏輯而是先打開瀏覽器控制臺把Full Request URL復(fù)制出來直接在接口工具里重放一遍。如果接口工具返回正常那就是前端傳參問題如果接口工具也報錯再往后端查。這個排除法能省下大量溝通成本。5.3 后續(xù)可以怎么擴展這套系統(tǒng)留了幾個明確的擴展點。課程播放頁面可以接入真正的前端視頻播放器配合學(xué)習(xí)記錄接口做續(xù)播功能。權(quán)限方面可以把方法級別的注解權(quán)限升級成細(xì)粒度按鈕權(quán)限前端根據(jù)用戶權(quán)限動態(tài)渲染按鈕。統(tǒng)計報表可以引入定時任務(wù)每天早上匯總前一天的學(xué)員活躍、課程報名數(shù)據(jù)生成運營日報。如果后續(xù)還需要支持多人同時觀看直播課那就要考慮引入消息推送和WebRTC相關(guān)技術(shù)這部分和當(dāng)前管理后臺是相對獨立的模塊。架構(gòu)上保持模塊清晰技術(shù)升級不會影響已有功能?;仡^再看這個項目的價值不只是把SpringBootVue這套技術(shù)棧跑通而是通過在線教育這個真實業(yè)務(wù)場景把權(quán)限、事務(wù)、性能、部署這些后端開發(fā)的硬骨頭都過了一遍。我在實際調(diào)試過程中最大的體會是很多問題都是到數(shù)據(jù)量上去之后才暴露出來的單純寫單測或者跑小樣本數(shù)據(jù)根本發(fā)現(xiàn)不了。所以做這類管理系統(tǒng)一定在一開始就按真實數(shù)據(jù)量去設(shè)計表結(jié)構(gòu)和索引不要等線上卡死才回頭改模型。最后分享一個小技巧課程表和學(xué)習(xí)記錄表這種高頻訪問的表主鍵不要用UUID字符串用自增整型主鍵就好。SQL里做JOIN時整型主鍵的索引效率和存儲空間都遠(yuǎn)優(yōu)于字符串。一套字段設(shè)計要經(jīng)得起未來幾年的數(shù)據(jù)增長這才是后端開發(fā)的核心功底。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
睡产熟女乱伦| 69久久| а√天堂资源官网在线资源| 九九国产| 国产视频一区二区三区久久亚洲天堂| 97久久精品亚洲| 国产第25页在线观看| 好吊色综合| 国产后入清纯| 亚洲熟妇丝袜在线观看| 99热这里只有精品地址| 欧美一区二区三区四区综合| 亚洲加勒比| 欧美性视频二区三区| 97硬碰| 91free福利| 欧洲亚洲国产综合在线| 亚洲欧洲成人在线电影| 麻豆视频一区二区| 国产精品农村妇女精品| 粉嫩av在线| 日本亚洲嫩草影院啪啪| 色97欧美| 欧美在线大香999| 欧美色图人妻| 亚洲男人天堂2013| 亚洲欧美视| 麻豆视频国产一区二区| 久久产精品一区二区三区电影| 国产欧美日产一区二区三区 - 国产欧美日 | 蜜乳AV免费观看| 亚洲天堂男人天堂| 精品人妻一区二区三区日产| 成人九九| 人人爱人人乐人人操| 日本熟妇人妻一区二区三区| 操一对老熟妇爽上天视频| 欧亚日韩综合精品国产| 日韩中文字幕宗合在线| AV色五月| 在线二区不卡| 亚洲色欧美| 易易A毛视频| 亚洲综合欧美| 一二三区操逼国产91| 超碰人妻久久| 99re公开精品免费视频| 亚洲综合色网| 九九九久久久久| 精品999日本| 欧美传媒一区| 天天色综合影视网| 国产老女人久久毛| 东北少妇高潮zzzz| 夜夜影视四色| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 欧洲射精91| 久久免费老司机精品| 欧美一区91大爱| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 秋霞成人一级在线观看| 熟女色综合久久| 精品国产精品一区二区| 久久超碰98| 中文字幕熟女人妻丝袜丝| 人人操人人精品影片| 安微少妇操BBB| 97色碰| 俺去啦俺来也久久综合| 免费A V在线播放| 亚洲成人av色网| 蜜桃久久久久久久久久久久| 东京热伊久| 一级性爱网| 国产精品免费1区2区视频| 人人摸.人人色| 无码精品蜜桃一区二区三区ww| 女人被添高潮免费视频| 校园春色综合色| 伊人9| 久热一区二区| 久久久久久久国产a∨| 国内三级自拍小视频在线观看| 精品妇女一区二区三区| 风间由美日韩欧美久久| 岛国福利在线精品播放| 青青网三级视频| 99re6国产精品99re| 999精品久久久久久久| 国产最新小视频在线播放下载| 人妻aa| 国产精品对白内射| 日韩特一级久久| 亚洲精品久久久久久久蜜桃臀| 亚洲日韩美国人妻| 久草色悠悠在线视频| 国内外毛片在线观看| av网站免费线看| **一级毛片国产| 久久久久久久久久黄色网| 久久精品无码一区二区三区| 4399成人黄A片| 夜夜嗷嗷一区二区| 思思热国产高清| 久热免费视频| 密臀国产在线| 久久亚洲精品成人av| 天天舔九色婷婷| 91在线免费精品视频| 婷婷亚洲综合| 久久久久久中文| 日本高清有码网址视频| 色男人色天堂东京热| 亚洲天堂在线怕怕视频| 极品粉嫩一区二区| 少妇高潮流水av免费| 97天堂| 淫纸中9区| 操逼操逼视频操逼| 伊人精品国产| 国产精品极品美女视频| 91美女色视频亚洲| 超碰在线观看av不卡| 四虎AV无码| 永久免费观看的毛片的网站| 国产日韩精品一区二区三区| 亲子敌伦对白在线播放| 天天日日日射| 欧美性爱无码一区二区三区| 后入式在线免费观看60秒| 久久欲| 青青草啪啪网| 首页中文字幕中文字幕免费| 大香蕉日亚洲日本亚大 | 国产精品在线网站| 欧美日韩亚洲一区二区在线观看| 色偷偷色偷偷欧美日韩| 日韩人妻一二三区视频| 99视频自拍区| 超碰79人人乐| 国产AAAAAABBBBB| 欧美18禁91| 国产成人精品必看| 97超碰超欧美。| 2018色综合天天操| 人人性爱视频免费| 久久久久婷婷精品av电影| 看日韩操逼| 大茄子熟女AV导航| 人妻 制服 日韩 中文 在线| 成人欧美一区二区三区黑人一| 人妻欧美| 国产精品密臀网在线观看| 国产色精品午夜大片| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 国产亚洲禁久一区二区| 起碰97| 精品久久9| 九九这里只有精品| 亚洲精品无码久久AV| 久热伊人| 欧美亚洲涩涩| 人妻少妇蜜桃视频欧美一区| 国产女乱淫真高清免费视频| 香蕉精品二区二区| 丝袜视频一区二区在线播放国产中文| 亚洲成人免费电影| 91九色蝌蚪在线观看| 午夜无码熟妇丰满人妻| 狼人综合婷婷激情四射 | 少妇超碰在线| 午夜精品探花| 99re热有精品视频国产| 欧美黑人熟妇精品91| 啊啊啊啊二区好大| 亚洲第一综合| 天天日B夜夜干B时时操B| 极品色| 久草精品在线| 91亚洲黄色网| 少妇色综合| 日本三级韩国三级99| 韩日性爱av| 国产深喉视频一区二区| 青青青草原| 日韩精品作爱导航| 日本一片一区| 亚洲不卡不卡中文字幕不卡 | 久操免费电影| 欧美色图99| 成人黄页| 亚洲色图 图片| 国产精品色哟哟| 不卡九肏| 久久e6只有精品| av天天在线观看| 五月天激情四射| 人妻 中文 日韩| a片久久久久久久久久久久| 精品免费囯产一区二区三区| 国产视频97| 亚州九九九精品视频| 一区=区三区视频| 婷婷五月丁香五月| 99这里有精品视频| 天天爽夜夜操| 色色色综合网| 激情五月婷婷| 日日天天久久啊啊aaa| 欧美成人都市人妻| 日本不卡二三区| 麻豆精品A片免费观看| 玖色AV| 亚洲男人的天堂亚洲| 国模少妇一区二区三区| 男男H黄动漫啪啪无遮挡网站| 亚洲成人性爱网站在线播放| 国产精品成人无码a v毛片| 中文字幕日韩精品久久| 午夜一区二区三区国产| 青草视频在线看看看看看看看看看| 日韩成人综合网| 亚洲另类电影| AND人妻系列| 麻豆性爱视频在线播放| 级品肉射| 欧美最婬乱婬爆婬牲视频| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 91粉芽高清在线一区二区| 久久香蕉网| 天天摸天天插天天日| 中文字幕国产精品1区| 91色狼| 91操熟女| 五月天激情四射| 超碰97起碰| 国产污视频麻豆传媒一区二区| 97色涩| 超碰导航97| 午夜毛片亚洲精品片国产久久久| 色呦呦国产精品免费看| 国语精品内射在线观看| 91红杏| 久久久久久久六六| 国产精品美女视频诱惑| 欧美不卡二区| 亚洲 欧美 中文 日韩超碰| 久久只有精品一区二区三区| 日本精品一区二区三| 国产午夜精品一区二区三区牛牛| 影音先锋乱伦资源| 婷婷色导航| wwe 天天干.com| 欧美综合狠| 黄片www视频免费| 中国国产精品一区视频| AV天堂电影网| 成人性交午夜免费片| 国产亚洲深夜激情| 夜夜操夜夜爽夜夜高潮| 婷婷国产精品一区二区| 青草草免费网站av| 亚洲精品丝袜-不卡成人免费……| 岛国AV一区二区电影| 国产乱码久久久久久| 天天操夜夜操| 久久一二三四五六七八九区区区 | 欧美一二三级精品在线| 看日韩美女二区三区免费操逼视频| 久久亚洲熟妇在线视频| 欧美色女人| 中文字幕高清20页视频| 久久精品一区一起草| 免费αV在线视频| www.夜夜| 97久久超碰日韩精品| 国产毛片在线| 日韩精品大香蕉伊人在线| 精品午夜福利导航| 亚洲精品丝袜-不卡成人免费……| 色偷综合| 久久91精品国产9丨久久分亭| 天天欧美色| 熟女少妇一区二区三区| 日韩成人大片一区二区| 男人精品天堂一区| 操逼天美3区| 中文字幕日韩精品一区二区三区| 久久久97| 精品久久久久黄少妇| 日本天天干天天操一区| 清柠毛片| 国产AV色黄看到爽| 亚洲色图国产另类| 26uuu性物| 亚洲男人的天堂网| 91小视频| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 日本黄 R色 成 人网站| 日韩AV噜噜噜一区二区三区四区| 91一起操| 天天干18禁| 熟妇熟女视频一区二区三区| 91狠狠综| 97在线青| 在线国产一区二区av| 嫩草 我啊~嗯~在线| 欧美顶级黄色大片免费| 综合网亚洲1| 91精品丝袜久久久久久| 亚洲精品97久久| 精品妇女一区二区三区| 无码外流操逼视频| 激情情色五月天| 国产日本熟女顶级一区二区三区视频| 91婷婷| 熟女视频久久| 97网址97| AV中文在线可看| 夫妻天天操岛国视频| 99操视频| 蜜乳AV免费观看| 啊啊啊不要啊啊受不了了视频在线| 呦呦影院| 玖玖久久久| 男人的天堂.com| 男女性感激情网站| 麻豆一区二区三区在线看| 五月丁香大香蕉| 日韩熟女无码| 九色 蝌蚪 熟女自| 在现视频女上位好爽| 91一区二区三区蜜桃| 91强在线播放| 日本丝袜美腿人妻九九| 强奸乱伦日韩AV| 日日摸天天爽夜夜欢| 亚洲色图20p| 成年人性爱日韩| 97香蕉网| 一本色道久久综合亚洲二区三区| 天天摸夜夜摸| 高清国产av无码| 香蕉欧美| 91亚洲网站| 成熟熟女国产精品一区二区| Julia在线播放亚洲久久| 高潮毛片无遮挡高清免费| 国产精品另类一区大香蕉| 免费人人搞97| 欧美性天天影视| 人人操人人叉人人插人人| 超碰在线一区| 欧美 日韩第一性色| 一区二区三区国产精产| 超碰在线99| 久久激情亚洲精品无码?V| 免费观看日本操逼视频| 国产精品一区二区三区免费视频| 热的中文 热的有码 热的国产| 乱人伦 国语对白:视频直接看| 国语国产操逼伊人AV网| 成年人网站在线免费观看| 正宗无毛一线天嫩逼| 亚洲视频一二区| 精品国产乱码久久久久久久久1 | 精品丰满人妻一区二区三区免费观| 亚瑟国产精品久久无码| 中文字幕日韩电影人妻| 白丝av| 噜噜噜亚洲精| 97操碰| 色香91| 热热热热日日漂亮永久永久国产日| 蜜臀av在线播放一区二区三区| 亚洲一本大道中文字幕无码在线| 日韩少妇一区二区三区| 老司机老司机午夜影院| 国产亲戚伦亲在线| 亚洲少妇中文字幕网址| 亚洲色图欧美视频| 岛国片在线观看视频亚洲| 亚洲精品第一| 亚洲高清无码免费观看视频| 欧美性爱五月天| 久久五月综合| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 久久免费看高潮毛片韩国| 艹我哪美一区无码| 成人在线视频二区| 亚洲精品一区二区三区新线路| 精品久久久无码| 久jiu久神马影院| 999在线电影香蕉| 亚洲 日韩 欧美 国产综合体| 91啪啪视频| 天天干天天拍| 330Dv国产女人终合视频极品人与兽| 四虎影视在线| 国产天美传媒精品| 69丨亚洲丨精品丨入口免费播放| 91n处女在线观看| 97久操| 欧美天天综合网| 亚洲中文字幕精品一区| 小视频玖玖| 91呆哥人妻| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 嗯嗯啊啊好疼| 丝袜高跟澳门91视频| 天天爽入口| 免费观看一区| 国产精品一二三在线看| 蜜臀国产AV中文字幕| 综合日本女人伊人| 亚洲熟女一区| 免费视频一二三区| 亚洲色 国产 欧美 日韩| 亚洲欧美经典一区二区| 超碰性爱97| 亚洲怡春院| 中文字幕乱亚洲美女精品一区| 成人av福利在线观看| 91成人精品在线播放| 色婷婷丁香五月| 无码视频一区二区| 中文乱码字幕观看视频| 国产日产精品久久快鸭的功能介绍| 免费操逼视频下载| 久久色一区二区| 国产91美女视频| 摸奶性爱视频网站在线免费播放| 偷窥自拍A片| 欧美一级欧美三级在线观看 | 久久欧美性爱视频| 91五月天| 绯色一区二区三区不卡少妇| 无码少妇精品一区二区60岁老人| 大香蕉色网| 久久嫩草| 无码自拍SM| 超碰97最新人妻| 天天噜| 操屄不卡视频| 丰满精品人妻少妇久久字幕| 国产久久久| 日本国产成人亚洲精品无码| 亚洲和欧美裸体美女双飞视频| 麻豆91熟妇人妻中文字幕茄子| 最新岛国大片| 99www.bibizy香蕉资源国产一区二区三区高清 | 亚州综合图片| 亚洲精品国产无码高清| 欧美人妻二区三区| 91视频综合| 色情综合网| 人人操人人精品影片| 中日亚韩免费视频| 蜜臀aV午夜一区二区三区| 免费啪啪av| 色鬼在线综合| 亚洲精品免费中文字幕| 91青视频| 欧美不卡五十路| 九九热免费国产视频婷婷伊人| 日本黄色精品| 天天干天天拍| 久久久久久久人妻丝袜| 91xingse| 亚洲精品乱码线路中文字幕| 欧美精品91| 岛国1区2区3区在线观看| 日韩免费人妻色情网站| 丁香九月婷婷| 天天碰操中国年青熟妇| 永久免费av无码网站国产app| 精品国产乱码久久久久久影片| 久久内射| 黑人天8A∨高清网站| 中文字幕美女91| 亚洲淫乱骚妇AV| 懂色中文一区二区三区| 成人在线午夜视频一区| 在线观看国产黄色| 男同专区一区二区三区在线| 97超级久久强资源| 秋霞网—男女啪啪亚洲免费体验区 | 日本三级韩国三级美三级91| 欧美成va视频网站| 夜夜爽夜夜爽| av一区二区三区四区五区久草臀| 国产精品探花视频| 99少妇| 中文字幕视频2区| 人人操我人人干| 蜜桃精品一区二区三区久在线| 怡红院一区二区熟女人妻| 欲香欲色综合天天伊人| 亚洲av总站| 色久桃花影院在线观看| 偷拍导航视频网站| 又摸又舔在线观看网站| 色婷婷九月天天综合| 夜夜爽夜夜高潮夜夜爽| 金典av| 亚洲综合五月天| 在线观看亚洲成人精品| 亚洲青青草| 啪啪视频mP4| 人人人人插| 92一区二区| 天天操人人操骚逼网站| 大香交伊人网| 做爱A级亚欧| 日韩无码一区二区三区| 射丝袜大香蕉| 欧美日韩淫加| 亚洲综合在线视频| 日韩激情啪啪啪| 91n欧美| 东京热大香焦| 欧美一二在线| 国产成人亚洲精品自产在线| 精品一区二区成人| 日本韩国国产精品一区| 日韩有码中文字幕女同性恋| 亚洲男人的天堂网| 91欧美偷拍| 337p大胆噜噜噜噜噜91Av| 操逼大黄片| 国产白丝精品在线观看| 色九九久九九| 色97综合中文字幕| 精品国产国产AV| 亚洲91极品| 精品国产精品一区二区| 浪人综合网| 亚洲国产91精品一区二区久久| 殴美性天天| 欧美后入式| 91高潮喷水美女| 99热aaa| av优播| 99爱在线视频| 色综合色| 亚洲成人网站在线观看| 欧美一区二区亚洲天堂| 欧美午夜一区二区三区| 久久亚洲AV成人精品无码| 五十路六十路素人熟女| 热无码中文亚洲H一道本一区二区| 国内一区二区免费| 亚洲乱妇p22| 天天爱天天操| 日韩肏逼视频| 色在线视频导航| 2021国产成人精品久久| 国产又黄又粗又猛大片| 久久久久久久强迫| 日韩偷拍一区二区三区| 国产精品探花色| 日韩性爱视频在线免费观看| 免费少妇一区二区| 国产中文精品一区二区在线观看| 手机在线播放国产福利| 国产69精品久久久久99尤物| 人妻中文字幕日韩电影| 日韩性爱电影一区| 亚洲日韩精品在线播放| 欧美亚洲日韩人妻在线观看| 一品道视频一区二区三区| 亚洲色天堂日韩中| 97精品视频免费| 四虎在线观看网站| 日本精品加勒比海一区| 97超碰欧美中文字幕| 人妻一区二区三区四区视频| 日本人妻中文字幕精品| 国产精品色片一区二区| 美女自卫慰黄网站免费| 精精夜夜| 亚洲色图综合网| 亚州精品人妻一二三区| 国产精品久久久| heyZO天然素人无码AⅤ专区| 亚州AV无码国产精品| 激情小说五月天| 偷拍亚洲高清图片| 91欧美巨乳| 天天亚洲| 久操网无码在线| 五月天色图| 伊人97色天使| 日日AAvv| 国产丝袜美女在线一区| 自拍偷拍2025在线观看| 北京专精特新企业招聘信息| 青青操视频在线| 亚洲欧美日韩不卡人妻| 操迟操逼在巾线Fre看| 欧美日韩99| 国产亚卅97| 亚洲丝袜在线观看| 琪琪精品免费一区二区三区 | 干美女人妻| 大二网站亚洲| 丁香五月色情| 9长久久精品| 91视频综合| 日韩去日本高清在| 97精品久久久久久久| 青青草依人大香蕉| 亚洲人妻在线一区| 97 亚洲 日韩 欧美 在线| 久热大香蕉网站| 色网站导航大全| 91色婷婷综合久久中文字幕二区| 亚洲大色堂| 综合第一页| 曰韩av中文字幕专区| 日本超碰97日韩精品人妻| 欧美性爱超碰97| 亚洲午夜福利在线影院| 啊啊啊啊啊在线视频| 综合久久9| 静品嫩模一区二区| 男人的天堂日韩| 琪琪精品免费一区二区三区| 亚洲s在线观看| 成人怡红院| 国产伦精品一区二区三区在线观| 九九九九精品一区| 狼人综合婷婷激情四射 | 亚洲九九九九| 防屏蔽在线视频| 九九九九精品在线| 五月天丁香婷婷综合网站| 国产精品视频播放| 操b在线观看| 免费的av网| 丁香七月婷婷| 亚洲不卡不卡中文字幕不卡 | 中文久久爆乳| 欧美亚洲清纯| 日韩女模中文造逼| 黑人性欧美| 九九亚洲视频| 欧美性暴力猛交| 人妻少妇久久久| 欧洲精品二区| 花野真衣| 91色人妻| 成人精品视频| 日逼国产| 国产精品乱码久久久| 天天拍天天操| 亚洲美女AV无码| 婷婷五月天久久精品视频一区二区三区| 国产捆绑一区| 大香蕉在线视频重口味毛片在线| 国产一区自拍欧美日韩| 夜夜 中文视频rt| 日本激情免费大片| 成人日本片久久久蜜桃| 婷婷五月天小说| 亚洲天天操| 久久一二三级一一一| 一本精品日本在线视频精品 | 3p国产色噜噜一区| 易易A毛视频| 精品免费1| 免费看黄视频亚洲网站| 国产AB视频| 校园春色 男人天堂 | 91大神电影天堂| 91精品女厕偷拍视频| 天天日骚逼熟女| 看日韩美女二区三区免费操逼视频| 九九九九免费| 亚洲日产专区婷婷| 丁香五月成人| 家庭乱伦国产| 日韩在线电影| 欧美男人亚洲天堂| 日本 欧美 亚中文字幕| 精品高清av中文字幕| 亚洲影视第一页| 区一在线观看| 欧美精品999| 欧美精品23| 国产激情在线| 国产一区二区久久| 欧美毛片在线网| 3P乱轮视频| 九久精品| 国产一区二区精品在线视频| 人妻天天夜夜爽一区二区| 久久五月天婷婷丁香中文字幕| 骚货操死你| 嗯嗯啊啊好疼| 天美av在线观看| 亚洲成人性爱在线观看| 视频一区二区免费在线| 亚春色色| 黑人精品久久97| 久久一二区四| 人人摸人人干| 亚洲最大的综合性av| 亚洲人成网站7777| 嗯嗯不要视频| 欧美色图自拍| 使劲用力艹少妇视频一区二区| 欧美日韩高潮喷水91| 久久久久久精品免费看A级| 黄色免费一级在线毛片| 玖玖久久久| 黄久久| 久久九操在线观看| 国产精品欧美激在线| 天美国产精品| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 操逼逼福利视频| 久久精品国产99精品亚洲蜜...| 啊啊啊啊啊啊啊啊在线观看| 日本久久久久久久久久| 美女骚尻视频| 亚洲图片 激情小说| 国产美女91视频| 蜜桃久久久久久| 色妺妺在线视频| 天天日夜夜爽| 99re视频在线观看这里只有精品| 自慰白浆在线观看| 人妻日日干| www黄片免费看com| jizzjizz欧美| 啪啪资源网| 日韩欧美综合激情| 乱伦AVxx| 精品一区二区成人动漫| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 欧美精品日韩久久久九| 国产一区二区三区白丝| 一本色道久久天天射天天干| 国产精品分类在线观看| 久久久久亚洲熟妇熟女| 老外又粗又长一晚做五次| 免费看黄片现成| 欧美的性爱网站免费| 日韩亚洲精品一区二区| 波多野结衣先锋影音| 午夜寂寞欧美| 一区二区娱乐网站| 日韩三级一区| 九一亚洲国产免费| 淫骚熟女一区二区三区| 久久精品99久久久久久| 亚洲男人天堂视频| 在线天堂资源亚洲| 国产又黄又粗又猛大片| 精品成人无码| 成人性爱全视频观看| 亚洲成?V人片在线观看福利| 人妻嗯啊啊在线播放| 九九精品美女高溯喷水| 东北女人| 啊啊啊操死我了| 国产97亚洲| а√天堂资源官网在线资源| 乱伦av麻豆| 婷婷啪啪| 97久久精品国产| 中出后入| 麻豆精品一区二区三区四区免费观看| 91AV入口| 国产精品免费视频人成| 你操综合| 加勒比综合a∨| 综合第一页| 欧亚性爱在线视频| 丁香五月天啪啪| 色999偷自拍拍| 97射欧美| 日韩成人私密一级精品av| 婷婷视频在线免费观看| 顶级少妇BT天堂| 97视频在线观看网站| 欧美激情专区| 新婚人妻扶着粗大强行坐下| 成 人 影视 一区 二区 三区 四区 | 日日不卡av| 精品人体无圣光凹凸| 又大又白奶子| 美女爽爽爽刺痛洞洞| 国产成人亚洲精品无| 国产亚州高清国产拍精| 久久av色| 日韩欧美传媒一区国产| 久久精品中文字幕无码l| 精品99999久久久久久| 941超碰| 国产精品日韩在线一区| 男人的天堂网免费| 老鸭窝成人| 日韩精品1区2区中文字幕| 欧美人妻二区三区| 激情在线青青操| 无码聚合| 久草草一二三四区久久| 国产二区三区免费视频| 亚洲综合五月天| 福利大香蕉| 国产一在线观看| 青青草精玖玖69精品| 78超碰| 婷婷五月天基地| 精品国产乱码久久久久久免费| 日韩av不卡在线看| 日韩性色| 色综合一区二区三巨| 嗯啊不要在线| 黄色av片三级三级三级免费看| 91伊人久久在线| 五月花婷婷| 久久极品伊人| 久久av成人无码免费| 欧美色图亚洲色图成人在在线| 色欲久久99精品久久| 国产精品久久久久久照片| 久久9精品视频| 四虎影视精品| 婷婷综合视频| 欧美日韩狠狠爱| 国产精品亚洲一区二区三区四区| 日韩天天本| 欧美日韩国产三级黄色| 丝袜视频一区二区在线播放国产中文 | 97草草| 久久久免费一级黄片| 欧美中文字幕一区| 欧洲人妻视频| 六月婷激情福利天堂69| …亚洲黄色厕厕女女在线播…| 色噜噜狠狠色综合日日| 国产精选视频| 色九月| 亚洲天天自拍| 色五91| 69XX一中文字幕人妻91| 亚洲成人一二三区| 影音先锋日本一区二区| 校园春色亚洲无码| 在线v中文字幕一区二区三区| 老色鬼成人精品视频下载大在线观看| 操逼网站视频漫画国产| 久久久精| 91九色首页| 97天天摸天天爽| 少妇毛片久久| 日韩 国产 欧美自拍| 大香蕉免| 性在久久久久久| 一本大道久| 乱日视频| 国产精品欧美日韩久久| 久99在线免费观看视频| 天天肏美女| 二男一女成人A片| 亚洲图片视频小说| 天天干天天日天天射黄色大片| 懂色中文一区二区三区| 亚洲色入欧美| 丁香六月激情综合| 日韩免费三级黄片电影| 蜜桃网熟妇| 九月丁香婷婷| 久久激情亚洲精品无码?V| 欧美激情1区| 97爱b| 亚洲天堂中文字幕无码男同| 内射小黄片| 亚洲 欧美 日本 国内 首页| 啊嗯好大视频在线观看| 午夜福利免费福利视频| 91性片| 国产成人天堂| 欧美色偷拍 | 欧美日韩理论一区| 欧美老妇综合网| 新婚人妻扶着粗大强行坐下| 精品少妇999| 941超碰| 欧亚第一综合网| 91啪啪视频| 370p日韩欧美亚洲精品| 啊啊啊啊啊啊啊啊视频| AV色图| 欧美性后入| 五月天激情网图片| 白嫩国模丰满一二三区| 日本色色视频网站| 东京热天堂网| 9精品久久久久| 九九九九一级| 99啪啪| 97在线免费看| 久久xx| 5月婷婷6月六月丁香| 精品久久久久久AV无码| 欧美色性情| 激情婷婷丁香网| 亚洲狼狼干综合1| 啪啪一区| 91超碰人人操| 青青操狠狠撩| 18禁网站在线播放| 偷拍亚洲熟女视频播放| 九九九九精品九九九九| 巨乳特殊服务按摩| 人妻天天爽夜夜爽2| 在线亚洲丝袜视频网站| 99re69| 狠狠中文字幕| 亚洲欧美校园另类春色| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 精品人人| 精品久久久无码| 色色五月婷婷| 欧美激情综合| 五月天婷婷久久| 女人高潮抽搐喷水视频网站| 91动漫操逼视频| 草莓精品视频| 高清国产av无码| 伊人网综合在线视频| 国产精品久久99日日| 淫荡少妇免费| 手机在线人成免费视频| 亞洲久久直播| 成人午夜小视频手机在线看| 精品久久久久久中文| 不卡一区二区日本视频| 国产一级操B视频| 大香蕉强奸乱伦| 中文字幕久热视频在线| 近亲乱伦一区二区| 伦理片秋霞免费影院| 激情四射五月天| 国产乱码久久| 女同亚洲欧美一二三区久久电影| 美女啊啊啊啊啊啊啊| 亚洲AV乱码专区国产噜噜亚洲| 用力操死我| 日本精品性生活久久久| 麻豆国产成人精品| 色噜噜狠狠色综无码久久| av影院十区| 中文字幕三四区| 欧美性爱免费短视频| 成全在线观看免费观看| 秋霞曰韩R级| 婷婷五月天激情网| 日本女厕偷拍| 九一性生活免费视频| 99re在线视频国产| 大香蕉视频啪啪啪啪| 少妇二级| A啊啊在线观看| 久久久久久无码人妻中文字幕| 久欲AV| 亚洲天天操| 久久综合资源一区二区| 婷婷天堂站| 伊人久久国产免费观看视频| 蜜臀99999| 亚洲情色 自拍| 国产精品日本无码A片| 老司机深夜影院18未满| 午夜天堂精品久久久久91| 亚洲美女精品| 亚洲亚洲亚洲天堂天堂| 日本阿v天堂在线观看| 五十路三级片| 欧美日韩国产中文超碰| 欧美老妇女内射网址| 国产天天骚| 神马久久69| 久久六六| 蜜桃无码AV一区二区| 91暧暧| 亚洲综合色图欧美| 天天草天天日| 日本色色色| 久久久禁| 男女啪啪啪18禁网站| 九九性爱网| 国产有码一区| 亚洲色电影在线| 秋霞蝌科网日本一区| 国产精品久久久久久夜夜夜| 亚洲日韩狠狠撸视频| 婷婷在线视频在线观看| 强奸xx国产| 99精品高潮| 韩国三级一线观看久| 婷婷九月| 婷婷久久久精品| 亚洲乱妇p22| 美女国产一区二区久久| 天天日天天射天天干| 国产精品操| 九九色逼| 熟女熟妇伦久久影院毛片一区二区| 亚洲欧美情色| 成人精品在线| 丰满欧美放荡少妇在线| 亚洲 自拍偷拍 欧美| 夜夜爽妓女| 夫妻AV网站| 亚洲国产尤物yw在线观看| 欧美精品丝袜久久久中文字幕| 国产精品久久久亚洲第一牛牛_在线观看| 园内精品自拍视频在线播放| 韩日男人的天堂| 啊啊啊好大好深| 九九色图| 天美传媒精品久久视频| 在线观看日韩av不卡| 韩国嫰模上门援交视频| www.91视频网| 久久久精品成人国产| 欧美偷偷网| 九月丁香综合网| 职场同事知名国产国产精品久久欧美日韩 | 91美女高潮| 国产真实野战在线视频| 色偷综合| 日韩在线一区二区| 亚洲色91C| 国产免费操逼| 99这里都是精品| 亚洲精品中文字幕一区在线视频| 中文字幕97色| 可能人人看人人摸| 青青草久草AV| 成年女人18级毛片毛片免费观看| 中文字幕一二三av| 久热久| 中国熟妇| 手机av天堂久久久久| 亚洲一区日韩精品中文字幕| 欧美日日夜夜| 黄色激情电影在线观看| 国产黄色剧情影片麻豆免费播放| 亚洲影视综合网| 国产精品内射婷婷一级二| 久插不卡| 日韩亚洲Av人人夜夜澡人人爽| 亚洲好色人妻| 天天91~综合入口| av影片在线观看不卡| 情色五月天久久久| 黄片免费久久久久久久| 青青操日韩| www.狠狠干.coom | 欧美天天综合在线| 国产精品国产自产拍高清AV| 无遮挡一级毛片视频免费的| 日本孕妇孕交| 婷婷伊人| 少妇久久久久久| 搞中出视频在线观看| 久精品无码av一区二免费国产在线观看 | 亚洲大色堂| 亚洲最大网站av| 精品人妻av区天天看片| 中文字幕在线观看网页| 人人摸人人添人人操 | 九九九久千久久激情蜜桃在线看 | 亚洲色9| 欧美黑人精品在线播放| 久久老熟女| 亚洲色图国产另类| 99久久综合| 涩涩涩综合| www国产精品| 欧美日韩人人早| 日韩一级片| 手机看片日韩人妻| 日比av无码| 麻豆精品三区视频| 国产人妻精品久久久一区二区三区 | 风骚少妇视频中文字幕| 欧美拳交在线播放| www.色婷婷色综合| 免费视频a级毛片免费视频| 无码精品久久久久久亚洲| 黄总AV色图| www.婷婷五月天| 综合操逼| 翔田千里无码一区| 熟女少妇视频| 亚洲综合 欧美| 欧美乱色| 色5月婷婷| 黄色小视频日本txt| 乱伦一二三区| 欧洲精品一级二级精品综合视频综合| 骚女高跟AV在线| 在线黄页看毛片| 久久亚洲AV无码专区国产精品| 国产综合色精品在线观看| 中文字幕熟女人妻丝袜丝| 中文字幕三四区| 久欲AV| 亚洲精品一卡二卡三卡福利视频网站| 亚洲天堂久久| 日韩欧美中文日韩欧美色| 玖草在线视频| 亚洲AO在线| 六月丁丁香| 亚洲精品aa久久伊人| a亚洲欧美色欲| 91综合网在线| 热热色国产一二区AV| 佐山爱中文字幕| 97资源制服丝袜| 秋霞欧美性爰视频| 青娱乐久久艹| 亚洲最大的综合性av| 国产aⅴ无码片毛片一级网站| 天天视频网站黄| 2018天天日天天日| 日语五十路和六十路亚洲国产精品| 天天干人妻视频| 九九九只有精品| 在线色资源| 二级毛片| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 91中文字幕制服丝袜免费视频| 夜夜操夜夜高潮夜夜爽国产精品区| 国产 大胆 对白| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 天天伊人| 91无遮挡| 日本中文字幕不卡视频| 麻豆国产精品午夜视频| 国产婷婷综合在线观看| 一卡二卡三卡| 九九九九精品精| 少妇久久久久久| 欧美18 在线观看| 日韩无码a片| 亚洲欧美在线观看2021| 天天日天天干天天整| 丁香五月激情综合国产| 精品国产一级久久| 99热综合| 成 人 影视 一区 二区 三区 四区 | 久久中日麻豆|